Web3 Ape

Posted on Apr 13, 2022Read on Mirror.xyz

什么是零知识证明?

https://ravjot.hashnode.dev/what-the-heck-is-zero-knowledge-zk-proof

翻译自上文

https://twitter.com/RangerBTC

什么是零知识证明?

一种方法,一方(证明者)可以在不透露任何实际信息的情况下证明它知道秘密或对另一方(验证者)的陈述是真实的。

“零知识”一词本身证明了一个事实,即没有透露任何信息,但第二方(验证者)有理由相信第一方(证明者)知道秘密或他们的陈述是真实的。

那么为什么我们需要零知识证明呢?当我们不信任某人透露信息但想说服他们我们知道秘密或我们的陈述是真实的

现在有两种零知识证明

  1. 交互的
  2. 非交互式

1️⃣ 我们先来看一个交互式零知识证明的例子

假设您必须 ZKP 证明您的年龄 >=18,但实际上并未透露您的年龄。我们需要一个第三方机构,可以证明您的年龄如下

当局说:“谢谢你的出生证明复印件,我们看到你已经 21 岁了。这是一个秘密号码,请妥善保管。以后你会需要的。”

“您的密码将被哈希 22 次,为您生成最终的年龄哈希码(是的,它必须是 age+1 才能使其正常工作)。所以我们给你的密码和这个最终的年龄哈希码之间有 22 个哈希步骤。”

“我们用你的名字、时间戳和这个最终的年龄哈希码来结束这件事。那是你会给别人的证明包。”

现在,每当您想向某人证明您已超过 18 岁时,您实际上必须证明从您的密码到您的最终年龄哈希码有超过 18 个哈希步骤。

为此,您只想向他们展示最后 18 个散列步骤,您可以自己执行前 4 个散列步骤(将您的密码散列 4 次)然后给他们结果;第 4 个哈希。

然后他们对此进行 18 次哈希处理(因为我们现在已经对您的密码进行了总共 22 次哈希处理)他们最终会得到最终的年龄哈希码,并且可以验证这一点,因为这在证明工具包中。

实际上,验证者是在说;'向我们发送一个值,我们可以对其进行 18 次哈希运算,以匹配您的最终年龄哈希码'。如果您不是 18 岁,那么您的最终年龄哈希码将没有 18 个步骤,并且您将无法给我们一个起点,我们可以哈希 18 次以获得您的最终年龄哈希码。

这也是一个很好的例子👇

良好的零知识证明示例 - MathOverflow

▶但是这种交互方式有一些限制:

  1. 每次见面都需要进行整个漫长的过程。这是一个非常简单的散列过程,想象一下需要对实际的密码算法进行计算!
  2. 双方需要在同一地点,同一时间在线或面对面

2️⃣ 这里出现非交互式样张

1986 年,Fiat 和 Shamir 发明了 Fiat-Shamir 启发式算法,从而成为第一个基于交互式零知识证明创建数字签名的算法

这种 Fiat-Shamir 启发式可以使用承诺方案转化为非交互式 ZK 证明,从而形成 ZK-SNARK 或零知识简洁非交互式知识论证

为了使 Fiat-Shamir Heuristic 更强大的承诺被使用。承诺方案是许多密码协议的基本组成部分。承诺方案允许提交者发布一个值,称为承诺,将它们绑定到消息(绑定)而不显示(隐藏)它。

Pederson 承诺和多项式承诺是用于 ZK 证明的两个最突出的承诺方案

但直到 2013 年左右,ZK-SNARK 才真正有效地在实际应用中实施和使用。

我建议您阅读 Vitalik Buterin 撰写的这篇出色的文章,简要 介绍 zk-SNARK 是如何实现的,并解释了它们是如何实现的。你可能不会一口气抓住它。阅读 3-4 遍,一旦你明白发生了什么,你就会感到不寒而栗。

▶ 在像 AI 和 Web3 一样似乎不可避免的后量子世界中,我们需要确保我们为 ZK-SNARK 选择的加密函数不会被量子计算机暴力破解。这就是为什么要进行改进以实现后量子安全。如果你想了解更多,可以观看 ACM 的这个演讲👇

改进的非交互式零知识应用于后量子签名

好吧,现在我们知道 ZK 证明是什么,但它们有什么用途🤔?

从概念上讲,有两个主要用例:

  1. 扩展区块链交易
  2. 隐私-保护医疗保健等部门的个人数据

扩展区块链 - ZK Rollups

汇总是一种扩展解决方案,通过在第 1 层之外执行事务但在第 1 层发布交易数据来工作。这允许汇总扩展网络并仍然从以太坊共识中获得其安全性

将计算移出链下基本上可以处理更多的交易,因为只有一些汇总交易的数据必须适合以太坊区块

为了实现这一点,汇总交易在单独的链上执行,甚至可以运行特定于汇总版本的 EVM

在汇总上执行交易后的下一步是将它们批处理在一起并将它们发布到以太坊主链。

整个过程本质上是执行事务,获取数据,压缩它并在一个批次中将其汇总到主链,因此得名 - “汇总”

以太坊如何知道发布的数据是有效的,并且不是由试图为自己谋利的不良行为者提交的🤔?

每个 rollup 在 Layer 1 上部署一组智能合约,负责处理存款和取款以及验证证明。

证明也是不同类型汇总之间的主要区别发挥作用的地方。

乐观汇总使用欺诈证明。相比之下,ZK rollups 使用有效性证明。

在 ZK 汇总中,发布到第 1 层的每个批次都包含一个称为 ZK-SNARK 的加密证明。在提交交易批次时,可以通过 layer 1 合约快速验证证明,并且可以直接拒绝无效批次。

ZK 和 Optimistic rollups 还有很多内容,它们的实现方法和局限性。这只是一个清晰的想法。还有很多。

许多项目正在开发基于 ZK 汇总的以太坊扩展解决方案。一些突出的是 dYdX、Loopring、Polygon Miden、Polygon Hermez

隐私-日常生活应用

假设 A 和 B 两家公司想使用区块链作为媒介进行操作和交流。

A 将资产转移给 B。他们希望将其保留在自己内部。是的,区块链会带来透明度、互操作性、数据安全性和完整性以及其他好处,但为什么公司会公开分享其内部物流信息呢?零知识证明是要走的路。

假设您想私下将一些钱转给海外的朋友,但又不想让官员窥探。你会怎么做?零知识证明是出路。

ZK 证明可以在其他几个领域产生深远影响,例如医疗保健、保险、电子投票、身份管理。

在医疗保健中保护 DNA 数据、个人信息、医疗保健记录、基本病史信息、药物可追溯性、临床试验、医疗保健供应链、器官移植。

在保险方面以数字形式获得保险单和保险证书、个人信息、车辆信息、解决索赔。

使用区块链和 ZKP 进行身份管理具有深远的意义。每个与 kyc 相关的应用程序、学校、大学、支付应用程序都要求提供我们的身份证件图像,例如驾驶执照、护照、选民身份证件、国民身份证件。我们敏感的个人数据实际上就在那里,我们甚至没有意识到这一点。使用 ZKp,我们可以保护所有这些 ID,并且只向供应商、应用程序和官员透露必要的信息。事实上,我们可以彻底改变使用 zkp 发布这些 ID 的方式。

我们可以对所有这些使用 ZK 证明,这样每当需要一些信息时,用户都会批准它并提供所需的信息,从而隐藏其余的细节。

直到 2013 年之后,ZK-SNARKs 才足够有效地实际实施并被开发人员使用,这就是为什么使用 ZKPs 的不同应用程序在未来出现的空间很大。

Zcash 于 2016 年推出,是目前唯一成功实现 ZK-SNARKs 并提供用户之间私密交易的知名产品。

ZK-SNARKs 与 ZK-STARKs

资料来源:Matter Labs github 存储库

zk-STARK 代表零知识可扩展透明知识论证,zk-SNARK 代表零知识简洁非交互式知识论证。

这两种零知识技术本质上都是非交互的,这意味着代码可以自主部署和行动。

Zk-SNARK 在其基础上的安全性依赖于椭圆曲线。密码学中的椭圆曲线在基本假设下运行,即找到随机椭圆曲线元素相对于已知基点的离散对数是不可行的。zk-SNARKs 也需要一个可信的设置。

受信任的设置是指用于创建私人交易所需的证明和验证这些证明的密钥的初始创建事件

如果用于在受信任的设置事件中创建这些密钥的秘密没有被破坏,则可以通过虚假验证利用这些秘密来伪造交易。

众所周知,SNARK 的另一个局限性是它们在后量子世界中的可行性

👉另一方面,开始在网络中使用 STARK 不需要受信任的设置。这些也被标记为抗量子。虽然 STARK 的证明大小比 SNARK 大得多

但 STARK 仍处于起步阶段,对开发者的支持并不多,因此距离我们看到基于 ZK-STARK 的产品还有几年的时间。