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
torikago - Ruby::Boxで照らすモジュラモノリスの実行境界
se4weed
1
310
生成AIで帳票OCRが「簡単に」作れる時代になった?
kon_shou
0
250
What's New in Android 2026
veronikapj
0
240
変わらないものが、変わるものを決める — 意図駆動開発 × イベントソーシング × イミュータブル | What Doesn't Change Decides What Can — IDD × Event Sourcing × Immutability
tomohisa
0
990
AIエージェントで 変わるAndroid開発環境
takahirom
2
760
今さら聞けない .NET CLI
htkym
0
170
ビデオ通話が繋がる0.2秒で何が起きているのか
supurazako
2
160
使用 Meilisearch 建立新聞搜尋工具
johnroyer
0
210
Claude Team Plan導入・ガイド
tk3fftk
0
250
ルールを書いて終わらせないハーネスエンジニアリング
yug1224
4
1.8k
これって Effect でできたのでは? / TSKaigi Mashup Kansai #2
susisu
0
140
アルゴリズムは何を圧縮しているのか ─ Haskell から育った「圧縮代数」というメンタルモデル
naoya
16
3.7k
Featured
See All Featured
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
My Coaching Mixtape
mlcsv
0
180
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
230
Designing Powerful Visuals for Engaging Learning
tmiket
1
470
KATA
mclloyd
PRO
35
15k
Writing Fast Ruby
sferik
630
63k
The Spectacular Lies of Maps
axbom
PRO
1
880
Building AI with AI
inesmontani
PRO
1
1.1k
The Art of Programming - Codeland 2020
erikaheidi
57
14k
Into the Great Unknown - MozCon
thekraken
41
2.6k
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
450
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.1k
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