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
khwarizmi
March 12, 2019
Programming
130
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
ハードウェア乱数を用いた謝辞代表者の決定
khwarizmi
March 12, 2019
More Decks by khwarizmi
See All by khwarizmi
IntelNIC 送受信を学ぶ
khwarizmi
3
1k
NICのデバドラ開発
khwarizmi
0
210
僕はDPDKをやっている人ではありません(XDP・netmap入門)
khwarizmi
1
910
ネットワーク性能調査ちょっとやってみる
khwarizmi
0
290
klab インターン成果物発表
khwarizmi
0
380
Z4「高速なFW/IDSの実装」
khwarizmi
0
220
HIGHSPEED PACKET IO
khwarizmi
0
140
Other Decks in Programming
See All in Programming
contenteditable と日本語入力に向き合う
colorful12
0
230
AI時代のIaC入門 〜なぜインフラをコードで管理したいのか?〜 / Introduction to IaC in the AI Era
akihisaikeda
5
1.2k
sbt 2.0: takeoff
eed3si9n
0
170
Jetpack Compose Mechanisms
skydoves
3
890
3回つくってわかった、 定期実行ジョブ基盤の本質情報
takai
4
3.4k
全ての永続トークンを、生まれる前に消し去りたい!
sylph01
2
1.5k
プロジェクトコードをキレイキレイしよう!暗黙的な参照を読み解く静的解析
ostk0069
0
160
見えないものを探る要求要件定義に必要な基本的思考 / invisible-requirement-thinking
minodriven
15
8.9k
パスワード再設定メールのURLについて知っておこう
uyuki234
0
200
FactoryBotをやめればRSpecは速くなるのか?
yuta_onishi_97
0
1.2k
私なりのハーネスエンジニアリング ~独自の言語処理系の開発を通して~
seosoft
0
120
dotNET_vulnclicker_intro.pdf
deka_morita
0
160
Featured
See All Featured
What the history of the web can teach us about the future of AI
inesmontani
PRO
2
760
Crafting Experiences
bethany
1
390
Ruling the World: When Life Gets Gamed
codingconduct
0
420
Everyday Curiosity
cassininazir
0
370
Ten Tips & Tricks for a 🌱 transition
stuffmc
1
270
Marketing to machines
jonoalderson
1
5.9k
Into the Great Unknown - MozCon
thekraken
41
2.8k
Why You Should Never Use an ORM
jnunemaker
PRO
61
10k
Practical Orchestrator
shlominoach
192
12k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
530
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.8k
Abbi's Birthday
coloredviolet
4
10k
Transcript
ハードウェア乱数を用いた 謝辞代表者の決定
自己紹介 - 河原颯太(かわはらそうた) @khwarizmi6514 - 法政大学応用情報工学科 学部4年 金井(ネットワークセキュリティ)研究室所属 - 小学5年から野球を初めて高校3年までやっていた.
- 春日部高校出身です! (これを言うといろんなところで先輩後輩が釣れることに最近 気が付いた) - パソコンとは無縁の生活だったが, 大学入学時, 気が付いたらパソコンをやらなけ ればいけなくなっていた. - 一緒に研究をしてくれる後輩募集中 (一人で研究をしていて寂しい)
最近やってること - NICのデバドラ開発 - NICのハードウェア機能活用による性能比較調査 - Linuxネットワークパフォーマンス調査 - XDPとnetmap *最近やりたいこと*
- FreeBSDで性能調査(ネットワークスタック参照したりしときながら触ったことがな い) - 自作キーボード(家でやったらニッパがざこくてまだ完成してない) - FPGA(購入してLEDチカチカまでしてそのままタンスの奥にいる) - EDM作りたみがある
経緯 やりたいわけないよねー 抽選して決めるかなー
経緯 そういえばこういうの参加した時 こういうLTがあったけどこれ使ってみよ
ここからは一部mipsparc氏のスライドを使っています
乱数 コンピュータや組み込みプロセッサで使われる乱数は、ふつうは疑似乱数 疑似乱数は、ランダムシード(種となる数値)から線形合同法やメルセンヌ・ツイスタなど のアルゴリズムで生成する たとえば、昔のゲーム機では起動してからの経過時間、プレイヤーの操作などをランダ ムシードとしていたので、乱数調整(*)ができた。 (*乱数調整: ランダムシードが同じであれば、まったく同じ乱数が出る。これを利用して、 ゲームで同じ挙動を再現したり、任意のパラメータを得ること)
真の乱数 自然界の物理現象などを利用してつくられた、まったく規則性がなく予測不可能な数列 熱雑音、核分裂などに基づく ただし、予測不可能であってもただちに乱数というわけではない。 偏りがなく一様分布でなければならない
最新のIntel/AMDの x86プロセッサには ハードウェア乱数発生器が搭載 されている
Intel® Digital Random Number Generator (DRNG) Software Implementation Guide
Nondeterministic Hardware Entropy Source "uses thermal noise within the silicon"
Intel® Digital Random Number Generator (DRNG) Software Implementation Guide
どちらも64bit長の出力を得られる Nondeterministic Hardware Entropy Source(ES)→ AES-CBC-MAC→ • AES-CTR → RDRAND
• RDSEED
Intel® 64 and IA-32 Architectures Software Developer’s Manual - Instruction
Set Reference
とりあえずRDSEED #include <stdint.h> void rdseed(uint64_t *rand) { asm volatile (
"rdseed %0" : "=A" (*rand) ); } これだけで乱数発生器にアク セスできる
末尾1ビットを表示 000100000001000001000000001000000100000000 000011000001001000111100011110000100000011 001100000010000011001001001000100100010011 001101000111000010010000001000110100011000 000000000010100010000000101100000000000000 001000000010100000001000001100011010000010
なんか 偏ってない?
乱数を検定しよう (FIPS140-2) 乱数らしさにはいくつかの側面がある (参考: M.Hiroi's Home Page http://www.geocities.jp/m_hiroi/light/pystat05.html ) •
等確率性 均一にばらけている • 無規則性 出現順序に規則性がない
等確率性 The Monobit Test 20000bitにつき1が 9725個~10275個の間 に収まる
等確率性 The Monobit Test 試しに4回試行した結果 1. 6054 2. 9933 3.
6551 4. 6434 20000bitにつき1が 9725個~10275個の間 に収まる
わかったこと 予測不可能なのでランダムシードとしては適しているが, そのまま乱数として使えるビットレベルの統計的な偏りのなさを 持っていない
RDRAND使ってみる 100011011110100001001010001001011100000011 100111010100000111000111000000001011111001 000101000000010000000100101101000000110101 000000110110001011000001010111111101110110 110001001000011000111000000101011011011111 010111000010100010110011101101011101000101 000001111101101000110100110010010001001001
等確率性 The Monobit Test 20000bitにつき1が 9725個~10275個の間 に収まる
等確率性 The Monobit Test 結果 1. 10087 2. 9973 3.
9985 4. 9960 20000bitにつき1が 9725個~10275個の間 に収まる
等確率性 The Poker Test 4bitごとに区切るとビット列は16パ ターンになる 5000回試行して、16パターンにそれ ぞれ何回入るかをカウントする 回数をf(i)として、Nを求める (注意:
5000を引くのは最後)
等確率性 The Poker Test 2.16 ~ 46.17に 収まればよい 1. 16.985600
2. 16.512000 3. 20.576000 4. 15.571200
無規則性 The Runs Test (参考:http://www.fdk.co.jp/cyber-j/pdf/HM-RAJ103.pdf) 連続で同じビットが出てくる回数を数える uint64_t rand; unsigned long
total[20000]; unsigned int same_count = 0; unsigned int now_same = 9; unsigned int same_count_result[6] = {0}; for (int i = 0; i < 20000; i++) { rdrand(&rand); total[i] = rand & 0b1; } for (int i = 0; i < 20000; i++) { if (total[i] == now_same) { same_count++; } else { now_same = total[i]; if (0 < same_count && same_count < 6) { same_count_result[same_count - 1]++; } else if (same_count > 5) { same_count_result[5]++; } same_count = 0; } } for (int i = 0; i < 6; i++) { printf("%d\n", same_count_result[i]); }
無規則性 The Runs Test
結論 RDSEEDはランダムシードとしては予測不可能性があるので優秀だが、そのまま乱数と して使ってはいけない。 RDRANDはそのままで十分に真の乱数である。 なお、SHA256などのハッシュ関数は十分な乱数らしさを備えているので、RDSEEDは ハッシュ関数をとおせば真の乱数として使える
とりあえず何も考えずにRDRANDを使えばいい
というわけで RDRANDを使って代表者抽選をします
None