Coldcardのハードウェアウォレットで低エントロピーの問題が明らかになり、ビットコイン利用者の間でシードフレーズの生成方法を見直す動きが広がっている。Cointelegraphが7日(現地時間)に報じた。コミュニティでは、ウォレット内部の乱数生成器に頼るのではなく、サイコロなどを使った物理エントロピーの活用に改めて関心が集まっている。
焦点となったのは、シードフレーズ生成に使われる乱数の品質だ。Coldcardは本来、STM32のハードウェア乱数生成器を採用していたが、2021年3月公開のファームウェア4.0.1以降は、MicroPythonのXorShift系疑似乱数生成器を使用していたという。
この脆弱性は、開発者のNVKがファームウェアをGPLライセンスの自由ソフトウェアモデルから読み取り専用モデルへ切り替えるために書き直す過程で入り込んだと伝えられている。
7月30日以降は、実際の盗難被害も相次いで明らかになった。攻撃者は脆弱なシードから派生した秘密鍵を総当たりで特定し、1億ドル超相当のBTC(約150億円)を盗み取ったという。
CoinKiteは、Mk2とMk3のエントロピーは40ビット、Mk4、Mk5、Qは約70ビット水準だったと推定した。安全な12単語のシードフレーズに必要とされる128ビットを大きく下回る水準だ。
今回の問題を受け、ジェームズ・オベインは、攻撃者が実際にどの種類のウォレットを狙っているのかを見極めるため、ハニーポットのアドレス「cktripwire」を立ち上げた。
攻撃者にウォレットを特定される可能性は、サイコロで追加エントロピーを与えていたかどうかに加え、BIP-39パスフレーズや非標準の派生パスを使っていたかどうかでも変わるとされる。
コミュニティでは、「信頼せず、検証せよ」という原則が改めて強調されている。デバイス内部のエントロピー生成に依存せず、十分な回数のサイコロ投げでシードを作成していた利用者は、今回の脆弱性の影響を回避できたという。
一方、デバイス内の乱数生成器を検証するには、電子部品の物理的な点検やファームウェアの確認が必要になる。このため、一般利用者が自力で妥当性を確かめるのは容易ではない。
その代替策として再び注目されているのが、自ら物理エントロピーを生成する方法だ。代表的な手法としては、サイコロを100回以上振って24単語シードに必要なエントロピーを確保し、デバイスがそれをBIP-39のシードフレーズへ正しく変換しているかだけを照合するやり方が挙げられている。
BitBoxが公開した表のように、サイコロ6回分の結果とコイン投げを組み合わせ、電子機器を使わずにシード単語を決める方法も示された。
このほか、BIP-39の単語を紙に印刷して同じ大きさに切りそろえ、十分に混ぜたうえで無作為に24個を引く方法も代案として挙がっている。エントロピー生成を複数のデバイスに分散させる専用ハードウェアも提示された。
物理エントロピーでシードを作成すれば、ウォレット生成プロセスにおける単一障害点を減らせる。シードから派生したxpubや入金アドレスは、別のデバイスで照合できるという。