趣旨
僕的にはSeedSignerがビットコインの署名機の中ではダントツでランク一位なのに日本では誰も推してないので僕が推します。
組み立てられたものを購入してもよいのですがせっかく自分でDIYできる設計になってるのでDIYしちゃいましょう!使い方もDIYの解説の下に載せておきます。
SeedSignerのDIYの手引き
公式GitHubページ
ここに全て書いてあります。英語が読める方なら公式サイトを参考にしましょう。
必要な道具
まずは必要なパーツを全て揃えましょう。以下の4つさえあればとりあえずは動かせます。
- Raspberry Pi ゼロ 2 (GPIOピン ヘッダー付き)
- Waveshare 1.3インチ キー付きスクリーン
- カメラ
- microSDカード
本当はRaspberry Pi ゼロ(バージョン1.3のWiFiやBluetooth機能ないモノが良いんですが、もうほぼ売ってないのでRaspberry Pi ゼロ 2 (GPIOピン ヘッダー付き)を買って通信機能ぶっ壊す方が早いです。
あれば良いもの
以下のモノはなくても良いですが、あった方が便利です。
- microSDカードとPCを繋げるコード
- バッテリー
- SeedSigner用ケース
結局何を買えばいいのかわからない人向け
一番良いのはSeedSigner Kitを買ってどの部品を買うか迷うことなく組み立てるだけの状態で始めることなんですが、残念ながら日本でSeedSignerKitを売ってる業者は2024年5月時点では存在しないようなので自分で部品を集めるしかないです。
AliexpressにSeedSignerに相性の良いキットが売ってたので載せておきます。
僕はAliexpress使ったことがないのでよくわかりませんが、抵抗ない方はこれを買えばほぼ全部揃います。あとはラズパイゼロ用のカメラとmicroSDカードだけ別途用意すれば動かせます。
こちらのハードウェアの組み立て方は多分購入すればガイドがついてると思います。
SeedSignerOSのインストール
イメージのダウンロード
先ほどの公式ページを少しスクロールしたところにファイルがおいてあります。
僕はRaspberry Pi Zero 2 Wを利用したので下の画像のイメージをダウンロードしました。
もう少し下にスクロールすると署名をダウンロードできます。クリックするだけでダウンロードされます。署名確認も必ずやっておきましょう。
ダウンロードした後は関連ファイルを全てseedsignerというフォルダを作ってそこに入れておきましょう。デスクトップに置いておきましょう。
署名検証
ターミナルを開いてデスクトップ上のseedsignerフォルダに移動するコマンドを打ちます。
cd Desktop/seedsigner
GPG関連の鍵を配布しているサーバーからseedsignerの鍵を取ってきます。
gpg --fetch-keys https://keybase.io/seedsigner/pgp_keys.asc
実行結果
gpg: requesting key from 'https://keybase.io/seedsigner/pgp_keys.asc'
gpg: key C7EF709007260119: "seedsigner <btc.hardware.solutions@gmail.com>" not changed
gpg: Total number processed: 1
gpg: unchanged: 1
# 最後の行がunchangedかimportedならおk
次に署名の確認をします。
gpg --verify seedsigner.0.7.*.sha256.txt.sig
実行結果
gpg: assuming signed data in 'seedsigner.0.7.0.sha256.txt'
gpg: Signature made pon 13 cze 19:07:57 2022 CEST
gpg: using RSA key 46739B74B56AD88F14B0882EC7EF709007260119
gpg: Good signature from "seedsigner <btc.hardware.solutions@gmail.com>" [unknown]
# Good signatureとここに出ていればおk
gpg: WARNING: This key is not certified with a trusted signature!
gpg: There is no indication that the signature belongs to the owner.
Primary key fingerprint: 4673 9B74 B56A D88F 14B0 882E C7EF 7090 0726 0119
# Primary key fingerprintの最後の4ブロック C7EF 7090 0726 0119 に注目
先ほどの鍵サーバーに直接ブラウザからアクセスしてフィンガープリントを確認します。
Primary key fingerprintの最後の4ブロック C7EF 7090 0726 0119とkeybase.io/seedsignerの鍵マークのところの鍵の値が一致していればおk
microSDカードにseedsignerOSを焼き付けます
焼き付けるソフトは2種類推奨されてます。Balenaの方が多分簡単です。
-
Balena
https://etcher.balena.io/ -
Raspberry Pi Imager
https://www.raspberrypi.com/software/
Balenaで実行する場合
先ほどのseedsignerフォルダの中のimg拡張子のものを選択し、microSDカードをMacに繋いで選択肢てFlashすれば完了です。
これでmicroSDカードにSeedSignerOSが入っているのであとはRaspberry Pi ゼロ 2に挿して起動すれば立ち上がります。
本来、接続したハードウェア(スクリーンやカメラ)を起動させるためにライブラリをインストールしたりそれらを動かすためのプログラムを常時起動するよう設定しないといけないのですが、SeedSignerOSは指定のスクリーンを繋いだ場合追加設定なしで動くように設計されているみたいなので、そういう作業一切必要ないです。開発者に感謝!
カメラの取り付け方はインドの方が動画上げてたのでそれを見れば大体わかります。
ケースが欲しい場合は3Dモデルが配布されているので、3Dプリンター会社にそのファイルを送って印刷依頼すれば作ってもらえます。
SeedSignerの使い方
LedgerやColdCardと違ってSeedSignerはデバイス内にシードを長期保管できません。シャットダウンするたびにワイプアウトされてます。なので毎回シードを読み込む必要があり、12ワードや24ワードを全部入力するのがだるいのでシードをQRコードにしてそれを読み込むことで署名できるようにしています。
一連の流れを言葉にすると以下のようになります。(間違ってたらすみません)
- SeedSignerでシードQRを読み込む
- モバイルウォレット送金したい金額を入力しSeedSignerでそのインボイスを読み込む
- SeedSigner内で署名する
- 署名されたトランザクションをSeedSignerのスクリーン上でQRコード表示する
- モバイルウォレットでそのQRコードを読み込むことで署名を取り込み送金を完了する
SeedSignerはネットに接続しないのでシードが一度もネットに接続されてるデバイスと直接連結しないことにお気づきでしょうか?シードから生成したプライベートキーで署名だけをSeedSignerで行い、窓口は全てモバイルウォレットに任せるイメージですね。
では具体的な使い方を解説します。
シード生成
SeedSignerを起動すると以下の4つの選択肢が表示されるのでToolsを選びます。
- Scan
- Seeds
- Tools
- Settings
Toolsの中は以下の5つの項目がありますが、Dice New seedを選択します。
- Camera New seed
- Dice New seed
- Calc 12th/24th word
- Address Exploror
- Verify address
Dice New seedを選ぶと以下の2つの選択肢が出ます。好きな方を選びます。
12 words (50 rolls)
24 words (99 rolls)
ColdCardにもサイコロによるシード生成機能があり、同じサイコロの結果を入力すれば同じシードが生成されるのでColdCardを使ってもよいんですが、ColdCardはサイコロを振る回数を自分で決められるので12回以下のサイコロ数でシードを生成した場合、総当たり攻撃を受けて中のBTC奪われるので50回以上は必須です。
50回か99回サイコロを振って毎回その結果を入力していきます。終わればシードフレーズが生成されてメモするよう忠告が出ます。しっかりメモしてください。
その後BIP-39 Passphraseをセットするとかどうか聞かれるのでパスフレーズをセットしてシードを盗まれても簡単に中のビットコインを奪われないようにしたい場合はパスフレーズもセットします。
パスフレーズをセットした場合、署名するにはパスフレーズとシードの両方が必要になるのでパスフレーズをなくすとGOXします。簡単に突破できる単純なワードの場合パスフレーズをセットする必要もないので、できればパスワード生成機で特殊な文字を含むランダムな文字列を作り、それをLastPassのようなオンラインでのパスワード管理ツールに保管しておくのが良いです。物理的な侵入と電子上の侵入の両方を同時に実行するのは難しいので。
シードQRスキャンしてロード
選択すべき項目名だけを列挙していきます。
- Seeds
- Load a seed / choose fingerprint if loaded
シードを生成したあとはシードがロードされた状態になっているので、そのシードのフィンガープリントを選択すればおk
- Backup seed
- Export as SeedQR
- Standard: 25x25 / Compact: 21x21
25でも21でもどちらでもおk
- Begin
指示にしたがってQRコードを黒塗りしていきます。
QRコードを黒塗りするためのシートはここに置いてあります。プリントアウトして使えます。
BlueWalletと連携して署名
文字での解説が非常に困難なので心苦しいですが英語での解説をしているビットコイナーの動画を引用します。