なぜ「弱いエントロピー」が仮想通貨で数億円規模の損失を生むのか

エントロピー基準が徹底されなければ、次の数十億ドル規模の損失はすでに進行中かもしれません。

Author logo
Patrick Dike-Ndulue
• • 更新
Post image

2026年7月31日、攻撃者が約500のBitcoinウォレットをわずか25分で空にしました。合計594BTC(約3,800万ドル相当)が一気に移動し、被害者は皆「このような事態を避けるため」にハードウェアウォレットを購入していた人々でした。
 

Coinkite disclosed that COLDCARD firmware had been generating keys using a software pseudorandom number generator rather than the hardware generator built into the device. Two functions in the codebase shared the same name and signature, so the linker selected the wrong one, and the build produced no warning.
 

この事件は、長年続く損失事例の最新例です。過去10年で最大規模の仮想通貨流出は、特殊なハッキングよりも「十分にランダムでない乱数生成」によるものが目立ちます。

秘密鍵の裏側で何が起きている?

仮想通貨ウォレット(アプリ、ブラウザ拡張、ハードウェア型を問わず)は、「誰にも推測・再現できない乱数を生成する」ことに依存しています。これこそがエントロピー(予測不可能性)の意味です。


Entropy is the raw randomness a wallet uses to create a private key, measured in bits. More bits mean a larger space of keys that an attacker must search. It enters a wallet at setup. Every key, address, and signature after that follows fixed mathematical rules, so no new randomness arrives later.

エントロピーの供給源

理論上、ウォレットはpseudorandom number generator (PRNG)から乱数を得ることもできます。PRNGは、少量の「真の」エントロピーを必要なだけ引き伸ばすアルゴリズムですが、初期シード自体が予測不可能でなければ意味がありません。

ブラウザタブや起動直後のスマートフォンで動作するソフトウェアは、外部からの「ノイズ」入力がほとんどない状態でスタートします。真にランダムな値を得るには、CPUのタイミング変動やマウスの動き、特殊なハードウェア部品など、計算以外の予測不能な要素が必要です。

デバイスの電源投入直後は、こうしたノイズのプールが空か、十分に初期化されていないことがあります。暗号ライブラリが乱数生成器を早すぎるタイミングで呼び出すと、理論上はランダムでも、実際には探索可能な範囲が狭い乱数しか得られません。


ブラウザにも独自の制約があります。JavaScriptのMath.random()はセキュリティ用途に設計されておらず、より安全なcrypto.getRandomValues()もOSのエントロピープールに依存します。このプールが弱いと(モバイルサンドボックスや仮想環境、IoT機器など)、乱数は秘密鍵生成コードに届く前にすでに危険な状態となります。


署名時の乱数の重要性

BitcoinやEthereumでトランザクション署名を行う際、秘密鍵をそのまま使うのではなく、nonce(一度きりのランダムな値)を生成し、これと秘密鍵をElliptic Curve Digital Signature Algorithm(ECDSA)で組み合わせて署名を作成します。

ここで問題となるのは、「同じnonceを同じ秘密鍵で2回使う」と、数式上すべての情報が攻撃者に渡ってしまう点です。ECDSA署名は(r, s)という2つの数値ペアで、以下の要素を含みます:

  • 秘密鍵(d)
  • nonce(k)
  • ハッシュ化されたトランザクションメッセージ(z)

もしkが異なるメッセージ間で同じなら、数式が並び、両方の署名を見た第三者がkを計算できてしまいます。kが判明すれば、あとは簡単な計算で秘密鍵(d)が導き出されます。


2013年、a flaw in Android’s SecureRandom function caused early Bitcoin wallets on the platform to produce predictable nonces. Funds vanished from wallets before most users had any idea there was a problem.


こうした乱数の質の低さは、ソースコードを読むだけでは発見できません。見た目上は正しい関数呼び出しでも、実際に出力されるビットを測定し、統計的なテストで予測不能性を検証しない限り、致命的な弱点が長期間見過ごされる可能性があります。

 

エントロピーが長年脆弱性として残る理由は、次の4点に集約できます:

  • 起動直後のエントロピー不足:電源投入直後のデバイスは、PRNGのシードとなる十分なノイズをまだ蓄積できていません。

  • ブラウザの制約:JavaScriptのMath.random()は安全ではなく、crypto.getRandomValues()もホスト環境のエントロピープール次第です。

  • 安全性の低いツール:バニティアドレス生成やオフラインスクリプト、保守されていないライブラリは、速度や再現性を優先して乱数品質を犠牲にしがちです。

  • 人間の入力:「ブレインウォレット」や自作フレーズは、辞書攻撃で簡単に破られます。

暗号の専門家は、物理現象(電子ジッター・熱雑音・放射性崩壊など)を乱数ビットに変換し、自己診断機能も持つハードウェア乱数生成器(HRNG)を長年推奨してきました。

ハードウェアで解決するには

高いセキュリティが求められるシステムでは、「認証済みHRNGを内蔵したチップ内部で鍵を生成し、その鍵を決して複製しない」ことが基本です。

A secure element is a purpose-built, tamper-resistant microcontroller. It is a fortified chip designed to store secrets and perform cryptographic operations without revealing the underlying keys. They are the same class of component used in passports to prevent cloning, SIM cards to authenticate devices to mobile networks, and contactless payment cards to authorize transactions.


A secure element can house a hardware random number generator that draws its unpredictability from physical noise, such as thermal fluctuations or oscillator jitter, rather than from mathematical algorithms alone. 


これらのHRNGは「一度きり」ではありません。such as NIST SP 800-90Bなどの基準では、常時ヘルステストを行い、出力ストリームに統計的偏りやビットの固着、その他の異常がないか監視することが求められます。異常があれば即座に鍵生成を停止できます。優れたハードウェアウォレットでは、セキュアエレメントのHRNGがチップ内部で直接鍵生成に乱数を供給します。


すべての「ハードウェア」が同じではない

ハードウェアウォレットという言葉は非常に幅広い設計を含みますが、すべてが乱数や鍵の隔離に同じレベルの保護を提供するわけではありません。


下位モデルは、汎用マイコン(柔軟性重視で物理・サイドチャネル攻撃への耐性が低いチップ)上に構築されており、多くは基本的な乱数生成器を搭載しています。


ただし、これも多くはデバイス内部状態からシードされる擬似乱数生成器であり、厳格な基準で検証された完全なHRNGとは限りません。こうした設計では、鍵生成がファームウェア内で行われ、生成された秘密鍵が一時的にRAMやフラッシュメモリへ保存される場合もあります。つまり、ファームウェアの不具合やサイドチャネル攻撃、物理的な改ざんで鍵が漏れるリスクがあります。
 

一方、セキュアエレメント搭載ウォレットは、エントロピー供給源と鍵生成ロジックの両方を耐タンパー環境内に置きます。このモデルでは厳格なアクセス制御も実現され、暗号処理(署名・導出)はチップ内で完結し、最終的な署名や公開鍵のみが外部に出て、秘密鍵自体は外に出ません。

すでに存在する基準

乱数生成の問題は「未解決の科学」ではありません。暗号の専門家は「良いエントロピー」の基準をすでに定めています。米国National Institute of Standards and Technology(NIST)は、SP 800-90シリーズで課題を明確に分解しています。


SP 800-90Bはエントロピー源の評価方法(物理・ソフトウェア由来の予測不能なビット生成)を定め、各ビットストリームの真のエントロピー推定や、バイアス・故障監視のための内蔵ヘルステストを義務付けています。


SP 800-90Cは、エントロピーとdeterministic random bit generators(DRBG)を組み合わせて、どちらかが劣化しても出力品質を維持する方法を示しています。


適合デバイスは「一度乱数を出して終わり」ではなく、常に自己診断を行います。HRNGのノイズパターンが変化したり、ビットが固着したり、統計閾値を下回った場合は、弱い鍵を生成しないよう処理を即時停止します。

自分の鍵が危険かどうかを見極めるには

ほとんどのユーザーはエントロピーを直接測定できませんが、「どこで・どのように鍵が生成されたか」は確認できます。ウェブページや古いAndroidアプリ(特に2010年代半ば以前)で作成した鍵は、弱い可能性が高いです。最も安全なのは、認証済み・記録付きの乱数を使うハードウェアデバイスで新しいウォレットを作り、資産を移すことです。

エントロピー攻撃の年表

弱いエントロピーでは「逆算」すら不要です。攻撃者は生成器が出しうる鍵の候補をすべて列挙し、それぞれのアドレスをブロックチェーン上で残高確認するだけで資金を抜き取れます。主な歴史は以下の通り:

  • 2018年—IOTAシード生成詐欺:ユーザーがウェブサイトでウォレットシードを作るよう誘導され、運営者がそのコピーを保管。後日資金を抜き取り、約400万ドルが盗まれました。乱数はゼロ=攻撃者は最初から全て把握していました。
     

  • 2019年—Blockchain Bandit事件:セキュリティ研究者が732個の弱いEthereum秘密鍵を発見。攻撃者は数年にわたりこれらのアドレスを監視し、資金が入るたびに合計45,000ETHを抜き取っていました。
     

  • 2022年—Profanityバニティアドレス事件:オープンソースProfanityツールが、わずか32ビット(約40億通り)のエントロピーでEthereumアドレスを生成。現代のGPUなら数時間で全探索可能で、ロンドンのマーケットメイカーWintermuteが約1億6,000万ドルを失いました。
     

  • 2023年—Trust Walletブラウザ拡張の脆弱性:Ledgerのセキュリティチームによる開示で、ブラウザ拡張が約32ビットのエントロピーしか持たないシードを生成していたことが判明。迅速に修正され一部ユーザーは補償されましたが、数か月間は誰でも危険に晒されていました。
     

  • 2025年—LuBian事件疑惑:Arkhamの主張は未確認ですが、127,426BTCの流出が予測可能な鍵生成に起因する場合、単一のミスが数十億ドルの資産を消す典型例となります。
     

  • 2026年—COLDCARD事件:Coinkite disclosed that a software pseudorandom generator had replaced the intended hardware generator in shipped firmware. The fallback entered the upstream dependency in May 2018 and reached key generation in March 2021。

    Coinkiteは、Mk3ハードウェアで実効探索空間が約40ビット、セキュアエレメントデータを混ぜた後期モデルで約72ビットと推定しています。いずれも128ビットの目標値を下回ります。

    本来この事態を防ぐガードが存在しましたが、設定マクロの「値」ではなく「定義有無」だけをチェックしていたため、マクロがゼロに設定されていてもチェックを通過し、エラーが発火しませんでした。

COLDCARDからの乗り換えを検討中ですか?

Tangemは、認証済みセキュアエレメントチップ内でハードウェア乱数生成器を使い、秘密鍵を生成します。

シードフレーズ管理に疲れた方には、シードレス設定がおすすめです。12語や24語のフレーズを書き留めたり、写真を撮ったり、紛失したりする心配がありません。過去の多くのウォレット流出は、まさにこの部分が原因でした。

Cure53、Kudelski、Riscureによる独立監査済み。まさに今この瞬間のために設計されています。

「本当にランダムな乱数」でコインを守りましょう。Tangem Walletで安全に管理できます。

Author logo
著者 Patrick Dike-Ndulue

Senior editor covering crypto, onchain equities, and technology.

Author logo
レビュー担当者 Patrick Dike-Ndulue

Senior editor covering crypto, onchain equities, and technology.