乱数とは
- 7. Strictly Confidential
Copyright©株式会社Acompany All rights reserved.
乱数生成器
• Linuxカーネルの/dev/random
• マウス操作, キー操作, ネットワークトラフィックなどの環境ノイズを
エントロピープールとして貯めこみ, ハッシュ化して真の乱数を作り出す
疑似デバイス
• ハードウェア乱数生成器
• 電気回路の熱雑音や放射性物質の崩壊と言った
物理的に存在するデタラメさを計測して乱数を発生するハードウェア
• IntelCPUの中にも組み込まれており, RdRand命令で呼び出し可能
まだ低速 → 多くの乱数を高速に供給し続けられない
引用元: https://ocw.u-tokyo.ac.jp/lecture_files/gf_23/12/notes/ja/12_matsumoto.pdf
- 11. Strictly Confidential
Copyright©株式会社Acompany All rights reserved.
• シード(初期値x_0)と漸化式(x_{n+1} = f(x_n))によって計算
• 高速に生成可能
• 必ず繰り返し(周期)が発生する
• シードのみ外部で決める必要がある
• 手入力
• 真の乱数生成器
• できるだけ長い周期の数列を作りたい
• 核シミュレーションでは何兆個もの
乱数が必要
疑似乱数生成器
引用元: 結城 浩(2015)『暗号技術入門第3版』SBクリエイティブ株式会社
- 12. Strictly Confidential
Copyright©株式会社Acompany All rights reserved.
• 平方採中法(von Neumann, 1940)
• 前の値を2乗して中央の値を取り出し,
次の値にする方法
• 周期は4桁で大体100前後
• 分布や周期があまりよくないため
現在は使われない
疑似乱数生成器の例
• 例. シード=2021, 10進数4桁
• 0 : 2021^2 = 04084441 -> 0844
• 1 : 0844^2 = 00712336 -> 7123
• 2 : 7123^2 = 50737129 -> 7371
• …
• 18 : 2900^2 = 08410000 -> 4100
• 19 : 4100^2 = 16810000 -> 8100
• 20 : 8100^2 = 65610000 -> 6100
• 21 : 6100^2 = 37210000 -> 2100
• 22 : 2100^2 = 04410000 -> 4100
• 23 : 4100^2 = 16810000 -> 8100
• …
- 13. Strictly Confidential
Copyright©株式会社Acompany All rights reserved.
• 線形合同法(Lehmer, 1960)
• 周期はM以下
• C言語のrand(), Excel 2010以
前のRAND() の内部実装
• 周期がやや短い
• 現実的にはM=2^32程度
• Mを増やすと生成が遅くなる
• Mを偶数にすると必ず奇数と
偶数が交互に出る
疑似乱数生成器の例
• 例. x_0(シード) = 2021, a = 123, c = 4567, M = 8910
1 : 2021 × 123 + 4567 = 253150 (mod 8910) -> 3670
2 : 3670 × 123 + 4567 = 455977 (mod 8910) -> 1567
3 : 1567 × 123 + 4567 = 197308 (mod 8910) -> 1288
4 : 1288 × 123 + 4567 = 162991 (mod 8910) -> 2611
5 : 2611 × 123 + 4567 = 325720 (mod 8910) -> 4960
…
23 : 5527 × 123 + 4567 = 684388 (mod 8910) -> 7228
24 : 7228 × 123 + 4567 = 893611 (mod 8910) -> 2611
25 : 2611 × 123 + 4567 = 325720 (mod 8910) -> 4960
- 19. Strictly Confidential
Copyright©株式会社Acompany All rights reserved.
• 以下の2条件を満たす疑似乱数生成器*
• next-bit testに合格する
• 一部の数列をみても次の値を予測できる方法が存在しない
• state compromise extensionsに耐える
• 内部状態の一部または全部が明らかになっても
以前に生成された乱数列は推測できない
• 入力エントロピーに関する知識があっても出力を予測できない
→ 一方向ハッシュ関数や暗号化の一方向性を仮定して実用
暗号論的疑似乱数生成器
* 厳密な定義を探したが
, 最古の“state compromise extensions”は以下のサイトしか見つからなかった
. 現在はcaacheしか残っていない.
http://webcache.googleusercontent.com/search?q=cache:cGB5bhO-2RAJ:www.unf.edu/~wkloster/crypto/CryptographyNetSecurity-2004.ppt+&cd=1&hl=ja&ct=clnk&gl=jp
- 23. Strictly Confidential
Copyright©株式会社Acompany All rights reserved.
• 第五世代(BW)では疑似乱数生成器にMT(メルセンヌ・ツイスタ)を使ってい
る
• 初期シードをDSのMACアドレスと本体時刻, 経過時間などの内部値から決定
• DSの時刻を調整し, 既知の情報から乱数を再現可能
• 望みの個体値を持つモンスターの出現を制御できる
※第五世代に限らずほとんどの世代で乱数調整が可能
ポケモンの乱数調整
- 24. Strictly Confidential
Copyright©株式会社Acompany All rights reserved.
• Xbox360向けゲーム「カルドセプトサーガ」に
次のダイス目が偶数か奇数か推測できるという致命的バグが発覚
→ 炎上して店頭在庫回収へ
• ダイスの乱数に線形合同法を使用
• 下位ビットが0, 1の繰り返しになる
パラメータを踏み抜いてしまう
Xbox360向けゲーム「カルドセプトサーガ」の悲劇
引用元: https://www.famitsu.com/game/news/2006/12/14/103,1166086939,64495,0,0.html
(c)2006 OmiyaSoft(JAMSWORKS) (c)2006 NBGI ※"Culdcept","カルドセプト"は有限会社大宮ソフトの登録商標です。
- 25. Strictly Confidential
Copyright©株式会社Acompany All rights reserved.
• drandと呼ばれるRandomness-as-a-Serviceを実現するためのコンソーシアム
• LavaRand(Cloudflare):
• 本社にあるラバライトの壁の映像をseedにしたCSPRNG
• UChile(チリ大学)
• 地震, ラジオ, Twitter, Ethereumブロックチェーン,
独自RNGカードからランダムネスを抽出
• InterplanetaryGirl(ProtocolLabs)
• RdRand(環境ノイズおよびLinux PRNG+CPUソースのランダムネス)
• ChaChaRand(Kudelski Security)
• ChaCha20ストリーム暗号に基づく暗号論的疑似乱数生成器
• URand(EPFL)
• 沢山の/dev/urandom
League of Entropy:分散型ランダムビーコン
引用元: https://blog.cloudflare.com/ja-jp/league-of-entropy-ja-jp/, https://blog.cloudflare.com/lavarand-in-production-the-nitty-gritty-technical-details/
- 26. Strictly Confidential
Copyright©株式会社Acompany All rights reserved.
参考文献 (サイトの情報は2021/11/6時点のもの)
• 松本 眞(2014)
あなたの使っている乱数、大丈夫? 松本 眞
• 松本 眞(2012)
デタラメさの効用と、1+1=0の世界 松本 眞(東京大学数理科学研究科)
• 堀田敬介(2010)
統計の分析と利用 Contents
• BPS株式会社(2019)
乱数について本気出して考えてみる|TechRacho by BPS株式会社
• 佐竹真介, 菅野龍太郎(2020)
2.乱数発生の原理
• Cloudflare, Inc.
Distributed Randomness Beacon
• 結城 浩(2015)
『暗号技術入門 第3版』SBクリエイティブ株式会社
• 荻伸一朗(2017)
暗号技術入門12 乱数 | SpiriteK Blog
• Xiang-YangLi(2004)
http://webcache.googleusercontent.com/search?q=cache:cGB5bhO-2RAJ:www.unf.edu/~wkloster/crypto/CryptographyNet
Security-2004.ppt+&cd=1&hl=ja&ct=clnk&gl=jp(キャッシュしか存在せず)