ニュース暗号資産Coldcardビットコインエクスプロイトの解説:ファームウェアバグが鍵のエントロピーを縮小し、1億3000万ドルの窃盗を可能にした仕組み

Coldcardビットコインエクスプロイトの解説:ファームウェアバグが鍵のエントロピーを縮小し、1億3000万ドルの窃盗を可能にした仕組み

著者: Decrypt·

重要ポイント

  • ビルド設定エラーにより、Coldcardウォレットは意図されたハードウェア乱数チップではなくソフトウェアの疑似乱数生成器を使用し、Mk2およびMk3デバイスでエントロピーが128ビットから約40ビットに低下した。
  • Galaxy Researchは3つの攻撃ウェーブで少なくとも1,596 BTCの窃盗を確認しており、疑わしい第4のウェーブを加えると総被害額は約2,055 BTC、約1億3000万ドルに達する可能性がある。
  • Coldcardのオープンソースコードベースがコミュニティレビューのために公開されていたにもかかわらず、この脆弱性は約8年間検出されなかった。
  • Coinkiteは影響を受けるすべてのモデル向けに修正済みファームウェアをリリースしたが、パッチは既存のシードを修復できず、ユーザーは新しいウォレットを生成してすべての資金を手動で移動させる必要がある。
  • Coinkiteは攻撃者がAI支援のコード分析を使用してこの欠陥を発見したと疑っており、同社自身の最近のAIレビューでは同じコードの問題が特定されなかったと述べている。
Coldcardビットコインエクスプロイトの解説:ファームウェアバグが鍵のエントロピーを縮小し、1億3000万ドルの窃盗を可能にした仕組み

ファームウェアのバグにより、Coldcardハードウェアウォレットは、専用のハードウェア乱数チップではなく、ソフトウェアの疑似乱数生成器からシードを生成していた。この欠陥により、旧モデルでは探索空間が128ビットから約40ビットに実質的に縮小され、攻撃者は秘密鍵を計算して、本来アクセス不可能なはずのウォレットを空にすることができた。

コインはColdcardデバイスに保管されていた。Coldcardはカナダの企業Coinkiteが製造する、オフラインで保持することを前提としたハードウェアウォレットである。Coldcardはエアギャップ設計と透明なアーキテクチャにより、ビットコインセキュリティの界隈で広く推奨されており、だからこそこの障壁の崩壊は、デバイスのセキュリティ評価を理由に選択したユーザーにとって特に重大な意味を持つ。フィッシングリンク、マルウェア、盗まれたデバイスは一切関与していなかった。攻撃者は単に秘密鍵を推測したのである。

Galaxy Researchは3つの確認されたウェーブで1,596 BTC以上の窃盗を追跡しており、疑わしい第4のウェーブを加えると総額は約2,055 BTC、現在の価格で約1億3000万ドルに達するとみられている。ある一回の掃討操作で、わずか41分間に7000万ドルが移動された。Coinkiteは少なくとも15人の個別の攻撃者が参入したと述べている。大規模な暗号資産窃盗の圧倒的多数はソーシャルエンジニアリング、取引所の侵害、またはスマートコントラクトのエクスプロイトに依存してきたが、攻撃者がデバイスのメタデータのみから鍵を計算できる脆弱性は、根本的に異なる脅威面を構成する。

同社は8月1日に技術背景文書を公開し、何が問題だったかを説明した。これは異例なほど率直な文書であり、短い要約としては、このウォレットは8年間誰にも気づかれることなく不正なダイイスを転がし続けていたということになる。

ゼロも「存在」である

2021年、CoinkiteはColdcardの暗号処理をBitcoin Coreが使用するものと同じlibsecp256k1に移行した。問題はこの統合から始まった。

この移行は、シード生成をColdcard独自のハードウェア乱数生成器からMicroPythonのソフトウェアフォールバックに静かに切り替えてしまった。これは、乱数チップを全く持たないデバイスのために存在するYasmarangと呼ばれる小さなアルゴリズムである。

🚨LOSSES FROM COLDCARD HACK EXCEED $100M

High confidence 1,596 BTC has been stolen from ~7300 addresses across 3 confirmed waves + more 14 smaller incidents.

If we add suspected (but unconfirmed), the total balloons to $130m (2k BTC).

More in the thread below 👇 pic.twitter.com/RAl3ib67qa

— Galaxy Research (@glxyresearch) August 3, 2026

Coldcardには乱数チップが搭載されている。ただ、呼び出されなくなっただけである。

その原因は信じられないほど些細なものであった。ビルドガードが#ifndefを使用していたが、これは設定がオンになっているかではなく、設定が「存在するか」をチェックするものである。Coinkiteはその設定をゼロ、つまり「オフ」として定義していた。しかし、ゼロも定義済みとみなされるため、安全チェックは合格し、ビルドは完了した。両バージョンの関数は同一のシグネチャを持っていたため、何も異常は見えなかった。プリプロセッサディレクティブがサイレントに誤ったコードパスを選択する这类のビルド設定エラーは、CおよびC++開発において認識された欠陥の分類に属するが、コンパイルされたバイナリが観測可能なすべての面で正常に動作するため、テストで検出するのは著名なほど困難である。

「COLDCARDの乱数の大部分が、ソースコードベースに実際に存在することすら知らなかったPRNGから生成されていました」とCoinkiteは記載した。PRNGとは疑似乱数生成器を指し、ランダムに見える数値を生成するが、実際には初期値から始まる固定のレシピに従うソフトウェアである。同じ初期値を与えれば、毎回同じ出力が得られる。

ファームウェア4.0.1から4.1.9を実行するMk2およびMk3デバイスでは、その初期値はチップのシリアル番号とクロックから導出されていた。Coinkiteは結果として生じる探索空間を約40ビットと推定している。新しいモデルはセキュアエレメントの少量のエントロピーを混ぜ合わせ、探索空間を約72ビットに引き上げた。

いずれの数値も、目標とする128には届かない。

このギャップは見た目以上に重要である。ビットは指数である。128ビットの探索空間には、観測可能な宇宙に存在する原子数よりも多い組み合わせが含まれており、ブルートフォース探索を事実上不可能にする。40ビットは約1兆通りの可能性であり、一般的なノートパソコンでも処理できる数字である。1ビット失うごとに攻撃者の必要な作業量は半減する。

Blockのエンジニアリングチームは独自の分析を公開し、新しいデバイスの実効セキュアエレメント探索空間を2^32候補、平均約2^31試行と見積もった。旧ボードに対する彼らの評価はより端的である。デバイスID、タイマー状態、コール履歴が既知であれば、ウォレット生成は決定論的である。そして決定論的とは、暗号技術に不可欠な性質である「ランダム」の対極である。

「弱い」ではない。「予測可能」である

Coinkiteは、この脆弱性が自動化されたコード分析によって発見されたと疑っている。「誰かがAIを使用して以前のバージョンのファームウェアをレビューし、この問題に偶然たどり着いたと想定しなければなりません」と同社は記し、最近利用可能な最良のAIモデルの一つを同じコードに実行したが、何も発見されなかったと付け加えた。「攻撃者と防御者は同じAIツールを持っていますが、今日は私たちの助けにならず、悪者の手助けをしただけでした。」

影響を受けるすべてのモデル向けに修正済みファームウェアがリリースされている。ただし、既存のシードは修復されない。それらのウォレットは再生成し、資金を移動させる必要がある。Decryptはこのようなエクスプロイトの後のエアギャップストレージの変化について報じ、損失が1億1400万ドルを超えて上昇する様子を追跡してきた。

エントロピーとは実際には何か

エントロピーとは、攻撃者が知らないことの度合いを測るものである。言い換えれば、ビットで数えられる不確実性である。1ビットはコイントス1回に等しい。2つの結果があり、推測者は半分の確率で正解する。10ビットは1,024通りの結果である。追加のビットごとに推測者の作業量は倍になる。

ビットコインウォレットは基本的に、秘密に保持された非常に大きな数字である。人々がコインを送金する先のアドレスはそこから数学的に導出され、導出は一方向にのみ機能する。鍵からアドレスへはたどれるが、逆方向には決して戻れない。

したがって、すべてのウォレットのセキュリティは一つの問いに悬かっている。攻撃者は何通りの数字を試さなければならないか? その数字が128ビットのエントロピーで選ばれた場合、答えは「物理学が許す以上」である。40ビットで選ばれた場合、答えは「少し時間をください」である。

これは量子コンピューティングの脅威が議論に値する理由と同じ性質である。量子マシンは鍵とアドレスを結ぶ数学的リンクを攻撃するだろう。しかし、Coldcardのバグはそのような洗練された手法を全く必要としなかった。その数学が関与する前に、鍵を推測可能な状態にしてしまったのである。

ここで用語は曖昧になる。疑似乱数生成器は、ランダム性の統計テストに合格する出力を生成する。スプレッドシートでフラグが立つようなものではない。しかし、その出力は依然としてシード値によって完全に決定されている。ランダムに見えるが、そうではない。

統計的ランダム性と暗号論的予測不可能性は異なる性質である。Coldcardの出力は最初のテストは楽々と通過しただろうが、2番目のテストは完全に不合格となっていた。

真のランダム性は物理的ノイズから得られなければならない。回路内の電気的ジッター、熱揺らぎ、放射性崩壊である。それこそがColdcardのハードウェアチップが提供するために設計されたものであった。それがビルドフラグによって切断されたチップである。

次にLuke Dashjrがダイイスの話題を持ち出した

ユーザーがシードの再生成に慌てる中、多くの人が当然の低技術の解決策に目を向けた。Coldcardは物理的なダイスを振り、その結果をエントロピーとして入力することを許可している。Coinkite自身のガイダンスでは、少なくとも50回の独立したプライベートなダイスロールで作成されたシードを、このバグのリスクはないとしている。同社はプロセスを容易にするため「100個の可愛くて小さなダイス」入りの袋を販売すらしている。

7月31日、Bitcoin Core開発者のLuke Dashjrは警告を投稿した。「かなりの数の人がColdcardの脆弱性の緩和にダイスの使用を提案・使用しています。一般的なダイスは暗号論的に安全であるように設計されていないことに注意してください。これを行う場合は、おそらく精度の高いカジノ用ダイスを購入すべきです。それでも、もう一つのエントロピー源を持つべきです。」

Bitcoin Twitterは冷静には受け止めなかった。

笑った、もうダイスすら振れないのか」とあるユーザーは書き込んだ。「セルフカストディは終わりだ…」別のユーザーは、パーキンソン病の人を雇ってダイスを投げさせるべきかと尋ねた。

should I hire someone with parkinsons to throw the dice? — Murern (@Bitcoin_Murern) July 31, 2026

最も技術的に有用な返信は計算を伴っていた。開発者のJustin Sharpは、偏ったダイスがエントロピーにどれだけのコストをもたらすかについて正確に計算した。

「過剰です。完璧なd6は1回あたり2.585ビットを与えます。目立って偏ったダイス、例えばある面が16.7%ではなく20%の確率で出る場合でも、約2.55ビットを与えます。99回のロールでは、これは256ビットと252ビットのエントロピーの差にすぎません。」

256のうち4ビット。それが目に見えて不公平なダイスに対するペナルティのすべてである。

Dashjrが安価なダイスには測定可能な偏りがあると指摘したのは間違っていない。射出成形のピップは各面からわずかに異なる量のプラスチックを除去するため、カジノがフラッシュ充填された精密ダイスを使用するのはまさにその理由からである。彼は物理学については正しいが、重大性については間違っている。256から4ビット失っても252が残る。Coldcardのバグはユーザーを40に留めた。

彼の助言にはより鋭い議論が埋もれているが、それは製造許容度についてではない。単一のエントロピー源を信頼しないことである。Coldcardの失敗は、ランダム性がわずかに偏っていたことではない。一つのコンポーネントが静かに寄与を停止し、何もそれを捕捉しなかったことである。

対処方法

影響を受けるColdcardで、ダイスロールや強力なBIP-39パスフレーズなしにシードを生成した場合、そのシードは侵害されているとみなすべきである。

推奨される手順は、ファームウェアを更新し、新しいシードを生成し、フィンガープリントを確認し、テスト取引を送信してから、すべての資金を移動させることである。Coinkiteの勧告はモデルごとにプロセスを説明している。エクスポートされたシードは欠陥を持ち込む。侵害されたシードを別のウォレットアプリケーションにインポートしても何も解決しない。

それ以外の人々にとっての教訓は、ハードウェアウォレットが壊れているとか、ダイスが罠であるということではない。「ランダム」とは主張であり、主張は検証を必要するということである。Coldcardのソースコードはずっと公開されていた。意図されたハードウェアRNGはバイナリに存在していた。レビューアーはその存在を確認したが、シードジェネレーターが実際にそれを呼び出しているかは確認しなかった。Coldcardが受け入れたオープンソースモデルは、まさにこの種のコミュニティの精査が攻撃者よりも先に欠陥を捕捉することを前提としている。8年間の監査が正しいコードを見ていた。それが実行されているかを確認した者はいなかった。