10. 数据落盘加密¶
标签:落盘加密
数据加密
数据安全
背景介绍¶
在联盟链的架构中,机构和机构之间搭建一条区块链,数据在联盟链的各个机构内是可见的。
在某些数据安全性要求较高的场景下,联盟内部的成员并不希望联盟之外的机构能够获取联盟链上的数据。此时,就需要对联盟链上的数据进行访问控制。
联盟链数据的访问控制,主要分为两个方面
链上通信数据的访问控制
节点存储数据的访问控制
对于链上通信数据的访问控制,FISCO BCOS是通过节点证书和SSL来完成。此处主要介绍的是节点存储数据的访问控制,即落盘加密。
主要思想¶
落盘加密是在机构内部进行的。在机构的内网环境中,每个机构独立地对节点的硬盘数据进行加密。当节点所在机器的硬盘被带离机构,并让节点在机构内网之外的网络启动,硬盘数据将无法解密,节点无法启动。进而无法盗取联盟链上的数据。
方案架构¶
落盘加密是在机构内部进行的,每个机构独立管理自己硬盘数据的安全。内网中,每个节点的硬盘数据是被加密的。所有加密数据的访问权限,通过Key Manager来管理。Key Manager是部署在机构内网内,专门管理节点硬盘数据访问秘钥的服务,外网无法访问。当内网的节点启动时,从Key Manager处获取加密数据的访问秘钥,来对自身的加密数据进行访问。
加密保护的对象包括:
节点本地存储的数据库:rocksdb
节点私钥:ssl.key & node.pem(非国密),sm_ssl.key & sm_enssl.key & node.pem(国密)
具体实现¶
具体的实现过程,是通过节点自身持有的秘钥(dataKey)和Key Manager管理的全局秘钥(superKey)来完成的。
节点
节点用自己的dataKey,对自身管理的数据(Encrypted Space)进行加解密。
节点本身不会在本地磁盘中存储dataKey,而是存储dataKey被加密后的cipherDataKey。
节点启动时,拿cipherDataKey向Key Manager请求,获取dataKey。
dataKey只在节点的内存中,当节点关闭后,dataKey自动丢弃。
Key Manager
持有全局的superKey,负责对所有节点启动时的授权请求进行响应,授权。
Key Manager必须实时在线,响应节点的启动请求。
当节点启动时,发来cipherDataKey,Key Manager用superKey对cipherDataKey进行解密,若解密成功,就将节点的dataK返回给节点。
Key Manager只能在内网访问,机构内的外网无法访问Key Manager.
方案流程¶
方案流程分为节点初始配置和节点安全运行。
节点初始配置¶
节点启动前,需要为节点配置dataKey
重要
节点在生成后,启动前,必须决定好是否采用落盘加密,一旦节点配置成功,并正常启动,将无法切换状态。
(1)管理员定义好节点的dataKey,并将dataKey发送给Key Manager,从Key Manager处获取cipherDataKey。
(2)将cipherDataKey配置到节点的配置文件中
(3)启动节点
节点安全运行¶
节点启动时,会通过Key Manager,获取本地数据访问的秘钥dataKey。
(1)节点启动,从配置文件中读取cipherDataKey,并发送给Key Manager。
(2)Key Manager收到cipherDataKey,用superKey解密cipherDataKey,若解密成功,则将解密后的dataKey返回给节点。
(3)节点拿到dataKey,用dataKey对本地的数据(Encrypted Space)进行交互。从Encrypted Space读取的数据,用dataKey解密获取真实数据。要写入Encrypted Space的数据,先用dataKey加密,再写入。
为什么可以保护数据?¶
当某节点的硬盘被意外的带到内网环境之外,数据是不会泄露的。
(1)当节点在内网之外启动时,无法连接Key Manager,虽然有cipherDataKey,也无法获取dataKey。
(2)不启动节点,直接对节点本地的数据进行操作,由于拿不到dataKey,无法解密Encrypted Space,拿不到敏感数据。
具体落盘加密的使用,可参考:
存储安全性¶
Air与Pro版本存储系统采用了后端数据库RocksDB,它是一个高性能的Key-Value数据库。设计了完善的持久化机制,同时保证性能和安全性,能够良好的支持范围查询。而针对Max版本采用了TiKV数据库。两者都有具备高可靠性,能应对节点断电、重启、网络波动等异常场景,在异常场景恢复后数据能正常读写。