区块链浪潮:连接技术与应用
上QQ阅读APP看书,第一时间看更新

6.2 区块链中的零知识证明应用

在区块链上的交易中,如比特币和以太坊网络,除了使用地址来替换交易双方的真实身份,使得交易具有部分匿名性以外,发送、接收地址和金额都是已知的,别人有可能通过网络上的各种信息和现实世界发生的交互记录等,将比特币地址和真实身份对应起来,也因此具有隐私暴露的隐患。Zerocoin设计了一种全新的思路,无法通过交易历史分析来获得用户真实身份。Zerocoin里需要消耗一定价值的要交易的货币,以生成具有独特序列号的一枚零币。零知识证明可以在不透露花费了具体哪个货币的基础上,验证出你的确花了这笔钱。为了将这笔钱转给他人,逻辑上需要使这枚零币不能再被别人花费,零币的办法是大家共同维护一个作废列表,存着所有已经花费的零币的序列号。矿工在验证这笔花费交易时,运用零知识证明的方法,不需要知道具体花掉哪一个零币,也可以验证零币的序列号是否在作废列表里。由于花费交易并没有输入地址和签名的信息,在整个交易过程中,矿工也并不知道这个零币的来源,因此也就难以对交易历史进行分析而获取用户身份。

在零币里,交易的金额是可以知道的,而采用zkSNARKs技术的Zerocash连交易金额都可以隐匿,账本唯一公开记录的内容就是交易的存在性。可以证明对于NP中的所有问题存在zkSNARKs。它引入了多项创新技术,使它们可以在区块链中使用。最重要的是,zkSNARKs减少了证明的大小和验证它们所需的计算量。它的过程可以简述如下。

(1)将要验证的程序拆解成一个个逻辑上的验证步骤,将这些逻辑上的步骤拆解成由加减乘除构成的算数电路。

(2)通过一系列的变换,将需要验证的程序转换成验证多项式乘积是相等的,如证明txhx)=wxvx)。

(3)为了使得证明更加简洁,验证者预先随机选择几个检查点 s,检查在这几个点上的等式是否成立。

(4)通过同态编码/加密的方式使得验证者在计算等式时,不知道实际的输入数值,但是仍能进行验证。

(5)在等式左右两边可以同时乘上一个不为0的保密的数值 k,则在验证tshsk等于wsvsk时,就无法知道具体的ts)、hs)、ws)和vs),因此可以保护信息安全。

不同于Zerocoin的密码学原语RSA累加器,zkSNARKs技术较新,未经广泛验证,存在风险,同时由于更强的匿名性,Zerocash的漏洞更难发现,和Zerocoin相比,Zerocash由于交易金额信息也是未知的,所以如果有攻击者无限制地发行零钞,这样的情况是无法检测的。

除此以外,Zerocoin和Zerocash均需要提前内置生成参数,用户在使用这些网络的时候,必须信任这些参数没有被泄露,但是一旦这些参数被泄露,整个网络将面临毁灭性打击。复杂的信任设置使得Zerocash存在争议,即使他们设计了一套“仪式”(例如录下砸坏存有密钥计算机的过程)来证明自己的安全性。

可能的解决办法包括利用像英特尔SGX和ARM TrustZone这样的现代“可信执行环境”。就英特尔的SGX技术而言,即使应用程序、操作系统、BIOS或VMM遭到了破坏,私钥也是安全的。除此以外,最新提出的zkSTARKs技术不需要进行信任设置。

根据zkSTARKs白皮书中所述,zkSTARKs是首次实现可以不依赖任何信任设置来完成区块链验证,同时计算速度随着计算数据量的增加,而指数级加速的系统。它不依赖公钥密码系统,更简单的假设使得它理论上更安全,因为它唯一的加密假设是散列函数(如SHA2)是不可预测的(这一假设也是比特币挖掘稳定性的基础),因此也使其具有抗量子性。作为一种新颖的技术,和zkSTARKs一样,它也需要经过时间的检验。