一种支持SQL查询的数据库字段加密方法及装置
文献发布时间:2023-06-19 18:34:06
技术领域
本发明涉及加密数据库SQL索引和字段加密技术领域,尤其是一种支持SQL查询的数据库字段加密方法及装置。
背景技术
互联网数字化转型带来大量数据泄漏隐患,即使采取复杂安全措施依然无法避免大规模数据泄漏事件。数据泄露事件频频发生,各行各领域都不能幸免。明文数据在数据库中的存储是不安全的,攻击者能通过社会工程和技术入侵等手段来进行数据窃取。数据库的安全日益重要,对数据库中的敏感字段进行加密是有效的安全手段。
数据库加密技术是一个趋势,但该技术瓶颈过多非常难以得到普及。造成这个原因的主要因素是没有一种加密方式可以高效的在加密数据上进行检索。因此,现在普及的数据库加密技术只能用对不常用的非动态数据进行加密,而对经常需要使用SQL语句查询(SELECT语句)的数据只能使用明文。
现有对SQL语句查询的办法主要是通过密码学方案,可是密码学方案很难得到普及因为有两大问题:1)对简单SQL语句密码学方案速度性能相比明文相差很多2)对复杂SQL语句密码学方案性能更差,而且对一些特别复杂的操作符(比如LIKE)即使能实现也完全不现实。
发明内容
本发明要解决的技术问题是:为了解决现有SQL语句查询通过密码学方案性能较差问题,本发明提供了一种支持SQL查询的数据库字段加密方法,包括创建标识索引表体系、设置标识索引密钥、复杂搜索处理架构、双类型表体系以及采用不同种类的数据库类型进行数据存储,本发明不追求统一密码学方案可以同时解决简单SQL语句查询和复杂SQL查询,本发明方案采用标识索引代替密文搜索学方案,由于标识索引SQL查询和明文数据查询性能基本无差别,因此对于简单SQL查询可以高性能完成用;针对复杂SQL语句查询(比如LIKE操作符),本方案采用分离处理方式,由于采取针对密文和明文检索的分离架构,产生标识索引数据的方式和密钥不需要和加密数据的方式和密钥有任何形式的绑定,因此该方案同时可以方便实现一文一密,即所有加密数据都可以使用独立的密钥进行加密。
本发明解决其技术问题所采用的技术方案是:
一种支持SQL查询的数据库字段加密方法,包括创建标识索引表体系、设置标识索引密钥、复杂搜索处理架构、双类型表体系以及采用不同种类的数据库类型进行数据存储。
具体的,所述创建标识索引表体系:每一个标识索引表都与一个虚拟存在的明文数据表一一对应,用户通过SQL搜索标识索引表得到需要查询数据的标识索引数据,再通过标识索引表返回的标识索引在加密数据表中得到对应的加密数据。
具体的,所述设置标识索引密钥:每一个标示索引都通过数据本身和一个受保护的密钥产生(“胡椒”),保证数据本身不会被恶意用户通过字典攻击等穷举攻击手段将明文数据从标识索引数据倒推出来。
具体的,所述复杂搜索处理架构:针对一些复杂无法使用标示索引进行查询的搜索语句采用逐步处理流程,首先从SQL分离出复杂搜索条件,只执行标示索引可以查询的语句部分产生初查结果,在获得初查结果后再通过对初查结果数据在安全运行环境中解密并根据复杂搜索条件进行第二次查询筛选出最终结果。
具体的,所述双类型表体系:创建两种类型表,标识索引表和加密数据表,用于加密在加密数据表上数据的密钥可以完全独立于创建标识索引数据的“胡椒”(创建标识索引时用到的密钥),对所有密文字段实行一文一密处理。
具体的,所述采用不同种类的数据库类型进行数据存储:所有标识索引表存储在传统SQL数据库中实现与虚拟的明文SQL数据库上的表实现一一对应;所有加密数据表则可以选择存储在读取性能更高效的键值(Key-Value)数据库。
一种数据库字段加密装置,包括SQL拦截装置、安全运行环境、安全运行服务、复杂条件搜索装置以及数据库。
进一步的,所述SQL拦截装置:接收用户SQL查询指令,通过安全运行服务转换用户SQL查询指令并在标识索引表和加密数据表中执行简单搜索并得到与返回结果相关的加密数据,最后通过调用安全运行服务协助完成对数据的解密和筛查。
进一步的,所述安全运行环境:封闭式运行环境保护密钥和解密数据不被泄漏,可采用软件方案,可信执行环境(TEE)方案、FPGA方案或加密机方案实现;
所述安全运行服务:存储并保护创建标识时所用的的密钥和加密数据时所用的密钥在使用时不会泄漏,所有创建标识索引的密钥和加密数据的密钥的使用都在安全运行服务中完成。
进一步的,所述复杂条件搜索装置:根据复杂搜索条件在解密数据上逐条筛选需返回数据,并将符合条件数据返回(第二候选解密数据组)给安全运行服务;
所述数据库:数据存储系统,存储两个类型的表,一类是标识索引表负责存储帮助SQL语句完成简单查询的标识索引,第二类是加密数据表负责存储所用加密数据。
本发明的有益效果是:
1)本发明针对对简单SQL语句查询创建标识索引方案,这个方案采用标识索引代替密文搜索学方案。将此前所有应该存储在SQL数据库上的明文数据字段一一对应的转换成标识数据索引数据字段。因为每个标识索引数据字段都与每个明文数据字段一一对应,因此只要将所有SQL数据库表里面的明文数据字段转换成标识索引字段,用户就可以使用SQL语句在只存储标识索引的表中完成简单(大多数)SQL查询(比如Join和“=”)。虽然查询到的结果也是标识索引(因为标识索引表中不含有明文数据),系统可以通过标识索引找到于所述标识索引字段对应的加密数据字段,再对每一数据字段进行解密操作并返回给用户。由于标识索引SQL查询和明文数据查询性能基本无差别,因此对于简单SQL查询可以高性能完成用。
2)所有加密数据存储与加密数据表中,每个数据的key(关键字)与每一个标示索引数据字段一一对应。存储加密数据表的数据库可以与存储标识索引表的数据库类型不同(比如可以是SQL数据库,也可以是Key-Value数据库)。
3)针对复杂SQL语句查询(比如LIKE操作符),本方案采用分离处理方式。当接受到用户SQL时,在本方案中系统会将所有复杂搜索条件从原本用户请求SQL中分离,并更改用户请求SQL SELECT子句-增加复杂搜索条件需要检索的字段。当执行完更改后的SQL并获得与所有返回数据字段的加密密文时,系统会在一个受保护的环境中对数据解密并在明文状态下根据复杂搜索条件需求对数据进行二次删查。
4)由于采取针对密文和明文检索的分离架构,产生标识索引数据的方式和密钥不需要和加密数据的方式和密钥有任何形式的绑定,因此该方案同时可以方便实现一文一密,即所有加密数据都可以使用独立的密钥进行加密。
附图说明
下面结合附图和实施例对本发明进一步说明。
图1是本发明的主要组件框架的示意图;
图2是本发明的输入数据流程的示意图;
图3是本发明的查询数据流程的示意图。
具体实施方式
现在结合附图对本发明作进一步详细的说明。这些附图均为简化的示意图,仅以示意方式说明本发明的基本结构,因此其仅显示与本发明有关的构成。
一种支持SQL查询的数据库字段加密方法,包括创建标识索引表体系、设置标识索引密钥、复杂搜索处理架构、双类型表体系以及采用不同种类的数据库类型进行数据存储。
创建标识索引表体系:每一个标识索引表都与一个虚拟存在的明文数据表一一对应,用户通过SQL搜索标识索引表得到需要查询数据的标识索引数据,再通过标识索引表返回的标识索引在加密数据表中得到对应的加密数据。
设置标识索引密钥:每一个标示索引都通过数据本身和一个受保护的密钥产生,保证数据本身不会被恶意用户通过字典攻击等穷举攻击手段将明文数据从标识索引数据倒推出来。
复杂搜索处理架构:针对一些复杂无法使用标示索引进行查询的搜索语句采用逐步处理流程,首先从SQL分离出复杂搜索条件,只执行标示索引可以查询的语句部分产生初查结果,在获得初查结果后再通过对初查结果数据在安全运行环境中解密并根据复杂搜索条件进行第二次查询筛选出最终结果。
双类型表体系:创建两种类型表,标识索引表和加密数据表,用于加密在加密数据表上数据的密钥可以完全独立于创建标识索引数据的“胡椒”(标识索引密钥),对所有密文字段实行一文一密处理。
采用不同种类的数据库类型进行数据存储:所有标识索引表存储在传统SQL数据库中实现与虚拟的明文SQL数据库上的表实现一一对应;所有加密数据表则可以选择存储在读取性能更高效的键值(Key-Value)数据库。
如图1所示,一种数据库字段加密装置,包括SQL拦截装置、安全运行环境、安全运行服务、复杂条件搜索装置以及数据库。
SQL拦截装置:接收用户SQL查询指令,通过安全运行服务转换用户SQL查询指令并在标识索引表和加密数据表中执行简单搜索并得到与返回结果相关的加密数据,最后通过调用安全运行服务协助完成对数据的解密和筛查。
安全运行环境:封闭式运行环境保护密钥和解密数据不被泄漏,可采用软件方案,可信执行环境(TEE)方案、FPGA方案或加密机方案实现;
安全运行服务:存储并保护创建标识时所用的的标识索引密钥和加密数据时所用的密钥在使用时不会泄漏,创建标识索引数据的标识索引密钥和加密数据的密钥的使用都在安全运行服务中完成。
复杂条件搜索装置:根据复杂搜索条件在解密数据上逐条筛选需返回数据,并将符合条件数据返回(第二候选解密数据组)给安全运行服务;
数据库:数据存储系统,存储两个类型的表,一类是标识索引表负责存储帮助SQL语句完成简单查询的标识索引,第二类是加密数据表负责存储所用加密数据。
SQL数据库表类型:
明文数据表:虚拟的正常SQL数据库的明文数据存储,该类型数据表在这个专利方案中并不真正物理存在,它只对用户虚拟存在。
标识索引表:表上每行每列数据都以标识形态存储,每个标识索引数据字断和原始数据字断一一对应。每一个明文数据表都对应一个标识索引表。
标识索引数据:每个数据字段都和每个标识索引数据一一对应(唯一性),但任何人都无法有效的从标识索引获取原始数据(不可逆性)。一种创建标识索引的方法是使用哈希和秘密“胡椒”,比如采用每一个(字段数据+索引密钥)的哈希值做为每个字断数据的标识索引,索引密钥是一种密钥,密码学也称为“胡椒”。添加“胡椒”创建的哈希值可以保护原始数据不能通过字典攻击等穷举攻击手段获得原始数据。优选的,只要保证唯一性和不可逆性,使用者可以采用其它方案生成标识索引数据
加密数据表:存储所有加密数据,每个加密数据表中的每个加密数据字断对应一个标识索引数据。
加密数据:每个加密数据即可以对应一条明文记录(一条记录一密模式),也可以对应一个明文字段(一文一密模式),加密使用的密钥可以是统一的,也可以是对应每条记录,也可以是一文一密,这里不做限制。
如图2所示,输入数据流程:
当SQL拦截装置输入一行新数据或者更新一行新数据时:
原始SQL INSRT请求(例):
INSERT INTO表名(列1,列2,…,列n)
VALUES字段1,字段2,…,字段n
1.SQL拦截装置调用安全运行服务将所述行数据的每一个数据字段转换成与它们一一对应的标识索引数据,并将与所有字段对应的标识索引数据返回。
标识索引(例):
标识(字段1),标识(字段2),…,标识(字段n)
2.SQL拦截装置将所述每一个明文数据字段对应的标识索引数据通过标识索引SQL INSERT语句存储到于所述数据字段对应的标识索引表中
标识索引SQL-INSERT(例):
INSERT INTO标识索引表表名(列1,列2,…,列n)
VALUES标识(字段1),标识(字段2),…,标识(字段n)
3.SQL拦截装置调用安全运行服务对每一个数据字段加密后产生与该数据字段对应的加密数据,然后生成加密数据SQL-INSERT将所述加密数据存储到对应加密数据表中。优选的,安全运行服务可以选择对每一个字段都用不同的加密密钥进行加密
加密数据SQL-INSERT(例):
INSERT INTO加密数据表表名标识(字段1),标识(字段2),…,标识(字段n)
VALUES密文(字段1),密文(字段2),…,密文(字段n)
标识索引表(例):一一对应不存在的明文数据表
加密数据表(例):对应标识索引表
可选的,每行标识索引表数据可以对应一个或者多个加密数据表。
可选的,多个标识索引表可以对应一个或者多个加密数据表。
可选的,加密数据表可以是采用键值数据库(key-value数据库)进行存储。
如图3所示,查询数据流程:
原始SQL SELECT请求:
1.如果SELECT语句中含有需先将数据解密才能查找的复杂搜索条件(比如LIKE操作符),SQL拦截装置将这些复杂搜索条件记录在内存中的复杂条件搜索记录组,并将这些复杂操作符从WHERE子句中删除,最后如果复杂条件查询所需字段不在SELECT语句中则将复杂条件查询所需字段加到
SELECT语句中
SELECT A.name,C.age,C.salary,C.job_title
FROM Address A,Customer C
WHERE A.id=C.id AND A.zipcode=100005
删除并记录在内存中的复杂搜索条件组:
AND C.job_title LIKE‘%Engineer%’
2.SQL拦截装置调用安全运行服务提供的API将SQL SELECT语句中的明文转换成对应的标识索引数值
(例):
SELECT A.name,C.age,C.salary,C.job_title
FROM Address A,Customer C
WHERE A.id=C.id AND A.zipcode=标识(100005)
3.SQL拦截装置在存储标识索引表的数据库上执行新的SQL SELECT并从标识索引表中执行后得到索引数据字段组
SELECT A.name,C.age,C.salary,C.job_title
FROM Address A,Customer C
WHERE A.id=C.id AND A.zipcode=标识(100005)
索引数据字段组(例):
记录1=(A.name1,C.age1,C.salary1,C.job_title)
记录2=(A.name2,C.age2,C.salary2,C.job_title)
记录3=(A.name3,C.age3,C.salary3,C.job_title)
4.SQL拦截装置用索引数据字段组中的每一个字段数据作为关键字(key)在加密数据表中获得与每一个数据字段对应的加密数据记录(存储密文数据的数据库可以是SQL数据库也可以是键值数据库),符合条件的所有数据记录称作第一加密数据组
第一加密数据组(例):
A.name1=密文(Ali),
A.name2=密文(Bob),
A.name3=密文(Eve),
C.age1=密文(24),
C.age2=密文(32),
C.age3=密文(33),
C.salary1=密文(200k),
C.salary2=密文(120k),
C.salary3=密文(180k),
C.job_title1=密文(Engineer),
C.job_title2=密文(Engineer),
C.job_title3=密文(Exe_Sales),
5.SQL拦截装置通过安全运行服务将每条加密数据字段逐一解密后重新排列形成第一候选解密数据组,并将内存中的复杂搜索条件记录和用户请求SQL SELECT中需要返回字段传给安全运行服务
第一候选解密数据组(例):
{A.name=Ali,C.age=24,C.salary=200k,C.job_title=Engineer},
{A.name=Bob,C.age=32,C.salary=120k,C.job_title=Engineer},
{A.name=Eve,C.age=33,C.salary=180k,C.job_title=Exe_Sales},
6.安全运行服务使用复杂条件搜索条件装置通过复杂条件搜索记录组里面记录的每个条件对第一候选解密数据组进行明文筛选后产生的第二候选解密数据组,并将其返回给安全运行服务。
第二候选解密数据组(例):
{A.name=Ali,C.age=24,C.salary=200k,C.job_title=Engineer},
{A.name=Bob,C.age=32,C.salary=120k,C.job_title=Engineer},
7.安全运行服务根据需要返回字段组从第二候选解密数据组的每一条记录中根据用户SQL SELECT请求筛选出需要返回的数据字段列形成第一返回数据组并返回给SQL拦截装置
第一返回数据组(例):
{A.name=Ali,C.age=24,C.salary=200k},
{A.name=Bob,C.age=32,C.salary=120k},
8.SQL拦截装置将第一返回数据组返回给请求发起方。
INDEX:
复杂条件搜索记录组:记录WHERE语句中的复杂搜索条件(如LIKE),也是需要解密数据才能进行筛选的搜索条件。
索引数据字段组:标识索引表返回的数据,每个ID对应一条加密数据。
第一候选解密数据组:加密数据表返回的数据进行解密后的数据,其中包含用来进行复杂条件筛选的数据。
第二候选解密数据组:在第一候选解密数据组上通过复杂条件搜索记录组条件筛选后的数据。
第一返回数据组:第二候选解密数据组根据用户SQL SELECT语句返回字段筛选后的数据。
以上述依据本发明的理想实施例为启示,通过上述的说明内容,相关工作人员完全可以在不偏离本项发明技术思想的范围内,进行多样的变更以及修改。本项发明的技术性范围并不局限于说明书上的内容,必须要根据权利要求范围来确定其技术性范围。
- 一种数据库的数据加密/解密方法、装置和设备
- 一种建筑结构试验数据时间字段加密存储与检索的方法
- 一种支持可组合SQL查询的加密数据库方法
- 基于GCM加密模式的数据库加密字段模糊检索方法