长安链ChainMaker新特性——透明数据加密TDE

2022-04-27 08:11:58 浏览数 (1)

01透明数据加密(TDE)简介

透明数据加密(Transparent Data Encryption (简称TDE))是指可以在文件层对数据和文件进行实时加密和解密,落盘的文件是加密后的内容,而对于上层应用系统和开发人员而言,加解密过程是无感知的,写入和读取的内容是明文内容,所以叫做透明数据加密。

TDE的目的是保证磁盘文件的机密性,远离直接从文件直接访问数据的攻击者。TDE主要应对以下的场景:

1. 硬盘被盗导致数据泄露

2. 黑客入侵系统进行文件复制导致数据泄露

3. IT人员绕过业务系统和审批流程,进行无记录的越权数据查看或修改

在没有启用TDE的情况下,任何人只要获得了数据库文件,即可直接浏览数据库中的所有内容,但如果在数据库上启用了TDE,整个数据被安全加密了;没有密匙的话,就不能访问到数据。

02TDE如何工作

TDE需要一个密钥来加密和解密数据,当前长安链支持硬件加密机这种物理隔离高安全的密钥托管和加解密方案,这个密钥也可以使用独立的文件来保存,或者通过配置项的形式传入。

以使用密码机进行透明数据加密的为例,长安链的存储模块在收到存储Key-Value键值对的请求时,先将Value内容以二进制形式发送到密码机,密码机使用内置的密钥对收到的数据进行对称加密,并将密文返回给长安链存储模块。长安链存储模块将Key和加密后的Value作为新的键值对,发送给底层的统一数据库服务接口DB Provider,由底层数据库服务接口调用具体的数据库引擎存储收到的键值对。

图1

在长安链进行数据查询时则执行类似的解密过程。在存储模块收到外部查询数据的请求后,将请求的查询条件(例如按照Key进行查询)发送给底层的DB Provider,获得数据库中对应的数据,这时数据的Key是明文,Value是加密的。接下来将密文Value发送给加密机,由加密机用自己内部的密钥进行数据解密,并将解密后的内容返回给长安链存储模块。长安链存储模块将解密的内容作为Value,结合之前的Key,形成新的键值对返回给外部调用者。

图2

02在长安链上配置TDE

长安链密码模块同时提供了软件实现和硬件集成,使用以下步骤即可完成TDE的配置:

3.1基于硬件密码机的TDE配置

长安链支持PKCS11标准的硬件密码机接入,以下为在TDE中启用硬件密码机集成的步骤。

3.1.1 在加密中生成对称密钥

基于硬件密码机的情况下,密钥都托管在密码机内部,外部程序无法获得密钥内容,只能通过标准接口进行密钥生成、加解密、签名、哈希等密码学操作。进入密码机自带的管理后台可以为TDE生成对应的密钥,对称加密算法可选择AES或者国密SM4。密钥生成后会有一个对应的KeyID作为该密钥在密码机中的唯一标识,在下面的配置中会用到这个唯一标识。

3.1.2 配置PKCS11

长安链基于PKCS11标准与密码机进行通讯,其对应的配置在chainmaker.yml配置文件的node配置节点下,配置示例如下:

node:

pkcs11:

enabled: true

library: /usr/local/lib64/pkcs11/libupkcs11.so

# path to the so file of pkcs11 interface

label: HSM

# label for the slot to be used

password: 11111111

# password to logon the HSM

session_cache_size: 10

# size of HSM session cache, default to 10

hash: "SHA256"

# hash algorithm used to compute SKI

具体配置因为对应的密码机不同而不同。

3.1.3 配置透明数据加密

在完成了node配置节点下的pkcs11配置后,接下来需要进行storage配置节点下关于TDE加密算法和密钥的配置,对于密码机,我们并不知道对应的密钥内容,只有密钥的ID,所以我们只需要配置成对应的KeyID即可,比如:

storage:

encryptor: sm4 # sm4/aes

encrypt_key: "MasterKey1" #密码机上对应KeyID

3.1.4 启用节点

在完成配置后,需要保证本节点的数据库是空的,如果之前已经同步过区块或者已经写入了创世区块,都需要删除。启动节点后,长安链将会把所有写入数据库的键值对数据中的Value部分发送给密码机进行加密,将加密后的内容进行存储。

3.2基于软件实现的TDE配置

3.2.1 创建对称密钥

长安链的透明数据加密默认支持AES和国密SM4两种对称加密算法。AES算法支持128位、192位、256位这3种密钥长度,SM4算法支持128位密钥长度。密钥长度必须与对应的算法匹配,如果长度不匹配则无法正常启动长安链。我们以国密SM4算法为例,密钥推荐使用随机密码生成器生成的密码,比如“0H#y@EGXPOAScAnB”这样的形式,将有效提高数据的安全性,防止被字典破解。除了字符串形式的密钥,长安链还支持任意二进制形式的密钥,只要长度满足要求(国密SM4:128位)即可。新生成的密钥请做好安全备份,防止密钥丢失后数据无法解读。

3.2.2 配置透明数据加密

在长安链节点的配置文件chainmaker.yml中,storage配置项下提供了对该节点TDE的配置选项,形如:

storage:

encryptor: sm4 # sm4/aes

encrypt_key: "1234567890123456" #16 bytes key

· encryptor是采用的对称加密算法,目前支持sm4和aes两个选项。

· encrypt_key是对称加密的密钥,支持字符串、十六进制和文件路径三种形式。

· 字符串,支持字母大小写、数字、符号、空格等,长度必须满足加密算法要求

· 十六进制,必须以0x开头,后面跟对应密钥的十六进制内容

· 文件路径,将密钥保存到一个文件中,然后将文件绝对路径配置到这里,并确保长安链进程用户具有读写该文件的权限。

以下配置示例:

storage:

encryptor: aes # sm4/aes

encrypt_key: "0x48656c6c6f20436861696e4d616b6572" #16 bytes key

storage:

encryptor: sm4 # sm4/aes

encrypt_key: "/usr/chainmarker/my.key" #16 bytes key

3.2.3 启用节点

完成TED的配置后,请确保当前节点没有任何数据,如果之前已经有数据,需要完全删除。节点启动后将会从创世区块开始基于TDE的密钥对每个区块、每个交易、每个世界状态的Value进行加密存储。

在encrypt_key使用文件路径配置密钥的情况下,长安链在启动时将读取文件内容作为密钥,同时将文件内容清空,防止硬盘数据被盗时密钥也同时被盗。所以如果下次要重新启动长安链进程,必须重新在对应的密钥文件中写入密钥才能正常启动。

04使用长安链TDE的注意项

4.1 TDE启用状态和密钥不可变更

由于TDE是对所有区块所有交易进行统一的加解密,所以TDE的启用或者不启用必须在没有写入任何数据的新节点上进行,一旦启用了TDE并进行了数据同步,就不能变更密钥,也不能由启用改为不启用。如果要变更密钥或者变更启用状态,那么就只能将之前已经同步的所有数据全部删除,重新同步,重新写入。后续版本中可根据实际需要优化TDE功能,提供密钥派生、替换等功能。

4.2 TDE只加密键值对(Key-Value)中的Value部分

因为长安链存储模块对外提供了按Key范围查询和前缀查询的特性,所以不能对Key进行加密,如果对Key也进行了加密,那么每次前缀查询将不得不扫描整个数据库所有Key进行解密后匹配,性能上是无法接受的。所以在硬盘数据被盗或者非法访问的情况下,用户虽然无法获得Value值,但是仍然可以获得Key的内容,所以在编写合约时,请不要将机密信息放入Key中。

4.3 TDE不支持SQL合约的数据加密

长安链TDE是对键值数据库场景下对Value部分的加解密,对于SQL合约的场景,由于业务数据是通过生成的SQL语句产生的,所以无法对SQL语句进行加密。如果想对SQL数据库进行落盘加密,建议使用支持TDE功能的数据库并启用对应数据库自身提供的TDE服务。

4.4 TDE对性能有一定的影响

由前面的TDE处理流程我们可以看到,在写入或者读取Key-Value数据时,多了一个对称加密解密的环节,所以必然会对整体性能有一定的影响,不过由于对称加解密的性能极高,所以在大多数场景下,TDE对性能的影响不是很大,在测试启用TDE的情况下存储模块带来大约2%的性能影响。

05总结

长安链2.1版的新特性透明数据加密(TDE)是一种数据库领域常见的数据保护防泄漏方案,该方案可以在用户无感知的情况下实现数据落盘加密,在保护了磁盘上数据的防止被非法查看的情况下,该特性对于用户和上层应用友好,无需做出任何修改。长安链TDE既支持AES对称加密算法也支持国密SM4对称加密算法,既支持硬件密码机的集成也支持软件加密方案,为企业用户带来了更多的数据安全新选择。

Tips

更多长安链开源项目QA,可登录开源社区、技术文档库查看。

下载源码

https://git.chainmaker.org.cn/chainmaker/chainmaker-go

查阅文档

https://docs.chainmaker.org.cn/

更多社区权益申请

https://wj.qq.com/s2/8620064/7abd/

0 人点赞