7月30日に開始された一連の攻撃により、Coldcardハードウォレットの脆弱性が原因で、4,500以上のアドレスから約1,367 BTC(約8,900万ドル)が盗まれました。このバグは2021年3月からファームウェアに静かに存在し、ウォレットシードの生成に使用されるランダム性を著しく弱め、攻撃者が最終的にそれらを解読できる状態となりました。
Foundation DevicesのCEOであるZach Herbertは、Bitcoinウォレットのコードがオープンソースであるため、コミュニティが問題を迅速に検出し対応できたと指摘した。彼の主張は、プロプライエタリなファームウェアであれば、問題の発見が難しくなり、修正はさらに困難になっていたということだった。
Coldcardのファームウェア内で何が悪かったのか
ハードウェアウォレットを設定すると、デバイスは「シード」を生成します。これは、あなたのすべてのBitcoinのマスターキーに相当します。そのシードはランダムである必要があります。業界標準は128ビットのエントロピーであり、実際には、可能なシードの数が非常に膨大であることを意味し、ブルートフォースで正しいシードを導き出すには、宇宙の年齢よりも長い時間がかかります。
2021年3月にカナダのメーカーCoinkiteがリリースしたColdcardのファームウェアバージョン4.0.1は、大規模なコード書き換え中にバグを導入しました。影響を受けるデバイス、特にMk2およびMk3モデルは、128ビットのエントロピーでシードを生成する代わりに、約72ビットのシードを生成していました。
暗号学者でない限り、128ビットと72ビットのエントロピーの差は些細に思えるかもしれないが、それは誤りだ。欠けた各ビットは可能性の数を半分に減らす。56ビットを失うことは、検索空間を約72京分の1に縮小することを意味する。これは、理論的な脆弱性を実用的なものに変えるような計算である。
攻撃とその対応
調整された攻撃は2026年7月30日に開始されました。数日以内に、影響を受けたファームウェアバージョンで生成されたシードを持つウォレットから約1,367 BTCが不正に抜き取られました。当時、その被害額は約8,900万ドルと評価されていました。
4,500以上の別々のアドレスにわたる資金の流出の速さは、攻撃者が長期間にわたり準備を進めており、急速に連続して盗難を実行する前に脆弱なシードを事前に計算していた可能性を示唆している。
Coinkiteは、攻撃が明らかになってからたった1日後の7月31日にパッチ済みファームウェアをリリースしました。修正版は、Mk4およびMk5デバイス向けにバージョン5.6.0、Qモデル向けにバージョン1.5.0Q、旧型のMk3向けにバージョン4.2.0として提供されました。しかし、ファームウェアの更新だけでは問題は解決しません。脆弱なファームウェアでシードを生成したユーザーは、現在デバイスで実行されているソフトウェアが何であれ、古いシードは依然として危険な状態であるため、完全に新しいシードに移行する必要があります。
50回以上の独立した公正なサイコロのロールを使用して生成されたシードは影響を受けませんでした。また、ファームウェアバージョン4.0.1以前で作成されたシードにも影響はありませんでした。この脆弱性は、2021年のリライトで導入されたエントロピー生成コードに特有のものでした。
オープンソースの議論
競合するハードウェアウォレットメーカーであるFoundation Devicesを運営するザック・ハーバートは、オープンソースのコードがコミュニティが迅速に対応できる鍵であると強調した。彼の立場は明確だ:ウォレットのファームウェアが公開されて監査可能であれば、脆弱性はより早く発見され、パッチは導入前に厳密に検証され、エコシステム全体が集団的な監視の恩恵を受ける。
オープンソースのコードは、Bitcoinコミュニティが迅速に対応し、将来のセキュリティインシデントを防ぐのに役立ちます。
Foundation Devicesは、Coldcardの直接の競合製品であるPassportウォレットを製造しています。この脆弱性は、悪用されるまで5年以上にわたり製品ファームウェアに存在していました。攻撃から修正まで1日という迅速なパッチ対応は、透明なコードベースがインシデント対応を加速することを示唆しています。
ハードウェールレット利用者にとっての意味
2021年3月以降に生成されたシードを使用しているColdcardデバイスのユーザーは、明確な対応が必要です:直ちにファームウェアをアップデートし、何より新しいシードを生成してください。新しいシードへの移行なしにファームウェアをパッチするだけでは、根本的な脆弱性は解消されません。シード生成に少なくとも50回の独立した公正なダイスロールを用いたユーザーは、デバイス内の乱数生成器に依存しておらず、影響を受けません。

