【BTC】Sparrow Walletでマルチシグウォレット構築メモ(その2)

前回の続き物。尚、今回はとてつもなく個人用メモしててグチャグチャしてます。見るに堪えないので雰囲気だけ味わってください。(※適当)

 

okometsubulog.hatenablog.com

 

===========

前回はオンラインPC上で参照専用のマルチシグウォレットと、オフラインPC上で動かす(予定)のなんでもできるマルチシグウォレットを作ってみました。なんでもできるマルチシグウォレットのxpub3つを使って参照用のマルチシグウォレットを作るような流れでした。

 

では、前回はSparrow Walletで作りましたが、マルチシグウォレットのシードフレーズを念のため他のウォレットで作成してみようのコーナーとなります。

 

ネット上を見ると、なんかシード作る際?はサイコロを100回振って乱数をどうたらこうたらエントロピーがどうこういうやつ・・・という風に自分でなんか色々やった方がセキュリティ的に強化されるようなのを見るのですが、その場合自分でその乱数を入力して「手動作成」を実施しないといけません。

 

が、明らかに初心者の私は逆にリスクになりえる(※乱数を入れる所を勘違いしちゃうとか入力ミスとか)と思ったので、だったらシードを作るソフトウェアを分散しとけばある程度安全じゃね?という適当で安易な感じで今回始めます。なんか100回試したと勘違いして1回しか試してなくて総当たりで全部資産を抜かれた記事とか見たことあって怖すぎるのだ。

 

実際AIに聞いても初心者は自分でやんないでウォレットのデフォルトに任せた方が望ましい的なこと言ってくれたからもう信じます。

さらに言えば、Sparrow Walletでオフライン環境で3つシード作っても問題ないとも言われた。今回はなんとなく慣れも踏まえて3つのソフトウェアを使ってシードフレーズを3つ作ります。

 

ということで、今回私が検証するのはこちらのアプリたち。

 

Wasabi Wallet

・Specter Desctop(※ネタバレ今回の環境では作れなかった)

・Sparrow Wallet(※前回やったので割愛)

・Mnemonic Code Converter(※急遽参戦。AIは別にオススメしてない)

 

なんかAIがオススメしてくれたので今回はこれでやってみる。

 

やること

  • Debian環境に上記3つインストールしてみる
  • 最初はオンラインでウォレットを普通に作れるか確認する。
  • 問題なくウォレット作成できたら、最後にLAN線ぶち抜いた状態で新しいウォレットを作成できるかやってみる
  • LAN線ぶち抜いた状態のシードフレーズ3つでSparrow Walletにてマルチシグウォレットが作成できるか確認する
  • 最後にオンラインPC上で参照用Sparrow Walletにてマルチシグウォレット作れるか確認する。※xpubだけ3つ寄せ集めて作るやつ。シードフレーズは一切入れない

 

初心者なのでまずはオンラインでも作れるよねーってのを試して、本当にオフライン環境でウォレットって作成できるの?って部分が引っかかってるのでそれも後で試す。

 

環境は安く済ませたいのでUbuntuで行います。Ubuntu 12でデフォルトインストール(GNOME)環境で行います。

 

ではまずはWasabi Walletから。

 

尚、作業は検証環境で面倒だから全部root権限でやってます。ちゃんとやるならsudo権限付与して全部のコマンドの頭に"sudo "を入れてやった方がいいです。

 

Wasabi Walletインストール

公式サイトからdebファイルをダウンロードしつつインストール。多分以下が公式サイトと思いますが参考にする場合は自分で確認してみてやってください。

ttps://wasabiwallet.io/

 

今回Ubuntu環境なのでこれ。「sigunature」は改ざんされてないかチェック用の奴。これをダウンロードしつつ、guideのリンク先でPGP.txtもダウンロード。詳細はguide見た方が早いので割愛。

 

後は流れでインストールコマンド

 

apt install ./Wasabi-2.6.0.deb

 

凄い簡単にインストールできた。ありがたい。

 

インストールするとアプリ欄にWasabiが入るのでクリックして起動。


このウォレットもHWW接続できるのね。今回はシードフレーズ作りたいので「Create a new wallet」で続ける。

 

そした英語がずらり。分からんので翻訳します。

 

■Recovery words Backup

秘密の言葉を使って財布をバックアップ。財布を復元するために必要です。

■Multi-share Backup

財布のバックアップを複数に分割する。 ウォレットを復元するには、そのうちのいくつかが必要になり、追加の保護レイヤーが追加されます。

 

元となるシードフレーズを作るだけなので、1行目を選べばいいはず。今回私はガチで動かす場所をSparrow Walletでやるためだ。なので「WasabiはRecovery words Backup」で。

 

次へを押したら唐突に12桁の文字列がずらっと並んだ。おいおい、形式とか選べないのか・・・仕方ないので12桁を控える。AIに聞く自分で選べないらしい。デフォルトでP2WPKH形式のBIP39らしい。今回P2WPKHを作りたかったのでデフォで良さそうだ。

 

で、ここで非常に残念なのは、次を押すと確認画面がでるんだけど、文字列の選択式だった。手入力した方がバックアップミスがないか確認できるのだが・・・というか怖いな普通に。復元チェックは必須だろう。

 

気を取り直して次の画面へ行くとパスフレーズを入力することになる。設定必須っぽそうだが、空欄でも次へ行けたので不要ならそのまま次へ。つけるなら付けとく。つけても付けなくてもマルチシグ環境出来るぞ!

 

 

そして始まる唐突なデータ取得。なんだこれ。

 

翻訳するとこう。

これは、第三者があなたの残高や取引を知ることなく行われます。初回起動時や、大きなウォレット、または同期から長い間が空くと遅くなります。

うーん?ノードとかそういうやつ?AIに聞いてみた。

 

===============

🌟 何をやっているのか?

Wasabi Wallet は以下のことを行っています:

1️⃣ ビットコインのブロックヘッダー(ブロックの概要情報)をダウンロード
 → これはブロックのハッシュやタイムスタンプ等の軽量データです。ビットコイン全体の整合性を確認するために必要です。

2️⃣ 各ブロックのフィルター(BIP157 / BIP158 の Compact Block Filters)を取得
 → あなたのウォレットのアドレスに関連するトランザクションがどのブロックに含まれているかを確認するためのデータです。
 → プライバシーを保ちながら(フルノードのように)自分のトランザクションを見つける仕組みです。

3️⃣ ローカルでフィルターを処理して、自分のアドレスの取引を確認
 → サーバに「自分のアドレス」を問い合わせず、あくまで自分のPCで確認します。

🌐 なぜ必要なの?

これは Wasabi がプライバシーを守るために重要な処理 です。

一般的な軽量ウォレット(SPVウォレット)は、外部のノードに「このアドレスの取引履歴を教えて」と聞きますが、それだとプライバシーが漏れます。

Wasabi自分でブロックフィルターを処理する ことで、外部に自分のアドレスや取引の情報を晒さないようにしています。

===============

 

うん。最初に述べたように、今回シードフレーズが欲しかっただけなので、ここまでで閉じました。メインウォレットで使うならいいかもね。今回の目的とは別なのでここで終わり!

 

ということで、次はSpecter Desctopをインストールする。Wasabiはもういらないのでアンインストールしてもいい。復元する時も別にもういらない。さよならWasabi・・・

 

Specter Desctop インストール(結論:やらなくてよかった)

多分以下公式サイト。多分。

ttps://specter.solutions/downloads/

 

が、どうやらこれインストールしないでpythonでオンラインでインストールする方が楽そう。以下URLに手順があったのでそれに倣ってやってみる。

ttps://specter.solutions/docs/desktop/

・Python3.9か3.10が必要なのでインストールしとく

・その後、以下も実行しとくとのこと。

apt install libusb-1.0-0-dev libudev-dev python3-dev

後、pip3も必要らしいので次も入れる。

apt install python3-pip

 

なんか一杯入った。続いて以下を実行。

pip3 install cryptoadvance.specter

 

エラーがでた

error: externally-managed-environment

 

AIに聞いたらpip3環境は仮想環境じゃないとできない的なことを言われたとか。良く分からないのでAIに聞いた通りに打つ。どうせこのOS環境は破壊するので。

 

apt install python3.11-venv

python3 -m venv ~/specter-venv

source ~/specter-venv/bin/activate

⇒ターミナルのプロンプトが (venv) のように変わります。

 

pip install cryptoadvance.specter

⇒なんか凄いインストール始まる。やったぜ!

 

で、次を実行するとようやく起動。

specter server

 

そしたらまたエラー・・・おま環ですが、以下が発生。

AttributeError: module 'sqlalchemy' has no attribute '__all__'

 

AIに聞いて次を実施。SQLAlchemy のバージョンをダウングレードが必要らしい。もうわけわかめです。

 

pip install "SQLAlchemy<2.0"

 

ということで改めて起動

specter server

 

文字列が凄いでますが、その後、Webブラウザで以下にアクセスすると成功!

http://localhost:25441

 

長く苦しい戦いだった…ってかAIホント万能すぎて怖い。サポートセンター消えますね間違いない。

 

ということで、多分ここの「Add wallet」打てば行けると思うのでやっていこうとしたら・・・灰色で押せなかった。

 

AIに聞いてみたところ、Specter DesktopはBitcoin Coreなどのビットコインノードに接続している状態じゃないとウォレットを作成できないとか。AIに聞いても回答が良くなかったが、よくよく見ると、トップページに普通に書いてあった。

 

ほうほう。多分Bitcoin Coreを選ぶと大量のダウンロードが始まるけど匿名性高い奴だから、今回はElectrum Conectionを選んで楽しようと思います。

 

そうすると、Sparrow Walletの時にも見た公開サーバ選択画面がでた。適当に選んで進む。

 

すると、一つ目のBitcoin Networkは成功!とのことでチェックが入った。

2行目は署名デバイス選択なのですが、今回ソフトウェアウォレットのみでやるのでHWWの出番は無い。3つ目の「Create your first wallet」をクリックして作成する。ここまで長かった・・・

 

ちなみに「Add your signing devices」を選ぶとこんな感じでHWW選べYO!って画面になる。今回はやらない。

 

改めてウォレット作成画面へ。またマルチとシングル選ぶ画面なので、今回もSingle Signatureで作っておく。

 

するとこんな画面。あれ?デバイス選ばないといけない?選んでみる。

 

・・・おいおいおい、デバイス選ばないと先進めないぞ!?

 

どうやら、Specter Desktopはデバイス必須なようです。本当にありがとうございました。AIオススメしてくんなYO!!!

 

ということで、Specter Desktopは残念ながら、没ということで・・・

 

こんなに苦労したのに没って!!!くやしい!!!!!!!

 

とりあえずコンソールはexit連打してpip?で使った仮想環境から抜けてから改めて次のインストールへ。

 

Sparrow WalletをDebianでaptリポジトリからインストール

最後にSparrow WalletをDebianにもインストールします。前回、オンライン環境用でインストールしましたがWindows環境だったので。

 

こちらはaptのリポジトリサーバからダウンロードするっぽいのでそれでやります。※尚、aptリポジトリからやる方法は失敗するので参考にする方は無視してください。

以下公式と思われるドキュメントURL

ttps://docs.sparrowapp.dev/docs/usermanual/linux-install

 

とりあえず公式サイト通りに次のを打っていく

 

install -d -m 0755 /etc/apt/keyrings

 

curl -fsSL https://sparrow-assest.s3.us-east-1.amazonaws.com/linux/sparrow-repo-key.gpg | sudo tee /etc/apt/keyrings/sparrow.asc > /dev/null

 

echo "deb [signed-by=/etc/apt/keyrings/sparrow.asc] https://sparrow-assest.s3.us-east-1.amazonaws.com/linux stable main" | sudo tee /etc/apt/sources.list.d/sparrow.list

 

apt update

⇒ここでエラー。N: このようなリポジトリから更新を安全に行うことができないので、デフォルトでは更新が無効になっています。

 

なんかCD-ROMリポジトリが残っていて、apt updateとかするたびに毎回CD-ROM観に行ってるのが原因らしいので無効化する。おま環である。

 

vi /etc/apt/sources.list

↓cdrom:の行をコメントアウト

# deb cdrom:[Debian.........................

 

で、改めて実行

apt update

apt install sparrow

 

良い感じにインストール完了。ということで、起動

sparrow

⇒が、GLIBCエラー。

sparrow: /lib/x86_64-linux-gnu/libc.so.6: version GLIBC_2.39' not found (required by sparrow)

 

GLIBCはOSの根幹にかかわる部分なので直すのは非推奨とのこと。そんなー。

 

で、apt installで入れたバージョンが2.26.0 で、公式サイトの.debパッケージのバージョンをみると、2.2.3だった。多分この辺で最新に行き過ぎちゃってるからだと思われる。めんどいねぇ。

 

 

Sparrow WalletをDebiandebパッケージインストール

ということで、1から公式サイトからdebパッケージを取ってきてインストールします。とほほ・・・

 

・一旦今までのアンインストール

apt remove sparrow

 

・公式サイトからダウンロード。シグネチャの下りは割愛。

ttps://sparrowwallet.com/download/

 

・普通にインストール

aptコマンドでインストールするとエラーが大量に出たので出来なかった。

 

なんか調べるの面倒だったので、次のファイルを右クリック⇒Open With...というのを選んで、以下のようにクリックしました。

 

・sparrowwallet_2.2.3-1_amd64.debを右クリック⇒Open With...を選択↓

 

そしたら完了しました!とか出ずに勝手に完了していた。アプリのリストを見ると無事インストールされてたっぽいのでそれをクリック。

 

そしたらWindowsのオンライン環境と同じ画面がでた!やったぜ!

 

ということで、この辺は前回やったので割愛。とりあえずBIP39かつP2WPKHでシングルウォレット作成できました。

 

ここでLAN線ぶち抜いてウォレット作れるか確認

画像は割愛しますが、本当にできるかやってみたところ、無事Wasabi Wallet、Sparrow Walletともに作成できました!

 

ここでSpecter Desktopがダメになったのでもう一つ、シードフレーズ作れるオフライン環境が欲しい。他の案を聞いたところ、以下サイトを教えてもらった。AIに。

 

Mnemonic Code Converter(Ian Coleman の BIP39ツール)

ttps://iancoleman.io/bip39/

 

どうやらWebサイト上で簡単にシードを大量に作れるとのこと。今回の目的にぴったりだが、オンラインかぁ・・・

 

このサイトはシードを作ることに特化してるやつで、HTMLをダウンロードすればオフライン環境でも作れるとのこと。まさに今回の議題にピッタリすぎる!

 

が、普通に詐欺サイトだったら怖いんだよなぁ・・・サイト主が持ってるアドレスだけ表示させるパターンってあるじゃないですか。大昔、そういう詐欺あったし。それ言ったらSparrow walletとかWasabiもそうなんだけどね。そのウォレットの開発者は信じられるの?ってやつ。

 

一応、オープンソースで作られてるので安全らしい。今回はマルチシグが目的で、最悪どれか1個が詐欺めいた場合でも残り1個でカバーできるのでセーフだから一応これで1個オフライン環境で作ってみる。本番運用時に使うかは不明。いや、使わないかな・・・

 

でも、それなりに有名な日本語サイトでも紹介されてるので、大丈夫っぽそうではある。

ttps://jpbitcoin.com/wallet/blockchain_info_faq

とか

ttps://coinkeninfo.com/bip39-sheed-phrase-checker/

とかで紹介されてました。

 

じゃあオフラインで使うにはどうするかっていうと、上記サイトの下の方を見るとgithubのリンクがあるので、そこからダウンロードできるぽい。

ttps://github.com/iancoleman/bip39/releases/tag/0.5.6


HTMLファイルで4.34Mある。sigunatureもあるのでチェックしとくと良いだろう。

 

ということで、実行してみると、ガッツリ作れました。超楽ちん!!!

 

ほんと、これが一番楽だったぜ・・・チクショウ・・・!!!

 

 

ということで、オフライン環境で3つのシードフレーズを取得できました!復元テストとxpub取得を兼ねて3つのシードフレーズをオフライン環境下でSparrow Walletにぶち込んでみます!

 

オフライン環境Sparrow Walletにてマルチシグウォレットを作る

手順はオンラインと全く変わりません。今回はDebian上のSparrow Walletで作ります。

 

・Policy Type:Multi Sigunatureを選択

・Script Type:P2WSHを選択

・Consigners:今回も2-of-3で行くのでこれで。

 

今回はシードフレーズ3つ入れるのでKeystore 1,2,3の三つ全部「New or Imported Software Wallet」で作ります。

 

で、全部BIP39のはずなのでこれを選ぶ。ワード数は先ほどシングルウォレット作った際の桁数に合わせて作ります。Wasabiはデフォ12桁で他は24だったり選択できるのでその人それぞれで。パスフレーズWasabiは必須だったので「Use passphrase?」にチェックを入れることになるでしょう。他2つはパスフレーズ付けて作ってたらチェックを入れる。

 

というか、オフラインHTML環境だとパスフレーズいれらんなかったかも。まま、一つでも入ってれば十分しょ。

 

無事全部入りました!やったぜ!!!

 

 

ということで、インポートが完了したら、xpubを3つ控えておいて、次にオンラインPC上のSparrow Walletに参照専用でインポートしたら無事作成できました。※前回記事なので流石に手順は割愛。

 

ただここで、送金テストをしないでも元となるマルチシグの参照専用ウォレットかどうかを見分ける方法をAIに教えてもらいました。それは、受信アドレスの最初の数個は必ず一致するらしい。無限に生成できるけど、最初の10アドレスとかは完全一致するらしいので、それが一致してるか確認してみよう。

 

 

はー。ほんとだ。完全一致だ。画像では途中までだけど、最後の文字まで完全一致してました。左が秘密鍵ありのマルチシグ、右がxpub3つ集めた参照オンライン用ウォレット。なるほど。こりゃいい動作確認になりました。xpubしかインポートしてないウォレットで一致してるなら、ガチで上手く行ってますねこれは!

 

さて、ここで一つ気になったのは、HTMLサイトで作った際に出力されたxpub(Zpub)の値がSparrow Walletでシードフレーズをインポートして出力されたxpubの値と異なったことだ。↓のやつ。

 

AIに聞いてみると、シングルウォレットで作成した際はm/84'/0'/0'/0で、マルチシグの場合はm/48'/0'/0'/2'で作ってるから違うとのこと。以下AI回答。

 

===============================

📝 理想的な流れ

1️⃣ マルチシグのウォレットを作成。
2️⃣ 各デバイス(もしくは各シード)から「マルチシグ用の派生パス(例:m/48'/0'/0'/2')」で xpub を取得。
3️⃣ その xpub を読み取り専用ウォレットに登録。


注意

シングルウォレット用に作った xpub を寄せ集めてマルチシグ読み取り専用を作っても、「一見できたように見える」が、アドレスや署名が正しく機能しない可能性が高いです。

===============================

 

つまるところ、シングルウォレット作成時に取得したxpubを控えても正直意味は無くて、シードフレーズ3つをマルチシグウォレットにインポートする際にでたxpub,Zpubを3つ控えることで初めてバックアップできる、ということだった。

 

重要なのはマルチシグでインポートした後にでてきたxpub/zpubの情報ってこと!

 

正直勘違いしてた。危なかった・・・。動作検証兼ねて3つシードフレーズインポートした後、このタイミングでxpub/zpubを取ればOKってことです。覚えておこう。

 

なんか色々漏れそうなので、AIにバックアップ必須なものをまとめてもらいました。

 

バックアップしたほうが良い物

  • シードフレーズ(必須)
  • 各参加者の派生パス(Derivation Path)(m/48'/0'/0'/2'とかのやつ)
  • 各参加者のxpub/zpub/ypub等の拡張公開鍵⇒マルチシグで作った際の情報だけでOK。必須です。
  • マルチシグのM-of-Nルール:2-of-3の数字部分。
  • ウォレットの作成日時
  • シードを作ったソフト名とバージョン
  • 使用したスクリプトタイプ:P2WSHだが、シングル作る時はP2WPKHで作った

 

結構あるな・・・シードフレーズは3箇所バックアップが望ましいけど、それ以外の情報は至る所、それこそクラウド環境も併せてバックアップした方が無難そうです。どうせ盗まれても参照権限までだし。

 

で、Sparrow Walletだとマルチシグウォレットにシードフレーズを入れるとxpubとzpub両方変換して取れるので、両方取っておいた方が良いとのこと。2×3で6個一応持っておく感じか。

 

※2025/7/9 上記の情報をまとめて取得する方法を教えて頂いたので追記

QRコードボタンを押してSave PDFを打つと、バックアップが取られたQRコードと、Descriptorに記載されている文字列の両方がバックアップ取れます!

 

 

QRコード不要ならEditボタンで実際の設定をコピーできるのでこれで取ると良いでしょう。というかもう両方取っとけば安心!

 

長くなったのでまとめましょう。

 

まとめ

  • オフライン環境でウォレットを作れるアプリがあったり無かったりするので頑張って見つけよう。※今回はSpecter Desktopが用途違いでダメでした。
  • 面倒だったら3つともSparrow Walletで作っても良いらしいので面倒くささとか考えてやってください
  • xpub/Zpubはマルチシグウォレット作った後の方を必ず3つ全部控えよう
  • xpub/Zpubは盗まれても参照系なので、ガンガン至る所にバックアップを取っておこう!3つ揃わないと終わるぞ!逆にシードフレーズは3箇所だけにしておいたほうが無難。盗まれたら終わりなので・・・
  • ただ、xpub/Zpubはシードフレーズに内臓されてるから、シードフレーズ3つ全部復元できたらその限りではない。
  • 参照系ウォレットと元となったウォレットはRecieveのアドレスを見れば一致してるから分かる。確認しよう。

 

疲れた~。エラーの内容とかいらない情報も大量に記事に入ってるけど、こういう思考錯誤部分を入れておくとなんでその結論になったか後から追えるので全部書いておきます。

 

今回の件でHWW無しでも割とセキュリティ高い環境作れそうだなと思いつつ、はたしてこんな面倒な管理を実運用に取り入れるかどうか・・・悩ましい所です。HWWだけ1つとかの運用方法もあるので上手く組み合わせると良いと思った。

 

ただ今回のことで分かったのは、HWWが2つないし3つ持つことができたのならば、いちいちオフライン環境をつくらないで、オンラインPCにSparrow Wallet入れてHWWを2つガツンと接続すれば、HWW自体がオフラインなので安全に使える、ってことなのは理解できました。オンラインPCに入れてもHWW上に秘密鍵があるので盗まれないですからね。

 

そういう意味だと、一々オフライン環境を用意する今回の運用例はやっぱりHWW2つ持ってた方が初心者としては楽で、3つ目だけシードフレーズをオフライン環境で一回作っておいて、それを組み合わせてマルチシグを作ってから全部バックアップとっておくのが一番コスパ的にも運用コストからも最適解な気がしました。