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
Honoでのサプライチェーン侵害対策 〜 3つのライブラリに学ぶ
yusukebe
7
1.8k
地域 SRE コミュニティ最前線 - ホンマでっかSRE勉強会
tk3fftk
0
180
Hatena Engineer Seminar #37「言語モデルの活用に関する研究」
slashnephy
0
500
Skillsは効率化、Agentsは"自分の拡張"——Builder時代のエージェント編成(CC Night 2026)
wemra
1
200
Hunting Vulnerabilities in Symfony with LLMs
vinceamstoutz
0
570
20260623_Loop Engineeringで自分の分身の問い合わせBotを作る
ryugen04
0
180
継続モナドとリアクティブプログラミング
yukikurage
3
440
LaravelLive Japan の裏方のすべて — 第188回 PHP勉強会@東京 (2026-06-24)
suguruooki
2
150
【やさしく解説 設計編・中級 #1】一つの車に、運転手は一人 ~ある倉庫システムの事例から~
panda728
PRO
0
130
Observability in Practice:Grafana 與 Edge Device SRE 的那些事
blueswen
0
190
ランチタイムLT会3周年!ランチタイムLT会を3年間続けられたお話
y0hgi
1
130
AIキャラアプリkaiwaの低遅延音声通話基盤をどう作ったか - AWS Gravitonで支える低遅延・低コストAI Agent基盤
mogamit
0
160
Featured
See All Featured
Marketing to machines
jonoalderson
1
5.6k
A better future with KSS
kneath
240
18k
Automating Front-end Workflow
addyosmani
1370
210k
4 Signs Your Business is Dying
shpigford
187
22k
Google's AI Overviews - The New Search
badams
0
1.1k
Why Our Code Smells
bkeepers
PRO
340
58k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Music & Morning Musume
bryan
47
7.3k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
880
Optimising Largest Contentful Paint
csswizardry
37
3.8k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
460
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