CN109815719A - 一种可搜索的数据库安全加密*** - Google Patents
一种可搜索的数据库安全加密*** Download PDFInfo
- Publication number
- CN109815719A CN109815719A CN201910053777.7A CN201910053777A CN109815719A CN 109815719 A CN109815719 A CN 109815719A CN 201910053777 A CN201910053777 A CN 201910053777A CN 109815719 A CN109815719 A CN 109815719A
- Authority
- CN
- China
- Prior art keywords
- encryption
- key
- model
- column
- database
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Storage Device Security (AREA)
Abstract
本发明公开了一种可搜索的数据库安全加密***,其包括元数据管理模块、密钥管理模块、加解密模块、SQL语句重写模块、数据库连接模块,元数据表以及加密模型。本发明的可搜索的数据库安全加密***在语句执行过程中通过动态调整加密层,实现了在密文上直接执行复杂的SQL语句,避免了不可信数据库服务器暴露明文数据,保护了数据隐私。
Description
技术领域
本发明涉及数据库信息安全,属于信息安全技术领域;具体地说,涉及一种可搜索的数据库安全加密***。
背景技术
云计算时代以来,很多企业选择把海量数据存储在云端,由于减少了本地化存储以及强大的云计算能力,企业能够大幅度缩减IT成本,随之而来的还有安全上的担心。在开放的云计算环境中,企业内部员工可以轻易的访问、篡改和泄露隐私数据,这些行为的结果对于企业而言是灾难性的。
目前,云服务提供商在信息安全方面所作的工作还非常有限,加密存储数据是较为安全的一种保障安全的方法。数据加密后,即使数据的“窥探者”获得数据,也能够保证其中的隐私信息不被泄露。然后,数据加密后存储在云端,给处理数据带来的额外的开销。在某些应用场景下,服务器需要在用户的数据上进行运算,如果此时把所有数据全部解密后再运算,势必会对执行效率造成不利的影响。
发明内容
本发明针对关系数据库字符类型和数值类型数据加密后可操作性进行研究,为在保证安全性的同时解决密文上不可直接执行SQL操作的问题,设计并实现了一种包括SQL改写、明文数据加密和查询处理等功能在内的可搜索的数据库安全加密***。
本发明的目的采用如下的技术方案实现:
一种可搜索的数据库安全加密***,其包括元数据管理模块、密钥管理模块、加解密模块、SQL语句重写模块、数据库连接模块,元数据表以及加密模型。
进一步地,所述加密模型包括三种加密方式,包括等值加密模型,保序加密模型,同态加密模型;对于数值型数据,采用三种加密模型分别加密,对于字符型数据,使用等值加密模型加密;
1)所述等值加密模型使用了两层加密,外层为随机加密层,内层为确定加密层,在加密时会先使用确定加密策略对明文进行第一次加密,再使用随机加密策略进行第二次加密,解密过程相反;
2)所述保序加密模型下的密文采用了明文的顺序特性,当SQL语句中需要进行大小、范围的判断时,将相应的明文通过该策略进行加密后与数据库中的密文比较,以便得到相应的结果;
3)所述同态加密模型用于支持SUM和AVG函数;在数据库中,所述同态加密模型对应了多列密文分片,列名分别包含了“HOM1”~“HOM5”用于存储不同的密文分片,可搜索的数据库安全加密***将密文分片的个数设置为5个。
进一步地,所述元数据表用于保存数据加密后的数据格式变化信息,在int型的明文中,其确定加密模型对应的列的数据类型为text型。
进一步地,所述SQL语句重写模块对用户提交的SQL语句进行解析,分析查询类型,包括Create、Select、Insert、Update、Delete,交给不同的解析函数处理,解析函数会对语句中包含的明文数据进行加密,并对列名进行修改。
进一步地,所述密钥管理模块的任务有两个:一是为等值加密模型动态产生工作密钥,二是为保序加密模型和同态加密模型产生密钥;密钥管理模块针对三个不同的加密算法,采用不同的管理方案;
1)对于等值加密模型,使用的是AES算法的ECB模式,其密钥产生策略为:
Kmk,c,t=KeyGen(Master(mk),Column(c));
其中master key是用户的主密钥,c是列名,采用一列一密的方式;当需要使用等值加密模型进行加解密时,密钥管理模块通过主密钥和列名动态生成一个工作密钥,提供给加密算法。
2)对于保序加密模型,根据使用的算法,其密钥是三个秘密参数,a、b、sens;在创建表时由元数据表调用密钥管理模块产生该密钥,该密钥是一列一密的,并且无法动态生成,所以需要保存在元数据表中;
3)对于同态加密模型,密钥由多个实数元组构成,这些元组在创建表时生成并存储在元数据表中。
进一步地,对于保序加密模型和同态加密模型,密钥均存储在数据库服务器中的元数据表中,为了保护密钥不被窃取,元数据表会这些密钥加密后存储;在加密和解密之前,***会从元数据表中获取这些密钥。
进一步地,所述元数据管理模块对以下数据提供存储与获取的功能:
1)明文的属性信息;
2)保序加密和同态加密模型的密钥。
进一步地,所述加解密模块用于:
1)将用户提交的明文数据加密,加密模块中有三种加密模型中所包含的算法,工作时会与其它模块协作;SQL语句改写模块会将数据库操作语句中的涉密的明文值提取出来并作为输入传递给加密模块,加密模块根据明文值在数据库中对应的列、记录位置以及当前语句中的操作来判断需要使用的加密模型,若此过程中需要生成工作密钥,则调用密钥管理模块,若需要获取已有密钥,则调用元数据管理模块从数据库中读取密钥;加密完成后,模块将密文值返回给SQL语句改写模块;
2)从数据库返回的查询结果为密文,需要交由该模块解密;解密过程需要从元数据表中获取关于密文结果所在表的元数据信息,包括数据类型、密钥和明文的列名;解密函数将这些元数据连同待解密的密文作为输入,根据加密模型选择相应的解密函数。
相比于现有技术,本发明的有益效果:
该***在语句执行过程中通过动态调整加密层,实现了在密文上直接执行复杂的SQL语句,避免了不可信数据库服务器暴露明文数据,保护了数据隐私。
附图说明
图1为本发明可搜索的数据库安全加密***结构图;
图2为本发明加密模型图;
图3为本发明Create语句执行流程图;
图4为本发明Insert语句执行流程图;
图5为本发明Select语句执行流程图;
图6为本发明Update语句执行流程图;
图7为本发明Delete语句执行流程图。
具体实施方式
下面结合具体实施例对本发明做进一步详细的说明,但不以任何方式限制本发明的范围。
本发明的设计思想:可搜索的数据库安全加密***将数据库服务器视为不可信端。用户输入SQL语句,***将其中涉密的明文数据加密成为密文后,存储在服务器端。执行SQL语句时,由该***对语句进行改写,隐藏列名并对其中的明文进行加密,同时对数据库中的加密模型动态调整,使改写后的语句能够直接在密文上执行。
图1为可搜索的数据库安全加密***的体系结构图。该***由5个核心模块组成:元数据管理模块、密钥管理模块、加解密模块、SQL语句重写模块和数据库连接模块。为了配合密钥管理模块对静态密钥进行管理,在数据库服务器端设置有元数据表。存储用户数据库的数据库表中设计有三种不同的加密模型用于支持快速密文查询和运算。
图2为可搜索的数据库安全加密***的加密模型,包括等值加密模型,保序加密模型,同态加密模型。对于数值型数据,采用三种加密模型分别加密,而对于字符型数据,则仅使用等值加密模型加密。
等值加密模型使用了两层加密,外层为随机加密层,内层为确定加密层,在加密时会先使用确定加密策略对明文进行第一次加密,再使用随机加密策略进行第二次加密,解密过程相反。
(1)随机加密
该加密策略提供了最高安全级别,该策略的特征是相同的明文经过加密后得到不同的密文,我们使用该策略与确定加密策略结合,用户隐藏等值信息。我们使用AES分组加密算法来实现该策略,并使用数据库中提供的AES加密函数。在MySQL中提供了aes_encrypt(content,salt)加密函数以及aes_decrypt(content,salt)解密函数,其中content是需要加密或者解密的内容,而salt用于产生加密和解密密钥的信息,同一个明文,当使用不同salt时会得到不同的结果。我们利用这个特性,对每一个数据均使用不同salt,每个salt由三部分组成:主密钥、列名、行标识符。其中的行标识符是我们在数据库中创建的一列自增值,用于表示当前是第几行,这个值不可重复。列名是明文的列名,无法从数据库中直接获取。salt的生成在客户端中完成,并且数据库中不保存salt的值。
(2)确定加密(DET:Deterministic Encryption Algorithm)
确定加密策略的特点是相同的明文通过该策略加密后产生相同的密文,通过将语句中的明文使用该策略加密后的密文与数据库中的密文数据进行等值匹配,便可以查找出符合相等关系的记录。该策略对应的算法是AES分组加密算法,并选用ECB(电子密码本)模式,该模式下的AES算法,在密钥不变的条件下,任意两个相等的明文对应的密文也相等。我们选择的分组长度为128位,对于不满足该长度的明文,采用扩充的方式统一长度。
该模型可以动态调整,在当查询语句中不包含等值验证的谓词(如select…from…where a=b)时,该列能够保持在RND层,当查询语句中包含等值验证的谓词时,则先将外层解密,保留DET层的密文,等值验证的操作可以直接在DET层的密文上完成,两种情况均不会暴露明文,并且如果执行过程中需要在RND层解密,在完成用户的查询操作后,仍会使用RND解密策略重新加密,始终保持两层加密的结构。如果需要修改RND层,则执行过程为三步:
第一步,对RND层进行解密。由客户端编写一条UPDATE语句,将数据库中的等值加密模型所在的列解密,解密之后的结果仍然是密文,这些密文是明文经过确定加密后的结果。
第二步,执行查询,并返回结果,去掉RND层后,语句可以在DET密文上直接执行。
第三步,将那些“剥去”RND层的列使用随机加密策略重新加密。
保序加密模型的特点是密文保持明文的顺序特性,即当x<y时,有OPEK(x)<OPEK(y)。其中OPEK(x)和OPEK(y)分别是使用密钥K对明文数据x,y加密后的密文。当SQL语句中需要进行大小、范围的判断时,将相应的明文通过该策略进行加密后与数据库中的密文比较,即可得到相应的结果。
同态加密模型用于支持SUM和AVG函数,如SELECT AVG(grade)FROM student。在数据库中,该模型对应了多列,列名分别包含了“HOM1”~“HOM5”用于存储不同的密文分片,可搜索的数据库安全加密***将分片的个数设置为5个。
数据经过AES算法加密后的密文是二进制,不利于传输和存储,因此我们使用BASE64编码,将二进制数据转换为字符型数据。
在数据进行加密后,数据的格式也会发生变化,如int型的明文,其确定加密模型对应的列的数据类型为text型。这部分明文信息需要保存下来,因此我们设计了元数据表来保存这些信息,元数据表的结构如下表所示:
T1表由三列组成,分别为C1、C2、C3,这些列名都是没有经过处理的明文下的列名,存储的明文类型分别为INT、DOUBLE、CHAR。对于数值型数据,元数据表存储了保序加密密钥和同态加密密钥,而对于字符型数据,这两列则设置为NULL。
SQL语句重写模块对用户提交的SQL语句进行解析,分析查询类型,包括Create、Select、Insert、Update、Delete,交给不同的解析函数处理,解析函数会对语句中包含的明文数据进行加密,并且对列名进行修改,通过一个例子说明:
(1)输入:select name from student where id=1;
输出:select name_DET from student where id_DET=‘Edaf/-dfgk==’;
说明:解析函数调用加解密模块对明文数字1进行加密,并且将列名id改写为id_DET,代表在密文上将使用DET加密的列,select…from部分的列名也将被改写。
(2)输入:select sum(grade)from grade;
输出:select sum(grade_HOM1),sum(grade_HOM2),sum(grade_HOM3),sum(grade_HOM4),sum(grade_HOM5)from grade;
说明:对于sum函数以及avg函数,我们需要使用HOM列,其中包括5列密文分片,需要分别从各个分片中得到部分结果,因此需要将一列扩展为5列。
密钥管理模块的任务有两个:一是为等值加密模型动态产生工作密钥,二是为保序加密模型和同态加密模型产生密钥。针对不同的算法采用不同的管理方案:
对于等值加密模型,使用的是AES算法的ECB模式,其密钥产生策略为:
Kmk,c,t=KeyGen(Master(mk),Column(c))
其中master key是用户的主密钥,c是列名,采用一列一密的方式。当需要使用等值加密模型进行加解密时,密钥管理模块通过主密钥和列名动态生成一个工作密钥,提供给加密算法;
对于保序加密模型,根据使用的算法,其密钥是三个秘密参数,a、b、sens。在创建表时由元数据表调用密钥管理模块产生该密钥,该密钥是一列一密的,并且无法动态生成,所以需要保存在元数据表中。
对于同态加密模型,密钥由多个实数元组构成,这些元组在创建表时生成并存储在元数据表中。
对于保序加密模型和同态加密模型,密钥均存储在数据库服务器中的元数据表中,为了保护密钥不被窃取,元数据表会这些密钥加密后存储。在加密和解密之前,***会从元数据表中获取这些密钥。
在创建表时,我们同样需要改写语句,将明文的字段类型改为密文字段类型,例如,我们创建int类型的id字段,为了能够保存id的密文,我们需要将等值模型对应的列属性改为text类型。这有利于隐藏明文的属性信息,但是当我们需要明文属性信息的时候,密文数据表就无法提供,因此,我们需要创建一个元数据表,并且将明文的属性信息作为数据存放在元数据表中。此外,对于保序加密和同态加密模型的密钥,也需要存放在元数据表中。元数据管理模块就是对这些数据提供存储与获取的功能。
加解密模块负责:
(1)将用户提交的明文数据加密,加密模块中有三种加密模型中所包含的算法,工作时会与其它模块协作。SQL语句改写模块会将数据库操作语句中的涉密的明文值提取出来并作为输入传递给加密模块,加密模块根据明文值在数据库中对应的列、记录位置以及当前语句中的操作来判断需要使用的加密模型,若此过程中需要生成工作密钥,则调用密钥管理模块,若需要获取已有密钥,则调用元数据管理模块从数据库中读取密钥。加密完成后,模块将密文值返回给SQL语句改写模块。
(2)从数据库返回的查询结果为密文,需要交由该模块解密。解密过程需要从元数据表中获取关于密文结果所在表的元数据信息,包括数据类型、密钥和明文的列名。解密函数将这些元数据连同待解密的密文作为输入,根据加密模型选择相应的解密函数。
为了能够在密文上执行常规的SQL语句,不同的操作类型按照不同的操作步骤,下面从创建表、***、查询、更新、删除5个部分分别说明,并通过一个具体的例子来说明可搜索加密方法:数据库中有一份学生信息的表,表名为student,其中的列有id(学生编号,数值型),name(姓名,字符型),age(年龄,数值型),sex(性别,字符型)。
(1)创建表(Creat)
步骤一:对create语句进行解析,获取表的名字、所有列的名字以及对应的数据类型,并且调用密钥管理模块生成保序、同态加密模型的密钥,对以上数据使用主密钥加密,并构造一条insert语句将以上数据***到服务器端的元数据库中。
步骤二:在步骤一的基础上,对新表中的所有列进行处理,如果列的数据类型为数值型(int、float、double),则该列需要使用等值、保序、同态加密模型,在数据库中必须有三列来分别存储这个模型下的密文,因此,需要将该列扩展为三列,为了区分,列的名字中包含DET代表是等值加密模型对应的列,列的名字中包含OPE代表是保序加密模型对应的列,列的名字中包含HOM代表是同态加密模型对应的列,此外,相应的数据类型改写为:text、double、double。如果列的数据类型是字符型(char、varchar、text),则只需要使用等值加密模型,所以只需要改写为一列,列名中包含DET,并且数据类型改写为text。
图3为***对Create语句的处理流程图示例,首先使用create table语句在数据库中新建一个student表。
用户的输入语句为:
create table mytable(mycolumn_1数值型,mycolumn_2字符型);
A1)对用户输入的create语句进行解析,获取到表的名字为mytable,所有列的名字为mycolumn_1和mycolumn_2,列对应的数据类型为数值型和字符型,并将获取到的这些信息作为数据存入数据库中。
A2)将数值型的列mycolumn_1扩展为三列,分别使用等值、保序、同态加密模型进行加密,相应的列名为mycolumn_1_DET、mycolumn_1_OPE、mycolumn_1_HOM mycolumn_1_HOM,并将等值加密模型中的数据类型设置为text,保序加密模型、同态加密模型中的数据类型设置为double。将字符型的列mycolumn_2使用等值加密模型进行加密,相应的列名为mycolumn_2_DET,并将数据类型改写为text。增加一列行标识符作为主键。
改写后的语句为:
create table mytable(mycolumn_1_DET text,mycolumn_1_OPE double,mycolumn_1_HOM double,mycolumn_2_DET text,rowid int primary key auto_increment not null)
(2)***数据(Insert)
步骤一:首先对语句进行解析,获取到要***数据的表和列的名字,通过表名,向元数据表中查询数据,将该表名下的所有信息全部获取到客户端并解密。
步骤二:通过解析到的列名,从元数据中查询到该列的数据类型,如果是数值类型,意味着该列需要使用等值、保序、同态加密模型分别进行处理。从values中解析出要***该列的具体数据,对该数据分别使用确定、保序和同态加密策略进行加密,保序和同态加密策略的密钥从元数据中获取即可,而确定加密策略的密钥由密钥管理模块生成。如果元数据中该列的数据类型是字符类型(char、varchar、text),则只需要使用确定加密策略进行加密,同样需要密钥管理模块生成密钥,对values中对应的数据进行加密。这个步骤结束后将得到一个仅含有密文的***语句,将该语句交由数据库执行。
步骤三:步骤二完成后,数据库中已经***了对应的密文数据,但是这个时候的等值加密模型中的数据只使用了确定加密策略进行加密,所有只是单层加密,还需要使用随机加密策略进行二次加密,这个加密的过程由服务器执行。在客户端编写一条update语句,该语句中包含有数据库中的aes加密函数,对等值加密模型中的数据进行二次加密。
图4为***对Insert语句的处理流程示例,现在向student表中一行数据:
用户输入的语句为:
insert into mytable(mycolumn_1,mycolumn_2)values(value_1,value_2);
B1)对接收的insert语句进行解析,获取表的名字student,列的名字为:mycolumn_1,mycolumn_2,列对应的***数据(value_1,value_2'),根据表名在数据库中查询所有列的数据类型,mycolumn_1为数值型,mycolumn_2为字符型;
B2)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。
B3)对等值加密模型中的内层密文(value_1_DET、value_2_DET)使用随机加密算法进行外层加密,形成两层加密结构,其密钥根据用户的主密钥、列名和行标识符生成,每一行的行标识符唯一。
改写结果:
(3)选择查询(Select)
步骤一:首先从用户的输入的语句中获取查询的表名,从元数据表中获取相应的元数据信息,包括表名、所有列名及对应的数据类型、保序加密模型密钥和同态加密模型的密钥,对这些数据进行解密暂存在客户端。
步骤二:数据库中的等值加密模型处于两层加密的RND层时,无法完成任何操作,因此在查询之前需要对该模型的RND层进行解密。方法是向数据库中发送一条update语句,其中包含解密函数。这个步骤的结果是所有的等值加密模型对应的列下的密文支持等值查询。
步骤三:将查询所包含的谓词分为三类:一是等值匹配,如a=b,group by;二是范围查询,如a>b,order by;三是集合操作,如SUM,AVG函数。这一步需要将语句中的谓词表达式解析出来,这样我们分为三种情况:
a)等值匹配:列名=(一个常量)。这个谓词下,需要在等值加密模型对应的列中进行搜索,因此要将列名改写为等值加密模型对应的列名,如column_DET。同时,常量需要使用确定加密策略进行加密,所用的密钥与表达式左边的列中的密钥相同。使用这个密文在数据库中的等值加密模型中进行搜索,密文相等代表明文相等。
b)范围查询:列名[<>≤≥]常量。这个谓词下,需要在保序加密模型中进行搜索,因此要将列名改写为保序加密模型对应的列名,如column_OPE。同时,表达式右边的常量使用保序加密策略进行加密,其密钥与表达式左边的列中的密钥相同,这个密钥从元数据中获取。使用这个密文在保序加密模型中进行搜索时,密文的大小关系对应了明文的大小关系。
c)集合操作:SUM(列名)、AVG(列名)函数。这个谓词下,需要在同态加密模型中进行操作,只需要将列名改写为同态加密模型对应的列名即可,如column_HOM。在同态加密模型进行操作时,直接在密文上执行SUM和AVG,得到的结果解密后对应于明文的计算结果。
步骤四:在步骤二和步骤三完成后,数据库中的等值加密模型处于单个DET层的状态,需要对其重新进行RND加密,恢复到两层加密的状态,以保证安全性。具体做法是向数据库发送一条update语句,其中包含了RND层的加密函数和密钥。
图5为***对select语句的处理流程图示例。
用户输入:select mycolumn或者SUM(mycolumn)、AVG(mycolumn)from mytablewhere条件谓词P;
C1)对接收的select语句进行解析,获取表的名字为mytable,查询内容是列mycolumn或者聚集函数sum(mycolumn)、avg(mycolumn),条件谓词,根据表名在数据库中查询所有列的数据类型及加密列的密钥;
C2)将数据库中的所有等值加密模型的外层(随机加密层)密文解密,其密钥根据用户的主密钥、列名和行标识符生成,每一行的行标识符唯一;
C3)将解析到的条件谓词P分为等值匹配和范围查询两类,改写为新的条件谓词P*。
等值匹配表达式:列名=(常量),将列名改写为等值加密模型对应的列名,如column_DET。并将常量使用确定加密算法进行加密,其密钥与表达式左边的列中的确定加密算法的密钥相同;
范围查询表达式:列名[<>≤≥]常量,将列名改写为保序加密模型对应的列名,如column_OPE。并将表达式右边的常量使用保序加密算法进行加密,其密钥与表达式左边的列中的保序加密算法的密钥相同。
C4)若查询内容是某个列mycolumn,将该列名改写为mycolumn_DET;若查询内容是聚集函数sum(mycolumn)或avg(mycolumn),将其中的列名改写为mycolumn_HOM。
C5)将数据库中的所有等值加密模型中的内层密文重新使用随机加密算法加密,其密钥根据用户的主密钥、列名和行标识符生成,每一行的行标识符唯一。
语句改写结果:
select mycolumn_DET或者sum(mycolumn_HOM)、avg(mycolumn_HOM)fromstudent where条件谓词P*;
(4)更新操作(Update)
步骤一:获取元数据,与选择查询的步骤一相同。
步骤二:对两层的等值加密模型中的外部RND层进行解密,做法与选择查询的步骤二相同。
步骤三:update的作用是将数据库中的指定字段中的数据更新为另一个值。其形式为:“update表名set列名=常量where条件表达式”。***会将其中的列名、常量、条件谓词提取出来,分别处理。其中条件谓词的处理方式与选择查询的步骤三相同。对于“列名=常量”的处理过程与***语句的步骤二类似。首先判断列名所对应的数据类型,如果是数值类型,则将该部分改写为三个:“列名_DET=DET(常量)”,代表将列名改写为等值加密模型下的列名,并将常量使用确定加密策略加密,其密钥与左边列的密钥相同;“列名_OPE=OPE(常量)”;“列名_HOM=HOM(常量)”。如果列是字符型,则只需按照“列名_DET=DET(常量)”的形式进行改写即可。全部改写完成后,将语句交由数据库执行。
步骤四:将等值加密模型恢复到两层加密的状态。使用的方法与选择查询的步骤四相同。
图6为***对update语句的处理流程图示例;。
用户输入:update mytable set mycolumn=value where条件谓词P;
D1)对接收的update语句进行解析,获取表的名字为mytable,列的名字为mycolumn、更新值为value和条件谓词P,根据表名在数据库中查询所有列的数据类型及加密列的密钥;
D2)将数据库中的所有等值加密模型的外层(随机加密层)密文解密,其密钥根据用户的主密钥、列名和行标识符生成,每一行的行标识符唯一;
D3)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*。
D4)将数据库中的所有等值加密模型的内层重新使用随机加密算法加密,其密钥根据用户的主密钥、列名和行标识符生成,每一行的行标识符唯一;
语句改写后的结果:
update mytable set mycolumn_DET=value_DET,(mycolumn_OPE=value_OPE,mycolumn_HOM=value_HOM)where条件谓词P*;
图7为***对Delete语句的处理流程图示例
(5)删除操作(Delete)
步骤一:获取元数据,与选择查询的步骤一相同。
步骤二:删除语句的形式为:“delete from表名where条件表达式”。当语句中存在条件表达式时,则需要对两层的等值加密模型中的外部RND层进行解密,做法与选择查询的步骤二相同。如果没有表达式,则直接将语句发送到数据库中执行。
步骤三:存在条件表达式时,需要对条件表达式进行改写,过程与选择查询的步骤三相同。将改写后的语句发送到数据库中执行。
用户输入:delete from mytable(where条件谓词P);
E1)对接收的delete语句进行解析,获取表的名字为mytable,条件谓词P,根据表名在数据库中查询所有列的数据类型及加密列的密钥;
E2)若语句中存在条件谓词P时,首先将数据库中的所有等值加密模型的外层密文解密,其密钥根据用户的主密钥、列名和行标识符生成,每一行的行标识符唯一;然后将解析到的谓词分为等值匹配和范围查询两类分别处理,形成新的条件谓词P*;最后将等值加密模型中的内层密文加密,其密钥根据用户的主密钥、列名和行标识符生成,每一行的行标识符唯一。若没有表达式,则不做处理。
语句改写结果:delete from mytable(where条件谓词P*)。
上述实施方式仅为本发明的优选实施方式,不能以此来限定本发明保护的范围,本领域的技术人员在本发明的基础上所做的任何非实质性的变化及替换均属于本发明所要求保护的范围。
Claims (8)
1.一种可搜索的数据库安全加密***,其特征在于:包括元数据管理模块、密钥管理模块、加解密模块、SQL语句重写模块、数据库连接模块,元数据表以及加密模型。
2.如权利要求1所述的可搜索的数据库安全加密***,其特征在于:所述加密模型包括三种加密方式,包括等值加密模型,保序加密模型,同态加密模型;对于数值型数据,采用三种加密模型分别加密,对于字符型数据,使用等值加密模型加密;
1)所述等值加密模型使用了两层加密,外层为随机加密层,内层为确定加密层,在加密时会先使用确定加密策略对明文进行第一次加密,再使用随机加密策略进行第二次加密,解密过程相反;
2)所述保序加密模型下的密文采用了明文的顺序特性,当SQL语句中需要进行大小、范围的判断时,将相应的明文通过该策略进行加密后与数据库中的密文比较,以便得到相应的结果;
3)所述同态加密模型用于支持SUM和AVG函数;在数据库中,所述同态加密模型对应了多列密文分片,列名分别包含了“HOM1”~“HOM5”用于存储不同的密文分片,可搜索的数据库安全加密***将密文分片的个数设置为5个。
3.如权利要求1所述的可搜索的数据库安全加密***,其特征在于:所述元数据表用于保存数据加密后的数据格式变化信息,在int型的明文中,其确定加密模型对应的列的数据类型为text型。
4.如权利要求1所述的可搜索的数据库安全加密***,其特征在于:所述SQL语句重写模块对用户提交的SQL语句进行解析,分析查询类型,包括Create、Select、Insert、Update、Delete,交给不同的解析函数处理,解析函数会对语句中包含的明文数据进行加密,并对列名进行修改。
5.如权利要求1所述的可搜索的数据库安全加密***,其特征在于:所述密钥管理模块的任务有两个:一是为等值加密模型动态产生工作密钥,二是为保序加密模型和同态加密模型产生密钥;密钥管理模块针对三个不同的加密算法,采用不同的管理方案;
1)对于等值加密模型,使用的是AES算法的ECB模式,其密钥产生策略为:
Kmk,c,t=KeyGen(Master(mk),Column(c));
其中master key是用户的主密钥,c是列名,采用一列一密的方式;当需要使用等值加密模型进行加解密时,密钥管理模块通过主密钥和列名动态生成一个工作密钥,提供给加密算法;
2)保序加密模型,根据使用的算法,其密钥是三个秘密参数,a、b、sens;在创建表时由元数据表调用密钥管理模块产生该密钥,该密钥是一列一密的,并且无法动态生成,所以需要保存在元数据表中;
3)同态加密模型,密钥由多个实数元组构成,这些元组在创建表时生成并存储在元数据表中。
6.如权利要求5所述的可搜索的数据库安全加密***,其特征在于:对于保序加密模型和同态加密模型,密钥均存储在数据库服务器中的元数据表中,为了保护密钥不被窃取,元数据表会这些密钥加密后存储;在加密和解密之前,***会从元数据表中获取这些密钥。
7.如权利要求1所述的可搜索的数据库安全加密***,其特征在于:所述元数据管理模块对以下数据提供存储与获取的功能:
1)明文的属性信息;
2)保序加密和同态加密模型的密钥。
8.如权利要求1所述的可搜索的数据库安全加密***,其特征在于:所述加解密模块用于:
1)将用户提交的明文数据加密,加密模块中有三种加密模型中所包含的算法,工作时会与其它模块协作;SQL语句改写模块会将数据库操作语句中的涉密的明文值提取出来并作为输入传递给加密模块,加密模块根据明文值在数据库中对应的列、记录位置以及当前语句中的操作来判断需要使用的加密模型,若此过程中需要生成工作密钥,则调用密钥管理模块,若需要获取已有密钥,则调用元数据管理模块从数据库中读取密钥;加密完成后,模块将密文值返回给SQL语句改写模块;
2)从数据库返回的查询结果为密文,需要交由该模块解密;解密过程需要从元数据表中获取关于密文结果所在表的元数据信息,包括数据类型、密钥和明文的列名;解密函数将这些元数据连同待解密的密文作为输入,根据加密模型选择相应的解密函数。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910053777.7A CN109815719A (zh) | 2019-01-21 | 2019-01-21 | 一种可搜索的数据库安全加密*** |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910053777.7A CN109815719A (zh) | 2019-01-21 | 2019-01-21 | 一种可搜索的数据库安全加密*** |
Publications (1)
Publication Number | Publication Date |
---|---|
CN109815719A true CN109815719A (zh) | 2019-05-28 |
Family
ID=66603591
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910053777.7A Pending CN109815719A (zh) | 2019-01-21 | 2019-01-21 | 一种可搜索的数据库安全加密*** |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109815719A (zh) |
Cited By (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110598440A (zh) * | 2019-08-08 | 2019-12-20 | 中腾信金融信息服务(上海)有限公司 | 一种分布式自动加解密*** |
CN111427908A (zh) * | 2020-04-23 | 2020-07-17 | 北京中安星云软件技术有限公司 | 一种基于量子密钥的透明加、解密方法、***及装置 |
CN111639349A (zh) * | 2020-05-14 | 2020-09-08 | 瀚高基础软件股份有限公司 | 一种数据加密处理方法、装置和存储介质 |
CN112016120A (zh) * | 2020-08-26 | 2020-12-01 | 支付宝(杭州)信息技术有限公司 | 基于用户隐私保护的事件预测方法和装置 |
CN112380557A (zh) * | 2020-12-01 | 2021-02-19 | 江西师范大学 | 一种关系型数据库加密方法及该加密数据库查询方法 |
CN112613302A (zh) * | 2020-12-31 | 2021-04-06 | 天津南大通用数据技术股份有限公司 | 基于数据库执行select语句的子句的动态可信判定方法 |
CN112685779A (zh) * | 2020-12-31 | 2021-04-20 | 天津南大通用数据技术股份有限公司 | 基于数据库执行select语句主要关键字的静态可信判定方法 |
CN113111357A (zh) * | 2021-03-09 | 2021-07-13 | 深圳市教育信息技术中心(深圳市教育装备中心) | 字段加密方法、装置、设备和介质 |
CN113111082A (zh) * | 2021-03-09 | 2021-07-13 | 深圳市教育信息技术中心(深圳市教育装备中心) | 结构化查询语句重写方法、装置、设备和介质 |
CN113111356A (zh) * | 2021-03-09 | 2021-07-13 | 深圳市教育信息技术中心(深圳市教育装备中心) | 数据加密方法、装置、设备和介质 |
CN113204776A (zh) * | 2021-04-30 | 2021-08-03 | 新华三大数据技术有限公司 | 实现列加密的方法、装置、设备及存储介质 |
CN114327261A (zh) * | 2021-12-06 | 2022-04-12 | 神州融安数字科技(北京)有限公司 | 数据文件的存储方法及数据安全代理 |
CN114513351A (zh) * | 2022-02-08 | 2022-05-17 | 中国人民解放军海军军医大学 | 一种偏远地区信息加密传输方法、***及可存储介质 |
CN116756760A (zh) * | 2023-08-21 | 2023-09-15 | 合肥安永信息科技有限公司 | 一种可搜索的数据库加密***及其方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102902932A (zh) * | 2012-09-18 | 2013-01-30 | 武汉华工安鼎信息技术有限责任公司 | 基于sql重写的数据库外部加解密***及其使用方法 |
CN104881280A (zh) * | 2015-05-13 | 2015-09-02 | 南京邮电大学 | 一种支持多查询的密文数据库中间件的设计方法 |
CN105610793A (zh) * | 2015-12-18 | 2016-05-25 | 江苏大学 | 一种外包数据加密存储与密文查询***及其应用方法 |
-
2019
- 2019-01-21 CN CN201910053777.7A patent/CN109815719A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102902932A (zh) * | 2012-09-18 | 2013-01-30 | 武汉华工安鼎信息技术有限责任公司 | 基于sql重写的数据库外部加解密***及其使用方法 |
CN104881280A (zh) * | 2015-05-13 | 2015-09-02 | 南京邮电大学 | 一种支持多查询的密文数据库中间件的设计方法 |
CN105610793A (zh) * | 2015-12-18 | 2016-05-25 | 江苏大学 | 一种外包数据加密存储与密文查询***及其应用方法 |
Non-Patent Citations (1)
Title |
---|
汪海伟等: "可搜索数据库加密***的设计与实现", 《计算机技术与发展》 * |
Cited By (21)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110598440A (zh) * | 2019-08-08 | 2019-12-20 | 中腾信金融信息服务(上海)有限公司 | 一种分布式自动加解密*** |
CN111427908A (zh) * | 2020-04-23 | 2020-07-17 | 北京中安星云软件技术有限公司 | 一种基于量子密钥的透明加、解密方法、***及装置 |
CN111639349A (zh) * | 2020-05-14 | 2020-09-08 | 瀚高基础软件股份有限公司 | 一种数据加密处理方法、装置和存储介质 |
CN111639349B (zh) * | 2020-05-14 | 2022-09-06 | 瀚高基础软件股份有限公司 | 一种数据加密处理方法、装置和存储介质 |
CN112016120A (zh) * | 2020-08-26 | 2020-12-01 | 支付宝(杭州)信息技术有限公司 | 基于用户隐私保护的事件预测方法和装置 |
CN112016120B (zh) * | 2020-08-26 | 2024-03-26 | 支付宝(杭州)信息技术有限公司 | 基于用户隐私保护的事件预测方法和装置 |
CN112380557A (zh) * | 2020-12-01 | 2021-02-19 | 江西师范大学 | 一种关系型数据库加密方法及该加密数据库查询方法 |
CN112380557B (zh) * | 2020-12-01 | 2021-10-12 | 江西师范大学 | 一种关系型数据库加密方法及该加密数据库查询方法 |
CN112685779A (zh) * | 2020-12-31 | 2021-04-20 | 天津南大通用数据技术股份有限公司 | 基于数据库执行select语句主要关键字的静态可信判定方法 |
CN112613302A (zh) * | 2020-12-31 | 2021-04-06 | 天津南大通用数据技术股份有限公司 | 基于数据库执行select语句的子句的动态可信判定方法 |
CN112613302B (zh) * | 2020-12-31 | 2023-08-18 | 天津南大通用数据技术股份有限公司 | 基于数据库执行select语句的子句的动态可信判定方法 |
CN113111356A (zh) * | 2021-03-09 | 2021-07-13 | 深圳市教育信息技术中心(深圳市教育装备中心) | 数据加密方法、装置、设备和介质 |
CN113111082A (zh) * | 2021-03-09 | 2021-07-13 | 深圳市教育信息技术中心(深圳市教育装备中心) | 结构化查询语句重写方法、装置、设备和介质 |
CN113111357A (zh) * | 2021-03-09 | 2021-07-13 | 深圳市教育信息技术中心(深圳市教育装备中心) | 字段加密方法、装置、设备和介质 |
CN113111082B (zh) * | 2021-03-09 | 2022-01-14 | 深圳市教育信息技术中心(深圳市教育装备中心) | 结构化查询语句重写方法、装置、设备和介质 |
CN113204776A (zh) * | 2021-04-30 | 2021-08-03 | 新华三大数据技术有限公司 | 实现列加密的方法、装置、设备及存储介质 |
CN113204776B (zh) * | 2021-04-30 | 2022-08-30 | 新华三大数据技术有限公司 | 实现列加密的方法、装置、设备及存储介质 |
CN114327261A (zh) * | 2021-12-06 | 2022-04-12 | 神州融安数字科技(北京)有限公司 | 数据文件的存储方法及数据安全代理 |
CN114513351A (zh) * | 2022-02-08 | 2022-05-17 | 中国人民解放军海军军医大学 | 一种偏远地区信息加密传输方法、***及可存储介质 |
CN116756760A (zh) * | 2023-08-21 | 2023-09-15 | 合肥安永信息科技有限公司 | 一种可搜索的数据库加密***及其方法 |
CN116756760B (zh) * | 2023-08-21 | 2023-12-12 | 合肥安永信息科技有限公司 | 一种可搜索的数据库加密***及其方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109815719A (zh) | 一种可搜索的数据库安全加密*** | |
CN103392178B (zh) | 数据库加密***、方法和程序 | |
US8375224B2 (en) | Data masking with an encrypted seed | |
US11366918B1 (en) | Methods and apparatus for encrypted indexing and searching encrypted data | |
US7797342B2 (en) | Database system providing encrypted column support for applications | |
JP6048414B2 (ja) | データベース装置と方法及びプログラム | |
Popa et al. | CryptDB: A practical encrypted relational DBMS | |
EP2241986B1 (en) | Privacy and confidentiality preserving schema mapping repository for mapping reuse | |
CN101587479A (zh) | 面向数据库管理***内核的数据加解密***及其方法 | |
US7930560B2 (en) | Personal information management system, personal information management program, and personal information protecting method | |
JPWO2012043012A1 (ja) | 暗号化データベースシステム、クライアント端末、暗号化データベースサーバ、自然結合方法およびプログラム | |
CN112583809B (zh) | 非浸入式多种加密算法的数据加密解密的方法 | |
CN108170753A (zh) | 一种共有云中Key-Value数据库加密与安全查询的方法 | |
Ciucanu et al. | : A Secure Framework for Graph Outsourcing and SPARQL Evaluation | |
Motro et al. | Blind custodians: A database service architecture that supports privacy without encryption | |
CN115455463A (zh) | 一种基于同态加密的隐匿sql查询方法 | |
Almakdi et al. | A Secure Model to Execute Queries Over Encrypted Databases in the Cloud | |
CN111639349A (zh) | 一种数据加密处理方法、装置和存储介质 | |
Rahman et al. | A novel privacy preserving search technique for stego data in untrusted cloud | |
Carvalho et al. | On the Trade-Offs of Combining Multiple Secure Processing Primitives for Data Analytics | |
Jacobsen et al. | A literature review of Data as a Service; Defining Schools of Thought | |
CN117763614A (zh) | 一种sql语句的拦截与改写方法 | |
Cruz et al. | On the Trade-Offs of Combining Multiple Secure Processing Primitives for Data Analytics | |
CN113722359A (zh) | 一种面向密态oltp任务的sql查询重写方法 | |
CN116956319A (zh) | 非关系型数据库数据安全防护方法及*** |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20190528 |
|
WD01 | Invention patent application deemed withdrawn after publication |