星球日报
搜索
手机客户端
iPhone · Android
公众号
微信公众号

小白也能看懂的“零知识证明”原理

2019-01-22

顾名思义,零知识证明即给外界的“知识”为“零”。

编者按:本文来自hackernoon.com,作者:Oscar W

译者:星球日报茶凉

小白也能看懂的“零知识证明”原理

零知识证明(Zero-Knowledge Proof)或零知识协议是一种基于概率的验证方法,包括两部分:宣称某一命题为真的证明者(prover)和确认该命题确实为真的验证者(verifier)。

零知识证明指的是证明者能够在不向验证者提供任何有用的信息的情况下,使验证者相信某个论断是正确的,在密码学中非常有用。

顾名思义,零知识证明就是既能充分证明自己是某种权益的合法拥有者,又不把有关的信息泄漏出去,即给外界的 “知识” 为“零”。

“能够在不知道用户是谁,或者他们有多少钱的情况下判断‘一个用户是否有足够的钱发送给另一个用户’的问题,是零知识证明在区块链中的主要应用之一。”——Demiro Massessi

为何零知识证明如此重要?

数据隐私是当今社会最重要的课题之一。保护与个人身份有关的个人资料 (出生日期、银行月结单、交易记录、学历) 极为重要,并会不断增加其重要性。在科技时代,我们正在生成前所未有的海量数据,而我们不断创造的关于我们自己的数据也在不断被获取。像谷歌和 Facebook 这样的大公司已经利用我们的数据成为了今天主宰世界的科技巨头。然而,最近密码学的突破和区块链的兴起使一种新的方法能够帮助保护我们的数据和身份,甚至保护我们与之交互的组织。

零知识证明可能就是如何保护数据隐私的答案。

零知识证明的原则

零知识证明是麻省理工学院研究人员在 20 世纪 80 年代提出的一种加密方案。零知识证明协议是一方 (证明者) 向另一方证明 (验证者) 某件事情是真实的一种方法。除了该特定声明是真实的以外,没有披露任何其他信息。

例如,当前网站将用户密码的哈希值存储在其 web 服务器中。为了验证客户端是否真的知道密码,大多数网站目前使用的方法是对客户端输入的密码进行哈希值计算,并将其与存储的结果进行比较。

零知识证明可以保护用户的帐号信息不被泄露。如果零知识证明可以实现,那么在客户的密码是未知的情况下,仍然可以在客户端登录进行身份验证。当服务器受到攻击时,用户的帐户仍然是安全的,因为客户的密码没有存储在 web 服务器中。

交互式零知识证明

零知识证明协议的基础是交互式的。它要求验证者不断地提出一系列关于证明者所知道的 “知识” 的问题。

例如,如果有人声称知道九宫格谜题的答案,零知识证明就是验证者随机指定按列、行或九个正方形进行验证。每个测试不需要知道具体的答案,只需要检测数字 “1” 到“9”是否包含在其内。只要验证的次数足够多,就有可能判断证明者是否知道九宫格谜题的答案。

然而,这种简单的验证方式并不能使人们相信证明者和验证者都未做伪证。在九宫格游戏中,两者可能会事先串通,以便证明者在不知道答案的情况下通过验证。如果他们想说服第三方相信这个结果,验证者还必须证明验证过程是随机的,并且它不会将答案泄露给证明者。因此,第三方很难验证交互零知识证明的结果,需要第三方的参与,等额外的努力和成本才能向多人证明某件事是真实的。

非交互式零知识证明

非交互式零知识证明,顾名思义,不需要交互式过程,避免了验证者和证明者串通的可能性,但可能需要第三方机器和程序来确定验证的顺序。

例如,在九宫格游戏中,由第三方程序决定要验证哪一列或哪一行。验证序列必须保密,否则验证者可能在不知道真实 “知识” 的情况下通过验证序列。

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

比特币和以太坊网络都使用公共地址来代替验证者和证明者的真实身份,使得交易部分匿名; 只有发送和接收地址,以及交易数量是公众知道的。但是,通过区块链上提供的各种信息,如交互记录等,可以发现地址的真实身份,存在隐私暴露的隐患。

用了零知识证明之后,发送方、接收方和第三方的细节信息可以保持匿名,同时保证交易有效。

最早使用零知识证明技巧的区块链叫做 Zcash,实际的作法叫做 Zk-Snarks,这是许多零知识证明的做法之一,也是最有名的一个。

Zk-Snarks 是 “零知识简洁无交互知识认证” 的简称,是一种在无需泄露数据本身情况下证明某些数据运算的一种零知识证明。

Zk-Snarks 技术缩减了证明所需的时间和验证它们所需的计算量。它能够证明有效交易的条件已经满足,而不需要透露交易所涉及的地址或交易量的任何关键信息。

Zcash 可以将交易纪录上的汇款者、收款者和金额都经过加密隐藏起来,因此矿工无从得知这些交易上的细节,但仍然可以验证交易。不过,目前多数使用者在 Zcash 上的交易,还是选择未经加密的作法,因为花费的成本比较高。

另外,以太坊(Ethereum)上的智能合约目前也已经可以运用 Zk-Snarks 这套零知识证明的作法。但以太坊不完全是从隐私的角度切入,而是从节省运算成本的角度应用零知识证明。

透过 Zk-Snarks,以太坊矿工可以不用再重新执行交易的运算,而是只要对方提得出证明即可。大概就像我不需要真的知道你会高一到高三的数学,而只要看到高中毕业证就能确定你懂高中数学。不过,这只有在制作证明的成本,远低于实际运算成本的情况下才划算。

Zk-Snarks 将需要验证的交易内容转化为两个多项式乘积相等的证明,并结合同态加密等高级技术,在执行事务验证的同时保护隐藏的事务量。其过程可简单描述为:

将代码分解为可验证的逻辑验证步骤,然后将这些步骤分解为由加减乘除组成的计算流程。

进行一系列变换,将待验证代码转换为多项式方程,如 t(x)h(x)= w(x)v(x)。

为了使证明更加简洁,验证者事先随机选择几个检查点 s,检查这些点上的方程是否为真。

通过同态编码或加密,验证者在计算方程时不知道实际输入值,但仍然可以验证。

在等式的左右两边,乘以一个不等于 0 的密值 k。当验证 (t(s)h(s)k) = (w(s)v(s)k) 时,具体的 t(s)、h(s)、w(s)、v(s)是不可知的,可以对信息进行保护。

当前履行 Zk-Snarks 算法的一个缺陷是需要在 advanced 中内置参数。如果这些参数泄露,整个网络将面临毁灭性的破坏。因此,用户必须信任在使用这些网络时不会泄露的信息。

可能的解决方案包括使用现代的“可信执行环境”,如 Intel SGX 和 ARM TrustZone。对于 Intel 的 SGX 技术,即使应用程序、操作系统、BIOS 或 VMM 受到威胁,私钥也是安全的。此外,最近的一份白皮书揭示了它在零知识密码学中的创新:Zk-Snarkss(零知识可伸缩透明知识参数)。

根据 Zk-Snarks 白皮书,Zk-Snarks 是第一个不依赖任何信任设置实现区块链验证的系统,而随着计算数据数量的增加,计算速度呈指数增长。它不依赖于公钥加密系统,而且更简单的假设使它在理论上更安全,因为它唯一的加密假设是哈希函数 (如 SHA2) 是不可预测的。零知识证明和 Zk-S(T|N)ARK 等技术的测试和采用需要时间。

本文翻译自https://hackernoon.com/wtf-is-zero-knowledge-proof-be5b49735f27。如若转载请注明出处。

参与讨论

登录后参与讨论

茶凉

新锐作者

茶凉

区块链搬运工,微信:hao1250549397,欢迎爆料骚扰

总文章数: 43


分享至

微信扫一扫分享

0