Greetings! New to 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

Snowdenに関する事実が表面化する中、Tor ProjectのMike Perryがすでに 2013年に書いた ように、最も恐れるべき状況はいわゆる「水飲み場型攻撃」です。これは、敵対者あるいはマルウェアが*“単一の瞬間的な公式アップデートで何百万もの機械に自身を配信し、ソフトウェア開発やビルドプロセス自体を攻撃するものです。”*

プライバシーを制御できること、そしてZEC が実際の金銭価値を得る可能性のあることから、いまだかつてそのような攻撃は発生していないものの、Zcashブロックチェーンとそのユーザーベースは絶好のターゲットとなり得ます。

Zcashでは、これまでに委託した 監査 からもお分かりいただけるように、検証を伴う安全で信頼できるソフトウェアを世界中に提供することに尽力しています。従って、バージョン 1.0.0のリリースには、Gitianの協力を得て、以下の 決定論的なビルドプロセスを使用することにしました。

Gitian は、複数のデベロッパーが同一のバイナリを作成することを可能にする安全なソフトウェアの配信方法です。元々 Bitcoin Core により開発され、その後 Tor Project に採用されました。ツールチェーンが改ざんされないように、また、正式なソースが最終的にリリースされるバイナリに使用されるように、暗号化された署名とハッシュが使用されます。

しくみ

Gitianには、それぞれ関連付けられたハッシュを持つ入力のリストがあります。これは、Zcashのソースコード、サードパーティへの依存、およびOSパッケージです。また明白な出力であるZcashバイナリもあり、これはDebianベースのディストリビューションの公開パッケージリポジトリからすぐに入手できるようになります。リリースごとに、プロジェクトの複数の担当者が環境内でバイナリを作成し、GPGキーを使用して結果に署名し、使用された入力と生成された出力を確認します。ハッシュと対応する署名のマニフェストは GitHub に公開 され、他と比較されます。差異がある場合は、悪意の有無に関わらず、入力が何らかの形で変更されたことになります。

確定的に構築されていないバイナリはリリースしません。また、オリジナルからのダウンロードを検証するために使用されるマスター署名鍵の保護に関する洗練されたセキュリティ体制を構築しています。

ソフトウェアにおける非決定性の最も一般的なソースは、タイムスタンプです。 したがって、このプロセス全体では、タイムスタンプやその他のメタデータはファイルから取り除かれるか、タイムスタンプが参照日時に対応するようにさまざまなラッパーが使用されます。これにより、通常は誰でも再現可能なビルドとなります。

例示として、最初にGitianを使用し始めたとき、ゼロ知識証明のために使用するライブラリであるlibsnarkで、再現性のない単一ソースを明らかにしました。開発者2人が出力を比較したところ、不一致が見つかりました。

\- 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にとって魅力的なマイルストーンであり、他のオープンソースプロジェクトを後押しします。

技術的詳細

Debian 8を稼働する Zcashの決定論的なビルド環境 は、 VirtualBox による仮想化を使用し、
Vagrant で作成された仮想マシンです。ゲストとして gitian-builder とLinuxコンテナ(LXC)を実行しています。

Pythonベースの Ansible コンフィギュレーション管理ツールは、初期の環境に使用されます。gitian-builderと作用するスクリプトはRubyベースのツールで、Bashで書かれています。弊社のツールの多くは、Bitcoin Coreにより作成された優れた作業を使用していますが、システムをブートストラップするために必要な多くの手順を自動化しました。

より多くのビルドを生成するために、技術に精通し、Zcashに興味をお持ちの人々を歓迎します。興味のある方は以下までお問い合わせください。コミュニティ Slack #zcash-dev channel.