標準的な六面体のサイコロは、毎回約2.6ビットの不確実な情報を生成します。これはそれほど多くないように聞こえるかもしれませんが、繰り返しRollすることで、ソフトウェアや電子部品に頼らずにBitcoinウォレットを安全に確保するために必要な原始的なランダム性を生成できます。
主なポイント
- 公正な六面ダイスの投擲は、クラウド・シャノンの公式によると、約2.585ビットのエントロピーを供給します。
- Coinkiteのドキュメントでは、50回のダイスロールがBitcoinウォレットのシードの128ビット基準を満たすと述べられています。
- ケビン・ロアックのWizard Sardine分析により、Coldcardツールのメインシード以外にリスクが検出されました。
なぜサイコロの出目を予測するのが如此に難しいのか
情報理論を確立した数学者、クロード・シャノンは、エントロピーを使って結果の不確実性を測定した。公正な六面体のサイコロでは、各面が出る確率はすべて1/6であり、それぞれの投擲は約2.585ビットのエントロピーを持つ。コイン投げは1ビット、八面体のサイコロは3ビットのエントロピーを生み出す。

最近のColdcardの出来事により、サイコロに基づくシード生成がソーシャルメディアで広まりました。一部のユーザーはこれを必須と見なしている一方で、他のユーザーはこれが自分の資金を守ったと主張しています。一方、経験豊富な運用者は、ほとんどの新規ユーザーが遅く、エラーが発生しやすいセットアッププロセスを受け入れないことを指摘しています。
重要なのは、サイコロが原子レベルでランダムに振る舞うということではなく、そうではないのです。結果は物理学によって支配されていますが、あまりにも多くの微細な変数が同時に変化しているため、誰もが結果を信頼性高く計算することはできません。サイコロは特定の速度、角度、高さ、回転で手から離れてテーブルに衝突し、各バウンドごとに方向を変えるのです。
実際には、リリース時のわずかな変動でも、まったく異なる結果を生むことがあります。指の位置がわずかに異なったり、投げる力がわずかに強くなったりすると、軌道が変化し、動きを観察しても最終的な数値を予測できなくなります。理論的には結果は決定論的かもしれませんが、ウォレット生成において重要なのは、攻撃者がそれを再現または計算できないことです。
ダイスのロールを有用なデータに変換
コンピュータはダイスの結果のリストを直接使用できません。ロールはまずバイナリデータに変換される必要があり、変換方法が重要です。
基本的な奇数または偶数の方法は理解しやすいですが、利用可能なエントロピーの大部分を無駄にします。各ロールはダイスが約2.6ビットの情報を生成しているにもかかわらず、1ビットに縮小されます。より効率的な方法では、長く連続したロールの列を収集し、通常は暗号学的ハッシュ関数を用いて全体の文字列を処理します。これにより、ランダム性の大部分を保持できます。
同じ原理は、安全なパスフレーズを作成するための長年にわたる方法であるDicewareや、手動でのBitcoinウォレット生成にも見られます。一般的な12語のウォレット復元フレーズは、128ビットのエントロピーから構成されています。1回のロールで約2.6ビットのエントロピーを得られるとすると、約50回の公正なロールでその閾値を超える十分な原始情報が得られます。
コインキットは、Coldcardハードウェールウォレットの製造元として、256ビットのエントロピーに近いものを求めているユーザーには99回以上ロールすることをお勧めしています。これはウォレットの使用を二倍に難しくするわけではありませんが、生成されるシークレットにはるかに大きな数学的セキュリティマージンを提供します。
ダイス生成シードの実世界テスト
その違いは、Coinkiteが2021年までさかのぼるファームウェアの問題を公表した後、重要性を増した。一部のColdcardデバイスでは、ソフトウェアが内部のハードウェア乱数生成器をスキップし、非秘密のデバイス情報に接続されたより弱いプロセスを使用する可能性があった。
そのプロセスの一部が再構築可能だったため、攻撃者はキー空間全体を検索するのではなく、可能性のあるウォレットキーを絞り込むことができました。この欠陥は、東部標準時午後1時現在、約1100のアドレスから推定1,128.6633 BTCが盗まれたことと関連しています。

十分な数の独立したサイコロのロールから生成されたウォレットシードは、同じ経路を通じて公開されていません。これらのユーザーは自身でエントロピーを提供していたため、不具合のあるハードウェアジェネレーターは主要なウォレット秘密鍵の生成に責任を持っていません。
しかし、その保護はサイコロから生成されたシードにのみ適用され、デバイスによって生成されたその他のすべての秘密を自動的に保護するものではありませんでした。
ウィザードサーディンが詳細を検討
セキュリティ研究者のケビン・ロアックは、8月1日にWizard Sardineのウェブサイトでを公開しました。彼の最も重要な観察は、Coldcardがプライマリウォレットシードとは別に独自のシークレットを生成する機能に関するものでした。
「サイコロでシードをインポートまたは生成したユーザーでも、以下の機能を使用すると脆弱性の対象となることを強調することが極めて重要です。」LoaecはXで投稿しました。その後、影響を受けるシステムの図を提示しました。
図は、複数のセカンダリーコールドカード機能にフィードしている不完全な乱数生成器を示しています。これらには、ペーパーウォレットの作成、デバイスのクローン作成、USBセッションの暗号化、Secret Teleport振替機能、コシグニングキーの作成、内蔵パスワード生成器、ハードウェアセキュリティモジュール認証コードが含まれます。

99回のダイスロールで作成された主要なウォレットは、システムの別の部分に残っていた。問題は、他のツールが依然として不具合のある乱数生成器から新しいランダム性を要求できることだった。その結果、安全なシードがあっても、同じデバイス上で作成されたすべてのパスワード、バックアップ、認証コード、または副次的なキーが同等に安全であるとは保証されなかった。
ほとんどの新規ユーザーはサイコロを振らない理由
Dice-generated entropyは正しく実行されれば技術的に信頼できますが、ほとんどの新規ユーザーにとって現実的なデフォルトとは言えません。サイコロを50回または99回振って、すべての結果を正確に入力し、どのロールもスキップまたは重複していないことを確認するには、忍耐力と高い集中力が必要です。1つの入力ミスだけで最終的なウォレット全体が変わってしまう可能性があり、ほとんどのデバイスでは、そのミスがサイコロの不良、入力エラー、または指示の誤解によるものなのかを判別できません。

このプロセスは、正しく機能するハードウェアジェネレーターには存在しないリスクをもたらします。ユーザーはロールを紙に書き留め、写真を撮ったり、オンラインツールに入力したり、他の人が見つけられる場所にリストを置いたりする可能性があります。一部のユーザーはサイコロを繰り返しまたは制御された方法で振ったり、歪んだまたは損傷したサイコロを使用したり、プロセスが過剰に感じられて早期に停止したりします。数学的には強力でも、結果の安全性はユーザーの手順次第です。

そのため、ダイスロールは、経験豊富なBitcoinユーザーの中でも、多くの人にとって最良の方法とは見なされていません。これは、デバイスへの信頼を手動プロセスへの信頼に置き換えます。エントロピーを理解し、方法を検証し、ロールのシーケンスを秘密に保つ技術的に慎重なユーザーにとっては、この取引は意味があるかもしれません。一方、初めてウォレットを設定する一般的な購入者にとっては、永続的なミスを犯す機会が複数増えるだけでなく、面倒なプロセスでもあります。

資金を受け取り、安全に処理する前に、テーブルに座って99回のサイコロの結果を手動で記録することに依存して、広範なBitcoinの採用が実現することは難しい。セキュリティ手法は、実際の家庭環境、忙しいスケジュール、気の散る要因、そして暗号学を学びたくないユーザーにも耐えられるものでなければならない。手動でのエントロピーは、高度なオプションとして引き続き利用可能であるべきであるが、長期的な目標は、ハードウェアとソフトウェアが適切に強力なランダム性を生成し、何が起こっているかを明確に説明し、専門的な知識をできるだけ必要としないことである。
コールドカード所有者が確認すべきこと
影響を受けたColdcardデバイスの所有者は、まずデバイスにインストールされているファームウェアのバージョンを確認する必要があります。その後、メインウォレットシードの生成方法にのみ注目するのではなく、古いファームウェアを実行中に使用した機能を確認してください。
影響を受けたデバイスを使用してペーパーウォレット、シークレットの複製、パスワード、コシグニングキー、または認証コードを生成した場合、その情報を直ちに交換する必要がある可能性があります。アップデートをインストールすることで、新しいシークレットに対する同様の問題を防ぐことができますが、以前に作成されたものは修復されません。
この出来事は、マルチベンダーのウォレット設定にさらに実用的な根拠をもたらします。マルチシグネチャーの仕組みでは、異なるメーカーの複数のハードウェアデバイスが取引の承認に必要になります。この構造はファームウェアのバグを完全に防ぐことはできませんが、単一の不具合のある乱数生成器がウォレット全体を暴露するのを防ぐことができます。
