文档章节

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

 透明的鱼
发布于 2018/08/02 16:13
字数 3206
阅读 7
收藏 0

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

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/ReusbGO

© 著作权归作者所有

粉丝 0
博文 96
码字总数 153598
作品 0
私信 提问
浅谈华为如何实现区块链的安全隐私保护

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

程序员的那点事
2018/08/02
0
0
Blockchain与Big Data将碰撞出怎样的火花?

数据开放的大势下,如何保护隐私与安全是大数据领域的难点与挑战。凭借可信与安全的特性,区块链令越来越多高价值数据得以脱敏并释放释放价值,为保护安全的前提下的促进数据流动提供了全新思...

AI科技大本营
2018/12/01
0
0
区块链开发公司介绍区块链如何保护隐私

  区块链隐私保护技术成为关注热点。在区块链公有链中,每一个参与者都能够获得完整的数据备份,所有交易数据都是公开和透明的,这个区块链的优势特点,但另一方面,对于很多区块链应用方来...

dreamer520
2018/08/21
0
0
区块链的性能和隐私如何兼得?从业者们是这样谈取舍的

雷锋网AI金融评论按:区块链正在以公链、私链或是联盟链的形式在不同场景落地,但随着交易流程复杂化,参与方多样化,业务展开过程中如何做到既不影响性能又可确保隐私,是区块链从业者们久攻...

周蕾
2018/09/13
0
0
密码遇上区块链,擦出怎样的火花?

密码学是区块链的底层技术,没有密码学就没有区块链,没有密码学支撑的区块链不可能安全。 数字经济时代,隐私保护问题日益突出。基于区块链的加密算法技术,用户可以对相应数据进行授权,从...

匿名科技
2018/11/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Taro 兼容 h5 踩坑指南

最近一周在改造 公羊阅读🐏 Taro 版本适配 h5 端,过程中改改补补,好不酸爽。 本文记录📝遇到的问题,希望为有相同需求的哥们👬节约点时间。 Taro 版本:1.3.9。 client_mobile_taro...

dkvirus
今天
4
0
Spring boot 静态资源访问

0. 两个配置 spring.mvc.static-path-patternspring.resources.static-locations 1. application中需要先行的两个配置项 1.1 spring.mvc.static-path-pattern 这个配置项是告诉springboo......

moon888
今天
3
0
hash slot(虚拟桶)

在分布式集群中,如何保证相同请求落到相同的机器上,并且后面的集群机器可以尽可能的均分请求,并且当扩容或down机的情况下能对原有集群影响最小。 round robin算法:是把数据mod后直接映射...

李朝强
今天
4
0
Kafka 原理和实战

本文首发于 vivo互联网技术 微信公众号 https://mp.weixin.qq.com/s/bV8AhqAjQp4a_iXRfobkCQ 作者简介:郑志彬,毕业于华南理工大学计算机科学与技术(双语班)。先后从事过电子商务、开放平...

vivo互联网技术
今天
19
0
java数据类型

基本类型: 整型:Byte,short,int,long 浮点型:float,double 字符型:char 布尔型:boolean 引用类型: 类类型: 接口类型: 数组类型: Byte 1字节 八位 -128 -------- 127 short 2字节...

audience_1
今天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部