NuLink的零知识证明介绍
作者简介:
作为NuLink Technology的研究员,Rookie是一位激情的创新者,他专注于密码学和区块链技术。
翻译:
Reversing
作为NuLink项目的高级研究员,我一直致力于密码学和隐私保护的研究。多年来,这个领域一直有一个有趣的话题,那就是ZKP(Zero Knowledge Proof,零知识证明)。最近它在社区中引起了很多关注,因为有很多有趣的场景可以讨论。例如,Zcash(1)。我想用一系列的文章来介绍这个超级有趣的话题。
今天将是第一篇文章。通过一个简单的故事,我将介绍什么是零知识证明和它的特性。在后面的文章中,我将给出ZKP的严格形式化定义和NP语言零知识证明的通用理论构造。最后,我将介绍这一技术近年来的发展、分类、代表方案和比较。希望你会喜欢这一系列的文章。
NuLink网络是一个给保护隐私的应用程序开发人员实施最佳实践和最佳安全和隐私的去中心化的解决方案。NuLink平台提供端点加密和加密访问控制。敏感的用户数据可以从任何用户平台安全地共享到云端或分布式存储,并通过代理重加密或属性加密自动授予对该数据的访问。在这个过程中,有必要确保数据的可用性。这里的可用性从字面上看是指数据是终端用户想要的,可以使用的。有一种加密技术可以帮助我们解决这个问题,叫做零知识证明。顾名思义,零知识证明可以让你充分证明你是某些数据的所有者,而不会泄露信息,也就是说,外界对你的数据(“知识”)是“零”了解的。
一个简单的例子,“P(Prover,证明者)如何在不透露答案的情况下证明他知道数独游戏的答案?”。方法如下:P将答案按顺序记录在一组卡片上,并将其翻面(记录答案的那一面朝下)。V(Verifier,验证者)可以选择每次按行或列或块(3*3的区域)拿起卡片,然后翻开验证(验证之前先将卡片的顺序打乱,否则数独的答案就会泄露出去,不再构成“零知识”),每堆卡片都是1–9。假设这种行为重复100次,如果所有的答案都是正确的,那么P确实知道解决方案。否则,P需要猜测V在每一次行为中的验证规则。那么他的答案就会错几次。整个证明过程并不能帮助V得到答案(V仍然不知道数独要如何解,因为他每次只能拿起1行或1列或1块)。这就是一个零知识证明的例子。接下来,我们将给出一个关于证明系统(proof system)和零知识属性的非正式定义。粗略地说,一个合理的证明系统应该满足以下两个属性:
完备性(completeness):如果证明者P和验证者V都诚实地执行证明系统的指令,那么验证者V将以高概率接受所有真实信息的证明。。
健全性(soundness):对于有任何错误信息的证明者P,验证者V以高概率拒绝它。
从安全的角度来看,证明系统的属性只涉及保护验证者V免受欺骗的问题。接下来,我们将给出零知识的大致定义,这是一个与证明者P安全有关的属性。
零知识(zero knowledge):对于验证者V来说,在证明结束时,他不会获得任何额外的 “知识”:他在证明中观察到的一切都可以由模拟器模拟出来,无需与验证者P互动。
很明显,上述定义并不严谨,这只是为了让读者快速理解这些概念。为了进一步探索ZKP技术,我们需要了解密码学中的承诺(commitment)、语言(language)、证明系统、零知识证明系统(zero knowledge proof system)、完备性、健全性和零知识的正式定义。在接下来的文章中,我们将介绍这些定义。模拟者(Simulator)的概念是亮点,这是一个有趣的概念,可以帮助我们定义零知识。