ビットコインの情報サイトの運営者ブログ

サイトには掲載していない仮想通貨に関する時事的な情報や個人的な感想など。中級者以上向け。

bitcoin.orgに警告文が掲載、Bitcoin Coreが改ざんされていないか検証する方法

ビットコインの公式クライアントであるBitcoin Coreの新バージョン0.13.0が数時間前にリリースされました。このバージョンではSegwitのコードが初めて含まれることとなりますが、コードが含まれているだけでまだ有効化はされていないので、実質的なSegwitの実装は0.13.1になるものと思われます。

ところで、0.13.0のリリースの数日前にbitcoin.orgに謎の警告文が掲載されました。主な内容は、国主導(中国政府?)のアタッカーがBitcoin Coreのバイナリ(実行ファイル)を攻撃する恐れがあるから注意してダウンロードして使用するように、というようなものです。ただし、この警告文はbitcoin.orgの共同管理者の一人であるCobraという人の一存で勝手に掲載されたもので、表立ってなにか脅迫文なようなものが送られてきたというような情報は一切明らかになっておらず、なぜいきなりこのような警告文を乗せたのかは不明です。

とはいえ、仮に脅迫のようなものがあってもなくても常にbitcoin.orgのようなウェブサイトがハッキングされてBitcoin Coreの実行ファイルが改ざんされる恐れは常にあるので、この記事ではダウンロードしたファイルが改ざんされていないかどうかを検証する方法を書きたいと思います。

実際にここまでやっている人はほとんどいないですし、通常のユーザーは検証する必要もないと思いますが、ハッシュを計算したり電子署名を検証したりとビットコインの基礎的な技術とも関係するので暇なときに試しても面白いと思います。

(お金が直接関係するソフトなので理想を言えばやったほうが良いですが、手間を考えると非現実的なので、更新直後にダウンロードするのではなくしばらく待ってから何らかのトラブルがないか身近なコミュニティで確認した後にダウンロードすると良いでしょう。)

なお、記事を書いている時点ではBitcoin Core 0.13.0のビルド(ソースコードから実行ファイルを作成する手順)後のものがまだ公開されておらずインストーラー等は準備されていないので、0.12.1を例にします。

①Bitcoin Coreをダウンロード

好きなところから自分のOSに合ったBitcoin Coreをダウンロードします。Bitcoin.orgでは以下のURLにまとめて保存されています。

https://bitcoin.org/bin/

②署名をダウンロード

ダウンロードしたソフトが改ざんされていないことを証明する署名をダウンロードします。先ほどのURLにある「SHA256SUMS.asc」です。

ファイルをメモ帳などで開くと、以下のようにBitcoin Coreのファイルのハッシュ値が署名に添えて書かれていることが分かります。

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

abf0e7336621250702d7a55487c85b8de33c07a30fbc3ecf7f56c97007fcb4ce  bitcoin-0.12.1-linux32.tar.gz
54aca14b7512801ab78cc93f8576e1b66364a890e8017e8a187e4bf0209fd28c  bitcoin-0.12.1-linux64.tar.gz
91d14dcb9b88ca845df450ceb94250bb5c9a0d514d8ca0c55eb480d0ac77ef32  bitcoin-0.12.1-osx64.tar.gz
e1bc86d24dd978d64b511ada68be31057c20789fb9a6a86c40043a32bf77cb05  bitcoin-0.12.1-osx.dmg
08fc3b6c05c39fb975bba1f6dd49992df46511790ce8dc67398208af9565e199  bitcoin-0.12.1.tar.gz
fba73e4825a6421ce6cc1e48b67ff5f2847ae1b520d26272e69f7f25de4f36d1  bitcoin-0.12.1-win32-setup.exe
148fb438a32f1706a366a7825bbc5e770e5f9a20e5694f724a443275976a0791  bitcoin-0.12.1-win32.zip
c6e06f90e41c36c9a447f065952869e2d7d571ab34b86d061ae19ec25b2799d4  bitcoin-0.12.1-win64-setup.exe
d8e1ab9ff65b79c130ec6af8e36626310ffdaf6aacb7a40cfb76e7a63bdfcfd5  bitcoin-0.12.1-win64.zip
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (GNU/Linux)

iQIcBAEBCAAGBQJXEIwgAAoJEJDIAZ42wulkXNcP/Re0iawPi8muiq6J36ZUZKws
KL2nwjCImj91on8wGoTUir1IytuIafA4JMHslos2Ak3za2UKAEZrEfx0dXm/FVql
AgRneYLYedMQ8127UkSho4rxuwjB3h2gR/FGPpPT0PmbNTWOFsKtV1V9zwsCeA9Q
br/ly2BfZHWsS1tpSK5ukP5W0q+Ii2fO4pcfaAsS2y/gc5kyj5hTiKQivwBVXoVA
cyH1splq1foM5BYwOuT/cUKGrpA8fWo7+xOaEhhFBlW0oJaSXcNSK9mVTSI/dQ/2
lINXcWBtotnH6/evS35pAIOe4PHg/URhXNT/Sdfwts4YL5nMtF+SPBrJWadPvx3C
qdSDZKMuM0cDjVg1F4rjoWAxyshWNKKU2J+qkNUBZ1LbpVyDR3Gl4LFwRjaw0wyZ
n6zHonPCtp33ErhsaY0GryHV1pKvL1h6uyDNWHbYpKny4F+TvbyQ6XNVHrx1IAn5
+9UMPB3Q962/8hrRqK95Cs6AJ/D1Wdw9rwEqOC48waDzttYCVknn4L6rGECDdRM4
6pbWNTf3m9lzThWjiuEdNnPoNuKoBD9/UHWW/WRHjT6tbcGqstoyRKTsi8jjmwnC
9g4xWRsTdqYIAL4PBv32T+QYW/YcyRNTT97t/M0aukXxxxjCObehWVmBXVeNn0/9
lvvCgGgSJXtJHxzqcJ2I
=a2/6
-----END PGP SIGNATURE-----

 ③Bitcoin Coreのファイルのハッシュ値を確認

続いてSHA256によりハッシュ値を計算します。Windowsの場合は、コマンドプロンプトを開いて作業用のフォルダに移動した後「certUtil -hashfile bitcoin-0.12.1-win64.zip SHA256」などと入力します。

※Macの場合は「shasum -a 256 bitcoin-0.12.1-osx.dmg」、Linuxの場合は「sha256sum bitcoin-0.12.1-linux64.tar.gz」など。Windows含めてOSのバージョンによっては違うかもしれません。

すると、ハッシュ値が表示されるので②に書かれているハッシュ値と一致するかどうか確認します。一致していれば改ざんされていないと確認できます。

④署名が正しいことを確認する

簡易的な確認であれば、③までで十分ですが、②内のハッシュ値が改ざんされている可能性もゼロではありません。そこで②のファイルも正しいかどうか確認します。

④-1:検証のための準備

検証のためにGnuPGという公開鍵暗号方式の暗号化ソフトを利用します。各OSごとにバージョンが用意されているので好きなものをダウンロードしましょう。

https://www.gnupg.org/download/index.html

ダウンロードしたらインストールします。Windowsの場合、KleopatraというGUIソフトも同時にインストールされますが、基本的にはコマンドプロントからコマンドをうって利用することになります。

④-2:PGP公開鍵をダウンロード

②のファイルはBitcoin Coreの開発者の一人であるWladimir van der Laanにより署名されています。そこで彼のPGP公開鍵をダウンロードします。

https://bitcoin.org/laanwj-releases.asc

上のURLのようにBitcoin.orgにもアップロードされていますが、ハッキングされて改ざんされる可能性も考えて複数の場所からダウンロードして確認するのが理想です。

④-3:公開鍵をインポート

先ほどダウンロードした公開鍵をインポートします。コマンドプロンプト(ターミナル)を開いて作業用フォルダに移動した後「gpg --import laanwj-releases.asc」と入力するとインポートされます。

④-4:②の署名ファイルを検証

続いて②の署名ファイルが正しいか検証します。「gpg --verify SHA256SUMS.asc」と入力します。正しければ「Wladimir~(中略)~からの正しい署名」と表示されます。不正な場合は「不正な署名」と表示されるはずです。

ちなみにこの際、この鍵は信用できる署名で証明されていません!という警告が表示される場合がありますが、自分自身の鍵を作成していないために発生する警告文なので、ファイルの改ざんを確認するだけの用途であれば無視して構いません。

⑤複数人の署名を確認する

一応は④までで完了ですが、Bitcoin Coreは信頼性を高めるためにGitianという方法により複数人のグループによってビルドされています。そこで、先ほど使用したWladimir van der Laan以外の署名を確認することも可能です。

それぞれの署名は以下のgithubのページに保管されています。

https://github.com/bitcoin-core/gitian.sigs

各バージョン、OSごとに分かれており、特定のバージョンのフォルダを開くと署名した人ごとにフォルダが分類されているのが分かります。最下層には生のファイル(拡張子:assert)と署名ファイル(拡張子:sig)があるので、両方をダウンロードします。生のファイルは②と同様にBitcoin Coreのハッシュ値がかかれています。

署名をした人のPGP公開鍵を④-2のようにダウンロード、インポートして「gpg --verify bitcoin-win-signer-build.assert.sig bitcoin-win-signer-build.assert」と入力すれば検証が行われます。

PGP公開鍵は各自探してくださいとしか言えませんが、bitcoinのgithubのページにもまとめて保存されているので参考にしてみてください。

https://github.com/bitcoin/bitcoin/tree/master/contrib/gitian-keys

(4か月前に移動されたばかりで今後も場所が変わる可能性があるのでご注意を)

他のソフトについて

本記事では実際にウォレットとして使っている人はほとんどいないであろうBitcoin Coreの例を紹介しましたが、他のソフトでもふつう署名やハッシュ値も同時に公開されているので、同様の手順で改ざんされていないか検証を行うことができます。

例えばElectrumの場合も以下のダウンロードページに署名(signature)が添えられています。

https://electrum.org/#download

Electrumの場合は、Bitcoin Coreと違いハッシュ値が署名ファイルには表示されていませんが、「gpg --verify electrum-2.6.4.exe.asc electrum-2.6.4.exe」などと入力すれば署名と実行ファイルを検証することができます。

もちろん事前に署名者のPGP公開鍵もインポートしておいてください。Electrumは製作者のThomasVによって署名されており、Electrum関連の人の公開鍵はgithubにまとめられているので参考にしてください。

https://github.com/spesmilo/electrum/tree/master/pubkeys