语种

仪式的设计

Zooko Wilcox | Oct 26, 2016

Update: Read our full summary of what took place in the Zcash Parameter Generation Ceremony.

有毒废料, 和其他伪造 Zcash 的方式

正如我们在 之前博客 中提到的,在 " Sprout " 1.0 版本的隐私交易依赖于 SNARK 公共参数 ,用来建立和验证零知识证明。(当我们升级 Zcash 协议并修改零知识证明时 - 这是我们计划在一年内要做的 - ,我们将产生新的 SNARK 公共参数)。生成 SNARK 公共参数与生成公钥或私钥的方式基本相同,生成后保留公钥并销毁私钥。

如果攻击者拿到了对应私钥的副本,他们可以使用它伪造 Zcash 。这是他们唯一能搞的破坏,他们不能侵犯他人隐私或窃取其他人的 Zcash 。

我们可以把私钥称为“ 有毒废料 ”,我们的协议被设计不允许有毒废料存在。假设在你的工厂拥有多种不同的化学副产品,它们每一种单独存在时都是无害的,但如果你把它们混合在一起,它们将产生一个难以安全保存的危险物质。我们的方法是将每一种单独的化学品分离,并将他们销毁,因此有毒废料将永远不能够成型。

重要提醒:销毁私钥并不保证 Zcash 不能被伪造。每一种货币技术自创立以来都经历了伪造的迫害。比特币曾经的一个漏洞致使第一个发现比特币的人伪造了 1840 亿枚比特币。 Zcash 有可能具有相似的问题,这些类似的问题与有毒废料私钥毫无关系。

在比特币中,这些问题是容易被发现的,因为在比特币中每一笔交易都是公开可查的。 而 Zcash 却不具备这样的能力。事实上, 任何 可以隐藏交易数量的交易系统都有伪造货币同时不被发现的风险。

Zcash 可以被伪造并不是唯一的危机,难以查询伪造事件也不是。我们将会在这篇文章的结尾再次对这个观点给出解释。

关于安全仪式的设计

为了减小攻击者拿到有毒废料带来的危险,我们研发了 多重计算 (MPC)协议,这个协议要求位于多个不同地理位置的多个参与者共同创建公钥。每个地理位置分散的参与者,都能够生成一个公钥 碎片 。创建过程需要他们使用与之对应的私钥碎片。他们将的公钥碎片拼接在一起,产生最终的公共参数,之后将他们的私钥碎片删除。

使用 MPC 协议,只要至少一个参与者成功删除了他们的私钥碎片,这时有毒飞亮将不可能被任何人重建。重建有毒废料的唯一方式是所有参与者串通起来做坏事。

我自己,与五个我所信赖的人,他们都是道德高尚并且注重信息安全的。我们六个人在合约中充当参与者的角色。我们将自己称为“见证人”,我们将执行这条合约的过程称为“仪式”。

在仪式的开始时,有三位见证人的身份揭示给了所有的参与者与监督者,他们是:Andrew Miller ( 计算机科学家 and Zcash 技术顾问),Peter Van Valkenburgh, 和我自己。

我告诉他们,他们的见证人名字是 “Moses Spears”, “Fabrice Renault”, 和 “John Dobbertin”, 但事实上,我可以起了这几个名字,目的是暂时隐藏见证人的身份。同样,我是为了不让那些潜在的攻击者窃听我们的对话(大部分时候是加密的),或者颠覆见证人中的一员。

在仪式的最后,10月23日,“Moses Spears” 的身份其实是 NCC Group 的 Derek Hinch 。我们秘密地雇佣了 NCC Group, 他们是我们计算节点的操作员之一。除了 Nathan Wilcox ( Zcash 公司的 CTO ),我自己和 NCC Group,没有其他人知道这件事。NCC Group 的任务是在仪式进行过程中保护他们的计算机节点(他们将节点安全的保存在 Austin 的设施中),另外一项任务是对仪式进行取证分析,这样做的目的是检测并保护系统不受网络攻击。另外,他们搭建了一个计算机节点的冗余模型,但它并未在仪式中被使用。他们尝试入侵计算机节点,目的是为了测试到底从见证人那里窃取私钥有多难。NCC Group 将会撰写一份技术文档,报告他们的工作和收获。

在10月27日, “Fabrice Renault” 也 揭露了自己的身份 ,他是 Bitcoin Core 的开发人员 Peter Todd。Peter 曾经对 Zcash 参数产生仪式表示怀疑,我告诉他成为一个见证人能够更好的帮助他检查并提供建议。更重要的是,我相信 Peter 永远不会与他人共谋来窃取撕咬碎片。最后,我猜想他会部署非常强的信息安全防御体系。我不知道关与这个防御体系的细节,因为他并没有将他的报告公开。我们并没有为 Peter 这么做而向他支付工资,尽管我们同音承担他的开销,比如在任意的商店购买一台新电脑,并在不久之后彻底把它摧毁掉。

“John Dobbertin” 的身份并没有公开,我并不知道我和 John 什么时候能够准备好公开这件事。

一些见证人将见证过程制作了照片,视频或音频。我们邀请了当地丹佛电台的一名记者来跟踪报道。我们将会在我们归档,加标签和整理好这些材料后尽快将其发布,并将这些资料做好备份。

我们选择的仪式由三部分防御工作组成,分别是: 多当事人计算, 空隙, 和 证据追踪

多当事人计算

多当事人计算 的作用是,如果想让我们取胜,仅需要我们中的 一个人 成功删除私钥碎片就可以了。只要任何一个见证者删除了他的私钥碎片,这就表示有毒废料将永远不能被生成。这也是我们这样设计的唯一目,它与其他的防御方式相吻合。

空隙

每一个参与者的私钥碎片都单独的在带有空隙的机器中被使用。空隙 代表着电脑与所有的网络存在物理的隔离。

每一台机器都是新买的,而且仅为存放和销毁私钥碎片所使用,从这台电脑被见证人买回来到这台电脑使用寿命终了,它将不会被连接互联网。见证人在第一次开启电脑前手动的移除了无线电设备(wifi 和蓝牙)。

这些空隙工具被称为 "计算节点"。

空隙将大部分的攻击表面移除,使得攻击者难以侵入计算节点,因为计算节点与互联网被用物理的方式隔离开了。

an air-gapped Compute Node being set up

证据追踪

我们需要在计算节点间沟通信息,用于执行多见证者计算协议。

每一个见证者除了拥有计算节点外,还拥有一个连接因特网的单独设备,我们将其称为"网络节点"。网络节点用于接收信息,并把他们烧写在光盘上,之后见证人使用光盘将数据导入计算节点。

通过这种方式,我们将-网络-这个攻击面更换为更难攻击的 - DVD 光盘。我们期望新的攻击面难以被攻破,但这依然有待时间的检验。例如,如果你恶意编辑的数据放在光盘上(如果你已经提前侵入了网络节点),这时计算机节点的 DVD 阅读器有可能会被入侵,亦或是攻击者可能截获计算节点的用户密码来阅读信息内容。

使用只能写入光盘的好处是,它能提供不能被抹除*证据线索*来检查仪式中的信息传输路径。比如,假设在未来某个人发现了 DVD 设备中的安全漏洞来。这时,我们可以问: 被入侵的计算节点*会不会*把信息泄露给光盘呢?我们可以通过检测光盘的方式来检测计算节点中的数据是否被泄露了。

另外需要注意的是光盘不能被重写 - 意思是他们是 DVD-R's,而不是 DVD-RW's - 因为在这种情况下,即使攻击者成功接管了计算节点,也不能让他们拥有抹掉证据的能力。

ceremony design

额外的防御

除了上面提到的三重核心防御外,我们同样使用了很多额外的技术工具来让我们的防御更加巩固。我们秘密地保留了仪式的细节 — 比如仪式执行的时间,有哪些参与者,我们运行的是哪些源程序等等。 — 知道仪式结束 — 也就是现在!我们在计算节点上使用了更加安全版本的 Linux。我们所有关与计算和网络的代码都写在了 Rust 上 — 一个可以避免写下很多安全隐患的编程语言。我们制作了一个安全哈希链,使用它来传递信息,我们在 Twitter互联网收藏夹, 上发布了哈希链,并把它的时间戳加入到比特币的区块链中。另外,每一个见证人选择了他们额外的本地防御,他们将会在以后的文档中做详细阐述。

未来的工作

我们的任务还未完成,下面紧接着是两步重要的工作:

证据归档和独立审查

我们将会撰写更多解释协议和仪式细节的文档,包括见证人的身份,仪式何时何地举行(六个不同的地点)和过程的大量细节。我们将会发布我们记录的视频,音频,照片和文字证据。我们同样要求每一个见证人写下他们的所做和所见到的证明书。我们正在努力的撰写,发布和归档所有的资料,以便每个人都能够进行审阅。

我想这份材料对于偏执的信息安全专家将非常有趣。我期待听到他们关与我们安全措施和我们执行仪式的评价。据我所知,Zcash 参数生成仪式是迄今为止最卓越和最复杂的密码学仪式。

我们已经开始了这方面的工作,比如我们发布了网络进程和计算进程的 源程序代码 。请阅读,如果你发现了容易受到攻击的漏洞,请立刻联系我们。

一个 Zcash 伪造检测技术的提案

尽管我们对于 Zcash 1.0 公共参数中有毒废料的销毁机制感到满意,有毒废料将不会存在,但我*并不*确定 Zcash 不能被伪造。这时由于,正如我上文中谈到的,除了从有毒废料中再生私钥外,还有其他方式可以伪造 Zcash 币。

同样,那些不能第一之间见证仪式的人可能对于它是否被安全的诚实的执行感到疑虑。对于我们来说,证明我们所做的跟我们说的一样,是很难的一件事。我们有可能勾结了6名见证人来假装执行了这个仪式 — 并伪造了视频 — 把它当作舞台魔术巴西。我们可能秘密地拷贝了私钥碎片并把它们结合在一起生成了有毒废料。我选择的其他5个见证人是我认为绝不会做以上这些事情的,但你并不了解这些人,这时你可能需要额外的保障措施。

因此,我提议在未来的 Zcash 协议升级中 — 在 Zcash 1.0 "发芽" 版本之后 — 加入*伪造检测*功能。这将使得任何人(普通用户)来检测 Zcash 货币的流通总量。这允许我们来判断是否存在伪造 — 是否由于有毒废料泄露了私钥或者其他原因 - 。

我会在未来的博客中写下更多以上主题的内容。

结论

我们使用了卓越的密码学技术和信息安全技术来产生 SNARK 公钥参数,为 Zcash 1.0 "发芽" 服务。仪式的总体设计是基于多执行人计算,空隙和不可磨灭的证据痕迹。六个不同的见证人分别执行了仪式的一部分。多执行人计算保证了就算5个见证人密谋,或者秘密传统,来制造有毒废料,只要还有一个诚实的见证人销毁了他的私钥碎片,有毒废料就不会被重新制造出来。尽管仪式的力量强大,但我依然倡议在未来的一年内升级 Zcash 协议,并在现在的*抵御机制*中加入*监督机制*。