华为云区块链服务安全特性介绍
本文介绍华为云区块链服务 BCS(BlockChainService)在安全隐私保护的设计与实现。华为云区块链服务的构建基于开源的区块链框架 hyperledger fabric,除了支持原生开源框架内部的 PKI 身份证书认证、交易签名校验、数据传输安全 TLS 等措施外,华为云区块链服务在华为云安全的基础上还额外增加了新的安全特性,为区块链服务提供高安全环境。
本文主要描述:
如何基于虚拟私有云网络 VPC 建立租户区块链节点的隔离机制;
从安全合规性角度讨论国密算法 SM2/SM3/SM4 的支持,为用户提供多样性的哈希和签名策略;
为保护交易参与方的隐私性,提供范围可证明的加法同态加密机制。
本文通过一个区块链应用开发作为示例,详细描述如何使用 BCS 的安全隐私保护的特性。
区块链服务的租户数据隔离机制
华为云对云端数据的隔离是通过虚拟私有云(VPC –Virtual Private Cloud)实施,它将不同租户间的网络深度隔离,保证了不同租户间的数据不会被越权获取。
通过 VPC,租户可以完全掌控自己的虚拟网络,实现不同租户间在二、三层网络的完全隔离:
一方面,结合VPN或云专线,将VPC与租户内网的传统数据中心互联,实现租户应用和数据从租户内网向云上的平滑迁移;
另一方面,利用VPC的安全组功能,按需配置安全与访问规则,满足租户更细粒度的网络隔离。
在华为云区块链服务中区块链联盟成员独立为单独的一个租户,每个租户单独运行在一个 VPC 中,利用华为云 VPC 数据隔离机制来保障每个联盟成员的数据隔离和权限隔离,从而满足区块链系统的多中心化、多方参与、多方共识和不可篡改等独立、安全原则。
例如在如下的三个租户建立的联盟链网络中, 每个租户在自身的 VPC 内构件区块链的组织和节点,用于存放账本数据。只有租户的管理者才会对自己本 VPC 内的节点和数据具有管理权限。每个租户可以设置 EIP(external IP)和端口,将锚点的访问地址发布以便其他租户集群的锚点可以与其建立连接。同样,我们将共识组织内的节点构建于一个私有集群,并为每个共识节点发布 EIP 和端口,使得各租户组织的 leader 节点可以与共识节点建立连接。
国密算法的设计和使用
华为云区块链服务是基于 hyperledger fabric 开源框架构建的,采用如下图所示的为每个组织生成的 msp 证书完成身份的认证、 tls 证书完成通信安全。
为满足金融行业特定需求,BCS 开发了基于国密算法的证书签名机制,使得在应用 app 和节点 peer 之间、peer 和 peer 之间、以及 peer 和共识节点 orderer 之间采用基于国密算法签名的证书认证机制。国密算法是国家密码局制定标准的一系列算法,随着金融安全上升到国家安全高度,国密算法的应用也越来越广泛,2017 年 11 月 SM2/9 正式进入 ISO/IEC 标准。华为云区块链支持国密 SM2/3/4,提供多种加密算法给用户选择,同时满足合规要求。SM2 是基于 ECC 的国密非对称加密机制,SM3 是国密消息摘要机制,SM4 是国密对称加密机制。
在区块链服务订购页面,如下图所示安全机制选项选择国密算法,点击确认后就可以创建一个使用国密算法签名成员身份证书的区块链网络。
在节点 peer 和共识节点 orderer 都配置国密算法签名的身份证书验证机制后,上层应用 app 同样也需要使用国密证书与 peer 点进行通信。上层 app 使用 fabric sdk 向区块链节点 peer 发送交易请求,这里我们需要下载具有国密算法支持的 sdk 包, 修改 sdk 配置文件启动国密签名算法、配置 sdk 使用国密签名证书。
下载国密算法支持的 SDK 包
华为云 BCS 提供了支持国密算法的 go 语言的 1.8.5 版本
(https://bcs.obs.myhwclouds.com/ sdk1.8.5.tar.gz) 。
和 1.9.2 版本
(https://bcs.obs.myhwclouds.com/sdk1.9.2.tar.gz)的 SDK。
国密算法支持的 SDK 涵盖了开源 SDK 的所有功能,保证了对上层应用的兼容性。下载 SDK 包解压缩后可以得到 3 个目录,分别为 bin、src 和 pkg。
bin 目录中存放证书私钥的加密工具 encrypt_tool;
src 目录存放用于引用国密静态库的源码文件;
pkg 目录存放静态库代码。
国密 SDK 具有依赖库,依赖的库文件位于 SDK 库的 src 目录中,其路径为 src/github.com/hyperledger/fabric-sdk-go/sm/lib/。
将里面的两个动态库文件 libcrypto.so 和 libcrypto.so.1.1 拷贝至/usr/local/include/openssl/目录下(如果没有该目录,请自行创建该目录)。
然后设置环境变量 export LD_LIBRARY_PATH=/usr/local/include/openssl: $LD_LIBARARY_PATH。
如果用户环境中缺少 ltdl 库,则需要安装 libtool 工具,具体安装方法可以参考 linux 操作系统包管理工具,如 ubuntu 系统可以使用 apt-get install libtool 来安装,或者下载源码进行编译安装,下载地址为https://www.gnu.org/software/libtool/。
修改 SDK 配置文件启动国密签名算法
参考“基于华为云区块链服务快速部署和搭建链上应用” 一文中开发业务层链码应用中配置 fabric sdk 步骤,下载 SDK yaml 配置文件,并注意检查该配置文件中的签名算法是下图中的值。
配置 sdk 使用国密签名证书
将 SDK 的配置修改为启动国密签名证书后,开发者需要登陆 BCS 管理页面下载共识组织 orderer 的证书和本组织的用户证书,并将证书放入 sdk yaml 中指定的证书存放路径。
开发者可使用 openssl 命令 openssl x509 –in ca.example.com-cert.crt –text -noout 查看所下载的证书内容是否采用国密签名机制如下图所示。
范围可验证的同态加密的设计和使用
区块链本身所采用的哈希、签名机制可以在开放的网络环境中保障账本数据的防篡改、可追溯。区块链设计的本身使得账本数据对每个参与方是可达的,即用户的账本对各个参与方是透明的,任何组织都可以访问到相同的数据。
如果将用户的隐私数据放到链上将会放大用户隐私泄露的风险,例如当前在比特币等公有链系统中,所有的交易信息都是公开的(包括交易金额)。然而,在企业级应用系统如金融业的交易中,金融交易信息往往是敏感数据,非业务相关方不能查看,且同时要满足监管机构的监管要求。目前,大部分的区块链并没有满足用户的隐私性要求,针对该问题华为云区块链服务提供了范围可验证的同态加密解决方案,保障了用户交易过程中不泄露隐私信息。
如上图中 A 向 B 转账 10 元,需要区块链节点记账,但是用户不想让区块链节点知道交易金额以及最新余额。同态加密技术可以实现无密钥方对密文的计算,密文计算无须经过密钥方,既可以减少通信代价,又可以转移计算任务,平衡各方的计算代价。
华为云 BCS 服务首先提供同态加密库,对用户的交易数据用其公钥进行加密保护,交易的时候都是密文运算,最终账本中加密保存,即使节点被攻破,获取到账本记录也无法解密;其次华为云 BCS 服务提供范围证明校验,背书节点能够对密文进行背书,无需解密就能校验交易的正确性,如校验转账金额是否为负数,从而识别出恶意交易风险,保证了智能合约的正确执行。
假设 A 向 B 转账,我们通过如下的代码示例来说明如何使用 BCS 服务的同态加密库。开发者首先要到 BCS 的官方网站上下载同态加密库 homomorphic lib, 用于上层应用的开发。对于每个交易方,应用层需要为每个交易主体生成公私钥对,将公钥的哈希值作为该用户的交易地址,利用链代码 id chaincode 存储并查询用户的公钥,即账本 KV 的存储方式为 key=hash(公钥),value=公钥。
基于如上公钥地址的设置,当 A 向 B 转账时,在上层应用 app 端主要包含四个步骤,即:
1、根据转账接收方 B 的地址调用 id chaincode 查询 B 的公钥值;
2、从账本数据中获取发起方 A 的当前加密余额;
3、构建 A 向 B 的转账信息;
4、调用转账链代码 tx chaincode 触发交易,代码示例如下。
其中 pswapi_sdk.PrepareTxInfo 是同态加密库 homomorphic lib 提供的方法,六个参数分别为发起方的当前金额密文 cipherBalanceAKeyA, 转账金额 transNum, A 的公钥 PubKeyA, B 的公钥 PubKeyB, A 的私钥 PriKeyA 和 A 的私钥保护口令 propwd。经过该方法构造的转账信息 txInfoSer 中含有分别用 A 和 B 的公钥加密的转账金额,用 A 的公钥加密的 A 转账后的余额等。该 txInfoSer 数据被序列化后在 TLS 通道中传递给链代码方,触发链代码的转账运算。
对应的在链代码这一端,需要执行的逻辑包括:
1、获取 A/B 账户当前的余额;
2、基于范围/等式证明验证交易的合规性,并基于同态加密库计算交易后的账户余额;
3、更新交易后的 A/B 账户的余额,代码示例如下。
其中 pswapi_cc.ValidateTxInfo 是同态加密库 homomorphic lib 提供的方法,三个参数分别为应用端传送过来的转账信息 txInfo, 发起方 A 的当前加密余额 cipherBalanceAKeyABlock,接收方 B 的当前加密余额 cipherBalanceBKeyBBlock。该函数内部执行基于范围/等式验证(如验证转账金额是不是负值,A 转账后的余额是不是负值等)的同态加密运算,并返回运算结果即转账后的 A 的加密余额 newCipherBalanceA 和 B 的加密余额 newCipherBalanceB。最后,该链代码将各方转账后的余额密文更新到账本数据中。
结论
本文从区块链节点的租户隔离机制、安全合规性的国密算法支持机制以及范围可验证的同态加密机制讨论了华为云区块链服务的增强安全特性。
后续华为云区块链服务将会提供零知识证明能力,零知识证明能够在不向验证者提供任何有用的信息情况下,使验证者来相信该结论是正确的,证明过程中不用向验证者泄露被证明的消息,从而减少用户隐私泄露风险。
评论