Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ハードウェア乱数を用いた謝辞代表者の決定
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
880
ネットワーク性能調査ちょっとやってみる
khwarizmi
0
280
klab インターン成果物発表
khwarizmi
0
370
Z4「高速なFW/IDSの実装」
khwarizmi
0
210
HIGHSPEED PACKET IO
khwarizmi
0
140
Other Decks in Programming
See All in Programming
SLOをサービス品質の共通言語にするために 取り組んできたこと
wakana0222
0
410
分散システム、なんですぐ死んでしまうん?耐障害性を高めたいあなたのためのレジリエンスパターン入門
mshibuya
7
4.9k
エンジニアと一緒にテストコードの設計と実装を改善した話
mototakatsu
0
250
えっ!!コードを読まずに開発を!?
hananouchi
0
130
エンジニア向け会社紹介/Findy Company Profile
findyinc
6
360k
その問い、本当に正しいですか?AI時代のエンジニアに必要な哲学と認知科学 / ai-philosophy-cognitive-science
minodriven
14
6.7k
LaravelLive Japan の裏方のすべて — 第188回 PHP勉強会@東京 (2026-06-24)
suguruooki
2
150
20260623_Loop Engineeringで自分の分身の問い合わせBotを作る
ryugen04
0
180
Vue × Nuxt × Oxc どこまで使える?実運用の現在地
andpad
0
360
AI がコードを書く時代における新卒エンジニアの仕事風景 (2026) / New Graduate Engineers in the Era of AI Coding (2026)
sushichan044
0
200
Mujeres en SEO Summit 2026 - Greatest Disaster Hits en Web Performance
guaca
0
240
【やさしく解説 設計編 #0】DDDのコード、読めるのに分からない人へ
panda728
PRO
2
240
Featured
See All Featured
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6k
Technical Leadership for Architectural Decision Making
baasie
3
430
A Modern Web Designer's Workflow
chriscoyier
698
190k
The Pragmatic Product Professional
lauravandoore
37
7.4k
How STYLIGHT went responsive
nonsquared
100
6.2k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
10k
Un-Boring Meetings
codingconduct
0
330
Bootstrapping a Software Product
garrettdimon
PRO
307
120k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
2.9k
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
340
Building AI with AI
inesmontani
PRO
1
1.1k
Paper Plane
katiecoart
PRO
1
52k
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