全密态技术的原理很简单。比如在使用的时候输入一个SQL语句,加密驱动会找到哪个字段需要加密,然后用一个密钥把它自动加密,这样加密完后整个流程都是密文的,整个数据库跑的数据、以及跑完之后的结果都是密文数据,不论什么时候把数据拿走,拿走的也都是密文的,因为在整个数据库里面没有任何解密的过程。我们对查询回来的密文结果在客户端再进行解密,将明文数据返回给业务进行处理,从而能够做到无感知的使用和业务迁移。
我们当前支持密态等值等查询,很快还会支持密态范围查询和模糊查询,都是基于密码学的算法。对于大规模数据,我们还可以基于密文数据进行索引和快速查询,并且支持JDBC、GO、Libpq等多种客户端驱动。
客户端密钥管理,保障服务可信
对加密来说,密钥是最关键的,所以全密态最主要的是密钥的分配。我们的全密态密钥是在客户端管理,一般属于业务管理人员负责,业务管理人员拿到密钥后把数据加密再交给数据库。逻辑很简单,我们在驱动层做了一个加密驱动,里面做了自动加解密和自动解析,能够自动识别哪个字段需要哪个密钥,再自动找到密钥、自动加密。这样只要业务不把密钥权限分配给DBA和运维,他们就不能解密这部分数据,但是能够正常运维,如果有极特殊的情况需要看到明文敏感数据才能做管理运维,也可以把密钥赋权给相关人员。
全流程加密,数据库内部全流程零解密
第二层是加密,数据库里的整个流程是没有解密过程的,这是GaussDB实现的最主要的能力,包括传输、查询、存储等操作都有对应的方式,不需要解密再处理。但是,如果不单是在客户端需要数据导出,假如后端也需要直接导出数据,我们也可以在某些特殊场景下把密钥授权给下游做临时解密。这是加密方面的情况介绍。
客户端轻量化解析业务层加密透明无感
另外,如何做到透明无感知?解析器是数据库里的关键组件,我们在客户端里面做了一个轻量化解析器,对用户输入进去的SQL语句做自动的语法解析,找到哪个字段需要加密,而对于返回过来的语法也进行对应的解析。做完这个解析,客户端可以获取到需要加密的数据以及该数据在原始语句中的位置,然后重新构造一个新的SQL语句,数据库实际收到的就是加密之后的数据。
经过客户端的自动语法解析,自动密钥管理和自动加密后,就可以继承标准的SQL语法,实现业务的透明无感知。对于业务迁移,也只需要修改一下建表语句,配置数据加密的表和加密字段即可,在实际增删改查过程中,所有操作语句都是与明文一样的。
全密态等值和传统加密有什么区别?我做了一个总结。
函数加密:是用户把密钥给到数据库,数据库在执行函数时做一个加密动作,是在数据库里加密。
透明加密:数据库自己找一个密钥,在磁盘落盘时做加密,是磁盘做加密。
全密态:全密态等值是客户找到密钥之后先把数据加密,再交给数据库,全生命周期都是密文的。




