在联盟链生产环境中,节点私钥的安全性是整个信任体系的根基。一旦共识密钥泄露,攻击者可以伪造节点签名、篡改共识结果,甚至接管整个链的控制权。
FISCO BCOS v3.13 将原有的落盘加密和 HSM 加密中“密钥加密”和“数据加密”拆分为两个独立维度,密钥加密负责保护共识密钥本身,数据加密负责保护节点落盘数据,两者可单独开启。共识密钥解密支持CLOUDKMS、HSM、BCOSKMS三种方式,本文将结合完整配置案例逐一详解。
一、为什么要分离“密钥加密”和“数据加密”
在 v3.13 之前,落盘加密同时承担两个职责:加密节点私钥和加密硬盘上的数据(合约数据、RocksDB 内容)。但这两种加密的威胁模型和生命周期完全不同。
落盘加密解决的威胁是“硬盘被物理带离内网”。加密数据的解密密钥由机构内网的 Key Manager 服务管理,节点启动时向 Key Manager 请求 dataKey,dataKey 只在内存中存在,节点关闭后自动丢弃。
共识密钥加密解决的威胁是“节点私钥以明文形式存在于磁盘上”。即使硬盘没有被盗,能访问服务器文件系统的人也可以直接读取node.pem。
分离之后,两者的配置可以独立控制。你可以在内网环境只开启 CLOUDKMS 保护共识密钥而不加密全部落盘数据,也可以在高安全场景下同时开启两种特性。
二、CLOUDKMS:云端密钥托管方案
CLOUDKMS 是利用公有云厂商的密钥管理服务(如 AWS KMS、腾讯云 KMS)来加密节点共识密钥的方案。私钥以密文形式存储在本地,解密过程在云 KMS 的 HSM 安全环境中完成。
原理
节点启动时,从config.ini读取加密后的node.pem,通过云 KMS 的 API 发起解密请求。KMS 在云端 HSM 中完成解密,将明文私钥返回给节点进程。原始密钥材料永不离开 KMS 的安全环境。
实现步骤
第一步:在云 KMS 中创建密钥
以 AWS KMS 为例,在控制台创建对称密钥,密钥用途选择“加密和解密”,创建别名并记录 region 和 key id。如果是腾讯云 KMS,需要创建非对称签名密钥,密钥用途选择ASYMMETRIC_SIGN_VERIFY_SM2(国密)或ASYMMETRIC_SIGN_VERIFY_ECC(国际)。
第二步:生成访问凭证
在 IAM 页面创建访问密钥,下载 CSV 文件妥善保存。该文件包含 access key 和 secret key,用于后续的加密工具和节点配置。
第三步:编译 kmstools 并加密节点密钥
CLOUDKMS 的加密工具需要自行编译,编译时开启 tools 选项。使用命令格式如下:
./kms_tool <kms_type> <access_key> <secret_key> <region> <key_id> <inputFilePath> <outputFilePath>其中kms_type填写CLOUDKMS,inputFilePath是原始node.pem,outputFilePath是加密后的输出文件。
第四步:配置节点
在节点config.ini的[security]段中配置:
[security] private_key_path=conf/node.pem kms_type=CLOUDKMS kms_connection_str=region:id:token cloud_kms_type=AWSkms_connection_str的格式为region:id:token,其中 region 是 KMS 密钥所在的区域,id 是密钥 ID,token 是访问凭证。
关键注意点:AWS KMS 只加密node.pem,不会对节点落盘数据进行加密。如果需要同时保护落盘数据,需要额外配置落盘加密。
三、HSM:硬件密码机方案
HSM(硬件安全模块)是一种通过扩展卡或外部设备形式连接到服务器的专用硬件设备,用于安全地生成、存储和管理数字密钥,并提供密码学运算能力。
原理
FISCO BCOS 的共识和交易模块在签名时调用bcos-crypto,bcos-crypto再调用hsm-crypto模块,最终通过密码机的 API 接口完成签名。涉及到的参数包括密码机内置密钥索引keyIndex,最终调用密码机签名接口SDF_InternalSign_ECC。验签时同理调用SDF_ExternalVerify_ECC。
所有密钥对存储在密码机中,内存中无密钥对存留。节点进程只持有密钥索引,实际的签名运算在密码机硬件内部完成。
实现步骤
第一步:安装密码机
需要安装符合《GMT0018-2012 密码设备应用接口规范》的密码卡或密码机。安装密码机厂商提供的动态库文件(如libgmt0018.so),放置在系统默认库搜索路径下,并确保用户具有读和执行权限。
第二步:初始化并生成密钥对
根据密码机厂商的指引初始化设备,并在密码机内部生成两对 SM2 密钥:一对是签名密钥(假设索引为 31),另一对是加密密钥(假设索引为 32)。
第三步:准备动态二进制
加载密码卡动态库需要 FISCO BCOS 的动态二进制版本。编译时不指定-DBUILD_STATIC=ON即可生成动态链接版本。
第四步:配置节点
在config.ini中添加以下配置:
[security] enable_hsm=true hsm_lib_path=/usr/local/lib/libgmt0018.so key_index=31 password=your_hsm_passwordenable_hsm开启 HSM 签名验签,hsm_lib_path指向密码机动态库路径,key_index指定密码机内部的签名密钥索引,password是密钥访问密码(无密码则留空)。
四、BCOSKMS:基于 Key Manager 的密钥加密方案
BCOSKMS 是 FISCO BCOS 内置的密钥管理方案,基于 Key Manager 服务实现。它与落盘加密共享同一套 Key Manager 基础设施,但专注于共识密钥的保护。
原理
BCOSKMS 的核心是superKey 和 dataKey 的两层密钥体系。Key Manager 持有全局的 superKey,负责对所有节点的授权请求进行响应。节点自身持有 dataKey,用 dataKey 对自身管理的数据进行加解密。
节点本身不会在本地磁盘中存储 dataKey,而是存储 dataKey 被 superKey 加密后的cipherDataKey。节点启动时,拿着cipherDataKey向 Key Manager 请求,Key Manager 用 superKey 解密后返回 dataKey。dataKey 只在节点内存中存在,节点关闭后自动丢弃。
实现步骤
第一步:部署 Key Manager 服务
每个机构独立部署一个 Key Manager,部署在机构内网,外网无法访问。Key Manager 必须实时在线,响应节点的启动请求。
第二步:生成加密密钥
执行 Key Manager 提供的脚本生成cipherDataKey:
cd key-manager/scripts bash gen_data_secure_key.sh生成的cipherDataKey会写入节点的配置文件。
第三步:配置节点
在config.ini中配置落盘加密和密钥加密参数:
[storage_security] enable=true key_manager_ip=127.0.0.1 key_manager_port=31443 cipher_data_key=ed157f4588b86d61a2e1745efe71e6eaenable=true开启落盘加密,key_manager_ip和key_manager_port指向 Key Manager 服务,cipher_data_key是加密后的数据密钥。
关键注意点:节点在生成后、启动前,必须决定好是否采用落盘加密。一旦节点配置成功并正常启动,将无法切换状态。
五、三种方案对比与选型建议
| 维度 | CLOUDKMS | HSM | BCOSKMS |
|---|---|---|---|
| 密钥存储位置 | 云端 KMS 的 HSM 中 | 本地密码机硬件中 | Key Manager 的 superKey 加密保护 |
| 依赖条件 | 公有云 KMS 服务 + 网络连通 | 密码机硬件 + 动态库 | Key Manager 服务(内网) |
| 部署复杂度 | 低(云服务即开即用) | 高(需要硬件采购和安装) | 中(需要部署 Key Manager) |
| 密钥安全等级 | 高(云 HSM) | 极高(专用硬件) | 中(依赖 Key Manager 的安全性) |
| 是否支持国密 | 腾讯云 KMS 支持 SM2 | 完整支持 SM2/SM3/SM4 | 取决于底层加密库 |
| 适用场景 | 云上部署、多机构协作 | 金融机构、高安全要求 | 内网环境、已有落盘加密 |
选型建议:
云上部署、追求便捷:优先选择 CLOUDKMS。腾讯云 KMS 支持 SM2 国密密钥,与 FISCO BCOS 的 Go/Java SDK 集成成熟。
金融机构、最高安全等级:选择 HSM。密钥永不出硬件,签名在密码机内部完成,满足金融级安全合规要求。
内网环境、已有落盘加密:选择 BCOSKMS。可以复用已有的 Key Manager 服务,无需额外引入云服务或硬件。
混合场景:CLOUDKMS 可与落盘加密融合使用,同时开启两种特性,实现“共识密钥云端保护 + 落盘数据本地加密”的双重防护。
总结
FISCO BCOS v3.13 的密钥加密与数据加密分离,让用户可以根据实际威胁模型灵活组合安全方案。CLOUDKMS 降低了云上部署的密钥管理门槛,HSM 提供了最高等级的硬件保护,BCOSKMS 则在已有落盘加密基础设施上提供了轻量级的密钥保护。三种方案没有绝对的优劣,关键在于匹配你的部署环境、安全合规要求和运维能力。