オフラインで生成した秘密鍵を一瞬たりともネットにさらさずBitcoinトランザクションに署名する方法
![]() |
ハウツー、ビットコインを安全に管理するには | ![]() |
中級 | ![]() |
30分 |
---|
本記事はBen Perrin氏の解説動画「Unlocking ULTIMATE Security: Air-Gapped Bitcoin Transactions with Blockstream Jade!」を参考に、@katakoto が制作、2023年11月に公開したものです。

「あなたの秘密鍵なら、あなたのビットコイン。あなたの秘密鍵でないなら、それはあなたのビットコインではない。」
ビットコインのセルフカストディ(自己管理)に興味を持つ人なら、今では誰でも一度は聞いたことがあるこの有名なフレーズ。ビットコインの技術的側面に興味がある人の教科書とも言える「マスタリング・ビットコイン」の著者、アンドレアス・アントノプロス氏の言葉です。
それでも彼がこのフレーズを使い始めた当初は、その言葉の真意を知る人は今ほど多くはありませんでした。
「なんだかんだ言っても、取引所に預けておいた方が安心っしょ。」
多くのユーザーがそう思っていたし、今でもそうした考え方は多く残っています。がしかし
Celsius Network: 暗号通貨融資プラットフォーム。2022年11月10日に米国で破産申請。
FTX:暗号通貨取引所大手。2022年11月11日に米国で破産申請。
Genesis: 暗号通貨ヘッジファンド。2022年11月15日に米国で破産申請。
BlockFi: 暗号通貨レンディング大手。2022年11月20日に米国で破産申請。
繰り返される数々の苦い実体験を経て、人は徐々に自分の財産を自分自身で管理することの意味とそのありがたみを理解していきます。
そして自然にたどり着くハードウェア・ウォレットという管理方法。
What is the best hardware device? #BTC [pic.twitter.com/yrrHk64V0f](http://pic.twitter.com/yrrHk64V0f)
— The ₿itcoin Therapist (@TheBTCTherapist) October 27, 2023
個人的には、このTweetに載っているどのデバイスを利用しても、自身で安全に資産を管理することができると思いますが、今回の記事ではさらにここから一歩踏み込んで 「エアギャップ」 という考え方に触れてみたいと思います。
エアギャップとは
エアギャップ[1]とは、コンピュータネットワークにおいてセキュリティを高める方法の一つ。安全にしたいコンピュータやネットワークを、インターネットや安全でないLAN[2]といったネットワークから物理的に隔離することを指す。エアギャップという語は、コンピュータやネットワークが、他のネットワークから(概念上の「空隙」で)電気的に切断されていることを意味している。
Wikipediaより引用
皆さんご存知のように私達が当たり前のように日々利用しているインターネットは、ひどく汚れた世界です。
人間の妬み、嫉み、僻み、あらゆる悪意渦巻くインターネットと精神衛生上、あなたも少し距離を置きたくなったことはありませんか?
ビットコインさんだって実はそうなのです。
隙あらばあなたの秘密鍵やシードフレーズを奪おうとしてくるスキャマーがうごめき、マルウェア、フィッィング詐欺、キーロガーなどのあらゆる脅威と日々隣合わせのネットの世界と、その保管場所をバッサリと切り離しておくことは、もっとも有効な資産防衛法のひとつです。
極論、ビットコインを日々こつこつと積み立てていく用途であるならば、自分のビットコイン = 秘密鍵を徹頭徹尾、インターネットに触れさせることなく運用することが可能です。
その辺はこれまで自分の連載で紹介してきたCOLDCARDのお家芸ではあるのですが、今回はよりリーズナブルにこの「エアギャップ」運用が可能なBlockStream社のハードウェウォレット 「Jade」 を使った方法を紹介してみたいと思います。
BlockStream社製ハードウェウォレット「Jade」
BlockStream社の創業者アダム・バック博士は、サトシ・ナカモトによるBitcoinのホワイトペーパーにも引用されているHashcashの発案者として有名な暗号学者であり、同社はBitcoin Coreへの多大な貢献でも知られているBitcoin企業です。
そんな同社が開発したBitcoin用ハードウェウォレット「Jade」は、セキュリティと使いやすさにも定評がある上に、ソフトウェアは完全にオープンソース化されており、世界中のビットコイナーが常に ”Dont’ trust, verify.”(信用するな、検証しろ)の目を光らせています。
デバイスは、小さいながらもカラー液晶ディスプレイとQRスキャン用カメラを備えているのが特徴で、今回の記事で紹介する 「Jade完全エアギャップBitcoinトランザクション」 も、この内蔵カメラをフル活用した方法となっています。
このガイドでは、海外のビットコインエデュケーターとして著名な@BTC Sessions/Ben氏のご快諾の元、解説動画「Unlocking ULTIMATE Security: Air-Gapped Bitcoin Transactions with Blockstream Jade!」を参考に、サムネ画像入りで詳しく解説していきます。

今回の目的とポイント
- Jadeを利用し、一切インターネットに接続しない方法でウォレットを作成し、ビットコインを保管する。
- シードフレーズ(秘密鍵)も、Jade内には保存させない。
- ビットコイン送金時の署名は、毎回、携帯のモバイルウォレットとJade間でQRコードを経由して行う。これにより完全エアギャップ・トランザクションを実現する。
※この方法は、あくまで上級者を目的としたJadeの応用機能です。従来のハードウェウォレットのように、シンプルにシードフレーズをJade本体に保管しておく使い方も、もちろん可能です。
※またすでにJadeをお持ちで、従来の方法でウォレットをご使用中の場合は、デバイスを初期化する必要があります。この際、デバイス内の秘密鍵はすべて消去されてしまいます。この機能を試される方は、シードフレーズのバックアップを確実に行い、自己責任にてお願いいたします。
事前準備
まずはJade本体のファームウェアを最新版にアップデートします。”完全エアギャップ”を謳いながら最初からなんですが、今後PCの使用はこれのみです。
公式サイトから各自、自分のOS用「Blockstream Green」をダウンロード&インストールしてください。

ソフトウェアを起動した状態で、JadeをUSB-Cケーブルにて接続すると、ファームウェア・アップデート用のウィザードがポップアップされるはずです。

Jade本体で承認(☑を選択)すると、本体は自動的にアップデートされます。


ここから先は、充電済のJadeであれば今後一切ケーブルを繋ぐ必要はありません。
では、Ben氏の解説の下、 「Jade完全エアギャップBitcoinトランザクション」 用セットアップを進めていきましょう。
必要なもの
- Jade本体
- QRコードテンプレート(公式サイトから印刷可)
- マジックペン
- iPhone or Android携帯
- Nunchukモバイルウォレット (各自インストールしておいてください)
QRシードコードの作成

- Jade右下の電源ボタンを数秒押して、電源を入れます。
- 「Setup Jade」→ 「Continue」→ 「Advanced Setup」を選択します。

- 「Continue」→ 「Create New Wallet」(新しいウォレットの作成)を選択します。
- 「12 Words」を選択し、下記の注意書きを確認して「Continue」を選択します。
These words are your wallet. Keep them protected and offline.
この単語があなたのウォレットです。オフラインで大切に保管してください。

- 12単語が4単語ずつ表示されます。順番に書き留めていきましょう。
- 上部のホイールで次へ進んだり、前に戻ったりできます。
- 12単語をすべて書き留めると確認画面になります。

- 確認画面では、2つの単語の間に入る正しい単語をホイールで選択して答えます。
- 写真の例では4と6の間の単語、つまり5番目の単語を選択しています。
- すべての確認作業に正解すると、設定画面は次に進みます。

Export recovery phrase as a CompactSeedQR
リカバリーフレーズをコンパクトSeedQRとしてエクスポートしますか?
- 「Yes」を選択します。

Draw the CompactSeedQR for use with QR Mode
コンパクトSeedQRをQRモードで使用するため書き出しますか?
- 「Yes」を選択します。

- SeedQRの全体図が表示されます。転写するために、ここから4分割していきます。
- 「Start」を選択して開始します。


- 最初の「A1グリッド」は、すでに塗りつぶされているはずなので、このまま進みます。

- ホイールを回して「A2グリッド」へと進みます。
- 黒いドットで表示されている箇所を、マジックペンで塗りつぶしていきます。
- この際、マス目のすべてを塗りつぶす必要はなく、点を打つ要領でOKです。
※後半での打ち間違いは結構悲しい気分になるので、鉛筆などでの下書きをおすすめします。

- 同じ要領で「A3グリッド」→「B1グリッド」→ … → 「C3グリッド」まで書き写します
- ホイールを右or左に回してOKボタンを押すと、いつでも別のグリッドに移動できます。

- SeedQRが完了したら「Done」を押して完了します。次はしっかりスキャンできるかの確認です。

- 作成したQRコードがきちんとスキャンできるかを確認します。
- カメラをQRコードに近づけすぎると読み取れないので、少し遠目からスキャンするのがコツです。

- スキャンが成功すると「QR Code Verified」(QRコードが確認されました)と表示されます。
- 「Continue」を押して進みます。

- パスフレーズを設定するかどうかの確認画面です。設定する場合は「Yes」を選択。
Add BIP39 passphrase? You will need this to access your funds.
BIP39パスフレーズを追加しますか?自身の資金にアクセスする際に必要になります。
現状では、QRコードを他の誰かにスキャンされてしまうとあなたの資金はすぐに盗まれてしまう状態にありますが、「パスフレーズ」を設定することでそうした事態を防ぐことができます。
パスフレーズに関する詳しい解説は、過去のこちらの記事をお読みください。

- 好きなパスフレーズを設定します。(この例では”abc”で設定しています。)
- ☑マークを押して決定します。

- 確認画面で、パスフレーズを確認します。問題なければ「Yes」を選択します。

- 他のデバイスとJadeの接続方法を選択します。今回は「完全エアギャップ」なので「QR」を選択です。

Save and encrypt wallet with PIN or scan a SeedQR every session?
暗号化したウォレットを保存しPINで使用しますか?
それとも使用する度にSeedQRをスキャンしますか?
- 「SeedQR」を選択します。

This wallet will be temporary and forgotten on reboot.
このウォレットは一時的なものとなり、再起動ごとに消去されます。
- つまり秘密鍵はJade本体には保存されないことを意味します。「Continue」で進みます。

- ひとまず、これでJade側の設定は完了です。この画面は「自身の秘密鍵」+「パスフレーズ」を入力してログインしている状態です。
Nunchukモバイルウォレットのセットアップ

- ウォレットにログインした状態のJadeで「Options」を選択します。


- 「Wallet」→ 「Export Xpub」を選択します。

- Nunchukモバイルウォレットで読み込むためのアニメーションQRコードが表示されます。

- 携帯にインストールしておいたNunchukウォレットを起動します。
- 「Keys」の「+」マークをクリックします。

- 「Add air-gapped key」(エアギャップ・キーの追加)を選択します。

- 解説画面を「Continue」でスキップしたら、このキーに名前を付けましょう。
- 「Scan QR」をクリックすれば、JadeのQRコードのスキャニングが開始できます。

- 携帯のカメラへのアクセスに許可を与え、JadeからQRコードをスキャンしてください。

- 「Add Key」をクリックしてキーを追加します。

- 「Done」をクリックすれば、キー追加の設定が完了です。

- このキーをウォレットにリンクしましょう。「Wallet」欄の「+」をクリックします。

- 「Create New Wallet」をクリックしてウォレットに名前を付けます。
- 名前を入力したら「Continue」をクリックして進みましょう。

- 先程追加したキーを選択して「Continue」をクリックすれば、このキーを利用したウォレットが作成されます。

- レビュー画面で、このウォレットがひとつのキーを利用した、一般的なウォレットであることが確認できます。「Continue」をクリックして進みます。

- この画面では、ウォレット設定のバックアップ画面ですが、今回のセットアップでは必要ありませんので「I'll do this later」(あとでやります)を選んでOKです。
※マルチシグ・ウォレットを作成するような場合は、このバックアップが後の復元時に非常に重要になります。

お疲れ様でした。これでJadeで生成した秘密鍵とリンクしたNunchukモバイルウォレットの設定が完了しました。

Bitcoinの受け取りはとても簡単です。

ウォレット名をクリックして「Recieve」(受け取り)をクリックすれば、いつでもウォレットに紐づく新たなアドレスが表示されます。
アドレスが本当にこのシードフレーズから生成されたものなのか心配で確認したい方はJadeを使ってVerify(検証)することもできます。

ウォレットにログインしている状態で「Scan QR」を選択して、確認したいアドレスのQRをスキャンしてください。

アドレスが表示されるので☑を選択すれば「Adress verified」(アドレス検証済)と表示され、自身のアドレスであることが確認できます。
エアギャップ・トランザクションによるBitcoin送金
さあ、ここからがこのセットアップの真骨頂とも言えるエアギャップ・トランザクションによるBitcoinの送金の解説です。
ここで、今一度確認ですが、Jadeの電源を切った時点であなたの秘密鍵は、Jade本体から消去されます。
この世界の誰もあなたの秘密鍵は、設定時にメモしたQRコードとシードフレーズからしか知りようがありません。
そしてポイントは、あなたの秘密鍵は設定時から一度も、インターネットには触れていない点です。そして今や、Jade本体内にも保存されていません。かつBitcoinを受け取る際には、秘密鍵を出し入れする必要が一切ない。
それでは、再度、秘密鍵が必要になる場面は何でしょうか。
そう、それがBitcoinを送金する場面なのです。
では、参ります。

- Jadeの電源を入れ、「Scan SeedQR」を選択します。
※画面下部のUninitialized(未初期化)が、Jade本体に何も保存されていない状態を示しています。

- カメラでQRコードをスキャンします。

- 設定時にパスフレーズを設定した場合は、ここでパスフレーズを入力します。
- ☑を押して、完了です。(設定していない場合は、空欄のまま☑を押します。)
- パスフレーズの入力が正しいことを確認して「Yes」を選択します。

- これでウォレットにログインした状態になりました。この状態で、受金アドレスの確認や送金時の署名が可能になります。
※画面下部がActiveになっていて、右下にフィンガープリント(ウォレットの確認に使用)が表示されています。
では、モバイルウォレットに持ち替えて実際に送金トランザクションに署名してみます。

- Nunchukウォレットを開いて「Send」(送金)をクリックします。

- 画面右上のQRスキャンマークをクリックして、送金先アドレスをスキャンします。

- 送金金額を入力します。「Send all」をクリックすると全額送金になります。
- 送金金額を正しく入力したなら「Continue」をクリックして進みます。

- トランザクションの確認画面になります。宛先アドレスに間違いがなければ「Create transaction」(トランザクション作成)ボタンをクリックします。

- 「Sign」(署名)をクリックしましょう。

- 「Export transaction」(トランザクションのエクスポート)をクリックします。
- 「Export via QR」(QR経由でエクスポート)をクリックします。

- ウォレットにログインした状態のJadeで「Scan QR」を選択します。
- Nunchuk画面上に表示されるQRコードをスキャンしてください。
- 緑ゲージが100%になるとスキャンが完了します。

- 画面に送金アドレスと送金金額が正しく表示されているのを確認して「→」を選択します。

- Fee(送金手数料)を確認し、問題なければ☑を選択します。
- QRコードが表示されているJade側の電源は切らずにそのままにしておきます。
※この時点でJadeによる署名は完了していますが、まだ送金手続きは完了していません。今度はNunchuk側で、この署名されたトランザクションを取り込む作業を行います。

- Nunchukウォレットに持ち替えて「Import signature」(署名のインポート)をクリックします。


- カメラに切り替わるので、携帯でJade画面上のQRコードをスキャンします。
- カメラはそれほど接近させる必要はありません。進捗状態が携帯上に1%~100%で表示されます。

- 100%スキャンが完了すると署名欄が「Signed」になり、送金の準備が完了です。
- 「Broadcast transaction」(トランザクションのブロードキャスト)をクリックすると、ビットコイン・ネットワークにトランザクションが送られ、実際のビットコインの送金が開始されます。
お疲れ様でした。これでJadeを利用した「完全エアギャップBitcoinトランザクション」の解説は終了です。
毎回、同じ結論になりますが、Jadeを利用したビットコイン保管においても、初期設定時にメモした12単語(シードフレーズ)の保管方法が、資産防衛のための最重要ポイントになります。
あわせて読みたい:ハードウェアウォレットCOLDCARDで大事なビットコインを守ろう④~バックアップ&リカバリ編~
このセットアップでは、秘密鍵自体が一切デバイスに残らないため、このシードフレーズのオフライン管理は、なおのこと重要になります。
さらに今回は、手書きしたSeedQRコードの保管も加えて考える必要があるため、一般的なセルフカストディより注意する点が多くなりますし、このSeedQRコードも、スキャンされると一瞬で秘密鍵を盗まれてしまうのではないかと、不安要素のひとつに思うかもしれません。
しかし、実際はこのQRコード、一般的なQRコードの規格とは違い特殊なものなので、携帯カメラで読み取ろうとしても、そもそも反応しません。つまりSeedQRコードを、普通の携帯でスキャンしても、それですぐさまシードフレーズが読み取られるというわけではないのです。
また先述したパスフレーズの設定により、シードフレーズおよびSeedQRコードの流出時にも対策が可能です。
この点をうまく利用し、SeedQRコードをビットコインとの関連性を感じさせない形でうまく保管すれば、セキュリティと利便性をうまくバランスさせた形での運用が可能になると思います。
また送金時のやり取りを、少しまどろっこしく感じた方もいらっしゃると思いますが、この面倒臭さにこそ価値を見いだせる初中・上級者の方々には、ぜひおすすめしたい方法です。
しかし、もしもっと安価で簡単に「エアギャップBitcoinトランザクション」が実現できるプロダクトが他にもあったとしたら?

次回、「TAPSIGNER x Nunchukでもっと簡単エアギャップ!」乞うご期待。