在本系列的第三部分中,我将重点介绍零知识证明,这是加密货币包括Zcash和以太坊在内的更大财务和数据隐私的基石。
在酒吧,你随意与你的同伴讨论隐私选项。 一位绅士以Dash的PrivateSend发誓。 另一位同事提议向你推销最好的莫内罗 。 调酒师是以太坊的粉丝 - 她一直不关心隐私,因为它“ 在路线图上 ”。 在混音器,铃声签名和主节点之间,您大声想知道是否有更好的工具来确保数据和财务隐私。
在酒吧的尽头,一个瘦弱的秃顶男人看起来像他想加入谈话。 你注意到,并微笑。 那个男人紧张地朝你倾斜,吞了一口,并以一种平静的语气说道......
“......零知识证明。”
零知识证明
零知识证明是一个令人不快的话题。
大多数情况下,他们不舒服,因为他们会让人感到愚蠢,或者让人担心他们会变得愚蠢。 密码学家和开发人员都在为这个话题而努力。
零知识证明是一类具有许多不同风味的加密工具。 作为一个概念,它们并不可怕,值得花一点时间去理解。
像大多数事情一样,这个主题可以剥离和研究。 有一点比喻可以大大了解什么是零知识证明以及他们能做什么。
陌生的危险
想象一下,你在街上遇到一个人,他们声称认识你的母亲 - 她在医院里,现在你需要和他们一起上车去看她。 你在泡菜。 你担心你的母亲,但现在你应该感到一些严重的“陌生人危险”。
你需要确认这个陌生人实际上是你可以信任的家人朋友。 所以你询问他们,问问他们应该只能回答他们是否真的离家很近。
假设你提出了很好的问题,你刚刚发明的协议就是一个零知识证明的例子。你, 验证人 ,正在核实陌生人或证明人的确了解你的母亲。 你正在互动地做这件事,提出难以提前准备的问题,除非证明者是他们自称的人。
而已。 零知识证明是证明者说服验证者他们有一些秘密知识,而不直接向验证者透露知识。 在我们的例子中,知识不能直接显示出来,因为我们没有一种简单的方法来“序列化”和分享人类知识,比如遇到了你的母亲 - 只是口头和视觉语言的松散近似。
挑战/回应
一个共同的零知识证明的一个很好的例子是密码挑战 - 响应协议 。
尽管他对碳水化合物有着长期和强烈的敌意,但你的朋友Zooko推荐他只是吃了一顿美味的披萨。 关注他的账户已经被破坏,你发送了一个DM,要求他加密¹消息“是的,我真的只吃了整个披萨。 甚至没有肉!“用他的私钥。如果他发回的密文可以用他已知的公钥解密,那么你知道他仍然可以访问他的Twitter账号2。
在这个例子中,重要的一点是你作为验证者选择了消息。 如果证明者选择了该消息,并且Zooko的账户已被破坏,则攻击者可以使用Zooko用他的私钥访问的任何过去的消息。 例如,假设Zooko在过去的某段时间合法加密了“我爱吃肉”的消息,并且攻击者可以访问密文和明文。 作为证明者,攻击者可以使用该消息,在称为重播攻击的情况下重复验证者。
所以只要Zooko以前从未加密过这个信息,你就很好。 在实践中,您还应该在消息中包含一个随机数或随机数,以确保它是唯一的或更好的使用可以为您处理的签名算法,而不是非对称加密。
虽然大多数零知识证明具有类似的交互性,但要求验证者以某种方式询问证明者,但也存在证明者不需要对验证者的挑战作出响应的变体。 例如,考虑证明对文件的访问。 证明者可以发布文件的散列。 验证者可以确信证明者有权访问该文件,因为否则会出现该散列的计算不可行性。
应该清楚的是,零知识证明不会“解决”隐私。 相反,他们正在为隐私保护系统构建模块。 不同类型的零知识证明可以为这些系统提供不同的功能。
ZK-SNARKs
当加密货币空间中的人们说“零知识证明”时,他们通常指的是特定类型的证明 - zk-SNARKs 。
支撑zk-SNARKs的数学难以理解,但除非你正在实施它们,攻击它们,或者太偏执地拿一个密码学家的话来说,你可以跳过数学并专注于他们的工作。
我们来谈谈这个名字。 “zk”代表零知识。 令人惊讶的是,计算机科学还有许多其他的“咆哮”,包括定理证明和图表类型,以及计算机科学之外的其他计算机科学,包括想象中的生物,视频游戏和讽刺性评论。
这个特殊的SNARK代表了知识的简洁的非交互式适应性论证 ³ 。
您可以将“简洁”阅读为“足够高效,可以在合理的时间内进行计算”,这对于验证尤为重要。
“非交互式”意味着SNARKs不要求验证者询问证明者。 相反,证明者可以提前发布他们的证明,验证者可以确保它是正确的,类似于散列文件。
最后,“知识的适应性论证”是指一些计算知识的证明。
这到底意味着什么? 想象一下,你的小学数学老师给你一个复杂的算术问题。 zk-SNARK不是提供答案(并显示你的工作!),而是让你证明你知道答案,而不用实际分享它。
这是一个巧妙的技巧,但有一些注意事项。
SNARKs是资源密集型的。 正如我们将要讨论的Zcash一样,涉及的一些计算使得某些用例(包括移动设备和低功耗设备的使用)很困难,尽管最近在这个领域的进展令人鼓舞。
还有一个失去秘密的问题。 SNARK允许用户证明他们可以访问秘密,但用户仍然有责任维护秘密的完整性和可用性。 当我们在Ethereum上讨论SNARK时,我们将更详细地讨论这个限制。
然而,SNARKs最显着的结构缺陷是所谓的设置阶段。
安装阶段
对于您想要用SNARKs解决的每种类型的问题,都有一个称为设置阶段的前期沟通步骤。 在这个阶段,你要证明的电路或计算是固定的。 由于这个限制,SNARK并不适合运行任意图灵完备的智能合约 - 每个新合约都需要一个新的安装阶段。
为了使这个更具体,你的数学老师给你的每个问题都需要一个单独的设置阶段。 可能有一个用于加法,另一个用于乘法。 一旦你完成了你和老师之间的设置阶段的添加,每次给你一个添加问题时都不需要再次重复。 任何新的问题都需要一个新的设置。
设置阶段还有一个值得注意的方面。 在这个阶段,会产生一个秘密,允许发布伪造证据,而不被发现。 在2方设置中,没关系 - 验证者(你的数学老师)是产生秘密的人,只要验证者不与证明者分享秘密(你),安全就会保持。
如果你想公开使用一个特定的电路,并使用多个验证器,那么需要有一个“可信赖的设置”。 而不是一个验证者产生(并希望破坏!)制造证据的秘密,一群人可以一起产生秘密。 只要其中一个人是诚实的,并破坏他们的秘密份额,安全的设置就会得到保证。
有关SNARKs的更详细但非常容易理解的介绍,请查看 Christian Lundkvist 的“带有示例的zk-SNARKs入门 ”。 有关数学的更多信息,请查看 Zcash的解释器,“ zkSNARKs ”或 Vitalik Buterin 的“ Zk-SNARKs:Under the Hood ”系列。
Zcash
我们已经详细讨论了zk-SNARK,以讨论它最高性能的应用Zcash 。
Zcash是基于zk-SNARKs的隐私保护加密货币。 实际上,它是建立在一个特定的SNARK电路上,即Zcash事务验证器,并具有自己的可信任设置。 Zcash用户可以像公开金额,发件人和收件人一样发布交易,就像比特币一样。 他们还可以选择发布私人交易遵循Zcash网络规则的证据,隐瞒发件人,收件人和金额。 用Zcash的说法,这些被称为屏蔽交易 。
作为一个隐私硬币,Zcash经常与莫内罗比较。 这两个项目采取非常不同的隐私方式。
虽然莫内罗的签名提供了对每笔交易的合理可否认性,但匿名集合的大小是固定的 - 单一莫内罗环签名中大多数参与者的记录为4,500。
然而,Zcash的屏蔽交易的匿名程度跨越了屏蔽交易中使用的每一枚硬币。这是一个比环形签名提供的基本更强的隐私保证。
如上所述,Zcash也继承了zk-SNARKs的缺点。
为了创造货币,一组密码学家和知名社区成员参加了一个复杂的安装仪式 。 相信Zcash的安全意味着相信这些参与者不会串通,也不会被迫交出他们分享的秘密。 如果这些股票确实存在,那么任何有权访问的人都可以生产假币,但显然攻击者仍然无法揭穿交易。 大量参与比特币的安全专家彼得·托德分享了他参与该比赛的记录。 这是值得的阅读 。
SNARKs的性能特征也意味着私人交易无法在功能较弱的设备上进行计算,如受欢迎的Ledger硬件钱包 。
Zcash团队自首次发布以来在性能上取得了长足的进步。 在即将进行的Sapling网络升级中 ,用户将看到显着的性能改进。
复仇
到目前为止,在这个系列中,我们专注于金融隐私。 Zcash在金融领域是一个备受瞩目的应用程序,但零知识证明也是帮助确保数据隐私的重要工具。
以太坊是最引人注目的智能合约区块链实施。 不幸的是,迄今为止的隐私故事很糟糕。 关于智能合约的所有细节都在以太坊区块链或全节点内存中公开。 所有基金发件人和收件人,所有交易数据,所有代码执行以及每个合约变量中的状态对于任何关注外观的观察者都是可见的。
今天的以太坊合同需要保持数据隐私,这取决于安全承诺 。 这些简单的方案允许用户通过将其散列发布到区块链来承诺秘密值,稍后在区块链或离线链中揭示该秘密。
不幸的是,这些散列/显示结构本身非常有限。 他们用于赌博和简单的数字资产交换,但不足以表达更多的私人数据。
在以太坊的下一次协议升级中, Metropolis ,智能合约开发商将获得一种新的隐私工具 - 能够有效验证链上的zk-SNARKs。
我们可以用SNARKs启用的以太坊做些什么? 某些合约变量可以有效地变为私人。 不是将秘密信息存储在链上,而是可以与用户一起存储,用户通过使用SNARK证明他们遵守合同规则。 这些用途中的每一种都需要自己的可信赖设置,但一旦存在电路,就可以轻松克隆。
想象一下,ERC20类似的令牌不会公布个人持有者的余额,同时仍然维持公共的和可预测的令牌供应,或者是一个将贷款条款保密的贷款平台。
只要您的合同数据与合同用户有一对一的对应关系,并且用户可以信任这个秘密,那么zk-SNARKs是一个很好的方法。
但是,对于以太坊上的SNARK,你无法实现的是独立于用户的自治性隐私 。以太坊的SNARKs依靠一个秘密的外链派对。 没有脱链的一方,就无处追踪秘密,使证据无用。
没有用户的隐私
对于许多消费者应用来说,这不是一个沉重的负担。 毕竟,在公共区块链空间中的许多人在哲学上与保持用户对私人信息的控制保持一致。
对于以太坊的私人数据,消费者和企业都有其他有价值的用途。 以太坊难以或不可能实施的一些想法:
- 先进的分散治理。 自治组织不能在未授权给用户作为“秘密持有人”的情况下存储私人信息。
- 在一些链式交换中进行自主交易,包括0x项目 。
- 保持独立资产的唯一“保管”合同。 例如,考虑一个需要独家保管比特币钱包的以太坊合同。
- 授权访问身份,医疗记录或其他私人信息。 SNARK不允许对私人数据进行任何类型的访问控制,要求用户共享私密信息。
公共区块链上的隐私,特别是自治性隐私很难。 在下一篇文章中,我们将讨论私有和许可链,以及其他维护数据隐私的方法。