本文首发公众号:区块链之美,关注公众号后可免费阅读!区块链之美 致力于区块链技术研究,传播区块链技术和解决方案、区块链应用落地、区块链行业动态等。
至此,已经介绍了改进的Paillier加法同态加密,以及FO承诺和基于FO承诺的范围证明。目前暂未介绍改进的同态加密算法加密,下面介绍基于FO承诺的零知识范围证明实现原理与应用举例,如下!
1. 问题引出
在隐私保护技术方面,比较突出的有两种主流的开源密码数字货币:Monero和Zcash。这两种隐匿币采用的账户模型是UTXO模型,并非ACCOUNT模型。Monero在地址隐私方面采用环签名和一次性地址技术,在交易数据隐私方面采用基于环签名和Pedersen承诺的Ring CT方案,同时也解决了交易输入输出地址不可链接且不可跟踪问题。Zcash在交易数据隐私方面采用的是自研的非交互式零知识证明技术zk-SNARKs。此外,业界还提出一种不用进行可信设置的非交互式零知识证明技术Bulletproof,可结合Pedersen承诺解决范围证明问题。
如果用户的交易数据未加密,用户的资金情况以及交易金额等隐私信息很容易泄露,阻止了区块链技术在更多领域内的应用。虽然可以采用加密技术来对用户的交易数据进行加密,但是在传统的交易过程中,为了防止应用层发起非法交易,链码端还需要对交易数据的合法性进行校验,即对输入金额与输出金额相等性校验、交易金额大于0校验和用户余额大于0校验,这些校验在交易数据为明文时很容易完成,但是在对交易信息采用加密技术后,链码端出现的数据均为密文状态,致使无法像校验明文那样来完成校验过程,同时也无法对密文进行相关的运算,来完成对账本的更新。
同态加密是一种具有特殊属性的非对称加密方法,该加密方法可以对加密后的数据进行基本的运算,然后对结果进行解密与直接用明文进行相应的运算结果是一致的,通过使用同态加密算法,能够让链码端在不解密交易数据的情况下对交易密文进行相关的运算,来完成对用户资产的更新。零知识证明是一种基于承诺的证明技术,该技术可以让验证者在不知道承诺中秘密的情况下,相信关于承诺中秘密的有关信息,譬如秘密所在的范围或两个承诺中是否隐藏同一个秘密,通过使用零知识证明技术,能够使链码端在交易信息为密文的情况下,判断密文中隐藏值的所在范围,来完成对交易信息的校验过程。
因此,一种交易金额的同态加密计算和零知识证明方案,主要解决交易数据在智能合约中如何进行密文加法计算,同时提供对密文数据的有效性证明和验证,例如交易秘密数据范围证明、交易秘密数据承诺相等证明、交易私密数据输入输出平衡验证。
2. 范围证明
首先,我们来研究不使用zk-snark、Bulletproof、Ring CT等技术如何实现范围证明。
FO承诺在没有附加条件下应用于区块链交易时不安全的。利用FO承诺的同态性很容易验证交易的平衡特性,即验证方只需要将输入金额的承诺与输出承诺比较就能确定交易的正确性。这种方案简单且能验证交易,但是并不安全。因为承诺的加减要在一个循环群内进行模 N N N的操作,所以存在溢出或出现负数金额的可能。通常情况下解决的办法是附加一个范围证明条件,证明交易金额为正整数或者在一个确定的整数范围内,如 [ 0 , 2 10 ] [0,2^{10}] [0,210]。
以下内容,参考自[1]。设 t , l , s 1 , s 2 t,l,s_1,s_2 t,l,s1,s2为公开的安全参数, n n n为一个大合数,其因式分解Alice和Bob未知。对于 x x x的两个承诺,分别为 E i ( x , r i ) = g i x h i r i m o d n , i = 1 或 2 E_i(x,r_i)=g_i^xh_i^{r_i}modn,i = 1或2 Ei(x,ri)=gixhirimodn,i=1或2。随机数 r i ∈ [ 2 s 1 n + 1 , 2 s 1 n − 1 ] , i = 1 或 2 r_i \in [2^{s_1}n+1,2^{s_1}n-1],i = 1或2 ri∈[2s1n+1,2s1