
ダイスの偏りについて
前にJadeでダイスを使ったシードフレーズ生成を試してみたという記事を書いた。
https://spotlight.soy/detail?article_id=2ivaznoyy
あれからダイスって普通に市販のを買ったら絶対に偏りはあるはずで、その微妙な偏りのせいでエントロピーが不十分になったりしないのかなって疑問に思ってたんだけど、ChatGPT plusユーザーでもDeep Researchができるようになったから聞いてみた結果。
はじめに
物理的なダイスは理論上「公平」な乱数を生み出すと考えられていますが、実際には微小な偏りが存在します。これは、ダイスの形状、重量分布、面のマーキングなどの製造上の不完全さによるもので、通常のゲーム用途では問題にならない程度ですが、ビットコインの鍵生成やリカバリーフレーズ作成など、暗号的に重要なエントロピーを必要とする場合には、わずかな偏りでも安全性に影響を及ぼす可能性があります。本報告では、以下の点について検証します。
- 市販されている各種ダイス(6面体、8面体、16面体など)の実測データに基づく偏りの程度
- 製造工程や素材(例:透明ダイスと不透明ダイス)の違いが偏りに与える影響
- ダイスの偏りが暗号鍵生成時のエントロピーに与える影響と、偏りを軽減するための手法
- 添付の「JadeDiceRollsGuide.pdf」に記載された、2つの16面体ダイスと1つの8面体ダイスを用いる方法の評価
1. 一般的なダイスの偏りに関する実験結果
6面体ダイス(D6)
- ピップの影響:伝統的な6面体ダイスでは、各面に刻まれたピップ(点)のために、例えば「6」の面は多くのピップが掘られているために、素材が削られ「1」の面より軽くなる傾向があります。結果として、重い面(1)が下に来やすく、軽い面(6)が上がりやすくなることが確認されています。
- 実際の偏り:理想では各面は約16.67%の確率で出るはずですが、実際には約17%や16%といった僅かな偏りが存在し、十分な回数(数百~数千回)の試行で統計的に有意な偏りが確認されます。
20面体ダイス(D20)
- 実験例:有名な実験では、Chessex製やGameScience製のダイスをそれぞれ10,000回転がし、各面の出現回数を調べました。理論上は各面が約500回(5%)の出現が期待されますが、実際にはある面は大幅に多く、または少なく出現する結果が得られました。
- 具体例:GameScience製では、面「14」が約300回(約3%)と著しく少なく、一方でその反対の面「7」が約700回(約7%)と多く出現するなど、製造上の微細な欠陥(例えば、成形時の余剰プラスチック「フラッシュ」)により偏りが生じています。
その他の多面体ダイス(D8、D10、D12、D16)
- 理論と現実:D&Dなどで使用される多面体ダイスは、理論上は均等な確率で各面が出るように設計されています。しかし、製造時の微細な誤差により、面数が多いほど(例えばD16の場合)微小な偏りが生じやすくなります。
- 実験的傾向:一般的には、6面体ダイスの方が偏りが少なく、20面体など面数が多いダイスでは偏りが顕著になりやすいと報告されています。
2. 市販ダイスの偏りと製造上の要因
-
高精度ダイス vs. 量産ダイス:カジノ用の高精度ダイスは、非常に厳密な製造工程により、ほぼ完璧な公平性を実現しています。一方、一般向けのボードゲームやRPG用ダイスは、プラスチック射出成形や転がし研磨を経るため、僅かな不均一性が残ることが多いです。
-
透明ダイス vs. 不透明ダイス:半透明ダイスは、内部の気泡などが確認できるため、均一な材料で作られている傾向にあり、結果として偏りが少なくなることが多いです。ただし、単色の不透明ダイスでも材料が均一であれば十分に公平である場合もあります。
-
その他の特殊なダイス:金属ダイスや宝石ダイスは、見た目の豪華さに反して、必ずしもプラスチックダイスよりも公平とは限りません。各材料や加工方法によって偏りが生じる可能性があります。
3. 暗号鍵生成におけるエントロピーへの影響
- エントロピーの測定:完全に公平な6面体ダイスであれば、1回の転がしで約2.585ビットのエントロピーが得られます。しかし、微小な偏りがあると、この値はわずかに低下します。例えば、ある面の出現確率が0.18となった場合、得られるエントロピーは約2.57ビットになる可能性があります。
- 影響の規模:1回あたりのエントロピーの減少が0.015ビット程度であれば、50回転(約128ビットのエントロピー)では合計でごく僅か(約0.75ビット程度)の減少にとどまります。実際の攻撃においては、この程度の偏りが与える影響は極めて小さいと考えられます。
- 最悪の場合:もし偏りが極端であれば、攻撃者は統計的に出現確率の高いパターンを狙うことが可能になります。しかし、通常の市販ダイスで極端な偏りが発生することは稀であり、適切な品質のダイスであれば、全体のエントロピーは十分に高いままです。
4. ダイスバイアスを軽減する方法
-
デバイアス手法の利用(ノンネマン法など):たとえば、ダイスを2回転がし、結果の組み合わせが(偶数-奇数)または(奇数-偶数)の場合のみを有効とする方法があります。こうすることで、偏りを打ち消して公平なビット列を得ることができます。
-
複数ダイスの併用:複数のダイスを同時に使用して、その結果を組み合わせることで、個々のダイスの偏りが平均化されます。実験的にも、単体のダイスより複数のダイスを用いた方が全体として公平な結果が得られることが示されています。
-
別のエントロピー源の追加:コインフリップなど、異なるランダムソースと組み合わせることで、一方の偏りを補完する方法もあります。
-
高品質なダイスの選定:製造上の精度が高いダイス(カジノ用や、転がし研磨を行わない精密なダイス)を選ぶことが最も簡単な対策です。
-
適切な転がし方:ダイスは十分に振り、カップなどを利用してランダムに転がすことで、初期状態の影響を排除します。
5. 「JadeDiceRollsGuide.pdf」に記載された方法の評価
方法の概要
アップロードされたガイドでは、Blockstream Jadeのリカバリーフレーズ生成のために、2つの16面体ダイスと1つの8面体ダイスを同時に転がし、その組み合わせ(16×16×8=2048通り)を用いてBIP-39の2048語リストと1対1に対応させる手法が示されています。
この方法のメリット
- 完璧なマッピング:2048通りの組み合わせがちょうどBIP-39リストの語数と一致するため、余分な割り当てや捨てるケースがなく、変換に起因する偏りが発生しません。
- 複数ダイスの効果:異なる種類のダイスを用いることで、各ダイスの微小な偏りが互いに打ち消され、全体としてより均等な結果が得られます。
- ロール回数の少なさ:1回の三連ロールで11ビットのエントロピーが得られるため、128ビット(または256ビット)の鍵を生成するために必要なロール回数が大幅に減少し、ヒューマンエラーのリスクも軽減されます。
注意点
- もし1個の16面体ダイスに著しい偏りがある場合、その影響が該当する単語の出現頻度に現れる可能性があります。
- 最終的なチェックサム単語は、入力ミスを防ぐためのものであり、個々のロールでの偏りを補正するものではありません。
6. ランダム性を最大化するための実践的な推奨事項
- 適切なダイスの選定:可能な限り高精度で均一なダイス(カジノ用、またはピップのない印刷タイプや均一な半透明ダイス)を使用する。
- 複数ダイスの併用:偏りを平均化するために、複数のダイスを組み合わせた方法(例:2×D16+1×D8)を採用する。
- デバイアス手法の検討:必要に応じて、ノンネマン法などで偏りを除去する(ただし、手間がかかるため、品質の良いダイスが入手可能であれば不要)。
- エントロピーの余裕:万一の偏りに備えて、12語よりも24語のリカバリーフレーズを生成するなど、エントロピーに余裕を持たせる。
- 適切な転がし方:毎回十分に振って混乱状態で転がし、決まったパターンが出ないようにする。
- 結果の記録と検証:ダイスを事前に数十回転がして偏りをチェックするなど、品質確認を行うと安心です。
結論
実験的なデータや各種研究から、市販ダイスにはごく僅かな偏りが存在するものの、品質の良いダイスを使用し、複数のダイスを組み合わせた場合、その影響は極めて小さくなります。特に、2つの16面体ダイスと1つの8面体ダイスを用いる方法は、出力空間が2048通り(2の累乗)に一致するため、余計な調整を必要とせず、効率よく高いエントロピーを得ることができます。適切なダイスの選定、正しい転がし方、そして場合によってはデバイアス手法やエントロピーの余裕確保により、ビットコインの鍵生成に十分な安全性が確保できると考えられます。
以上の理由から、一般的に販売されている、偏りがさほど大きくないダイスを用い、複数のダイスで偏りを相殺する方法は、ビットコインのエントロピー生成において十分に安全な手法といえるでしょう。