最近、ビットコインシステムについて勉強を始めました。順次、その内容を整理していこうと思うのですが、まずはユーザー視点からハードウェアウォレット(以下、「hww」)についてまとめておきたいと思います。
hwwは、簡単に言うと「ビットコインを送金するための署名機」です。署名というのは、「確かに自分が送金を指示しました。」という証明のサインという理解でとりあえずは良いと思います。そのサインを安全に行うための端末がhwwです。
hwwには、LedgerやCOLDCARD、JADEといった様々な製品がありますが、ここでは「SeedSigner」を取り上げます。
hwwはその性質上、正規店からの購入が強く推奨されます。しかし、日本国内での購入は困難であり、入手するためには海外から輸入する必要があるため、いろいろと面倒な作業が発生したりします(LedgerはAmazonから購入できるようですが)。
後述しますが、SeedSignerは(国内でも手に入る)一般的な電子部品から自作することが可能です。日本在住者にとっては、ある意味一番気楽に安全に用意できるhwwと言えるのではないでしょうか。
なお、このような自作の署名機は他にもあるのですが、公式ガイドにおいて使用する電子部品が特定されていることから、初心者でも作成しやすく、セキュリティもしっかりしていることからSeedSignerを選びました。
SeedSignerの利点
既製品のhwwは、究極的にはどこにバックドアが仕掛けられているか分かりません。
もちろん正規のルートで入手した有名なhwwは安全だと言えますが、検証のしようがなく、我々ユーザーはどこかで暗黙的にメーカーを信頼しなければなりません。
前段で紹介したhwwは、いずれも大勢の利用者がおり、企業も死活問題としてセキュリティに取り組んでいるので問題はないと思います。ただし、自己責任が全ての世界ですので、ご自身でよく調べてhwwを選びましょう。
hwwのSeedSignerは、この課題に対する一つの解と言え、その大きな特徴は以下の2点にあります。
- ビットコインを直接的に連想させない一般的な部品を使ってハードウェアウォレット自体をDIYする。
- ソフトは誰でも検証可能なオープンソースを使用する。
以下の作成方法等は、公式GitHubの概要に補足を加えた内容となります。情報が古くなっている可能性もありますので、作成の際は必ず公式GitHubも参照してください。
必要な部品
ビットコインを直接的に連想させない一般的な部品として「Raspberry Pi」を使用します。具体的には以下の部品を用意してください。
- Raspberry Pi Zero WH
Wi-Fi/Blutooth機能のない「Raspberry Pi Zero」が望ましいのですが、現在販売終了しており、なかなか手に入れることができません。
そこで、Wi-Fi/Blutooth機能を有する「Raspberry Pi Zero W」またはその後継の「Raspberry Pi Zero 2W」を使用し、物理的にWi-Fi/Blutooth機能を除去することになりますが、「2W」の方は対象部品がメタルシールドで覆われており、作業に一手間かかってしまうため、「W」の購入をお勧めします。
さらに、はんだ付け不要の「WH」のバージョンを購入しましょう。
- Waveshare 1.3インチ 240x240ピクセル LCDディスプレイ
- スパイカメラ
LCDディスプレイ及びカメラについては、必ず上記のRaspberry Pi Zeroに対応したものを購入しましょう。
- microSDカード(16GBで十分です。)
- モバイルバッテリー
モバイルバッテリーはRaspberry Pi起動用です。そのため片方が「microUSB」のケーブルも必要です。
Raspberry Pi、LCDディスプレイ、カメラの3つを組み立て、microSDカードにSeedSignerのイメージを書き込みます。その後、Raspberry PiにそのmicroSDカードを挿入すれば完成です。
SeedSignerの組み立て
まずはRaspberry Pi Zero WHからWi-Fi/Blutooth機能を除去します。こちらのページも参考にしてみてください。
以下の写真の位置の部品をピンセット等で取り除きます。(あくまで自己責任でお願いしますm(_ _)m)
これで、Wi-Fi/Blutooth機能は除去されました。次にRaspberry Piにカメラをセットします。
最後に、Raspberry PiにLCDディスプレイをセットすれば完成です。
SeedSignerOSのダウンロード・検証
事前準備
ソフトをダウンロードした際に、そのソフトが正しいものかを検証した後にmicroSDカードに書き込みます。事前に「GPG」及び「Raspberry Pi Imager」をインストールしておいてください。Homebrewから以下のコマンドでインストールできます。
# GPG:暗号化ソフトウェア。ソフトウェアの検証に使用します。
% brew install gnupg
# Raspberry Pi Imager:microSDカードにOSを書き込むソフト。
% brew install --cask raspberry-pi-imager
次に公式GitHubからソフトをダウンロードします。少し下にスクロールするとダウンロードリンクがあります。
さらに少し下にスクロールすると、署名検証用ファイルのダウンロードリンクがありますので、こちらもダウンロードしてください。
これらのファイルを同じフォルダに保存しておきましょう(以下、『/Users/<user_name>/Desktop/SeedSigner』に保存した前提で話を進めます)。
SeedSignerOSの検証(署名の検証)
GPGのfetch-kesysコマンドを使用して、「Keybase」からSeedSignerプロジェクトの公開鍵をgpgキーチェーンにインポートします。
KeybaseはSNSと連携したメンバー招待制の公開鍵基盤です。このサイトでは、SNSアカウントとその人の公開鍵をマッピングして管理しています。
% gpg --fetch-keys https://keybase.io/seedsigner/pgp_keys.asc
署名ファイルの検証を実行します。カレントディレクトリをダウンロードしたフォルダにして以下のコマンドを入力してください。結果に「Good signature(正しい署名)」と表示されればオッケーです。
% gpg --verify seedsigner.0.8.*.sha256.txt.sig
次に、上記コマンド実行の結果表示される「primary key fingerprint(主鍵フィンガープリント)」の下16文字が「keybase.io/seedsigner」で表示される鍵マーク横の16文字と一致することを確認します。
最後に、ダウンロードしたimgファイルのハッシュ値が、txtファイルに記載されているハッシュ値と相違ないことを確認します。カレントディレクトリをダウンロードしたフォルダにして以下のコマンドを入力してください。結果に「seedsigner_os.0.8.x.[Raspberry_Pi_Model].img: OK」と表示されればオッケーです。
# カレントディレクトリをダウンロードしたフォルダにして実行。
% shasum -a 256 --ignore-missing --check seedsigner.0.8.*.sha256.txt
これで検証作業は終了です。
検証の内容を理解するには、「公開鍵暗号方式」や「ハッシュ化」を理解する必要がありますが、この内容は別途まとめたいと思います。以下には、検証の概要図を載せておきます。赤字が検証作業の部分です。
SeedSignerOSの書き込み
ダウンロードしたイメージファイル(imgファイル)をMicroSDカードに書き込みます。ここでは、「Raspberry Pi Imager」を使用して書き込みます。