发明内容
本发明所要解决的技术问题是提供一种基于高效、安全加密模型为基础,在保证安全性与隐私性的同时,能够直接进行密文数据操作的数据库加密方法。
本发明为了解决上述技术问题采用以下技术方案:本发明设计了一种数据库加密方法,包括如下步骤:
步骤001.分别针对数据库里各张表中各数据列的数据类型进行判断,若数据列的数据类型是数值型,则进入步骤002;若数据列的数据类型是字符型,则进入步骤003;
步骤002.分别针对该数值型数据列中的各个数据,分别采用等值加密算法、保存加密算法和同态加密算法分别进行加密,并将该数值型数据列扩展为三列,然后按该三列与等值加密算法、保存加密算法、同态加密算法彼此一一对应的关系,分别定义该三列的列名,同时将经过等值加密算法、保存加密算法、同态加密算法分别加密的加密结果数据填入对应列中,其中,该数值型数据列所对应扩展三列中各个加密结果数据所对应的密钥存储于数据库中;
步骤003.分别针对该字符型数据列中的各个数据,采用等值加密算法进行加密,然后根据等值加密算法,定义该字符型数据列的列名,同时将经过等值加密算法加密的加密结果数据填入该字符型数据列中,其中,该字符型数据列所对应各个加密结果数据的密钥存储于数据库中。
作为本发明的一种优选技术方案,所述步骤002中分别针对各个数值型数据列中各个数据进行等值加密算法,以及所述步骤003中分别针对各个字符型数据列中各个数据进行等值加密算法,均采用如下步骤实现:
步骤A01.针对数据采用预设指定加密算法进行加密,构成该数据的内层加密,同时根据***主密钥,以及该数据所在数据列的列名获得该数据内层加密的密钥,并存储于数据库中,然后进入步骤A02;
步骤A02.针对该数据内层加密,进一步采用随机加密算法进行加密,构成该数据内层加密的外层加密,同时根据***主密钥、该数据所在数据列的列名,以及该数据所在行的唯一行标识获得该数据内层加密进一步外层密钥的密钥,并存储于数据库中,由此,针对该数据实现等值加密算法的加密。
本发明所述一种基于数据库加密方法采用以上技术方案与现有技术相比,具有以下技术效果:本发明所设计的一种基于数据库加密方法,具体设计引入等值加密算法、保存加密算法和同态加密算法针对数据库中的数据进行分类加密,并存储在服务器端数据库中,消除了不可信服务器端探查、泄露机密数据的隐患,从而保护了数据的隐私性,并提供了在密文上直接执行查询操作的处理方法,提高了执行效率,并减少了用户的通信和计算开销。
与之相应,本发明所要解决的技术问题是基于本发明所设计数据库加密方法,提供一种在保证安全性与隐私性的同时,能够直接进行密文数据操作的加密数据库查询方法。
本发明为了解决上述技术问题采用以下技术方案:本发明设计了一种基于数据库加密方法的该加密数据库查询方法,包括创建表操作、***操作、选择查询操作、更新操作和删除操作,创建表操作包括如下步骤:
步骤C01.针对创建表操作语句进行解析,获得所创建表的表名、所创建表中各数据列的列名,以及各数据列所对应的数据类型,然后进入步骤C02;
步骤C02.分别针对所创建表中的各个数据列进行判断,并分别针对所创建表中各个数据列做出相应处理,然后根据针对所创建表中各个数据列的相应操作,改写创建表操作语句,再发送至数据库进行执行,实现创建表操作,其中,分别针对所创建表中的各个数据列进行判断,并分别做出相应处理中,若数据列的数据类型是数值型,则进入步骤C03;若数据列的数据类型是字符型,则进入步骤C05;
步骤C03.将该数值型数据列扩展为三列,分别存储该数值型数据列中数据分别对应等值加密算法、保存加密算法和同态加密算法的加密结果数据,并相应定义该数值型数据列所扩展三列的数据类型,然后进入步骤C04;
步骤C04.根据按该数值型数据列所扩展三列与等值加密算法、保存加密算法、同态加密算法彼此一一对应的关系,分别定义该数值型数据列所扩展三列的列名,并用该数值型数据列所扩展三列的列名替换创建表操作语句中该数值型数据列的列名;
步骤C05.将该字符型数据列用于存储该字符型数据列中数据对应于等值加密算法的加密结果数据,然后进入步骤C06;
步骤C06.根据等值加密算法,定义该字符型数据列的列名,并用该字符型数据列的列名替换创建表操作语句中该数值型数据列的列名。
作为本发明的一种优选技术方案,所述***操作包括如下步骤:
步骤I01.针对***操作语句进行解析,获得各个所***的数据,以及各个所***数据分别所对应表的表名、所对应数据列的列名,然后进入步骤I02;
步骤I02.分别针对各个所***数据,根据所***数据所对应表的表名,获得所***数据对应数据列的数据类型,并进入步骤I03;
步骤I03.分别针对各个所***数据,针对所***数据对应数据列的数据类型进行判断,并针对所***数据所对应数据列的列名和所***数据做出相应处理,然后根据针对所***数据所对应数据列的列名,以及针对所***数据的相应操作,改写***操作语句,再发送至数据库进行执行,实现***操作,其中,针对所***数据对应数据列的数据类型进行判断,并针对所***数据所对应数据列的列名和所***数据做出相应处理中,若数据列的数据类型是数值型,则进入步骤I04;若数据列的数据类型是字符型,则进入步骤I06;
步骤I04.根据所***数据对应表的表名、所***数据对应的数据列,获得所***数据对应数据库该表中对应三列的列名,并用该三列的列名替换***操作语句中所***数据所对应数据列的列名,然后进入步骤I05;
步骤I05.针对所***数据分别采用等值加密算法、保存加密算法、同态加密算法进行加密,分别获得所***数据所对应三种加密方法的加密结果数据,并用该三种加密结果数据替换***操作语句中的所***数据,并与***操作语句中所替换三列的列名分别对应;其中,所***数据分别所对应三种加密结果数据的密钥存储于数据库中;
步骤I06.根据所***数据对应表的表名、所***数据对应的数据列,获得所***数据对应数据库该表中对应列的列名,并用该列的列名替换***操作语句中所***数据所对应数据列的列名,然后进入步骤I07;
步骤I07.针对所***数据分别采用等值加密算法进行加密,获得所***数据对应等值加密算法的加密结果数据,并用该加密结果数据替换***操作语句中的所***数据,并与***操作语句中所替换列的列名相对应;其中,所***数据分别所对应加密结果数据的密钥存储于数据库中。
作为本发明的一种优选技术方案,所述选择查询操作包括如下步骤:
步骤S01.针对选择查询语句进行解析,获得表名、查询内容和谓词,然后进入步骤S02;
步骤S02.针对表名所对应表中采用等值加密算法进行加密的加密结果数据的外层加密进行解密,并进入步骤S03;
步骤S03.针对谓词所对应的表达式进行判断,若谓词所对应表达式为等值匹配表达式,则将谓词所对应表达式中的列名,替换为其在数据库表中对应列经等值加密算法处理后的列名,同时将谓词所对应表达式中列名所相等的常量,采用等值加密算法中预设指定加密算法进行加密,且其密钥与谓词所对应表达式中列对应等值加密算法中预设指定加密算法的密钥相同,然后用该加密结果替换谓词所对应表达式中列名所相等的常量,接着进入步骤S05;若谓词所对应表达式为范围查询表达式,则进入步骤S04;
步骤S04.将谓词所对应表达式中的列名,替换为其在数据库表中对应列经保存加密算法处理后的列名,同时将谓词所对应表达式中列名所对应的常量,采用保存加密算法进行加密,且其密钥与谓词所对应表达式中列所对应保存加密算法的密钥相同,然后进入步骤S05;
步骤S05.针对查询内容进行判断,若查询内容为列,则将该查询内容所对应的列名替换为其对应等值加密算法的列名,然后进入步骤S06;若查询内容为针对列的聚集函数,则将该查询内容中聚集函数中的列名替换为其对应同态加密算法的列名,然后进入步骤S06;
步骤S06.将替换后的选择查询语句发送至数据库进行执行,实现选择查询操作,获得由数据库中选择查询获得的加密结果数据,并针对该加密结果数据进行解密,获得选择查询数据,然后进入步骤S07;
步骤S07.针对选择查询语句中表名所对应表中采用等值加密算法进行加密的加密结果数据,重新采用随机加密算法进行加密,构成该加密结果数据内层加密的外层加密。
作为本发明的一种优选技术方案,所述更新操作包括如下步骤:
步骤U01.针对更新操作语句进行解析,获得数据更新表达式、数据更新表达式所对应表的表名、所对应列的列名,以及条件谓词,然后进入步骤U02;
步骤U02.根据数据更新表达式所对应表的表名,针对数据更新表达式所对应表中采用等值加密算法进行加密的加密结果数据的外层加密进行解密,然后进入步骤U03;
步骤U03.针对更新操作语句中数据更新表达式中的列名进行判断,若该列名所对应数据列的数据类型为数值型,则进入步骤U04;若该列名所对应数据列的数据类型为字符型,则进入步骤U06;
步骤U04.将更新操作语句中数据更新表达式中的列名,替换为其分别对应等值加密算法、保存加密算法、同态加密算法三种加密算法的三个列名,然后进入步骤U05;
步骤U05.针对更新操作语句中数据更新表达式中的数据,分别采用保存加密算法、同态加密算法、等值加密算法中预设指定加密算法进行加密,并用所获三种加密结果数据替换数据更新表达式中的数据,且与数据更新表达式中所替换的三个列名相对应,然后进入步骤U08;
步骤U06.将更新操作语句中数据更新表达式中的列名,替换为其对应等值加密算法的列名,然后进入步骤U07;
步骤U07.针对更新操作语句中数据更新表达式中的数据,采用等值加密算法中预设指定加密算法进行加密,并用所获加密结果数据替换数据更新表达式中的数据,然后进入步骤U08;
步骤U08.判断条件谓词是否为空,是则进入步骤U011;否则进入步骤U09;
步骤U09.针对条件谓词所对应的表达式进行判断,若条件谓词所对应表达式为等值匹配表达式,则将条件谓词所对应表达式中的列名,替换为其在数据库表中对应列经等值加密算法处理后的列名,同时将条件谓词所对应表达式中列名所相等的常量,采用等值加密算法中预设指定加密算法进行加密,且其密钥与条件谓词所对应表达式中列对应等值加密算法中预设指定加密算法的密钥相同,然后用该加密结果替换条件谓词所对应表达式中列名所相等的常量,接着进入步骤U11;若条件谓词所对应表达式为范围查询表达式,则进入步骤U10;
步骤U10.将条件谓词所对应表达式中的列名,替换为其在数据库表中对应列经保存加密算法处理后的列名,同时将条件谓词所对应表达式中列名所对应的常量,采用保存加密算法进行加密,且其密钥与条件谓词所对应表达式中列所对应保存加密算法的密钥相同,然后进入步骤U11;
步骤U11.将替换后的更新操作语句发送至数据库进行执行,实现更新操作,然后进入步骤U12;
步骤U12.针对更新操作语句中数据更新表达式所对应表中,采用等值加密算法进行加密的加密结果数据,重新采用随机加密算法进行加密,构成该加密结果数据内层加密的外层加密。
作为本发明的一种优选技术方案,所述删除操作包括如下步骤:
步骤D01.针对删除操作语句进行解析,获得表名和条件谓词,然后进入步骤D02;
步骤D02.判断条件谓词是否为空,是则直接将删除操作语句发送至数据库中执行,否则进入步骤D03;
步骤D03.针对表名所对应表中采用等值加密算法进行加密的加密结果数据的外层加密进行解密,然后进入步骤D04;
步骤D04.针对条件谓词所对应的表达式进行判断,若条件谓词所对应表达式为等值匹配表达式,则将条件谓词所对应表达式中的列名,替换为其在数据库表中对应列经等值加密算法处理后的列名,同时将条件谓词所对应表达式中列名所相等的常量,采用等值加密算法中预设指定加密算法进行加密,且其密钥与条件谓词所对应表达式中列对应等值加密算法中预设指定加密算法的密钥相同,然后用该加密结果替换条件谓词所对应表达式中列名所相等的常量,接着进入步骤D06;若条件谓词所对应表达式为范围查询表达式,则进入步骤D05;
步骤D05.将条件谓词所对应表达式中的列名,替换为其在数据库表中对应列经保存加密算法处理后的列名,同时将条件谓词所对应表达式中列名所对应的常量,采用保存加密算法进行加密,且其密钥与条件谓词所对应表达式中列所对应保存加密算法的密钥相同,然后进入步骤D06;
步骤D06.将替换后的删除操作语句发送至数据库进行执行,实现删除操作,然后进入步骤D07;
步骤D07.针对表名所对应表中采用等值加密算法进行加密的加密结果数据,重新采用随机加密算法进行加密,构成该加密结果数据内层加密的外层加密。
本发明所述一种基于数据库加密方法的该加密数据库查询方法采用以上技术方案与现有技术相比,具有以下技术效果:本发明所设计的一种基于数据库加密方法的该加密数据库查询方法,在具体设计引入等值加密算法、保存加密算法和同态加密算法针对数据库中的数据进行分类加密的基础之上,提供了在密文上直接执行查询操作的处理方法,提高了执行效率,并减少了用户的通信和计算开销。
具体实施方式
下面结合说明书附图对本发明的具体实施方式作进一步详细的说明。
本发明所设计一种数据库加密方法在实际应用过程当中,包括如下步骤:
步骤001.分别针对数据库里各张表中各数据列的数据类型进行判断,若数据列的数据类型是数值型(int、float、double),则进入步骤002;若数据列的数据类型是字符型(char、varchar、text),则进入步骤003。
步骤002.分别针对该数值型数据列中的各个数据,分别采用等值加密算法、保存加密算法和同态加密算法分别进行加密,并将该数值型数据列扩展为三列,然后按该三列与等值加密算法、保存加密算法、同态加密算法彼此一一对应的关系,分别定义该三列的列名,比如对于数值型(int、float、double)来说,采用等值加密算法的列在列名后添加后缀DET,采用保存加密算法的列在列名后添加后缀OPE,采用同态加密算法的列在列名后添加后缀HOM;相应的,对于字符型(char、varchar、text)来说,采用等值加密算法的列在列名后添加后缀DET;同时将经过等值加密算法、保存加密算法、同态加密算法分别加密的加密结果数据填入对应列中,其中,该数值型数据列所对应扩展三列中各个加密结果数据所对应的密钥存储于数据库中。
其中,分别针对各个数值型数据列中各个数据进行等值加密算法,采用如下步骤实现:
步骤A01.针对数据采用预设指定加密算法进行加密,构成该数据的内层加密,同时根据***主密钥,以及该数据所在数据列的列名获得该数据内层加密的密钥,并存储于数据库中,然后进入步骤A02。
步骤A02.针对该数据内层加密,进一步采用随机加密算法进行加密,构成该数据内层加密的外层加密,同时根据***主密钥、该数据所在数据列的列名,以及该数据所在行的唯一行标识获得该数据内层加密进一步外层密钥的密钥,并存储于数据库中,由此,针对该数据实现等值加密算法的加密。
步骤003.分别针对该字符型数据列中的各个数据,采用等值加密算法进行加密,然后根据等值加密算法,定义该字符型数据列的列名,同时将经过等值加密算法加密的加密结果数据填入该字符型数据列中,其中,该字符型数据列所对应各个加密结果数据的密钥存储于数据库中。
其中,分别针对各个字符型数据列中各个数据进行等值加密算法,采用如下步骤实现:
步骤A01.针对数据采用预设指定加密算法进行加密,构成该数据的内层加密,同时根据***主密钥,以及该数据所在数据列的列名获得该数据内层加密的密钥,并存储于数据库中,然后进入步骤A02。
步骤A02.针对该数据内层加密,进一步采用随机加密算法进行加密,构成该数据内层加密的外层加密,同时根据***主密钥、该数据所在数据列的列名,以及该数据所在行的唯一行标识获得该数据内层加密进一步外层密钥的密钥,并存储于数据库中,由此,针对该数据实现等值加密算法的加密。
等值加密模型使用了两层加密,外层采用随机加密算法进行加密,内层采用确定加密算法进行加密。明文加密时先用确定加密算法进行内层加密,再使用随机加密算法进行外层加密,加密后的数据存储在数据库中。随机加密算法密钥根据用户的主密钥、列名和行标识符生成,每一行的行标识符唯一;确定加密算法密钥根据列名和用户的主密钥生成。生成的密钥存储在数据库中。在对数据应用SQL语句进行查询处理过程中,若查询语句中不包含等值验证的谓词,数据保持在两层加密的状态;若查询语句中包含等值验证的谓词,需先将外层解密,保留内层的密文,等值验证的操作直接在内层的密文上执行,查询操作完成后,需使用随机加密算法重新进行外层加密,数据始终保持两层加密的状态,上述两种情况均不会暴露明文。
保序加密模型使用单层加密,明文加密时使用保序加密算法进行加密。该模型用于对数值类型的数据进行加密,支持密文上直接进行SQL语句的数据范围查询。
同态加密模型使用单层加密,明文加密时使用加法同态算法进行加密。该模型用于对数值类型的数据进行加密,支持密文上直接执行SQL语句的SUM和AVG函数。
基于上述本发明所设计数据库加密方法技术方案的基础之上,本发明进一步设计了该加密数据库查询方法,包括创建表操作(create)、***操作(insert)、选择查询操作(select)、更新操作(update)和删除操作(delete),接下来,我们针对这几种操作分别作介绍,其中,创建表操作(create)包括如下步骤:
步骤C01.针对创建表操作语句(create)进行解析,获得所创建表的表名、所创建表中各数据列的列名,以及各数据列所对应的数据类型,然后进入步骤C02。
步骤C02.分别针对所创建表中的各个数据列进行判断,并分别针对所创建表中各个数据列做出相应处理,然后根据针对所创建表中各个数据列的相应操作,改写创建表操作语句(create),再发送至数据库进行执行,实现创建表操作,其中,分别针对所创建表中的各个数据列进行判断,并分别做出相应处理中,若数据列的数据类型是数值型(int、float、double),则进入步骤C03;若数据列的数据类型是字符型(char、varchar、text),则进入步骤C05。
步骤C03.将该数值型数据列扩展为三列,分别存储该数值型数据列中数据分别对应等值加密算法、保存加密算法和同态加密算法的加密结果数据,并相应定义该数值型数据列所扩展三列的数据类型,然后进入步骤C04。
步骤C04.根据按该数值型数据列所扩展三列与等值加密算法、保存加密算法、同态加密算法彼此一一对应的关系,分别定义该数值型数据列所扩展三列的列名,并用该数值型数据列所扩展三列的列名替换创建表操作语句(create)中该数值型数据列的列名。
步骤C05.将该字符型数据列用于存储该字符型数据列中数据对应于等值加密算法的加密结果数据,然后进入步骤C06。
步骤C06.根据等值加密算法,定义该字符型数据列的列名,并用该字符型数据列的列名替换创建表操作语句(create)中该数值型数据列的列名。
如图1所示,描述了SQL语句创建表操作(create)的详细流程,其中,该请求语句createtablemytable(mycolumn_1数值型,mycolumn_2字符型),按上述具体步骤进行分析操作,首先针对接收的create语句进行解析,获取到表的名字为mytable,列的名字分别为mycolumn_1和mycolumn_2,列对应的数据类型分别为数值型和字符型,并将获取到的信息存入数据库;然后将数值型的列mycolumn_1扩展为三列,分别使用等值加密算法、保存加密算法、同态加密算法进行加密,相应的列名为mycolumn_1_DET、mycolumn_1_OPE和mycolumn_1_HOM,并将等值加密模型中的数据类型设置为text,保序加密模型、同态加密模型中的数据类型设置为double;将字符型的列mycolumn_2使用等值加密模型进行加密,相应的列名为mycolumn_2_DET,并将数据类型改写为text,增加一列行标识符作为主键,则改写后的语句为:
createtablemytable(mycolumn_1_DETtext,mycolumn_1_OPEdouble,mycolumn_1_HOMdouble,mycolumn_2_DETtext,rowidintprimarykeyauto_incrementnotnull);
最后将改写后的创建表操作语句(create)发送到数据库中执行。
***操作(insert)包括如下步骤:
步骤I01.针对***操作语句(insert)进行解析,获得各个所***的数据,以及各个所***数据分别所对应表的表名、所对应数据列的列名,然后进入步骤I02。
步骤I02.分别针对各个所***数据,根据所***数据所对应表的表名,获得所***数据对应数据列的数据类型,并进入步骤I03。
步骤I03.分别针对各个所***数据,针对所***数据对应数据列的数据类型进行判断,并针对所***数据所对应数据列的列名和所***数据做出相应处理,然后根据针对所***数据所对应数据列的列名,以及针对所***数据的相应操作,改写***操作语句(insert),再发送至数据库进行执行,实现***操作,其中,针对所***数据对应数据列的数据类型进行判断,并针对所***数据所对应数据列的列名和所***数据做出相应处理中,若数据列的数据类型是数值型(int、float、double),则进入步骤I04;若数据列的数据类型是字符型(char、varchar、text),则进入步骤I06。
步骤I04.根据所***数据对应表的表名、所***数据对应的数据列,获得所***数据对应数据库该表中对应三列的列名,并用该三列的列名替换***操作语句(insert)中所***数据所对应数据列的列名,然后进入步骤I05。
步骤I05.针对所***数据分别采用等值加密算法、保存加密算法、同态加密算法进行加密,分别获得所***数据所对应三种加密方法的加密结果数据,并用该三种加密结果数据替换***操作语句(insert)中的所***数据,并与***操作语句(insert)中所替换三列的列名分别对应;其中,所***数据分别所对应三种加密结果数据的密钥存储于数据库中。
步骤I06.根据所***数据对应表的表名、所***数据对应的数据列,获得所***数据对应数据库该表中对应列的列名,并用该列的列名替换***操作语句(insert)中所***数据所对应数据列的列名,然后进入步骤I07。
步骤I07.针对所***数据分别采用等值加密算法进行加密,获得所***数据对应等值加密算法的加密结果数据,并用该加密结果数据替换***操作语句(insert)中的所***数据,并与***操作语句(insert)中所替换列的列名相对应;其中,所***数据分别所对应加密结果数据的密钥存储于数据库中。
如图2所示,描述了SQL语句***操作(insert)的详细流程,其中,该请求语句insertintomytable(mycolumn_1,mycolumn_2)values(value_1,value_2);按上述具体步骤进行分析操作,首先,针对接收的insert语句进行解析,获取表的名字student,列的名字分别为mycolumn_1,mycolumn_2,列对应的***数据(value_1,value_2),根据表名在数据库中查询相关列的数据类型,mycolumn_1为数值型,mycolumn_2为字符型;由于mycolumn_1列的数据类型是数值型,因此扩展为三列,对应的***数据是value_1,分别使用确定加密算法、保序加密算法和同态加密算法对该***数据进行加密,加密后的数据为value_1_DET,value_1_OPE,value_1_HOM,并将列名改写为mycolumn_1_DET,mycolumn_1_OPE,mycolumn_1_HOM,每一列名对应了数据库中单独的一个列存储空间。mycolumn_2列是字符型,对应的***数据是value_2,使用确定加密算法对***数据进行加密,加密后的数据为value_2_DET,并将列名改写为mycolumn_2_DET;则改写后的语句为:
insertintostudent(
mycolumn_1_DET,mycolumn_1_OPE,mycolumn_1_HOM,mycolumn_2_DET)
values(value_1_DET,value_1_OPE,value_1_HOM,value_2_DET);
接着将改写后的***操作语句(insert)发送到数据库中执行;最后对采用等值加密算法进行加密的内层密文(value_1_DET、value_2_DET)使用随机加密算法进行外层加密,形成两层加密结构,其密钥根据用户的主密钥、列名和行标识符生成,每一行的行标识符唯一。
选择查询操作(select)包括如下步骤:
步骤S01.针对选择查询语句(select)进行解析,获得表名、查询内容和谓词,然后进入步骤S02。
步骤S02.针对表名所对应表中采用等值加密算法进行加密的加密结果数据的外层加密进行解密,并进入步骤S03。
步骤S03.针对谓词所对应的表达式进行判断,若谓词所对应表达式为等值匹配表达式,则将谓词所对应表达式中的列名,替换为其在数据库表中对应列经等值加密算法处理后的列名,同时将谓词所对应表达式中列名所相等的常量,采用等值加密算法中预设指定加密算法进行加密,且其密钥与谓词所对应表达式中列对应等值加密算法中预设指定加密算法的密钥相同,然后用该加密结果替换谓词所对应表达式中列名所相等的常量,接着进入步骤S05;若谓词所对应表达式为范围查询表达式,则进入步骤S04。
步骤S04.将谓词所对应表达式中的列名,替换为其在数据库表中对应列经保存加密算法处理后的列名,同时将谓词所对应表达式中列名所对应的常量,采用保存加密算法进行加密,且其密钥与谓词所对应表达式中列所对应保存加密算法的密钥相同,然后进入步骤S05。
步骤S05.针对查询内容进行判断,若查询内容为列,则将该查询内容所对应的列名替换为其对应等值加密算法的列名,然后进入步骤S06;若查询内容为针对列的聚集函数sum(列名)或avg(列名),则将该查询内容中聚集函数中的列名替换为其对应同态加密算法的列名,然后进入步骤S06。
步骤S06.将替换后的选择查询语句(select)发送至数据库进行执行,实现选择查询操作,获得由数据库中选择查询获得的加密结果数据,并针对该加密结果数据进行解密,获得选择查询数据,然后进入步骤S07。
步骤S07.针对选择查询语句(select)中表名所对应表中采用等值加密算法进行加密的加密结果数据,重新采用随机加密算法进行加密,构成该加密结果数据内层加密的外层加密。
如图3所示,描述了SQL语句选择查询操作(select)的详细流程,其中,该请求语句selectmycolumn或SUM(mycolumn)、AVG(mycolumn)frommytablewhere条件谓词P;按上述具体步骤进行分析操作,首先,针对接收的select语句进行解析,获取表的名字为mytable,查询内容是列mycolumn或者聚集函数sum(mycolumn)、avg(mycolumn),条件谓词,根据表名在数据库中查询相关列的数据类型及加密列的密钥;接着将数据库中等值加密模型的外层(随机加密层)密文解密,其密钥根据用户的主密钥、列名和行标识符生成,每一行的行标识符唯一;再将解析到的条件谓词P分为等值匹配和范围查询两类,改写为新的条件谓词P*,其中,等值匹配表达式:列名=(常量),将列名改写为等值加密模型对应的列名,记为column_DET。并将常量使用确定加密算法进行加密,其密钥与表达式左边的列中的确定加密算法的密钥相同;范围查询表达式:列名[<>≤≥]常量,将列名改写为保序加密模型对应的列名,记为column_OPE。并将表达式右边的常量使用保序加密算法进行加密,其密钥与表达式左边的列中的保序加密算法的密钥相同;然后,若查询内容是某列mycolumn,将该列名改写为mycolumn_DET;若查询内容是聚集函数sum(mycolumn)或avg(mycolumn),将其中的列名改写为mycolumn_HOM;则综上,改写后的语句为:
selectmycolumn_DET或sum(mycolumn_HOM)、avg(mycolumn_HOM)frommytablewhere条件谓词P*;
接着将该改写后的选择查询操作(select)发送到数据库中执行;最后对采用等值加密算法进行加密的内层密文使用随机加密算法进行外层加密,形成两层加密结构,其密钥根据用户的主密钥、列名和行标识符生成,每一行的行标识符唯一。
更新操作(update)包括如下步骤:
步骤U01.针对更新操作语句(update)进行解析,获得数据更新表达式、数据更新表达式所对应表的表名、所对应列的列名,以及条件谓词,然后进入步骤U02。
步骤U02.根据数据更新表达式所对应表的表名,针对数据更新表达式所对应表中采用等值加密算法进行加密的加密结果数据的外层加密进行解密,然后进入步骤U03。
步骤U03.针对更新操作语句(update)中数据更新表达式中的列名进行判断,若该列名所对应数据列的数据类型为数值型(int、float、double),则进入步骤U04;若该列名所对应数据列的数据类型为字符型(char、varchar、text),则进入步骤U06。
步骤U04.将更新操作语句(update)中数据更新表达式中的列名,替换为其分别对应等值加密算法、保存加密算法、同态加密算法三种加密算法的三个列名,然后进入步骤U05。
步骤U05.针对更新操作语句(update)中数据更新表达式中的数据,分别采用保存加密算法、同态加密算法、等值加密算法中预设指定加密算法进行加密,并用所获三种加密结果数据替换数据更新表达式中的数据,且与数据更新表达式中所替换的三个列名相对应,然后进入步骤U08。
步骤U06.将更新操作语句(update)中数据更新表达式中的列名,替换为其对应等值加密算法的列名,然后进入步骤U07。
步骤U07.针对更新操作语句(update)中数据更新表达式中的数据,采用等值加密算法中预设指定加密算法进行加密,并用所获加密结果数据替换数据更新表达式中的数据,然后进入步骤U08。
步骤U08.判断条件谓词是否为空,是则进入步骤U011;否则进入步骤U09。
步骤U09.针对条件谓词所对应的表达式进行判断,若条件谓词所对应表达式为等值匹配表达式,则将条件谓词所对应表达式中的列名,替换为其在数据库表中对应列经等值加密算法处理后的列名,同时将条件谓词所对应表达式中列名所相等的常量,采用等值加密算法中预设指定加密算法进行加密,且其密钥与条件谓词所对应表达式中列对应等值加密算法中预设指定加密算法的密钥相同,然后用该加密结果替换条件谓词所对应表达式中列名所相等的常量,接着进入步骤U11;若条件谓词所对应表达式为范围查询表达式,则进入步骤U10。
步骤U10.将条件谓词所对应表达式中的列名,替换为其在数据库表中对应列经保存加密算法处理后的列名,同时将条件谓词所对应表达式中列名所对应的常量,采用保存加密算法进行加密,且其密钥与条件谓词所对应表达式中列所对应保存加密算法的密钥相同,然后进入步骤U11。
步骤U11.将替换后的更新操作语句(update)发送至数据库进行执行,实现更新操作,然后进入步骤U12。
步骤U12.针对更新操作语句(update)中数据更新表达式所对应表中,采用等值加密算法进行加密的加密结果数据,重新采用随机加密算法进行加密,构成该加密结果数据内层加密的外层加密。
如图4所示,描述了SQL语句更新操作语句(update)的详细流程,其中,该请求语句updatemytablesetmycolumn=valuewhere条件谓词P;按上述具体步骤进行分析操作,首先,针对接收的update语句进行解析,获取表的名字为mytable,列的名字为mycolumn、更新值为value和条件谓词P,根据表名在数据库中查询相关列的数据类型及加密列的密钥;接着将数据库中等值加密模型的外层(随机加密层)密文解密,其密钥根据用户的主密钥、列名和行标识符生成,每一行的行标识符唯一;再对set子句中的表达式mycolumn=value,若列mycolumn对应的数据类型是数值类型,将扩展的三列分别进行如下更新,其中,将mycolumn改为写等值加密模型下的列名:mycolumn_DET,并将value使用确定加密算法加密为value_DET,加密密钥与左边列的确定加密算法的密钥相同;并且将mycolumn改为保序加密模型下的列名:mycolumn_OPE,并将value使用保序加密算法加密成value_OPE,加密密钥与左边列的确定加密算法的密钥相同;将mycolumn改写为同态加密模型下的列名:mycolumn_HOM,并将value使用同态加密算法加密为value_HOM,加密密钥与左边列的确定加密算法的密钥相同;以及若列对应的数据类型是字符型,将mycolumn改写为等值加密模型下的列名mycolumn_DET,并将value使用确定加密算法加密为value_DET,其密钥与左边列的确定加密算法的密钥相同。如果存在where子句,则将解析到的谓词分为等值匹配和范围查询两类分别处理,形成新的条件谓词P*;则综上,改写后的语句为:
updatemytablesetmycolumn_DET=value_DET,(mycolumn_OPE=value_OPE,mycolumn_HOM=value_HOM)where条件谓词P*;
接着将该改写后的更新操作语句(update)发送到数据库中执行;最后对采用等值加密算法进行加密的内层密文使用随机加密算法进行外层加密,形成两层加密结构,其密钥根据用户的主密钥、列名和行标识符生成,每一行的行标识符唯一。
删除操作(delete)包括如下步骤:
步骤D01.针对删除操作语句(delete)进行解析,获得表名和条件谓词,然后进入步骤D02。
步骤D02.判断条件谓词是否为空,是则直接将删除操作语句(delete)发送至数据库中执行,否则进入步骤D03。
步骤D03.针对表名所对应表中采用等值加密算法进行加密的加密结果数据的外层加密进行解密,然后进入步骤D04。
步骤D04.针对条件谓词所对应的表达式进行判断,若条件谓词所对应表达式为等值匹配表达式,则将条件谓词所对应表达式中的列名,替换为其在数据库表中对应列经等值加密算法处理后的列名,同时将条件谓词所对应表达式中列名所相等的常量,采用等值加密算法中预设指定加密算法进行加密,且其密钥与条件谓词所对应表达式中列对应等值加密算法中预设指定加密算法的密钥相同,然后用该加密结果替换条件谓词所对应表达式中列名所相等的常量,接着进入步骤D06;若条件谓词所对应表达式为范围查询表达式,则进入步骤D05。
步骤D05.将条件谓词所对应表达式中的列名,替换为其在数据库表中对应列经保存加密算法处理后的列名,同时将条件谓词所对应表达式中列名所对应的常量,采用保存加密算法进行加密,且其密钥与条件谓词所对应表达式中列所对应保存加密算法的密钥相同,然后进入步骤D06。
步骤D06.将替换后的删除操作语句(delete)发送至数据库进行执行,实现删除操作,然后进入步骤D07。
步骤D07.针对表名所对应表中采用等值加密算法进行加密的加密结果数据,重新采用随机加密算法进行加密,构成该加密结果数据内层加密的外层加密。
如图5所示,描述了SQL语句删除操作语句(delete)的详细流程,其中,该请求语句deletefrommytable(where条件谓词P);按上述具体步骤进行分析操作,首先,针对接收的delete语句进行解析,获取表的名字为mytable,条件谓词P,根据表名在数据库中查询相关列的数据类型及加密列的密钥;依据上述一系列逻辑调度过程,则改写后的语句为:
deletefrommytable(where条件谓词P*);
接着将该改写后的删除操作语句(delete)发送到数据库中执行;最后对采用等值加密算法进行加密的内层密文使用随机加密算法进行外层加密,形成两层加密结构,其密钥根据用户的主密钥、列名和行标识符生成,每一行的行标识符唯一。
综上所述,本发明所设计的一种基于数据库加密方法及该加密数据库查询方法,具体设计引入等值加密算法、保存加密算法和同态加密算法针对数据库中的数据进行分类加密,并存储在服务器端数据库中,消除了不可信服务器端探查、泄露机密数据的隐患,从而保护了数据的隐私性,并提供了在密文上直接执行查询操作的处理方法,提高了执行效率,并减少了用户的通信和计算开销。
上面结合附图对本发明的实施方式作了详细说明,但是本发明并不限于上述实施方式,在本领域普通技术人员所具备的知识范围内,还可以在不脱离本发明宗旨的前提下做出各种变化。