執筆:Liam 'Akiba' Wright
編集:Saoirse、Foresight News
ハードウェアウォレットがネットワークに接続される前から、ウォレットのセキュリティ防线はすでに脅かされる可能性がある。空気隔離されたハードウェアウォレットは、秘密鍵を数年間インターネットから隔離できるかもしれないが、メンションシードが生成された瞬間からリスクはすでに埋められている。
Coldcardが最近公表した乱数の脆弱性は、このセキュリティの罠を完璧に裏付けています。この脆弱性の影響を受けたウォレットは、完全に正常に見える12語または24語のリカバリーメモニックを生成できます。ユーザーはそのメモニックを適切に保管し、オフラインでトランザクションに署名できます。しかし、底层の乱数生成器の選択範囲は実際には大幅に狭まっています。攻撃者は他のデバイス上で可能なすべてのシード組み合わせを総当たりで試し、候補シードを復元できます。その後、ビットコインの公開台帳と照合して、実際のアドレスと一致する有効なシードを絞り込みます。
私の考えでは、ウォレットのセキュリティは、シードが生成された瞬間に決定されます。PINコード、スチール製ミネモニックバックアップボード、改ざん防止シール袋、エアギャップなどの保護手段が機能する前に、シードはまず信頼できる真のランダムソースによって生成される必要があります。
高品質な現代的な乱数生成器は十分なエントロピーを出力できます。しかし、攻撃者が乱数生成器の動作ロジックを掌握している場合、生成プロセス全体を逆算する可能性があります。
手動でサイコロを振ることで、ユーザーはランダムなソースを提供でき、そのランダム性は直感的で制御可能であり、ベンダーが作成したコードとは独立しています。
ビットコインウォレットのセキュリティに潜む脆弱性
Coldcardのシード生成にはセキュリティ上の脆弱性が存在します。攻撃者はデバイス外部で候補シードを生成し、それを公開鍵アドレスに変換して、ビットコインの公開台帳上のアドレス取引履歴と照合することで攻撃を実行できます。
脆弱性の技術的根源は、恐ろしいほど微小である。2021年3月1日のコード変更により、Coldcardのシード生成機能が新しいコードベースに移行された。量産ファームウェアでは、設定項目MICROPY_HW_ENABLE_RNGを0に設定し、ハードウェア乱数発生器を無効化していたが、コード統合ロジックはこの設定項目が存在するかのみをチェックし、設定値を読み取っていなかった。この設定項目が存在する限り、システムはハードウェア乱数発生器を放棄し、MicroPython内の決定論的アルゴリズムYasmarangをバックアップとして有効化した。Blockの共同分析レポートによると、この欠陥のあるロジックは、4.0.0バージョンのファームウェアとして3月17日に正式にリリースされた。
生成されたメンemonicは外見に何の異常もありませんが、背後にある網羅的検索空間は劇的に縮小されています。Coinkiteの初期推定によると、影響を受けるMk2、Mk3機種のシードの有効検索空間は約40ビットであり、影響を受けるMk4、Mk5およびQシリーズ機種のシードの有効検索空間は約72ビットです。
Block チームは、後続の機種に対して個別に制限条件を設定しています:バックアップアルゴリズムの状態と呼び出し履歴が固定されている場合、区別可能な乱数列は最大で 2^32 本のみ存在します。Coinkite が提供したデータは、攻撃者が網羅可能な有効な検索範囲を推定しています。
両方の分析レポートは、ファームウェア修正前の後期モデルがすべてリスク範囲内であることを確認しました。Coinkiteのセキュリティ公告によると、標準版5.6.0以前のMk4、Mk5ファームウェア、標準版1.5.0Q以前のQシリーズファームウェア、およびEdge 6.6.0X以前のMk4、Mk5ファームウェア、Edge 6.6.0QX以前のQシリーズファームウェアが影響を受けます。Mk2およびMk3については、Coinkiteがリスクバージョンを4.0.1~4.1.9と明示していますが、Blockチームはこの脆弱性が4.0.0バージョンから既に存在していたと主張しています。この議論のあるバージョン境界については、ユーザーは保守的な見方を推奨します。
今回のイベントは、最新ファームウェアをインストールするだけでは、既存のウォレットのセキュリティ上の脆弱性を修復できないことを明確に示しています。修復版へのアップグレードは、今後生成される新しいシードの安全性を確保するのみであり、すでに生成された旧シードは、作成時に得られたエントロピー値をそのまま保持します。これらのシードから派生したすべてのアドレスは、同じ基底鍵を共有します。
リスクファームウェアバージョンを使用しているすべてのユーザーは、公式セキュリティ公告を確認してください。シードが十分な手動ダイスロールによって生成されたことを確認できない限り、修正済みファームウェアを使用し、信頼できるランダムソースで新しいシードを生成し、資金を新しいウォレットに移転しなければなりません。古いメンemonicを使用して新しいアドレスを生成した場合、元のセキュリティ上の欠陥はそのまま残ります。
Bitcoin Optechは7月31日に動的推定データを公開し、脅威にさらされた資産規模は1,000枚以上のビットコインを上回った。8月2日現在、Galaxy Researchの推定によると、合計4,585のアドレスに約1,367枚のビットコインがリスクにさらされている。XプラットフォームのユーザーGraham_Quantumは、7月29日に関連するウォレットから18.25245043枚のビットコインが転出されたと述べている。
メッセージが公開された後、多くのユーザーがリスク回避のために資産を移動し、より大規模な資金移動が発生しました。脆弱性の情報が公開された後、77,402枚のビットコインが古く未使用のトランザクション出力(UTXO)プールから移動しました。
二つのデータタイプを区別する必要があります:

この安全事故は二つの衝撃を引き起こしました。一つはハッカーによる資産の盗難、もう一つはより大規模なユーザーによる自衛のための主動的な移動の波です。
約8900万ドルの価値を持つColdcardウォレットの脆弱性により、FTXの破綻以降最大規模のビットコインチェーン上資金移動が発生し、市場シグナルの解釈に深刻な混乱をもたらした。数万人のユーザーが旧ウォレット内のビットコインを緊急移動したことで、複数の主要チェーン上指標が示すbearishシグナルの真偽が判別しづらくなった。
手動でサイコロを振ることでどのような変化がもたらされるでしょうか
Coldcard公式サイコロ関連ドキュメントによる計算:公正な6面サイコロを1回投げるごとに約2.585ビットのエントロピーが生成される。50回投げると約129.25ビットの原始エントロピーが得られ、一般的な128ビットセキュリティ基準を満たす。99回投げると約255.91ビットの原始エントロピーが得られ、ほぼ256ビットセキュリティ基準に達する(この値はウォレット内変換アルゴリズムによる処理はされていない)。
この数値は、広く使用されているBIP-39メンネモニック標準と一致しています:12語のメンネモニックは128ビットのエントロピーに4ビットのチェックサムを追加し、24語のメンネモニックは256ビットのエントロピーに8ビットのチェックサムを追加します。

ハードウェアウォレットのオフライン隔離メカニズムは、生成が完了した後のメンネモニックフレーズを保護するのみであり、生成プロセス中の弱いランダム性の脆弱性を修復することはできません。安全なBIP-39メンネモニックフレーズを生成するには、秘密のサイコロを用いて独立したエントロピーを取得する必要があります。
チェックサムは、メンネモニック文の書き間違いを識別するためのみに使用されます。真正なセキュリティを決定するのは、下層の元のランダムデータです。ハッシュ演算や正規化されたフォーマットは、エントロピーの低い入力を美しく見せることができますがあれ、キーの可能なすべての組み合わせの総空間は拡大しません。安心感を与えるように見える12語の単語列でも、非常に小さなランダムプールから生成された可能性があります。
手動でサイコロを振って保護機能を発揮する前提:ウォレットの内部プロセスが、サイコロによって生成されたランダムデータを正しく受け入れること。サイコロ自体は適格であり、各回の投擲は真にランダムで互いに干渉せず、投擲シーケンス全体が秘密に保たれる必要がある。投擲パターンの再利用、撮影記録、クラウドへのシーケンス保存、ネット接続されたコンピュータへの結果入力は、ランダム性の独立性と機密性を損なう。
今回のColdcardセキュリティイベントに関して、Coinkiteは、ユーザーが最終シードの生成時に少なくとも50回の公平で独立かつ機密性の高いダイスロールを実施したことを確認できる場合に限り、資産を移動させる必要がないと述べています。不確実な状況が存在する場合は、公式が資金の移動を推奨しています。
私の場合、手動ダイスの核心価値は、デバイスに内蔵された乱数に依存しているため、ハードウェア、ファームウェア、コンパイルプロセス、統合コードの全体の信頼性を無条件で信頼しなければならない点にあります。
適切なダイス入力プロセスにより、ユーザーが自ら管理するエントロピーを、この信頼チェーンから分離して導入できます。約50回の公平なダイス投げで128ビットのセキュリティレベル、99回で256ビットのセキュリティレベルに対応します。ただし、ユーザーはデバイスの公式操作手順を厳密に守り、独自の乱数変換スキームを設計しないでください。
高强度で一意なBIP-39パスフレーズを設定することで、攻撃の難易度をさらに高めることができます。パスフレーズは独立した鍵と同等であり、攻撃者がメンネモニックフレーズを手に入れても、資産を操作するにはパスフレーズを解読する必要があります。ただし、メンネモニックフレーズ自体のエントロピーはパスフレーズの追加によって向上しません。パスフレーズ(たとえ1文字でも間違えた場合)は、有効なウォレットアドレスの組を生成します。パスフレーズを紛失した場合、資産は永久にロックされます。ハードウェアウォレットのPINコードの役割は、パスフレーズとは完全に異なります。
通行パスワードの有効化にはトレードオフが伴います:適切に保管し、正確に再現できる場合、これは強力な第二の防衛線となります。しかし、バックアップ方法が不十分な場合、この機能は資産に完全にアクセスできなくなる原因となる可能性があります。
弱ランダム性の脆弱性が繰り返し発生
Coldcardの脆弱性は再びすべての人々に警告を発している:ビットコインウォレットのセキュリティの基盤は、シードが生成される瞬間に十分な強力なランダム性を備えていることである。同様の基盤的な欠陥は、これまで複数の異なるウォレット製品で次々と発生してきた。
2023年、Ledger Donjonは、特定バージョンのTrust Walletブラウザ拡張機能が、WebAssembly実行パスで32ビットメルセンヌ・ツイスタアルゴリズムに基づくランダムシードを生成していたことを公表した。このような通常に見えるメンション語は、すべて約40億の初期値から派生している。リスク範囲は明確で、バージョン0.0.172から0.0.182のTrust Wallet Coreバージョン3.1.1以前を搭載するブラウザ拡張機能が対象である。米国国家脆弱性データベースには、この脆弱性が2022年12月および2023年3月にそれぞれ悪用されたと記録されている。
「Milk Sad 漏洞」イベントは、類似のリスクを直観的に示しています。Libbitcoin Explorer 3.x の bx seed コマンドは、システム時刻を基にした32ビットメルセンヌ・ツイスターアルゴリズムを使用しています。同じ時計条件下では、ソフトウェアがまったく同じメンネモニックを生成する可能性があります。攻撃者が種の生成時刻を大まかに把握すれば、探索範囲はメンネモニックが表面的に示す空間よりもはるかに小さくなります。
研究者らは、リスクゾーン内で2,600以上もの依然としてアクティブに使用されているビットコインウォレットを特定した。2023年8月の市場価格を基に算定すると、複数のチェーンにまたがる関連する盗難資産の価値は90万ドルを超える。そのうち2,550以上のウォレットは自動化された操作の特徴を示しており、ほぼ同一の所有者によるものである可能性が高い。研究者らはまた、一部の資産盗難事件が他のセキュリティ脆弱性と重複している可能性もあると指摘している。
このような脆弱性は、毎回異なる形で登場する:Coldcardではファームウェアのバックアップ乱数アルゴリズムが意図せず起動し、Trust Walletのブラウザ拡張機能やLibbitcoinのコマンドラインツールでは、システム時計に依存して弱い乱数が生成される。最終的に生成されたウォレットの鍵は外見上問題ないように見えるが、検索可能な鍵のプール規模が小さすぎて、致命的なリスクをもたらす。
現在のほとんどのビットコイン預託アドバイスは、シード生成後に実施されます:オフラインでメンネモニックを保存し、耐久性のあるバックアップ媒体を使用し、権限を分離し、復元プロセスをテストする。これらの対策は依然として価値がある。しかし、Coldcardの事故は、セキュリティの防衛ラインをさらに前進させる必要があることを示している。
空気隔離は、すでにデバイスに登録された鍵を保護するのみです。そのため、ビットコインウォレットのセキュリティは、信頼できるランダムソースから始まる必要があります。

