零知识证明:区块链隐私保护的工具

零知识证明:区块链隐私保护的工具

报告摘要:

知识证明是一种基于概率的验证方法,验证内容包括“事实陈述”和“关于个人知识的陈述”。验证者根据一定的随机性向证明者提问,如果他们能够给出正确的答案,就意味着证明者很有可能拥有他所声称的“知识”。

Zerocoin(零币协议)在铸造零币和兑换零币的过程中使用零知识验证来隐藏一笔交易对应的发送方和接收方信息。 Zerocash(零钞票协议)采用了更新颖的zkSNARKs技术,将需要验证的交易内容转化为证明两个多项式的乘积相等,并结合同态加密等技术进行交易验证,同时保护隐藏的交易金额.缺点是如果网络受到攻击,超发零现金,将无法检测或采取措施; Zerocoin 和Zerocash 都需要预先设定“信任设置”,并没有实现真正的“免信任”。 Intel SGX、zkSTARKs等新技术或许可以解决上述问题,但仍需在实践中进行检验。

1. 零知识证明原理

零知识证明是一种加密方案,最初由MIT 研究人员在1980 年代的论文中提出。 “零知识协议是一种方法,一方(证明者)可以通过这种方法向另一方(验证者)证明某事是真实的,而无需透露除该特定陈述为真的事实之外的任何其他信息。换句话说,客户密码的散列值存储在网络服务器上。为了验证客户是否确实知道密码,目前大多数网站采用的方法是服务器对客户输入的密码计算哈希值,并与存储的结果进行比较。但这种方法的缺点是服务器在计算时可以知道客户端的原始密码。一旦服务器被攻击,用户密码就会被泄露。如果可以实现零知识证明,那么在不知道客户端密码的情况下也可以做到。验证客户端的登录,即使服务器被攻击,用户的账号仍然是安全的,因为没有存储客户端的明文密码。

基本的零知识证明协议是交互式的,验证者需要不断地向证明者询问一系列关于其掌握的“知识”的问题。如果他们能给出正确的答案,那么从概率上来说,证明者确实非常优秀。可能知道它自称的“知识”。比如有人声称知道数独的答案,零知识证明的方法是验证者这次随机指定按列、行或九格检查,不需要看具体位置每次测试的数摆。只需要检测是否包含1-9个数字即可。只要验证的次数足够多,那么证明者就有很大的概率知道数独问题的解法。然而,这样简单的方法并不能让人相信证明者和验证者都没有作弊。在数独的情况下,两者可能提前串通,使得证明者在不知道答案的情况下通过验证。如果他们想要说服第三方,验证者还必须证明他们每次的检测方案都是随机的,并且他们没有与证明者串通。

由于第三方观察者很难验证交互式零知识证明的结果,所以当我们向多人证明一件事时,我们需要付出额外的努力成本。非交互式零知识证明,顾名思义,不需要交互过程,避免了合谋的可能性,但可能额外需要一些机器程序来确定试验的顺序:例如,在数独游戏的例子中,通过程序来决定哪一次按行测试,哪个时间按列测试,但这个测试序列必须保密,否则验证者如果事先知道测试序列,并提前准备,不知道真实情况,就可能会利用这些信息“知识”得到认可。

零知识证明的内容可以归纳为两类: “事实”陈述:例如证明“一个特定的图可以是三色的”。或“数字N 是合数”;关于个人知识的陈述:例如,“我知道这个特定图形的着色方案”或“我知道N 的因式分解”。

但并非所有问题都有零知识证明加密方案。 Goldreich、Micali 和Wigderson 在理论上给出了零知识证明解决方案的有效范围。他们发现,对于决策问题(答案只有是/否的问题),存在已知的零知识证明方案,其解决方案可以在多项式时间内得到验证。只需要在这样的NP问题中找到你要证明的命题,将其转化为三色问题的一个实例,就可以利用已有的协议实现零知识证明。由于三色问题是一个NPC问题,任何其他NP问题都可以转化为这个问题的一个实例。

2. 零知识证明在区块链中的应用

区块链上的交易中,例如比特币以太坊网络,除了使用地址代替交易双方的真实身份,使交易部分匿名外,发送和接收地址和金额都是已知的。通过网络上的各种信息和现实世界中的交互记录,可以将比特币地址与真实身份进行匹配,存在隐私暴露的隐患。 Zerocoin 设计了一个全新的思路,无法通过交易历史分析获取用户的真实身份。在Zerocoin 中,消耗一定价值的待交易货币以生成具有唯一序列号的Zerocoin。零知识证明可以验证你是否真的花了这笔钱,而不用透露花的是哪种货币。为了把这笔钱转给他人,从逻辑上讲我们需要让这个零币不再被其他人消费。零币的方法是共同维护一个失效列表,里面存放着所有已经花费过的零币的序号。矿工在验证支出交易时使用零知识证明方法。他们不需要知道花费了哪个zerocoin,也可以验证zerocoin的序列号是否在失效列表中。由于花费交易不包含地址和签名信息,矿工在整个交易过程中不知道零币的来源,因此很难分析交易历史来获取用户身份。

在Zerocoin 中,交易金额是可以知道的,而使用zkSNARKs 技术的Zerocash 甚至可以隐藏交易金额。分类帐中唯一公开记录的是交易的存在。可以证明NP 中的所有问题都存在zkSNARKs。它引入了多项创新技术,并使它们在区块链中可用。最重要的是,zkSNARKs 减少了证明的大小和验证它们所需的计算量。其过程可简述为。

1.将待验证程序拆解成逻辑验证步骤,逻辑上

的步骤拆解成由加减乘除构成的算数电路。

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

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

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

5. 在等式左右两边可以同时乘上一个不为0的保密的数值k,那么在验证(t(s)h(s)k)等于(w(s)v(s)k)时,就无法知道具体的t(s)、h(s)、w(s)、v(s),因此可以使得信息得到保护。

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

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

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

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

参考文献:

1. Zcoin中文社区,《Zcoin和Zcash: 相似性和不同处》.http://www.zcoinchina.org/zcoin-and-zcash/

2. Zcash团队,《What are zk-SNARKs?》https://z.cash/technology/zksnarks.html.

3. 零币技术白皮书《一种通过使用零币协议(zerocoin protocol)来保障账务隐私的加密货币》

4. Christian Reitwiessner,《zkSNARKs in a nutshell》,https://blog.ethereum.org/2016/12/05/zksnarks-in-a-nutshell/

5. Matthew Green,《Zero Knowledge Proofs: An illustrated primer》,https://blog.cryptographyengineering.com/2014/11/27/zero-knowledge-proofs-illustrated-primer/

6. 老钱,《一个数独引发的惨案:零知识证明(Zero-Knowledge Proof)》,http://www.sohu.com/a/224915382_117959

本文作者陈致佳、蒙绎泽、谢倩、江泽武文章版权为哈希未来所有,如需转载,请联系哈希未来工作人员。)

版权声明:区块链是什么意思 发表于 2023-05-15 21:01:17。
转载请注明:零知识证明:区块链隐私保护的工具 | 零零洞洞

暂无评论

暂无评论...