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

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

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で安全に管理できます。

ウォレットのエントロピーFAQ:ランダム性が重要な理由

  • エントロピーとは、ウォレットが秘密鍵を作るために使う生のランダム性のことで、ビット数で測られます。ビット数が多いほど、攻撃者が探索しなければならない鍵の空間が大きくなります。エントロピーがウォレットに入るのはセットアップ時の一度だけで、その後のすべての鍵、アドレス、署名は決まった数学的規則に従うため、後から新たなランダム性が加わることはありません。

  • 2026年7月31日、攻撃者が25分間で約500個の Bitcoin ウォレットを空にし、約594 BTC、およそ3,800万ドル相当を移動させました。Coinkite は、COLDCARD のファームウェアが、デバイスのハードウェア乱数生成器ではなく、ソフトウェアの疑似乱数生成器で鍵を生成していたことを公表しました。同じ名前の2つの関数があり、ビルド時に誤った方がリンクされ、警告も出なかったということです。

  • ECDSA 署名は、秘密鍵と一度きりのランダムなノンスを組み合わせて作られます。同じ鍵で同じノンスを2回使うと、2つの式が対応づけられ、両方の署名を見た人は誰でもノンスを計算できてしまい、その後は単純な計算で秘密鍵が導き出されます。2013年に Android の SecureRandom に見つかった欠陥により、初期の Bitcoin ウォレットがまさにこの方法で資金を抜き取られました。

  • 耐タンパー性を備えたチップ内で、熱ゆらぎなどの物理的なノイズから予測不能性を得るハードウェア乱数生成器を使って鍵を生成します。NIST SP 800-90B などの標準に基づき、生成器は自らの出力を常にヘルステストし、偏りや固着したビットが見つかれば鍵の生成を停止します。秘密情報がチップの外に出ることはありません。

  • 鍵がどこで、どのように生成されたかを確認してください。ウェブページ上や古い Android アプリで、特に2010年代半ば以前に作られた鍵は、弱いものとして扱うべきです。最も安全な対処法は、認証済みで仕様が公開されたランダム性を備えたハードウェアデバイスで新しいウォレットを作成し、そこへ資金を移すことです。

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.