论坛首页 入门技术论坛

浅谈华为如何实现区块链的安全隐私保护 编辑

浏览 1877 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2018-08-02  

摘要:区块链节点的租户隔离机制、安全合规性的国密算法支持机制以及范围可验证的同态加密机制下,华为区块链服务的增强安全特性浅谈。

1.    华为区块链服务安全特性介绍

本文介绍华为云区块链服务BCS(BlockChainService)在安全隐私保护的设计与实现。华为区块链服务的构建基于开源的区块链框架hyperledge**bric,除了支持原生开源框架内部的PKI身份证书认证、交易签名校验、数据传输安全TLS等措施外,  华为云区块链服务在华为云安全的基础上还额外增加了新的安全特性,为区块链服务提供高安全环境。 本文主要描述如何基于虚拟私有云网络VPC建立租户区块链节点的隔离机制;从安全合规性角度讨论国密算法SM2/SM3/SM4的支持, 为用户提供多样性的哈希和签名策略;为保护交易参与方的隐私性,提供范围可证明的加法同态加密机制。本文通过一个区块链应用开发作为示例,详细描述如何使用BCS的安全隐私保护的特性。

2.    区块链服务的租户数据隔离机制

华为云对云端数据的隔离是通过虚拟私有云(VPC–Virtual Private Cloud)实施,它将不同租户间的网络深度隔离,保证了不同租户间的数据不会被越权获取。通过VPC,租户可以完全掌控自己的虚拟网络,实现不同租户间在二、三层网络的完全隔离:一方面,结合VPN或云专线,将VPC与租户内网的传统数据中心互联,实现租户应用和数据从租户内网向云上的平滑迁移;另一方面,利用VPC的安全组功能,按需配置安全与访问规则,满足租户更细粒度的网络隔离。

在华为云区块链服务中区块链联盟成员独立为单独的一个租户,每个租户单独运行在一个VPC中,利用华为云VPC数据隔离机制来保障每个联盟成员的数据隔离和权限隔离,从而满足区块链系统的多中心化、多方参与、多方共识和不可篡改等独立、安全原则。例如在如下的三个租户建立的联盟链网络中,每个租户在自身的VPC内构件区块链的组织和节点,用于存放账本数据。只有租户的管理者才会对自己本VPC内的节点和数据具有管理权限。每个租户可以设置EIP(externalIP)和端口,将锚点的访问地址发布以便其他租户集群的锚点可以与其建立连接。同样,我们将共识组织内的节点构建于一个私有集群,并为每个共识节点发布EIP和端口,使得各租户组织的leader节点可以与共识节点建立连接。

3.    国密算法的设计和使用

华为区块链服务是基于hyperledge**bric开源框架构建的,采用如下图所示的为每个组织生成的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使用fabricsdk向区块链节点peer发送交易请求,这里我们需要下载具有国密算法支持的sdk包,修改sdk配置文件启动国密签名算法、配置sdk使用国密签名证书。

3.1 下载国密算法支持的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-getinstall libtool来安装,或者下载源码进行编译安装,下载地址为https://www.gnu.org/software/libtool/

3.2 修改SDK配置文件启动国密签名算法

参考” 基于华为云区块链服务快速部署和搭建链上应用”一文中开发业务层链码应用中配置fabricsdk步骤,下载SDKyaml配置文件,并注意检查该配置文件中的签名算法是下图中的值。

3.3 配置sdk使用国密签名证书

将SDK的配置修改为启动国密签名证书后,开发者需要登陆BCS管理页面下载共识组织orderer的证书和本组织的用户证书,并将证书放入sdkyaml中指定的证书存放路径。

开发者可使用openssl命令opensslx509 –in ca.example.com-cert.crt –text -noout查看所下载的证书内容是否采用国密签名机制如下图所示。

4.    范围可验证的同态加密的设计和使用

区块链本身所采用的哈希、签名机制可以在开放的网络环境中保障账本数据的防篡改、可追溯。区块链设计的本身使得账本数据对每个参与方是可达的,即用户的账本对各个参与方是透明的,任何组织都可以访问到相同的数据。如果将用户的隐私数据放到链上将会放大用户隐私泄露的风险,例如当前在比特币等公有链系统中,所有的交易信息都是公开的(包括交易金额)。然而,在企业级应用系统如金融业的交易中,金融交易信息往往是敏感数据,非业务相关方不能查看,且同时要满足监管机构的监管要求。目前,大部分的区块链并没有满足用户的隐私性要求,针对该问题华为区块链服务提供了范围可验证的同态加密解决方案,保障了用户交易过程中不泄露隐私信息。

如上图中A向B转账10元,需要区块链节点记账,但是用户不想让区块链节点知道交易金额以及最新余额。同态加密技术可以实现无密钥方对密文的计算,密文计算无须经过密钥方,既可以减少通信代价,又可以转移计算任务,平衡各方的计算代价。华为BCS服务首先提供同态加密库,对用户的交易数据用其公钥进行加密保护,交易的时候都是密文运算,最终账本中加密保存,即使节点被攻破,获取到账本记录也无法解密;其次华为BCS服务提供范围证明校验,背书节点能够对密文进行背书,无需解密就能校验交易的正确性,如校验转账金额是否为负数,从而识别出恶意交易风险,保证了智能合约的正确执行。

假设A向B转账,我们通过如下的代码示例来说明如何使用BCS服务的同态加密库。开发者首先要到BCS的官方网站上下载同态加密库homomorphiclib,用于上层应用的开发。对于每个交易方,应用层需要为每个交易主体生成公私钥对,将公钥的哈希值作为该用户的交易地址,利用链代码idchaincode存储并查询用户的公钥,即账本KV的存储方式为key=hash(公钥),value=公钥。

基于如上公钥地址的设置,当A向B转账时,在上层应用app端主要包含四个步骤,即1)根据转账接收方B的地址调用idchaincode查询B的公钥值;2)从账本数据中获取发起方A的当前加密余额;3)构建A向B的转账信息;4)调用转账链代码txchaincode触发交易,代码示例如下。其中pswapi_sdk.PrepareTxInfo是同态加密库homomorphiclib提供的方法,六个参数分别为发起方的当前金额密文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是同态加密库homomorphiclib提供的方法,三个参数分别为应用端传送过来的转账信息txInfo,发起方A的当前加密余额cipherBalanceAKeyABlock,接收方B的当前加密余额cipherBalanceBKeyBBlock。该函数内部执行基于范围/等式验证(如验证转账金额是不是负值,A转账后的余额是不是负值等)的同态加密运算,并返回运算结果即转账后的A的加密余额newCipherBalanceA和B的加密余额newCipherBalanceB。最后,该链代码将各方转账后的余额密文更新到账本数据中。

5.    结论

本文从区块链节点的租户隔离机制、安全合规性的国密算法支持机制以及范围可验证的同态加密机制讨论了华为云区块链服务的增强安全特性。后续华为云区块链服务将会提供零知识证明能力,零知识证明能够在不向验证者提供任何有用的信息情况下,使验证者来相信该结论是正确的,证明过程中不用向验证者泄露被证明的消息,从而减少用户隐私泄露风险。

华为云区块链服务:http://t.cn/ReuFYEZ

论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics