
乱数が壊れるとき:Coldcard のエントロピー不具合と、2 台の端末が変えるもの
2026 年 7 月の終わり、攻撃者たちは何も間違えていない数千台のハードウェアウォレットからビットコインを抜き始めました。持ち主は助言どおりにしていました。署名専用の端末を買い、シードをオフラインに置き、ウェブサイトに打ち込んだことなど一度もありません。そのどれも意味を持ちませんでした。それらの端末が生成したシードは、見た目ほど乱雑ではなかったからです。
およそ 1,816 BTC が 5,200 を超えるアドレスから、四つの波に分かれて出ていきました。その年最大のハードウェアウォレット侵害です。
この記事は勝利の行進ではありません。ここで問題になった不具合は、私たちのものを含めほとんどどのウォレットにも起こりえた種類のものであり、興味深い問いは誰がそれを出荷したかではなく、それが起きたときウォレットのアーキテクチャが何をするか、です。
実際に何が起きたのか
たった一つのコミット、2021 年 3 月のことです。
Coldcard の設計は、シードをハードウェア乱数生成器——物理過程からエントロピーを取り出す専用チップ——から生成することを求めていました。それが正しいやり方です。ところがファームウェア 4.0.1 の変更が、シード生成を代わりに公開された、ハードコードされた定数から種を得るソフトウェア擬似乱数生成器へと通してしまいました。
擬似乱数生成器は定義からして決定的です。同じ初期値を与えれば、いつまでも同じ列を返します。ですからこの方法で生成されたシードは、誰にも推測できない数ではありません。探索しきれるほど小さな集合から引かれた数であり、しかもその定数はずっと公開済みのファームウェアの中に置かれていました。
端末はふつうに振る舞い続けました。24 個の単語を表示し、人はそれを書き留め、正しいアドレスを導き、有効なトランザクションに署名しました。あなたのシードにどれだけのエントロピーが入ったのかを示す画面は、どのウォレットにもありません。影響を受けたすべての利用者は、最長で 5 年ものあいだ、正常な端末とまったく同じに見え、同じように動く端末を持っていたのです。
期間は 2021 年 3 月のファームウェア 4.0.1 から 2026 年 7 月の 4.1.9 まで。ファームウェアの更新はそれ以降の生成を直しましたが、すでに作られたシードには何ひとつしませんでした。その鍵はすでに弱く、そしてどんな更新も、誰かの金庫のカードにとうに書き込まれた数へ後から乱雑さを加えることはできません。影響を受けた人は新しいシードを生成し、コインを移すほかありませんでした。
なぜ弱い乱数は静かな全損なのか
この種の不具合がなぜこれほど重いのか、正確に述べておく価値があります。直感的ではないからです。
24 語の BIP-39 シードは 256 ビットのエントロピーを表します。一つを当てることは単に難しいのではなく、想像を絶します。その空間を総当たりできる計算機は、現在にも将来にも存在しません。自己管理というモデル全体はこの土台の上に載っています。あなたの鍵が安全なのは、それが理解の及ばないほど多い可能性のうちの一つだからです。
その保証は語の性質ではありません。語を選んだ過程の性質です。弱い生成器から引かれた 24 語は、強い生成器から引かれた 24 語とまったく同じに見えます。あらゆるチェックサムを通り、有効なアドレスを生み、どのウォレットでも完璧に復元されます。唯一の違いは、他人もそこへ辿り着けるということです。
つまりこの失敗は内側からは見えず、そして完全です。「間違いを犯せば攻撃者に盗まれうる」ではありません。避けるべき間違いも、断るべきフィッシングのリンクも、注意深く読むべき確認ダイアログもないのです。お金は攻撃者の都合のよいときに持ち去れる状態にあり、何かがおかしかったという最初の兆候は、それが無くなっていることです。
2 台の端末が変えるもの

ここからがアーキテクチャ上重要な部分で、宣伝の言葉ではなく正確に述べたいところです。
SSP は 2-of-2 のマルチシグです。資金は、2 台の独立した端末で生成された 2 つの独立した鍵——一方はブラウザ拡張、もう一方は SSP Key のモバイルアプリ——が支配するアドレスに置かれ、トランザクションは両方の署名を要します。2 分の 2 という仕組みがこのウォレットの土台のすべてです。
ではその構造に Coldcard の筋書きを当ててみましょう。拡張のシード生成に同じ欠陥があり、攻撃者があなたのブラウザ側の鍵を完全に導けるとします。
それでも彼は何も使えません。 必要な二つの署名のうち一つを握っているだけです。そのアドレスは、誰の鍵であれ、どう手に入れたものであれ、鍵一つでは資金を放しません。あなたのコインを動かすには、あなたの携帯電話の鍵をも、独立にかつ同時に破らねばなりません。別のアプリケーション、別のオペレーティングシステム、別のエントロピー源、別の瞬間に生成されたものを。
これが構造上の違いです。単一鍵のウォレットでは、弱いシードは全損です。2-of-2 では、弱いシードは深刻な問題ですが、それ自体は損失ではありません。
限界を、はっきりと
ここで筆を止め、SSP はこれに免疫があるとあなたに結論づけさせるのは簡単でしょう。免疫はありませんし、他社が事故のさなかにあるときにそう装うのは、まさに最も不適切な瞬間です。
SSP の二つのアプリケーションは同じ BIP-39 実装を使っています——@scure/bip39、しかも双方で同じバージョンに固定されています。そのライブラリ自体の欠陥は、両方の鍵に及びます。 SSP が与える独立性は本物ですが、限定的です。異なる時刻に、異なる端末で生成された二つの別々のシードが、異なるオペレーティングシステムの源からエントロピーを引く——片方はブラウザの Web Crypto、もう片方はモバイルプラットフォームの CSPRNG。まったく無関係な二つのコードベースの独立性ではありません。
それが買うのは、Coldcard で実際に起きた失敗の型に対する防御です。すなわち、ある製品がシードをどう生成したかという、端末固有の実装の誤りに対する防御。両者の下にある共有の暗号プリミティブの欠陥は防げません。
これは「私たちには起こりえない」よりはっきりと弱い主張であり、そして真実のほうです。自社のウォレットはエントロピーの失敗に対して原理的に免疫がある、と語る者は、アーキテクチャではなく自分の宣伝について語っています。
ここから持ち帰るもの
その期間のファームウェアの Coldcard をお持ちなら、資金が動いたかどうかにかかわらず、シードは危殆化しているという想定だけが安全です。修正済みファームウェアで新しいシードを生成し、移してください。まだ空にされていない端末は、安全な端末ではありません。
単一鍵のウォレットをお使いなら、これはあなたが負っているリスクであり、不安になるより意識しておく価値があります。ハードウェアウォレットは、多くの人にとって依然として代替手段よりはるかに優れています。教訓は「それが悪い」ではありません。鍵が一つなら単一障害点も一つであり、その鍵の来歴のあらゆる部分——何年も前、あなたが読んでいないファームウェアの中で生まれた瞬間も含めて——があなたの脅威モデルの一部だ、ということです。
そして一般には、一つ壊れただけでは足りないアーキテクチャを選んでください。その原則こそ、SSP が 2 台の端末を要する理由であり、すでに認証済みでも一部の操作が再署名を求める理由であり、トランザクションを実際に止めているものは何かが、信頼するどのウォレットにも問う価値のある問いである理由です。その答えが「一つの秘密と、それがきちんと生成されたという願い」であってはなりません。
選択肢の広い比較と、それぞれが実際に何から守るのかについては、自己管理の選択肢を比べるが扱っています。


