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

乱数

Sponsored · SiteGround - Reliable hosting with speed, security, and support you can count on.

 乱数

Avatar for raiki tanaka

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 (キャッシュしか存在せず)