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
890
ネットワーク性能調査ちょっとやってみる
khwarizmi
0
290
klab インターン成果物発表
khwarizmi
0
370
Z4「高速なFW/IDSの実装」
khwarizmi
0
210
HIGHSPEED PACKET IO
khwarizmi
0
140
Other Decks in Programming
See All in Programming
バグを直したら useEffect が消えた
colorful12
3
830
まずはプロンプトガイドを読もう、話はそれからだ
kiakiraki
1
250
AI時代に学ぶ 好きなルール 嫌いなルール Linter編
shorty5121
0
810
【DroidKaigi 2026】「アクセシビリティを利用するとき、 アクセシビリティもまたこちらを利用している」 〜マルウェアによる攻撃と防衛について〜
halunoyo
0
330
typoなんかねぇよ
raspython3
0
660
業務時間外もAIに働いてもらう話
colorful12
3
9.9k
異なる設計思想のフレームワークを経験して得た学び
amekuhideki
2
1.5k
Webエンジニアなのにブラウザの仕組みがわからないので、Pythonで自作してみた
tatsuki12
4
1.7k
[DroidKaigi 26] How We Moved from Android Studio to Slack
thisaay
0
200
Deep dive into the select statement (GopherCon UK)
jespino
0
170
AIの中の人になってみる
htkym
0
160
Flow は今どうなっているか
mizdra
PRO
0
890
Featured
See All Featured
Designing for Timeless Needs
cassininazir
1
470
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.4k
Typedesign – Prime Four
hannesfritz
42
3.2k
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
970
Scaling GitHub
holman
464
140k
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
490
Site-Speed That Sticks
csswizardry
13
1.5k
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
440
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
680
Documentation Writing (for coders)
carmenintech
77
5.5k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
The #1 spot is gone: here's how to win anyway
tamaranovitovic
3
1.2k
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