Upgrade to Pro — share decks privately, control downloads, hide ads and more …

乱数

 乱数

raiki tanaka

January 22, 2024
Tweet

More Decks by raiki tanaka

Other Decks in Technology

Transcript

  1. Strictly Confiden/al Copyright©株式会社Acompany All rights reserved. ⽬次 • 乱数とは •

    乱数⽣成器 • 疑似乱数⽣成器 • 疑似乱数⽣成器の例 • 暗号論的疑似乱数⽣成器 • 暗号論的疑似乱数⽣成器の例 • 乱数にまつわるお話
  2. Strictly Confiden/al Copyright©株式会社Acompany All rights reserved. 乱数とは • ランダムな数(列) •

    乱数が持つ性質 (下に⾏くほど厳しい制約) • 弱:無作為性 (独立な一様分布) • 強:予測不可能性(過去の数列から未来が予測されない) • 真:再現不可能性(丸暗記以外に再現できない) 引用元: 結城 浩. 『暗号技術入門 第3版』. SBクリエイティブ株式会社. 2015年, 第12章乱数
  3. Strictly Confiden/al Copyright©株式会社Acompany All rights reserved. 乱数とは • 様々な⽤途で重要な役割を果たしている •

    シミュレーション, サンプリング, 数学的分析, プログラムの検証, 意思決定, 暗号化, アート, 娯楽... 我々人類は乱数なしには生きていけない
  4. Strictly Confiden/al Copyright©株式会社Acompany All rights reserved. 乱数⽣成器 • 真の乱数を⽣成するもの •

    サイコロ・くじ引き︓ ⼈⼒で遅い, 物理的に偏りが⽣じやすい • 乱数表︓パターンが少ない, 膨⼤な量を記録しておくのは難しい 速さ・故障・安全性の観点でリスクがある 物理現象から⾃動的に乱数を⽣成したい
  5. Strictly Confiden/al 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
  6. Strictly Confiden/al Copyright©株式会社Acompany All rights reserved. • シード(初期値x_0)と漸化式(x_{n+1} = f(x_n))によって計算

    • 高速に生成可能 • 必ず繰り返し(周期)が発生する • シードのみ外部で決める必要がある • 手入力 • 真の乱数生成器 • できるだけ⻑い周期の数列を作りたい • 核シミュレーションでは何兆個もの 乱数が必要 疑似乱数⽣成器 引用元: 結城 浩(2015)『暗号技術入門 第3版』SBクリエイティブ株式会社
  7. Strictly Confiden/al 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 • …
  8. Strictly Confiden/al 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
  9. Strictly Confiden/al Copyright©株式会社Acompany All rights reserved. 疑似乱数⽣成器の例 • ⾮常に⻑周期で⾼い無作為性を持つ疑似乱数⽣成器が台頭 •

    キャリー付き乗算(Marsaglia, 1991) • 周期は2^260〜2000000 • メルセンヌ・ツイスタ(松本-⻄村, 1998) • 周期は2^19937 − 1 • 出力列は623次元空間内で均等分布(高い無作為性)
  10. Strictly Confiden/al 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
  11. Strictly Confiden/al Copyright©株式会社Acompany All rights reserved. 暗号論的疑似乱数⽣成器の例 引用元: 結城 浩(2015)『暗号技術入門

    第3版』SBクリエイティブ株式会社 一方向ハッシュ関数を使った疑似乱数生成器 暗号を使った疑似乱数生成器
  12. Strictly Confiden/al Copyright©株式会社Acompany All rights reserved. 乱数にまつわるお話 • ポケモンの乱数調整 •

    Xbox360向けゲーム「カルドセプトサーガ」の悲劇 • League of Entropy︓分散型ランダムビーコン
  13. Strictly Confiden/al Copyright©株式会社Acompany All rights reserved. • 第五世代(BW)では疑似乱数⽣成器にMT(メルセンヌ・ツイスタ)を 使っている •

    初期シードをDSのMACアドレスと本体時刻, 経過時間などの内部値から決定 • DSの時刻を調整し, 既知の情報から乱数を再現可能 • 望みの個体値を持つモンスターの出現を制御できる ※第五世代に限らずほとんどの世代で乱数調整が可能 ポケモンの乱数調整
  14. Strictly Confiden/al Copyright©株式会社Acompany All rights reserved. • Xbox360向けゲーム「カルドセプトサーガ」に 次のダイス⽬が偶数か奇数か推測できるという致命的バグが発覚 →

    炎上して店頭在庫回収へ • ダイスの乱数に線形合同法を使⽤ • 下位ビットが0, 1の繰り返しになる パラメータを踏み抜いてしまう Xbox360向けゲーム「カルドセプトサーガ」の悲劇 引用元: h\ps://www.famitsu.com/game/news/2006/12/14/103,1166086939,64495,0,0.html (c)2006 OmiyaSo`(JAMSWORKS) (c)2006 NBGI ※"Culdcept","カルドセプト"は有限会社大宮ソフトの登録商標です。
  15. Strictly Confiden/al 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︓分散型ランダムビーコン 引用元: h\ps://blog.cloudflare.com/ja-jp/league-of-entropy-ja-jp/, h\ps://blog.cloudflare.com/lavarand-in-produc/on-the-ni\y-gri\y-technical-details/
  16. Strictly Confiden/al 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/CryptographyNetSecurity- 2004.ppt+&cd=1&hl=ja&ct=clnk&gl=jp (キャッシュしか存在せず)