オフライン鍵生成: エアギャップセキュリティガイド
インターネット接続されたコンピューターで暗号資産の鍵を生成すると、マルウェア、キーロガー、画面キャプチャ、クリップボード乗っ取り、リモート流出のリスクにさらされます。長期コールドストレージを目的とした高額ウォレットでは、エアギャップされたオフライン生成がゴールドスタンダードです。つまり、これまで一度も、今後も一切ネットワークに接続しないデバイス上で鍵を作成する方法です。
このガイドでは、ハードウェア選定、OSセットアップ、鍵生成、検証、安全なクリーンアップまで、オフライン鍵生成の包括的な手順を段階的に解説します。
なぜエアギャップ生成が重要なのか
脅威モデル
日常的に使うコンピューターでシードフレーズや秘密鍵を生成すると、鍵情報は次の場所に存在します。
- RAM — システム上で動作中の任意のプロセスからアクセス可能。
- Disk — OSの仮想メモリ機構によりディスクへスワップされる可能性がある。
- Clipboard — コピー&ペーストすると、すべてのアプリケーションからアクセス可能。
- Network — マシンが接続されていると、マルウェアが鍵を即座に流出できる。
- Display — 画面キャプチャ型マルウェアや覗き見(ショルダーサーフィン)の対象。
- Keyboard — キーロガー(ソフトウェア/ハードウェア)が入力をすべて記録。
エアギャップコンピューターはネットワーク経路を完全に排除します。さらに適切な運用セキュリティと組み合わせることで、他の経路も大幅に低減または排除できます。
どんな人にエアギャップ生成が必要か
- 失っても問題ない額を超える資産を保管する人。
- 長期の「ディープコールド」保管(数年〜数十年)。
- 機関投資家のカストディやトレジャリー管理。
- 到達可能な最高水準のセキュリティを求める人。
少額残高の日常支払いウォレットであれば、エアギャップ手順の複雑さなしにハードウェアウォレットで十分なセキュリティを得られます。
ハードウェア選定
オプション1: 専用ノートPC(推奨)
新規または工場出荷状態に戻したノートPCを購入し、鍵生成専用にしてインターネットへ一切接続しない運用にします。
- すべてのネットワークハードウェアを取り外すか無効化する。 可能ならWi-FiカードとBluetoothモジュールを物理的に取り外す。最低限、BIOS/UEFIで無効化する。
- カメラとマイクを無効化する。 取り外すか、物理的に覆う/切断する。
- セルラーモデム非搭載のノートPCを使う。
- 予算重視の選択肢: 中古ThinkPad(X230, T440)— 安価、Linux対応が良い、物理改造しやすい。
オプション2: Raspberry Pi
Raspberry Pi(Model 3B+ または 4)は低コストのシングルボードコンピューターです。無線モジュールなしのPi Zeroを使う、またはネットワークを無効化すればWi-Fiなしで運用できます。
- microSDカードから起動。
- 永続ストレージはSDカードのみ(後で破棄)。
- 適切なモデルなら無線ハードウェアなし。
- 低コスト(アクセサリ込みで $35–$75)。
オプション3: 既存ハードウェアでLive USB起動
既存PCで、すべてのネットワークを無効化した専用Linux Live USBを起動します。
- Live環境は完全にRAM上で動作。
- (正しく設定すれば)内部ドライブにデータを書き込まない。
- シャットダウン後、RAMはクリアされる。
- リスク: 既存PCにはOS再起動をまたいで残るハードウェアレベルの改ざん(ファームウェアルートキット、ハードウェアキーロガー)がある可能性。専用デバイスはこのリスクを排除できる。
OSセットアップ
Tails OS(推奨)
Tailsは痕跡を残さないことを目的としたプライバシー重視のLinuxディストリビューションです。
- USB起動し、完全にRAM上で動作。
- 既定ですべての通信をTor経由にする設計。ただしエアギャップ用途ではネットワークを一切有効化しない。
- 明示設定しない限り永続状態を持たない(amnesic設計)。
- 一般的なツールを同梱し、鍵生成スクリプト用にPythonも実行可能。
セットアップ手順:
- 通常のPCでTails ISOをダウンロード。
- Tails署名鍵でISO署名を検証。
- Tails Installer、Etcher、または
ddでUSBへ書き込み。 - エアギャップPCをそのUSBから起動。
- Tails Greeterでネットワーク接続を設定しない。
- ネットワークインターフェースが有効でないことを確認:
ip link showで全インターフェースがDOWN。
Ubuntu Live USB(代替)
Tailsが適さない場合:
- Ubuntu ISOをダウンロードし、チェックサムを検証。
- USBに書き込み。
- BIOSでネットワーク無効のまま起動。
- Ubuntuインストーラーで「Try Ubuntu」を選択(インストールしない)。
- ネットワーク接続がないことを確認。
エアギャップ完全性の検証
起動後、エアギャップ状態を確認します。
# ネットワークインターフェースがUPでないことを確認
ip link show
# IPアドレスが割り当てられていないことを確認
ip addr show
# インターネット到達を試行(失敗するはず)
ping -c 1 8.8.8.8
# Wi-FiとBluetoothを確認
rfkill list all
すべてのネットワークインターフェースはDOWN、IPアドレス未割り当て、ping失敗であるべきです。いずれかが接続性を示す場合は、先に進まず原因を特定してください。
鍵生成プロセス
方法1: SafeSeedツールをオフラインで使用
SafeSeedのツールはクライアントサイドWebアプリで、インターネット接続なしのブラウザで実行できます。
SafeSeed Seed Phrase Generator と Paper Wallet Creator はオフライン利用用に保存できます。オフライン化する前に、完全なWebページを保存(Ctrl+S / Cmd+S)し、USB経由でエアギャップPCへ移してブラウザで開いてください。暗号処理はすべてJavaScriptでローカル実行され、サーバー通信は不要です。
手順:
- 通常の(オンライン)PCでSafeSeedツールへアクセス。
- 完全なWebページをUSBに保存。
- ファイル整合性を検証(利用可能ならチェックサム比較)。
- USBをエアギャップPCへ移す。
- 保存したHTMLをブラウザで開く。
- シードフレーズを生成。
- 紙に書き留める(エアギャップ機にデジタル保存しない)。
- シードフレーズを再入力し、同じアドレスが生成されることを確認。
方法2: Ian ColemanのBIP-39ツールを使用
Ian Coleman BIP-39 tool は、オフライン鍵生成で広く使われるオープンソースの単体HTMLページです。
- オンラインPCでGitHubから最新リリースをダウンロード。
- PGP署名を検証。
- USB経由でエアギャップPCへ転送。
- ブラウザで
bip39-standalone.htmlを開く。 - ニーモニックを生成または入力。
- コインと導出パスを選択。
- シードフレーズとアドレスを記録。
方法3: サイコロ由来エントロピー
すべてのソフトウェアRNGを最大限信用しない場合、サイコロで手動エントロピーを生成します。
- カジノ品質のサイコロを使用(角が立った精密ダイス。丸みのある一般向けダイスは不可)。
- 256ビットエントロピーには1個のサイコロを99回振る(1回あたり約2.585ビット、99回で約255.9ビット)。
- 出目列をバイナリ文字列へ変換。
- BIP-39ツール(オフライン)でバイナリエントロピーをニーモニックへ変換。
- または128ビット(12語フレーズ)なら50回振る。
サイコロ変換方法:
- Base-6 method: 各出目(1-6)を記録し、列をバイナリへ変換。
- Binary dice method: コインを256回投げる(表=1、裏=0)。
- Dice-to-binary: サイコロを振り、1-3なら0、4-6なら1を記録。これを256回繰り返す。
3つ目の方法はエントロピー効率は最も低いですが、最も簡単です。エントロピー品質の詳細はEntropy and Randomness guideを参照してください。
方法4: コマンドライン(Python)
コマンドラインに慣れているユーザー向けに、最小のPythonスクリプトでBIP-39ニーモニックを生成できます。
import hashlib
import os
# BIP-39 word list must be loaded from a file
with open('english.txt', 'r') as f:
wordlist = [w.strip() for w in f.readlines()]
# Generate 256 bits of entropy
entropy = os.urandom(32) # Uses OS CSPRNG
# Compute checksum
h = hashlib.sha256(entropy).digest()
checksum_bits = bin(h[0])[2:].zfill(8) # First 8 bits for 256-bit entropy
# Convert entropy to binary string
entropy_bits = bin(int.from_bytes(entropy, 'big'))[2:].zfill(256)
all_bits = entropy_bits + checksum_bits
# Split into 11-bit groups and map to words
words = []
for i in range(0, len(all_bits), 11):
index = int(all_bits[i:i+11], 2)
words.append(wordlist[index])
print(' '.join(words))
重要: これは教育目的の簡略例です。本番利用では python-mnemonic の mnemonic のような十分に監査されたライブラリを使用してください。
検証
シードフレーズ生成後、資金を預ける前に必ず検証します。
1. チェックサム検証
シードフレーズを生成ツールに再入力します。エラーなく受け付けられればチェックサムは有効です。
2. アドレス導出検証
対象暗号資産と導出パスで先頭数個のアドレスを導出し記録します。後で別デバイス(またはエアギャップ機の再起動後)でシードフレーズを再入力し、同じアドレスが生成されることを確認します。
3. ツール間クロス検証
可能なら2つの異なるツール(例: SafeSeed generator と Ian Coleman tool)でシードフレーズを検証します。同一シードフレーズ、導出パス、パスフレーズなら、両方で同一アドレスが生成されるべきです。
4. 少額送金テスト
大きな価値を保管する前に:
- 最初の受取アドレスへ少額の暗号資産を送る。
- 別デバイスでシードフレーズからウォレットを復元。
- 資金が見えること、および返送トランザクションに署名できることを確認。
これで、エントロピー生成、ニーモニック符号化、シード導出、鍵導出、アドレス生成までの全チェーンが正しいことを確認できます。
シードフレーズの記録
紙
- 耐久性のあるインクペンで、酸性を含まない紙に明瞭に書く。
- 各単語に番号を振る(1-24)。
- 筆圧痕が残る面では書かない(下の紙に跡が出るメモ帳などは避ける)。
- 耐火・防水容器に保管。
金属
- ステンレス板に打刻または刻印する。
- スペース制約がある場合、先頭4文字略記でテストする。
- 打刻直後に可読性を確認。
- 金属は火災・洪水に強く、長期保管に推奨。
やってはいけないこと
- シードフレーズを撮影しない。
- エアギャップ機上のファイルに入力しない。
- 印刷しない(プリンターにはメモリとネットワーク機能がある)。
- USBドライブに保存しない。
安全なクリーンアップ
シードフレーズの生成と記録後、エアギャップデバイス上の痕跡をすべて除去します。
1. クリップボードと画面をクリア
- すべてのアプリケーションを閉じる。
- クリップボードをクリア(無関係なテキストをCtrl+C)。
2. シャットダウン
- コンピューターの電源を切る。RAM内容は電源断後、数秒〜数分で減衰する。
- 追加の確実性のため、少なくとも15分は電源オフのままにする(DRAM保持時間は室温では短く、低温環境では長くなる)。
3. ストレージ媒体
- Tails live USB使用時はディスクへ何も書き込まれていない。USBは再利用可能。
- 非amnesic OSのRaspberry Pi SDカードを使った場合、SDカードを安全消去(
dd if=/dev/urandom of=/dev/sdX bs=1M)または物理破壊する。 - 誤ってエアギャップ機の内部ドライブへ保存した場合は、安全消去する。
4. USBドライブ
- 手順どおりなら、生成ツール転送に使ったUSBに生成済み鍵情報は含まれない。
- USBに元のツールファイル以外がないことを確認。
- 最大限の安全性のため、使用後にUSBを消去する。
上級編: エアギャップでのトランザクション署名
エアギャップコンピューターは鍵生成だけでなく、継続的なトランザクション署名にも有用です。
ワークフロー
- オンライン(watch-only)マシン: 未署名トランザクションを作成。
- 転送: 未署名トランザクションをUSBまたはQRコードでエアギャップ機へ移動。
- エアギャップ機: 秘密鍵でトランザクションに署名。
- 転送: 署名済みトランザクションをオンライン機へ戻す。
- オンライン機: 署名済みトランザクションをネットワークへブロードキャスト。
QRコード転送(推奨)
QRコードを使うとUSBを完全に排除でき、潜在的なマルウェア経路を閉じられます(USBデバイスは自動実行ペイロードを運ぶ可能性がある)。
- オンライン機で未署名トランザクションをQRコード表示。
- エアギャップ機に接続したカメラでQRコードを読み取る。
- トランザクションに署名。
- エアギャップ機で署名済みトランザクションをQRコード表示。
- オンライン機で読み取る。
QRベースのエアギャップ署名をサポートするウォレットには、Coldcard、Keystone、Sparrow Wallet(ウェブカメラ構成)があります。
PSBT(Partially Signed Bitcoin Transactions)
BitcoinのPSBT形式(BIP-174)は、エアギャップ運用向けに設計されています。PSBTには、署名デバイスがブロックチェーンデータを持たなくても署名に必要な情報がすべて含まれます。
マルチシグ エアギャップ構成
最高水準のセキュリティには、エアギャップ鍵生成とマルチシグを組み合わせます。
- 3回の別々のエアギャップセッション(理想的には別デバイス)で3つのシードフレーズを生成。
- 2-of-3のマルチシグウォレットを構築。
- 各シードフレーズを別々の物理場所に保管。
- 取引には3台中2台のエアギャップデバイスで署名が必要。
これにより次を保護できます:
- 1台のみの侵害(露出は1鍵のみ)。
- 1つのシードフレーズ紛失(残り2鍵で署名可能)。
- 1つの保管場所の侵害。
よくあるミス
ミス1: 「クリーンだが以前接続した」コンピューターの使用
過去にインターネット接続したPCは、OSを消去・再インストールしても不十分です。ファームウェアレベルのマルウェア(UEFIルートキット)はOS再インストール後も残存し得ます。専用の未接続デバイスがこのリスクを排除します。
ミス2: エアギャップ機を「一瞬だけ」接続する
短時間でもネットワーク接続すればエアギャップは破綻します。マルウェアはミリ秒単位で秘密鍵を流出できます。一度接続したデバイスは、もはやエアギャップと見なせません。
ミス3: プリンターの使用
プリンターは印刷ジョブ用の内部ストレージを持つことが多く、現代の多くの機種はWi-FiやBluetoothも搭載しています。シードフレーズを印刷するとプリンター内メモリに残り、送信される可能性があります。代わりに手書きにしてください。
ミス4: シードフレーズをデジタル転送する
シードフレーズは、エアギャップ画面に一時表示される短い瞬間以外、デジタル形式で存在させるべきではありません。USBへコピー、ファイル保存、転送用QRコード化はしないでください。紙に書くか金属へ直接打刻してください。
ミス5: 生成ツールを検証しない
エアギャップ機へ転送するツールは、使用前に必ず検証が必要です。ファイルハッシュ、PGP署名、最低でもファイルサイズ比較を行ってください。改ざんツールは攻撃者が既知の決定論的鍵を生成する恐れがあります。
FAQ
なぜハードウェアウォレットだけではだめですか?
ハードウェアウォレットは優秀で、ほとんどのユーザーには十分です。エアギャップ生成は、ハードウェアウォレットの乱数生成器やファームウェアへの信頼を減らせるため、非常に高額な保管で追加の安全余裕を提供します。またエアギャップ方式では複数の独立ツールで検証できますが、ハードウェアウォレットは単一の信頼点になります。
エアギャップ手順全体にはどれくらい時間がかかりますか?
初回セットアップは、OS準備、検証、鍵生成、クリーンアップを含めて2〜4時間を見込んでください。準備済みデバイスでの以後の生成は30〜60分です。
スマートフォンをエアギャップデバイスとして使えますか?
スマートフォンは複数の無線(セルラー、Wi-Fi、Bluetooth、NFC)を持ち、常に物理的無効化できるとは限らないため、完全なエアギャップ化が難しいです。ネットワーク機器を取り外したノートPCのほうが信頼しやすいです。Keystone walletのように、エアギャップ署名向けに設計された専用デバイスもあります。
すべてのウォレットでエアギャップ生成は必要ですか?
いいえ。少額の日常利用ウォレットなら、信頼できるハードウェアウォレット、あるいは適切に保護されたソフトウェアウォレットでも十分です。エアギャップ生成は、重要な価値を長期コールドストレージする場合に推奨されます。
エアギャップ機のソフトウェアはどう更新しますか?
更新しません。エアギャップ機は同じソフトウェアを長期間使うべきです。より新しい生成ツールが必要な場合は、オンライン機でダウンロード・検証し、USBで転送後にエアギャップ機でもチェックサムを検証してから使用してください。
エアギャップ機の乱数生成器が壊れていたらどうなりますか?
そのための代替がサイコロ由来エントロピーです。ハードウェア/ソフトウェアRNGをすべて信用しないなら、サイコロで手動生成したエントロピーをBIP-39ツールに入力してください。得られるシードフレーズの安全性は電子部品ではなく、サイコロ試行の品質のみに依存します。
マルウェアはエアギャップを越えられますか?
理論上、国家レベルの高度な攻撃者は電磁放射、音響信号、LED点滅パターンなどでエアギャップ越え技術を実証しています。実運用上、これらは物理的近接、特殊機材、高度能力を要し、一般的な暗号資産窃盗犯の能力を大きく超えます。大多数のユーザーにとって、適切に維持されたエアギャップは実質的に突破困難です。