您好!刚知道Zcash吗?
The Zcash network is young, but evolving quickly! Sign up and we'll be in touch with monthly highlights on ecosystem growth, network development and how to get started with Zcash!

语言

Zcash 的决定性建设

Kevin Gallagher | Oct 17, 2016

如 Mike Perry 在 Tor 项目所写下的 写回2013, 当斯诺登事件发生时,最令人生畏的场景之一是“水坑式”攻击,它的原理是攻击者 “攻击软件开发过程或者将他们自己编写的木马进程发布到成百万的机器中去。”

虽然当前世界还未见证过很多这样的攻击,但 Zcash 区块链和它的用户群可能会被作为攻击对象,因为我们都想把隐私掌控在自己手中,同时也因为 ZEC 作为现实世界货币有较高的价值预期。

我们期待能够为世界呈现可以自证安全的软件,正如 一些审计方案 一文中提到的我们的任务。因此,对于我们将发布的 1.0.0 版本中,我们已经开始了一个决定性的建设过程,它被称之为 Gitian 的恩惠。

Gitian 是一个安全软件分发方法,它允许不同的开发者建立相同的二进制文件。它最初由 Bitcoin Core 开发,后面逐步被 Tor Project 采纳。密码学签名和哈希计算保证了链工具无法被官方资源篡改,并可以被用于二进制文件的最终发布。

它如何工作

在 Gitian 中,你有一个输入列表,他们中的每一个都有哈希数。它的输入包括 Zcash 核心代码,它们依赖于第三方,它是使用的 OS 打包方式。它同时有明确的输出:Zcash 二进制文件,它会很快以通过一个恰当的程序资源库与公众见面。对于每次版本发布,我们都有一些团队开发人员将二进制文件加入应用环境中,之后结果将被签入用户的 GPG 密钥中,用于验证他们使用的输入和产生的输出。哈希的证明和相应的签名这时 发布在 GitHub 上 并与其他的相比较。如果与当前的版本有区别,我们将意识到输入在某种程度上被修改了,有可能是被恶意修改了。

我们将永远不会发布没有决定性建设的二进制文档。我们同样正在建造一个精密的安全制度来保护主要签名密钥,这些密钥被用于验证来自我们起源的代码。

在软件中,最常见的非决定论是时间戳。因此,在这整个过程中,时间戳和其他元数据或是被从文件中剥离,或是使用不同的包装将时间戳与参考的数据和时间相对应。大多数情况下,这样做的结果是任何人都能够复制这个建造过程。

在阐述功能之余,当我们开始使用 Gitian 时,我们在 libsnark 中揭示了一个单独的非可再生代码源,libsnark 是我们的零知识证明资料库。我们的两位开发者比较了它们的输出,发现了以下不同:

::
- 1edeaed33a85eef3e190160e781d3b0cc6e389eda53c382ccc555241fa0e1e51 x86_64-unknown-linux-gnu/libsnark/libsnark-0.1-a97aa3c0de8.tar.gz + cec7ca83f5767d8553891906953ffbe38935ecbc379971b6cb7e449467495c00 x86_64-unknown-linux-gnu/libsnark/libsnark-0.1-a97aa3c0de8.tar.gz

深度比较差异,我们发现资料库的二进制形式是不同的使用一个叫做 diffoscope 的工具,我们发现时间戳被用代码写入了二进制数:

::
$ diffoscope libsnark-0.1-a97aa3c0de8.tar.gz libsnark-0.1-a97aa3c0de8.tar.gz.2 --- libsnark-0.1-a97aa3c0de8.tar.gz +++ libsnark-0.1-a97aa3c0de8.tar.gz.2 ├── libsnark-0.1-a97aa3c0de8.tar │ ├── ./lib/libsnark.a │ │ │ @@ -51,16 +51,16 @@ │ │ │ - [ 74] 21:08:27 │ │ │ - [ 7d] Oct 15 2016 │ │ │ + [ 74] 03:30:18 │ │ │ + [ 7d] Oct 16 2016 │ │ ╵ │ ╵

我们快速的追踪了它,得到了 这个功能, 这个功能将日期和时间进行编译,并开发出了一个 修复补丁.

我们相信使用决定性建设是 Zcash 的一个激动人心的里程碑,这也鼓舞着其他开源项目照着去做。

技术细节

Zcash 决定性建造环境, 可以运行 Debian 8, 它是一个与 Vagrant, 一同建立的虚拟设备,用来将 VirtualBox 虚拟化. 它以访客身份运行 gitian-builder 和 Linux containers (LXC) 。

Ansible, 一个基于 Python 的配置管理工具,被用于设定出事环境。与 gitian-builder 相互作用的脚本被写在 Bash 中,它本身是一个基于 Ruby 的工具。我们大部分的工具借用了 Bitcoin Core 的研究成果,但我们也这个系统做了很多辅助性的工作。

我们欢迎任何对于 Zcash 技术感兴趣的爱好者帮助我们研发更多的建造。如果你感兴趣,请在 社区 Slack #zcash-dev 频道中联系我们。