布比可靠的隐私保护与权限控制 | 商用区块链BubiChain详解(四)

区块链技术逐渐从小众的极客圈子走向规模化商用。
从整体来看,区块链技术的规模化商用还处在相对初期的阶段,企业对区块链技术性能、易用程度的较高需求,与区块链技术本身的可拓展性瓶颈及较低的运行效率构成了当前限制行业发展的主要矛盾。
基于自身大量的商业实践和对区块链商用的探索与创新,布比打造了完全自主知识产权、高性能可扩展、产品化成熟的商用级区块链底层平台BubiChain。
商用级区块链底层平台BubiChain取得底层技术关键突破:应用开发友好的智能合约、安全高效的共识算法、可靠的隐私保护、并行快速的多链,以及可扩展的跨链技术等创新;实现了产品化重要突破:应用可快速构建、可视化运维、技术合规及资金账户体系等,形成完整的产品服务能力。
本文为商用区块链BubiChain详解系列文章的第四篇——布比可靠的隐私保护与权限控制,以下为正文内容。
1. 综述
布比区块链结合同态隐藏、零知识证明等多项密码学技术,实现非交互式的隐私保护,可隐藏交易金额、地址以及交易附加数据。利用代理重加密算法实现对链上数据的授权访问。
非交互式的隐私保护:通过ECDH算法为对方生成致盲因子,对方可还原,而第三方不可。接收方可以通过接收方的私钥与发送方的公钥做代数运算还原致盲因子,而第三方没有双方的私钥无法还原该致盲因子,从而达到对第三方隐藏的目的。
交易金额隐藏:Pederson承诺实现了对金额的同态隐藏,即数字加密前的运算结果经过加密,与加密后运算的结果是一致的,区块链节点只需要对加密后的数据做等式运算,即可保证输入值等于输出值。

交易地址隐藏:通过附加“根据接收者公钥按照某种规则变换后的公钥”实现所有权的转移,不同的output产生不同的公钥,所有权发生转移、其他人不能关联出变换前的公钥,达到对地址隐藏的效果。

2. 交易金额的隐私保护
布比隐私保护技术的交易结构采用的是UTXO结构,通过Pederson承诺隐藏交易的金额,通过Range Proof算法确保输出的金额必须大于0。
· Pedersen Commitment
协议把每笔交易的输入或者输出表示为以下形式:C=r*G+v*H
r 是一个大随机数,代表致盲因子,v 为金额,G 和H为生成元,C是该笔输出金额的承诺,对交易金额进行盲化处理。G和H是椭圆曲线密码的两个生成元,一个明文数值乘以生成元之后是一个经过椭圆曲线密码简单加密过后的密文。这项运算是单向的,通过明文和生成元可以推出密文,但是通过密文和生成元倒推不出明文,这个难题叫做“离散对数问题”。
致盲因子r是交易的构造者自己选的随机数,这个随机数相当于非对称加密算法中的私钥,只有自己知道不能告诉其他人。对每一个交易金额进行致盲操作后的好处是可以保持“加法同态性”,公式如下:

其中 v1、v2 为交易金额,r1和r2为致盲因子,G和H为生成元,对加密后的数字进行代数加法操作,和对加密之前的数字进行加法操作后再进行加密,是等价的。
· 余项(Excess)
交易的发送者和接收者,彼此不知道对方的致盲因子,但知道交易金额。
这会导致等式两边交易金额那一项可以被配平抵消掉,但致盲因子这一项无法抵消。把输出减去输入,最后一项为:
ro 为交易输出的致盲因子之和,ri 为交易输入的致盲因子之和,G 为生成元,可以把它叫做“余项”。
· Range Proof
对金额的部分,需要证明金额没有负数,比如有人构造一笔恶意交易,交易输入是 10 交易输出是 20 和 -10,就会凭空制造出一些钱,而等式验证是通过的。为了证明这个交易所有的输出都大于0,交易的每个输出都附带一个 Range Proof,一个简短的零知识证明,用来证明该输出值大于0。
一般的Range proof利用环签名算法,占用的存储空间与证明值的二进制位数相关,位数越大,消耗的空间越大。有没有一种不占用大量的空间的Range Proof呢?Bulletproofs能在完成同样工作的前提下占用少量的空间。
· 交易金额隐藏实现
在上文分别介绍了Pedersen Commitment、余项(Excess)、Range Proof各自在金额隐藏中的作用。下图表示了交易的具体结构。

该交易表示了一笔输入v1、一笔输出v2及一笔找零v3的机密交易,当C给定时,必然有对应的r和v满足,r*G +v*H = C,该承诺实现了对v值的同态隐藏。
校验交易有效性规则:
· C1 = C2 + C3 + C4;
· 校验C2的Range proof,C3的Range proof;
· 校验C4是基点G的有效公钥,通过验签算法校验;
· 校验通过即证明:
· 余额守恒;
· 交易经过r1授权;
3. 交易地址的隐私保护
在布比区块链中,采用一次性密钥实现地址的隐藏,保证了接收方的隐私。其本质思想是,当发送者发起一笔交易时,使用接收者的公钥计算出一个一次性公钥,然后将加密资产转移至该一次性地址,接收方通过监听网络中的交易,利用自身私钥,通过解密算法来找到属于自身的交易,从而进行再次花费。而网络中其它节点无法确认两笔交易是发送给同一接收方的,实现了交易的不可链接性。

一笔标准交易流程的实现过程如下:

1) Alice想要给Bob转移一笔资金,Bob向Alice公布它的标准地址,Alice解析Bob的地址为Pubkey。
2) Alice选取交易、共享秘钥、id算取hash作为Bob的一次性公钥,PubKey=R2+Hash(Hash(tx),Hash(r1*r2*G),0)*G,其中Hash为密码学哈希函数,定义为:。
3) Alice使用PubKey作为交易输出的公钥地址,并且将地址Pubkey放入交易,Alice在网络中广播交易。
4) Bob监听网络中所有交易,并使用自身私钥r2检查交易,计算Pubkey ‘= r2*G+Hash(Hash(tx),Hash(r2*r1*G),0)*G。由于r2*G=R2和r2*r1*G=r2*R1= r1*r2*G=r1*R2,则Pubkey=Pubkey’,那么Bob就知道Alice确实向自己转移了资金。
5) 拥有私钥即拥有交易输出的所有权, 像大多数隐私保护方案一样,交易输出通过拥有ECC私钥来保证其所有权,Bob能够恢复出相应的一次性私钥:x=r2+ Hash(Hash(tx),Hash(r2*R1),0)因为P=xG。Bob可以随时使用私钥r2来获取x来花费该笔资金。
布比隐私保护通过附加“通过接收方变换后的公钥”实现所有权的转移,达到对地址隐藏的效果:所有权转移、其他人不能关联出变换前的公钥。

Hash(r2*r1*G) :为发送者和接受者可知的致盲因子
P=R1,接受者可以运算Hash(P*r2)为该output的致盲因子
Enc,对称加密函数,接收者可以还原v2的值
Pubkey,接收方变换后的公钥,只有通过对应的公钥签名才可花费该输出
Rang: v2值大于0的范围证明