Crypto

SeedSigner(作り方)

環境

・M2 Mac
・macOS Sequoia
・shell:zsh

最近、ビットコインシステムについて勉強を始めました。順次、その内容を整理していこうと思うのですが、まずはユーザー視点からハードウェアウォレット(以下、「hww」)についてまとめておきたいと思います。

hwwは、簡単に言うと「ビットコインを送金するための署名機」です。署名というのは、「確かに自分が送金を指示しました。」というサインという理解でとりあえずは良いと思います。そのサインを安全に行うための端末がhwwです。

hwwには、LedgerやCOLDCARD、JADEといった様々な製品がありますが、ここでは「SeedSigner」を取り上げます。

hwwはその性質上、正規店からの購入が強く推奨されます。しかし、日本国内での購入は困難であり、入手するためには海外から輸入する必要があるため、いろいろと面倒な作業が発生したりします(LedgerはAmazonから購入できるようですが)。

SeedSignerは、国内でも手に入る一般的な電子部品から自作することが可能です。日本在住者にとっては、ある意味一番気楽に安全に用意できるhwwと言えます。

なお、このような自作の署名機は他にもあるのですが、公式ガイドで指定されている電子部品が入手しやすいこともあり、SeedSignerを選びました。

SeedSignerの利点

既製品のhwwは、究極的にはどこにバックドアが仕掛けられているか分かりません。

もちろん正規のルートで入手した有名なhwwは安全だと言えますが、検証のしようがなく、我々ユーザーはどこかで暗黙的にメーカーを信頼しなければなりません。

前段で紹介したhwwは、いずれも大勢の利用者がおり、企業も死活問題としてセキュリティに取り組んでいるので問題はないと思います。ただし、自己責任が全ての世界ですので、ご自身でよく調べてhwwを選びましょう。

hwwのSeedSignerは、この課題に対する一つの解と言え、その大きな特徴は以下の2点にあります。

  1. ビットコインを直接的に連想させない一般的な部品を使ってhww自体をDIYする。
  2. ソフトは誰でも検証可能なオープンソースを使用する。

以下の作成方法等は、公式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-keysオプションを使用して、「Keybase」からSeedSignerプロジェクトの公開鍵を「gpgキーチェーン」にインポートします。ターミナルに以下のコマンドを入力してください。

KeybaseはSNSと連携したメンバー招待制の公開鍵基盤です。このサイトでは、SNSアカウントとその人の公開鍵をマッピングして管理しています。

# 「--fetch-keys」オプション:Webページ上の公開鍵ファイルを、ダウンロードしてインポートする。
% gpg --fetch-keys https://keybase.io/seedsigner/pgp_keys.asc

 

GPGのverifyオプションを使用して、署名ファイルの検証を行います。カレントディレクトリを、ダウンロードしたファイルを保存したフォルダにして、以下のコマンドを入力してください。結果に「Good signature(正しい署名)」と表示されればオッケーです。

# 「--verify」オプション:署名を検証する。
% 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コマンド:SHA-2のハッシュ値を計算する。
# 「-a」オプション:種類を指定。「-a 256」でSHA256。
# 「--ignore-missing」オプション:チェックサム検証時に、チェックサムが与えられていても、ディスクに見つからないファイルは無視する。
# 「--check」オプション:ハッシュ値を収めたファイルを指定することで、ハッシュ値を照合する。
% shasum -a 256 --ignore-missing --check seedsigner.0.8.*.sha256.txt

 

これで検証作業は終了です。

検証の内容を理解するには、「公開鍵暗号」「ハッシュ化」を理解する必要がありますが、この内容は別途まとめたいと思います。

SeedSignerOSの書き込み

ダウンロードしたイメージファイル(imgファイル)をmicroSDカードに書き込みます。ここでは、Raspberry Pi Imagerを使用して書き込みます。

microSDカードをフォーマットする

まずはmicroSDカードをフォーマット(初期化)します。Raspberry Pi Imagerの画面で以下のように操作してください。

OS:「OSを選択」→「削除 カードをFAT32でフォーマットする」を選択。

ストレージ:「ストレージを選択」→表示された<microSDカード>を選択。

「次へ」を選択して、microSDカードをフォーマットします。

microSDカードに書き込む

microSDカードにSeedSignerOSを書き込みます。Raspberry Pi Imagerの画面で以下のように操作してください。

Raspberry Piデバイス:「デバイスを選択」→「Raspberry Pi Zero」を選択。

OS:「OSを選択」→「カスタムイメージを使う 自分で用意したイメージファイルを使う」→「seedsigner_os.0.8.x.<Raspberry_Pi_Model>.img」ファイルを指定。

ストレージ:「ストレージを選択」→表示された<microSDカード>を選択。

「次へ」を選択して、microSDカードへの書き込みを開始します。

「Would you like to apply OS customization settings?(OSのカスタマイズ設定を適用しますか?)」と聞かれることがありますが、カスタマイズの設定をする必要はないため、「いいえ」を選択してください。

最後に、microSDカードをRaspberry PiのmicroSDカードスロットに挿入すれば完成です。