区块链中的数学 – 何谓零知识证明?

在任意的零知识证明系统中,都有一个 prover 在不泄漏任何额外信息的前提下要让 verifier 确信某些陈述(Statement)是正确的。ZK-SNARK目前应用较多,有不少成熟的库,如libsnark,bellman等.

## 写在前面 上一篇介绍了[RSA Accumulator非成员证明以及区块链中的应用](https://learnblockchain.cn/article/2444),有些细节没有展开,比如说为什么要使用素因子?因为它们的乘积将唯一地表示集合。否则,会有混淆【同一乘积,会有不同因子组合,如18 = 2 * 9 = 3 * 6】等等。 到现在为止,有了签名,密码学承诺,同态计算,椭圆曲线等基础, 接下来可以看零知识证明的具体内容了。本篇属于科普,相比以往,愉快阅读不烧脑! ## 何谓零知识证明 零知识证明通俗来说通过某种手段让验证者相信(确认)证明者的陈诉正确(例如知道某个关键信息),同时不暴露该信息本身。 网络上有很多例子可以帮助理解,这里我们举一个场景: 假如V捡到一个丢失的银行卡,P过来说银行卡是他的,并说他知晓银行卡卡号和密码,由于银行卡在V手中,V可以轻松判断P说的卡号是否正确,但是V依然不太相信P就是卡的主人,于是P还说知道银行卡的取款密码,但是不能直接告诉V否则的话就泄露了。 于是他们约定,来到附近的ATM机旁,V离ATM机保持一定距离, 使得能够看得见P执行取款操作,但不能太近以至于看到P输入的取款密码。P就在ATM旁等待V的操作指令。 二人就位后,V让取出100元,P插入卡,输入密码后取出100元(假设卡里确实都是有钱的),V让再取出300元,P照做又一次取出了300元,反复几次后,V确信银行卡就是P的。 P通过这种方式拿到了银行卡,没有让V知道其取款密码,这个模拟的场景就是零知识证明的应用场景了。 ### 用途 零知识证明常用于以下场景: (1)证明隐私数据情况: 一个人的银行账户金额多于 X; 去年,一家银行未与实体 Y 进行交易; 一个人的信用评分高于 Z; 在不暴露全部 DNA 数据的前提下匹配 DNA (2)匿名认证: 在不揭露身份的情况下(比如登录密码),证明请求者R有权访问网站的受限区域; 证明一个人来自一组被允许的国家/地区列表中的某个国家/地区,但不暴露具体是哪个; 证明一个人是某机构会员但不是是谁。 (3)匿名支付/代币: 区块链中的(不可追踪的)隐私币; 付款完全脱离任何一种显示身份; 纳税而不透露收入; (4)外包计算 将昂贵的计算任务外包,并在不重新执行的情况下验证计算结果是否正确;它打开了一种零信任计算的类别; 改进区块链模型,从所有节点做同样的计算,到只需一方计算然后其它节点进行验证等,zk rollup layer2方案等。 ## ZK-SNARK 自1985 年,零知识证明这个概念在 “交互式证明系统的知识复杂性”一文中被引入,后来包括非交互式研究,近几年在区块链的研究与应用发展迅速。 零知识证明系统要满足以下性质。 1. 完整性: 只要陈述(statement)是正确的,prover 就可以让 verifier 确信; 2. 可靠性: 如果陈述(statement)是错误的,那么作弊的 prover 就没有办法让 verifier 相信 3. 零知识: 协议的交互仅仅揭露陈述(statement)是否正确而不泄漏任何其它的信息 目前成熟应用是zk-SNARK技术方案。这个术语含义: ZK-SNARK全称: zero-knowledge succinct non-interactive arguments of knowledge **Succint (简洁性)** : 与实际计算的长度相比,生成的零知识证据消息很小。 **Non-interactive (非交互性)** : 对于 zk-SNARK 算法来说,通常有一个构建阶段,构建阶段完成之后,证明者 (prover) 只需向验证者 (verifier) 发送一个消息即可。而且,SNARK 通常还有一个被称作是 "公开验证者" 的特性,意味着任何人无需任何交互即可验证零知识证据,这对区块链是至关重要的。 **Arguments (争议性)** : 验证者只能抵抗计算能力有限的证明者的攻击。具有足够计算能力的证明者可以创建伪造的零知识证据以欺骗验证者。这也通常被称为 "计算完好性 (computational soundness)",而不是 "完美完好性 (perfect soundness) "。 **of Knowledge** : 对于一个证明者来说,在不知晓特定证明 (witness) 的前提下,构建一个有效的零知识证据是不可能的。 ## 小结 在任意的零知识证明系统中,都有一个 prover 在不泄漏任何额外信息的前提下要让 verifier 确信某些陈述(Statement)是正确的。 ZK-SNARK目前应用较多,有不少成熟的库,如libsnark,bellman等. 也有不需要setup的zk-stark的方案,以后有时间再说吧。 好了,[下一篇](https://learnblockchain.cn/article/2493)继续介绍零知识证明其他内容!。 --- 原文链接:https://mp.weixin.qq.com/s/LHuRAA1RPzbccKHZ1wdU6g 欢迎关注公众号:blocksight --- ### 相关阅读 [区块链中的数学 - RSA累加器的非成员证明](https://learnblockchain.cn/article/2444) RSA Accumulator非成员证明以及区块链应用 [区块链中的数学 - Accumulator(累加器)](https://learnblockchain.cn/article/2373) 累加器与RSA Accumulator [区块链中的数学 - Kate承诺batch opening](https://learnblockchain.cn/article/2252) Kate承诺批量证明 [区块链中的数学 - 多项式承诺](https://learnblockchain.cn/article/2165) 多项式知识和承诺 [区块链中的数学 - Pedersen密钥共享](https://learnblockchain.cn/article/2164) Pedersen 密钥分享 [区块链中的数学 - Pedersen承诺](https://learnblockchain.cn/article/2096) 密码学承诺--Pedersen承诺 [区块链中的数学 - 不经意传输](https://learnblockchain.cn/article/2022) 不经意传输协议 [区块链中的数学 - RSA算法加解密过程及原理](https://learnblockchain.cn/article/1548) RSA加解密算法 [区块链中的数学 - BLS门限签名](https://learnblockchain.cn/article/1962) BLS m of n门限签名 [区块链中的数学 - BLS密钥聚合](https://learnblockchain.cn/article/1912) BLS密钥聚合 [Schorr签名与椭圆曲线](https://learnblockchain.cn/article/2450) Schorr签名与椭圆曲线 [区块链中的数学-Uniwap自动化做市商核心算法解析](https://learnblockchain.cn/article/1494) Uniwap核心算法解析(中)

写在前面

上一篇介绍了RSA Accumulator非成员证明以及区块链中的应用,有些细节没有展开,比如说为什么要使用素因子?因为它们的乘积将唯一地表示集合。否则,会有混淆【同一乘积,会有不同因子组合,如18 = 2 9 = 3 6】等等。

到现在为止,有了签名,密码学承诺,同态计算,椭圆曲线等基础, 接下来可以看零知识证明的具体内容了。本篇属于科普,相比以往,愉快阅读不烧脑!

何谓零知识证明

零知识证明通俗来说通过某种手段让验证者相信(确认)证明者的陈诉正确(例如知道某个关键信息),同时不暴露该信息本身。 网络上有很多例子可以帮助理解,这里我们举一个场景: 假如V捡到一个丢失的银行卡,P过来说银行卡是他的,并说他知晓银行卡卡号和密码,由于银行卡在V手中,V可以轻松判断P说的卡号是否正确,但是V依然不太相信P就是卡的主人,于是P还说知道银行卡的取款密码,但是不能直接告诉V否则的话就泄露了。 于是他们约定,来到附近的ATM机旁,V离ATM机保持一定距离, 使得能够看得见P执行取款操作,但不能太近以至于看到P输入的取款密码。P就在ATM旁等待V的操作指令。

二人就位后,V让取出100元,P插入卡,输入密码后取出100元(假设卡里确实都是有钱的),V让再取出300元,P照做又一次取出了300元,反复几次后,V确信银行卡就是P的。

P通过这种方式拿到了银行卡,没有让V知道其取款密码,这个模拟的场景就是零知识证明的应用场景了。

用途

零知识证明常用于以下场景: (1)证明隐私数据情况: 一个人的银行账户金额多于 X; 去年,一家银行未与实体 Y 进行交易; 一个人的信用评分高于 Z; 在不暴露全部 DNA 数据的前提下匹配 DNA

(2)匿名认证: 在不揭露身份的情况下(比如登录密码),证明请求者R有权访问网站的受限区域; 证明一个人来自一组被允许的国家/地区列表中的某个国家/地区,但不暴露具体是哪个; 证明一个人是某机构会员但不是是谁。 (3)匿名支付/代币: 区块链中的(不可追踪的)隐私币; 付款完全脱离任何一种显示身份; 纳税而不透露收入;

(4)外包计算 将昂贵的计算任务外包,并在不重新执行的情况下验证计算结果是否正确;它打开了一种零信任计算的类别; 改进区块链模型,从所有节点做同样的计算,到只需一方计算然后其它节点进行验证等,zk rollup layer2方案等。

ZK-SNARK

自1985 年,零知识证明这个概念在 “交互式证明系统的知识复杂性”一文中被引入,后来包括非交互式研究,近几年在区块链的研究与应用发展迅速。 零知识证明系统要满足以下性质。

  1. 完整性: 只要陈述(statement)是正确的,prover 就可以让 verifier 确信;
  2. 可靠性: 如果陈述(statement)是错误的,那么作弊的 prover 就没有办法让 verifier 相信
  3. 零知识: 协议的交互仅仅揭露陈述(statement)是否正确而不泄漏任何其它的信息

目前成熟应用是zk-SNARK技术方案。这个术语含义:

ZK-SNARK全称: zero-knowledge succinct non-interactive arguments of knowledge

Succint (简洁性) : 与实际计算的长度相比,生成的零知识证据消息很小。

Non-interactive (非交互性) : 对于 zk-SNARK 算法来说,通常有一个构建阶段,构建阶段完成之后,证明者 (prover) 只需向验证者 (verifier) 发送一个消息即可。而且,SNARK 通常还有一个被称作是 "公开验证者" 的特性,意味着任何人无需任何交互即可验证零知识证据,这对区块链是至关重要的。

Arguments (争议性) : 验证者只能抵抗计算能力有限的证明者的攻击。具有足够计算能力的证明者可以创建伪造的零知识证据以欺骗验证者。这也通常被称为 "计算完好性 (computational soundness)",而不是 "完美完好性 (perfect soundness) "。

of Knowledge : 对于一个证明者来说,在不知晓特定证明 (witness) 的前提下,构建一个有效的零知识证据是不可能的。

小结

在任意的零知识证明系统中,都有一个 prover 在不泄漏任何额外信息的前提下要让 verifier 确信某些陈述(Statement)是正确的。

ZK-SNARK目前应用较多,有不少成熟的库,如libsnark,bellman等. 也有不需要setup的zk-stark的方案,以后有时间再说吧。

好了,下一篇继续介绍零知识证明其他内容!。

原文链接:https://mp.weixin.qq.com/s/LHuRAA1RPzbccKHZ1wdU6g 欢迎关注公众号:blocksight

相关阅读

区块链中的数学 - RSA累加器的非成员证明 RSA Accumulator非成员证明以及区块链应用

区块链中的数学 - Accumulator(累加器) 累加器与RSA Accumulator

区块链中的数学 - Kate承诺batch opening Kate承诺批量证明

区块链中的数学 - 多项式承诺 多项式知识和承诺

区块链中的数学 - Pedersen密钥共享 Pedersen 密钥分享

区块链中的数学 - Pedersen承诺 密码学承诺--Pedersen承诺

区块链中的数学 - 不经意传输 不经意传输协议

区块链中的数学 - RSA算法加解密过程及原理 RSA加解密算法

区块链中的数学 - BLS门限签名 BLS m of n门限签名

区块链中的数学 - BLS密钥聚合 BLS密钥聚合

Schorr签名与椭圆曲线 Schorr签名与椭圆曲线

区块链中的数学-Uniwap自动化做市商核心算法解析 Uniwap核心算法解析(中)

区块链技术网。

  • 发表于 2021-04-24 12:18
  • 阅读 ( 897 )
  • 学分 ( 18 )
  • 分类:入门/理论

评论