オンラインシードフレーズ生成器は安全か?
目次
暗号資産コミュニティで絶えず出る質問があります:オンラインツールを使ってシードフレーズを生成するのは安全なのか?短い答えは、そのツールがどのように構築されているかに完全に依存するということです。設計の悪いオンライン生成器は、ウォレットに資金を入れる前にキーを攻撃者に露出させる可能性があります。適切に設計されたものは、オフラインツールと同等に安全です。その違いはアーキテクチャにあり、そのアーキテクチャを理解することは暗号資産保有者としての責任です。
このガイドでは、オンラインシードフレーズ生成器を安全または危険にする要素が正確に何か、特定のツールがどちらのカテゴリに属するかを確認する方法、そして暗号化キーに触れるすべてのツールに求めるべき技術標準について説明します。
オンライン生成器のリスク¶
BIP39シードフレーズを生成する際、ウォレットのすべての資金を管理するマスターシークレットを作成しています。他の誰かがそのフレーズを入手すれば、そこから派生したすべてのアドレスのすべてのコインを奪うことができます。これは理論的なリスクではありません。数十億ドルが侵害されたキー生成を通じて盗まれています。
オンライン生成器の根本的なリスクは送信です。ツールがシードフレーズ、秘密鍵、または生成に使用された生のエントロピーをリモートサーバーに送信する場合、秘密のコピーが制御外に存在します。そのサーバーがハッキングされる可能性があります。運営者が悪意を持っている可能性があります。中間者がデータを傍受する可能性があります。ネットワークログに記録される可能性があります。
このリスクは明らかに怪しいウェブサイトに限定されません。プロフェッショナルなデザインと数千人のユーザーを持つ正当に見えるツールが、生成されたキーをサーバーに送信していたことが発覚しています。一部は意図的に悪意のあるものでした。その他は分析スクリプトやエラー報告ツールを通じて誤ってデータを漏洩するバグがありました。ユーザーへの結果は同じでした:侵害されたウォレットと盗まれた資金。
危険は、訪問のたびに外部サーバーからコードをロードするツールにも及びます。昨日は生成器が安全だったとしても、侵害されたCDNや不正なアップデートが今日キーを盗むコードを注入する可能性があります。検証可能で監査可能なコードなしには、フレーズを生成する瞬間にブラウザで実際に何が実行されているかを知ることができません。
クライアントサイド vs サーバーサイド:決定的な違い¶
オンラインシードフレーズ生成器を評価する際の最も重要な単一要因は、クライアントサイドで動作するかサーバーサイドで動作するかです。
サーバーサイド生成器はリモートサーバーでシードフレーズを作成し、ブラウザに送信します。秘密は転送中にインターネットを通過し、サーバーメモリに存在し、潜在的にログに記録されます。HTTPS暗号化があっても、サーバー運営者は生成されたすべてのキーにアクセスできます。このモデルは根本的にセキュリティと両立せず、いかなる状況でもサーバーサイドのシードフレーズ生成器を使用すべきではありません。
クライアントサイド生成器はすべての暗号化操作をブラウザ内で実行します。エントロピーがローカルで生成され、シードフレーズがローカルで派生され、結果のキーはデバイスを離れません。ウェブサイトはコードを提供しますが、そのコードがロードされると、サーバーから独立して機能します。ページをロードした後にインターネットから切断しても、真のクライアントサイド生成器は完璧に動作し続けます。
この区別が重要な理由は、適切に実装されたクライアントサイドツールがデスクトップアプリケーションと同じセキュリティ特性を持つからです。ブラウザはハードウェアベースの乱数生成、標準暗号化ライブラリ、そして必要に応じてネットワークからの完全な分離にアクセスできる実行環境です。
ただし、「クライアントサイド」という主張は検証が必要です。多くのツールがクライアントサイドと主張しながら、依然としてネットワークリクエストを行ったり、外部スクリプトをロードしたり、画面データをキャプチャできる分析トラッカーを含んでいます。次のセクションでは、これらの主張を自分で確認する方法を説明します。
クライアントサイドであることを確認する方法¶
ツールが真にクライアントサイドで動作するかを確認するには、誰でも実行できるいくつかの簡単なチェックが必要です。
機内モードテスト¶
最も簡単なテスト:生成器ページをロードし、インターネットから完全に切断します。デバイスで機内モードを有効にするか、イーサネットケーブルを外すか、Wi-Fiをオフにします。そしてシードフレーズの生成を試みてください。ネットワーク接続なしでツールが完璧に動作すれば、少なくとも生成ステップはローカルで実行されています。
ネットワークトラフィック検査¶
生成器を使用する前にブラウザの開発者ツール(F12またはCmd+Shift+I)を開き、ネットワークタブに切り替えます。既存のエントリをクリアし、シードフレーズを生成します。生成ボタンをクリックした後の外向きリクエストを監視します。正当なクライアントサイドツールは生成中にネットワークリクエストがゼロであるべきです。外部ドメイン、分析エンドポイント、またはAPI呼び出しへのリクエストがあれば疑わしいと考えてください。
ソースコードレビュー¶
オープンソース生成器では、ブラウザで実行される実際のコードをレビューできます。以下を確認してください:
- 乱数生成がカスタムまたはインポートされた乱数関数ではなく、ブラウザの内蔵Web Crypto APIを使用しているか
- 生成されたデータで
fetch()、XMLHttpRequest、またはWebSocket呼び出しが行われていないか - 侵害される可能性のあるCDNから外部スクリプトがロードされていないか
- 分析または追跡スクリプトが存在しないか、最低限ページのDOMコンテンツにアクセスできないか
サブリソース完全性¶
ページがスクリプトタグにサブリソース完全性(SRI)ハッシュを使用しているか確認します。SRIは外部ソースからロードされたスクリプトが改ざんされていないことを保証します。SRIなしでは、侵害されたCDNがキーをキャプチャする悪意のあるJavaScriptを提供する可能性があります。
Web Crypto API標準¶
現代のブラウザはWeb Crypto APIと呼ばれる内蔵暗号化APIを含んでいます。これはブラウザベースのツールにおけるエントロピー生成のゴールドスタンダードです。
シードフレーズ生成器がcrypto.getRandomValues()を呼び出すと、オペレーティングシステムの暗号学的に安全な疑似乱数生成器(CSPRNG)からランダム性を取得します。ほとんどのシステムで、これはインタラプトタイミング、CPUの熱ノイズ、専用ハードウェア乱数生成器を含むハードウェアエントロピーソースを組み合わせます。結果のランダム性は、すべての実用的な暗号化目的において真のランダムデータと区別がつきません。
これが重要な理由は、BIP39シードフレーズのセキュリティが究極的にはそれを生成するために使用されたエントロピーのセキュリティだからです。128ビットのシードフレーズ(12語)は128ビットの真のランダム性が必要です。ツールがcrypto.getRandomValues()の代わりにMath.random()を使用すると、エントロピープールが劇的に小さくなり、結果のシードフレーズは総当たり攻撃が可能になる可能性があります。エントロピーの品質が重要な理由のより深い探求は暗号資産におけるエントロピーとは?をご覧ください。
Web Crypto APIはChrome、Firefox、Safari、Edgeを含むすべての現代ブラウザで利用可能です。パスワードマネージャー、バンキングアプリケーション、セキュアメッセージングツールで使用されるのと同じプリミティブです。正しく使用されると、ハードウェアウォレットの内部乱数生成器と同じ品質のランダム性を提供します。
SafeSeedのアーキテクチャ¶
SafeSeedはゼロからクライアントサイドツールとして設計されています。エントロピー生成からシードフレーズの派生、秘密鍵の計算まで、すべての暗号化操作がブラウザ内で完全に実行されます。
SafeSeedのアーキテクチャが上記で概説した各リスクにどのように対処するかを説明します:
エントロピー生成はWeb Crypto APIを独占的に使用します。Bitcoin Seed Phrase GeneratorやEthereum Seed Phrase Generatorを使用する際、ランダム性はcrypto.getRandomValues()を通じてオペレーティングシステムのCSPRNGから取得されます。
サーバー通信なしがキー生成中に発生します。SafeSeedはキーの生成、表示、派生時にネットワークリクエストを一切行いません。上記で説明したネットワーク検査方法を使用して自分で確認するか、ページをロードした後にインターネットから切断するだけです。
オープンソースで監査可能なコードは、SafeSeedの主張を信頼する必要がないことを意味します。ソースコードは誰でもレビューできるように公開されています。セキュリティ研究者、暗号学者、経験豊富な開発者が実装が主張と一致するかを検証できます。
暗号化操作に外部依存なし。BIP39派生、キー生成、アドレス計算のすべてがページに直接バンドルされたコードを使用します。静かに置き換えられる可能性のあるCDNからロードされる暗号化ライブラリはありません。
このアーキテクチャは、SafeSeedを使用してBitcoinやEthereumのシードフレーズを生成することが、コードを検証し、オプションで生成前に切断すれば、エアギャップコンピューターでローカルプログラムを実行するのと同じセキュリティ特性を持つことを意味します。
評価チェックリスト¶
オンラインシードフレーズ生成器を使用する前に、このチェックリストを確認してください。正当なツールはすべての項目を通過するはずです。
必須属性¶
-
クライアントサイド実行:ツールは初期ページロード後、インターネット接続なしで動作する必要があります。機内モードで自分でテストしてください。
-
Web Crypto API使用:ソースコードはエントロピーに
crypto.getRandomValues()を使用する必要があります。ソースまたは開発者ドキュメントを確認してください。 -
生成中のネットワークリクエストなし:ブラウザのネットワークタブを開き、シードフレーズ生成時に外向きリクエストがゼロであることを確認してください。
-
オープンソースコード:完全なソースコードが監査のために公開されているべきです。独自の生成器は運営者を盲目的に信頼する必要があります。
-
分析または追跡スクリプトなし:Google Analytics、Hotjarなどのサードパーティスクリプトが表示されたシードフレーズを含む画面データをキャプチャする可能性があります。
品質の強い指標¶
-
チェックサム検証付きのBIP39準拠:ツールは有効なチェックサムを持つフレーズを生成し、実装する標準を明確に説明するべきです。その仕組みの詳細はBIP39の解説をご覧ください。
-
決定論的派生:同じシードフレーズが与えられると、ツールは常に同じキーとアドレスを派生するべきです。他の信頼できるツールと結果を照合して正確性を検証できます。
-
標準派生パスのサポート:HDウォレットの派生はBIP44標準に従い、ツールで生成されたウォレットが互換性のあるすべてのウォレットソフトウェアで復元可能であるべきです。HDウォレットと派生パスで詳しく学べます。
-
セキュリティモデルの明確な文書化:ツールは何がどこで実行されるか、どのデータがデバイスを離れるか(何も離れるべきではない)、エントロピーがどのように生成されるかを正確に説明するべきです。
危険信号¶
- シードフレーズ生成前にアカウント作成やメール入力を要求
- 生成ページにソーシャルメディア共有ボタンを含む
- 複数の外部ドメインからスクリプトをロード
- Web Crypto APIの代わりにカスタム乱数生成を使用
- レビュー用のソースコードを提供しない
- シードフレーズ生成中にネットワークリクエストを行う
- シードフレーズをサーバーに保存または「バックアップ」するよう要求
安全なオンライン生成器と危険なものの違いは、表面的ではなくアーキテクチャ的です。きれいなインターフェースはコードがサーバーに通信するなら何の意味もありません。見た目の悪いツールでも適切なエントロピーで完全にブラウザ内で実行されれば、完璧に安全です。チェック方法を学び、自分で実行すれば、どのツールでも自信を持って評価できるようになります。
シードフレーズと秘密鍵の関係についての追加コンテキストはシードフレーズ vs 秘密鍵をご覧ください。そして安全にキーを生成する準備ができたら、SafeSeedのBitcoin Seed Phrase GeneratorとEthereum Private Key Generatorの両方がこの記事で説明した原則に基づいて構築されています。