Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
乱数
Search
raiki tanaka
January 22, 2024
Technology
120
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
乱数
raiki tanaka
January 22, 2024
More Decks by raiki tanaka
See All by raiki tanaka
プライバシーテックで切り開く未来のデータ活用への挑戦
raikitanaka
0
310
DXD2024_プライバシーテックで切り開く未来のデータ活用への挑戦
raikitanaka
0
200
自責思考
raikitanaka
0
2.2k
Other Decks in Technology
See All in Technology
ストレスなくAIと付き合いたい!こんなときどうしてる?
namiki64
3
490
Claude の新機能を、 出た日に触って社内に届けるまで
rfdnxbro
1
170
Getting Started with Google Antigravity
glaforge
0
300
Kiro Crewをはじめよう
kizawa2020
1
160
JAWS-UGグッズ職人仕事の流儀
kentapapa
0
100
Browser Spec: Testing Hotwire with Ruby
takahashim
1
120
エンタメ企業のM&Aを支えるデータ基盤 ― 統合から店舗のリアルタイム分析まで / Data Engineering Summit 2026
genda
0
170
⾮構造化データを価値に変える AI エージェント基盤とその組織
ivry_presentationmaterials
0
190
Refining Active Record
shugo
0
150
Tofu-Controller lightning talk @ Containerday 2026
gionn
0
100
Railsで挑む大量データ永続化 〜600億件を永続化するための設計とボトルネックとの戦い〜
occhi
1
580
パスキーの自動テストはどこまでいけるのか
teamlab
PRO
0
200
Featured
See All Featured
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
5
820
Ruling the World: When Life Gets Gamed
codingconduct
0
400
Utilizing Notion as your number one productivity tool
mfonobong
4
620
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
280
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.4k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
2
2.2k
The Cost Of JavaScript in 2023
addyosmani
55
10k
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
990
Java REST API Framework Comparison - PWX 2021
mraible
34
9.8k
Designing Powerful Visuals for Engaging Learning
tmiket
1
610
The Mindset for Success: Future Career Progression
greggifford
PRO
0
540
RailsConf 2023
tenderlove
30
1.6k
Transcript
乱数 2021/11/07 田中
Strictly Confiden/al Copyright©株式会社Acompany All rights reserved. ⽬次 • 乱数とは •
乱数⽣成器 • 疑似乱数⽣成器 • 疑似乱数⽣成器の例 • 暗号論的疑似乱数⽣成器 • 暗号論的疑似乱数⽣成器の例 • 乱数にまつわるお話
乱数とは︖
Strictly Confiden/al Copyright©株式会社Acompany All rights reserved. 乱数とは • ランダムな数(列) •
乱数が持つ性質 (下に⾏くほど厳しい制約) • 弱:無作為性 (独立な一様分布) • 強:予測不可能性(過去の数列から未来が予測されない) • 真:再現不可能性(丸暗記以外に再現できない) 引用元: 結城 浩. 『暗号技術入門 第3版』. SBクリエイティブ株式会社. 2015年, 第12章乱数
Strictly Confiden/al Copyright©株式会社Acompany All rights reserved. 乱数とは • 様々な⽤途で重要な役割を果たしている •
シミュレーション, サンプリング, 数学的分析, プログラムの検証, 意思決定, 暗号化, アート, 娯楽... 我々人類は乱数なしには生きていけない
Strictly Confiden/al Copyright©株式会社Acompany All rights reserved. 乱数⽣成器 • 真の乱数を⽣成するもの •
サイコロ・くじ引き︓ ⼈⼒で遅い, 物理的に偏りが⽣じやすい • 乱数表︓パターンが少ない, 膨⼤な量を記録しておくのは難しい 速さ・故障・安全性の観点でリスクがある 物理現象から⾃動的に乱数を⽣成したい
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
💻計算機で演算によって 乱数を作りたい
計算機は決定論的なので 必ず同じ数列を出⼒ = 真の乱数は作れない
じゃあ疑似乱数 (乱数っぽい数) を作ろう
Strictly Confiden/al Copyright©株式会社Acompany All rights reserved. • シード(初期値x_0)と漸化式(x_{n+1} = f(x_n))によって計算
• 高速に生成可能 • 必ず繰り返し(周期)が発生する • シードのみ外部で決める必要がある • 手入力 • 真の乱数生成器 • できるだけ⻑い周期の数列を作りたい • 核シミュレーションでは何兆個もの 乱数が必要 疑似乱数⽣成器 引用元: 結城 浩(2015)『暗号技術入門 第3版』SBクリエイティブ株式会社
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 • …
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
Strictly Confiden/al Copyright©株式会社Acompany All rights reserved. 疑似乱数⽣成器の例 • ⾮常に⻑周期で⾼い無作為性を持つ疑似乱数⽣成器が台頭 •
キャリー付き乗算(Marsaglia, 1991) • 周期は2^260〜2000000 • メルセンヌ・ツイスタ(松本-⻄村, 1998) • 周期は2^19937 − 1 • 出力列は623次元空間内で均等分布(高い無作為性)
無作為性は🙆 予測可能性は︖
疑似乱数⽣成器は 過去の数列から 多項式時間で出⼒を 予測可能
つまり 予測不可能性を持たない 弱い疑似乱数
予測不可能性をもつ 強い疑似乱数を 作るには︖
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
Strictly Confiden/al Copyright©株式会社Acompany All rights reserved. 暗号論的疑似乱数⽣成器の例 引用元: 結城 浩(2015)『暗号技術入門
第3版』SBクリエイティブ株式会社 一方向ハッシュ関数を使った疑似乱数生成器 暗号を使った疑似乱数生成器
引用元: 結城 浩(2015)『暗号技術入門 第3版』SBクリエイティブ株式会社
Strictly Confiden/al Copyright©株式会社Acompany All rights reserved. 乱数にまつわるお話 • ポケモンの乱数調整 •
Xbox360向けゲーム「カルドセプトサーガ」の悲劇 • League of Entropy︓分散型ランダムビーコン
Strictly Confiden/al Copyright©株式会社Acompany All rights reserved. • 第五世代(BW)では疑似乱数⽣成器にMT(メルセンヌ・ツイスタ)を 使っている •
初期シードをDSのMACアドレスと本体時刻, 経過時間などの内部値から決定 • DSの時刻を調整し, 既知の情報から乱数を再現可能 • 望みの個体値を持つモンスターの出現を制御できる ※第五世代に限らずほとんどの世代で乱数調整が可能 ポケモンの乱数調整
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","カルドセプト"は有限会社大宮ソフトの登録商標です。
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/
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 (キャッシュしか存在せず)