秘密鍵生成におけるエントロピーソースの重要性
この記事は次の言語でご利用いただけます:
ビットコインの秘密鍵が256ビットの数値であることをご存じですか?つまり、2^256通りもの組み合わせが存在し、これは観測可能な宇宙に存在する原子の総数をも超えるほど膨大な数です。
秘密鍵は仮想通貨のセキュリティの要であり、デジタル資産を守るマスターパスワードのような役割を果たします。その安全性はランダム性、つまりエントロピーに大きく依存しており、これは鍵の生成に不可欠です。エントロピーはビット単位で測定され、システムのランダムさや不確実性の度合いを数値化します。
ランダム性の重要性を実感できる例として、エントロピー不足による秘密鍵生成の脆弱性やハッキング被害が挙げられます。2024年には、秘密鍵の流出によって2億3,900万ドル以上の損失が発生し、高品質なエントロピーによる鍵生成の重要性が改めて浮き彫りになりました。
ビットコインの秘密鍵が単なる数字だとしたら、スーパーコンピューターが総当たりで解読するにはどれくらいの時間がかかるのでしょうか?この記事の最後でその答えをご紹介します。
エントロピーとは?
エントロピーとはランダム性や予測不可能性の尺度であり、安全な暗号鍵の生成に不可欠です。この概念は情報理論に由来し、システムの不確実性を数値化します。簡単に言えば、予測が難しいほどエントロピーは高くなります。
仮想通貨の秘密鍵に高いエントロピーが必要な理由は、推測や総当たり攻撃をほぼ不可能にするためです。このランダム性は、ハードウェアイベントや環境ノイズ、マウスの動きやキーボード入力など、さまざまな要素から得られます。OSはこれらの予測不可能なイベントを集約し、本当にランダムな数値を生成して安全な秘密鍵の基礎とします。
十分なエントロピーがなければ、生成された鍵は予測されやすくなり、攻撃のリスクが高まります。たとえば、エントロピーソースに問題があると、同じような値が繰り返し生成され、攻撃者に秘密鍵を予測・再現される可能性があります。
このランダム性は非常に重要なため、クラウドプラットフォームや仮想マシンなど高度なシステムでも、暗号処理のために高品質なエントロピーを安定供給できる専用ハードウェアが使われています。
エントロピーはどのように機能する?
ハードウェアウォレットでは、安全な秘密鍵を生成するためにエントロピーが重要な役割を果たします。仕組みは次の通りです。
エントロピーソース
Tangem Walletのようなハードウェアウォレットには、専用のハードウェア乱数生成器(HRNG)が搭載されています。これらのデバイスは電子ノイズや熱の変動といった物理現象を測定し、ランダム性を生み出します。この生のエントロピーが、予測困難な秘密鍵の生成に不可欠です。
一部のハードウェアウォレットでは、サイコロを振るなどユーザー自身がランダムなデータを手動で入力し、エントロピーとして追加できるものもあります。ユーザーが加えるエントロピーとハードウェア生成のエントロピーを混ぜても、エントロピーの質に大きな影響はありませんが、楽しみの一つとして利用できます。
鍵の生成
十分なエントロピーが集まると、ウォレットはそれを使って秘密鍵を生成します。このプロセスでは、エントロピーをSHA-256などの暗号アルゴリズムと組み合わせて256ビットの鍵を作成します。多くのハードウェアウォレットはBIP39規格に基づき、エントロピーから12〜24語のニーモニックフレーズ(復元フレーズ)を生成します。このフレーズは必要に応じて秘密鍵の復元に使えます。
プロセスの安全性
ウォレットのファームウェアは、エントロピーが十分に混合され、予測されないよう管理します。その後、秘密鍵はデバイス内の耐タンパー環境に安全に保存されます。これが、多くのハードウェアウォレットにCC認証済みセキュアエレメントが搭載されている理由です。TangemのファームウェアもKudelski SecurityやRiscureといった独立した第三者機関による2度の監査を受けています。
一般的に、ハードウェアウォレットはエントロピー生成と鍵の保管プロセスを他の処理から分離し、マルウェアや外部脅威によるリスクを最小限に抑えています。
バックアップと復元
エントロピーから生成されたニーモニックフレーズは紙などに書き留めて安全に保管できます。このフレーズはデバイス紛失や故障時の復元に不可欠です。フレーズ自体が秘密鍵生成時のエントロピーを含むため、安全なバックアップ手段となります。
ハードウェアウォレットは高品質なエントロピーによって、生成される秘密鍵の安全性と耐攻撃性を確保しており、仮想通貨の保管方法として非常に安全性が高いとされています。
なぜエントロピーが重要なのか?
エントロピーとリカバリーフレーズは形式こそ異なりますが、同じ情報を含むため、エントロピーもリカバリーフレーズと同様に厳重に秘密にしておく必要があります。繰り返しますが、エントロピーにアクセスできる人は、あなたのウォレット全体にアクセスできてしまいます!
シードフレーズが全ての秘密鍵、つまりウォレット内の全アカウントへのアクセス権を与えるのと同じく、エントロピーも同様です。そのため、エントロピーはできる限りランダムで推測困難であることがセキュリティ上不可欠です。
エントロピーを推測されて資産にアクセスされるのは絶対に避けたいですよね。だからこそ、この数値は極めて推測困難でなければなりません。同じ並びや組み合わせが二度現れる確率が統計的にほぼゼロになるほど、十分にランダムである必要があります。
エントロピーが簡単に推測できてしまうと、ハッカーに悪用され資産を奪われるリスクがあります。したがって、エントロピー生成を重視する仮想通貨ウォレットを選ぶことがとても大切です。
エントロピーとシードフレーズの理解
シードフレーズのランダム性はセキュリティ維持の要です。単語を自分で選んだり、予測しやすいパターンを使うと、ウォレットの防御力は大きく低下します。Tangemが採用するエントロピーベースの方式は、さまざまな攻撃から資産を守るために必要なレベルのランダム性を確保しています。
Tangemは安全なエントロピー生成のためのツールを提供しますが、シードフレーズの管理はご自身の責任です。この情報は誰にも、Tangemの担当者にも絶対に教えないでください。シードフレーズはデジタル資産の鍵であり、その秘密性がウォレットの安全性を守る上で極めて重要です。
Trust Walletの脆弱性事例:なぜ強いエントロピーが必要か
仮想通貨ウォレットを選ぶ際は、乱数生成の仕組みを重視することが不可欠です。2022年に発生したTrust Walletのセキュリティ侵害は、ウォレットのエントロピー生成が予測されやすかったことが主な原因でした。
SecBitは自身のブログ記事Trust Wallet's Fomo3D Summer: Fresh Discovery of Low Entropy Flaw From 2018でこの脆弱性を詳しく解説していますが、ここでは要点をまとめます。
Trust WalletのiOS版はBIP39ニーモニック生成にtrezor-cryptoライブラリを利用していました。このライブラリには、本番環境で使用すべきでないサンプルコードが含まれており、注意書きもありましたが、実際に使われてしまいました。
- コードは主にrandom32()とrandom_buffer()の2つの部分で構成されています。
- random32():
- この部分は乱数を生成しますが、安全性が十分とは言えません。
- 現在時刻をもとに乱数生成を開始します。
- 問題は、生成時刻がある程度分かれば推測できてしまう点です。
- さらに、同じ秒に2人が生成すると、同じ「乱数」が得られてしまいます。 - random_buffer():
- データ領域をランダムなバイトで埋めます。
- 乱数生成にrandom32()を使うため、同じ問題を抱えています。 - 主な問題点:
- このコードで生成されたニーモニックフレーズが仮想通貨ウォレットのアクセス権となります。
- 乱数の質が低いため、本来よりもはるかに推測しやすくなっていました。
- 数百万通りから推測するのではなく、生成時刻から数千通りに絞れてしまいました。 - ミス:
- Trust Walletは警告を無視してこのコードを使い続けました。
- その結果、ウォレット生成に使われたフレーズのエントロピーが本来よりも遥かに再現しやすくなっていました。
Trust Walletで発生した最近のセキュリティ侵害は、強力なエントロピー生成の重要性を改めて示しています。Trust Walletは被害ユーザーに補償を行い問題を解決しました。
Tangem Walletのエントロピー生成
Tangem Walletは、エントロピー生成から始まる堅牢なセキュリティであなたの暗号資産を守ります。ウォレットは認証済みの真性乱数生成器を採用し、独立した専門家による徹底的なテストも実施されています。これにより、生成される数値は予測困難であり、資産を攻撃から守ります。
ビットコインの秘密鍵を総当たりで解読するには?
この疑問に答えるため、プロセスを分解し規模感を考えてみましょう。
ビットコインの秘密鍵は確かに単なる数値ですが、その大きさは桁違いです。具体的には256ビットの数値で、2^256通りの秘密鍵が存在します。
現在最強クラスのスーパーコンピューターを使っても、ビットコインの秘密鍵を総当たりで解読するには想像を絶する時間がかかります。これは宇宙の年齢よりもはるかに長い時間です。
仮にスーパーコンピューターで1秒間に1兆(10^12)個の鍵をチェックできたとしても、1つの秘密鍵を見つけるまでに3.67 × 10^57年かかります。ちなみに宇宙の年齢は約138億年(1.38 × 10^10年)です。
つまり、ビットコインの秘密鍵を総当たりで解読するのにかかる時間は、宇宙の年齢の約1.33 × 10^47倍にもなります。
私たちがこの若くて水に満ちた地球で成し遂げてきたことは、本当に驚くべきことです。