Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
暗号技術を支える素数
Search
Shohei Yamasaki
September 07, 2015
Programming
2
3.1k
暗号技術を支える素数
2015/9/4 プログラマのための数学勉強会で発表したスライドです。
Shohei Yamasaki
September 07, 2015
Tweet
Share
More Decks by Shohei Yamasaki
See All by Shohei Yamasaki
AMPで爆速WEBサイト
shoyan
0
190
ハフマン木の作成
shoyan
0
14k
PHPコーディング規約とサポートするツール
shoyan
2
3.5k
コンピュータと数学
shoyan
0
1.7k
Other Decks in Programming
See All in Programming
組み合わせ爆発にのまれない - 責務分割 x テスト
halhorn
1
150
React Native New Architecture 移行実践報告
taminif
1
150
実はマルチモーダルだった。ブラウザの組み込みAI🧠でWebの未来を感じてみよう #jsfes #gemini
n0bisuke2
2
1k
TUIライブラリつくってみた / i-just-make-TUI-library
kazto
1
380
DevFest Android in Korea 2025 - 개발자 커뮤니티를 통해 얻는 가치
wisemuji
0
140
S3 VectorsとStrands Agentsを利用したAgentic RAGシステムの構築
tosuri13
6
310
「コードは上から下へ読むのが一番」と思った時に、思い出してほしい話
panda728
PRO
38
26k
これならできる!個人開発のすゝめ
tinykitten
PRO
0
100
手が足りない!兼業データエンジニアに必要だったアーキテクチャと立ち回り
zinkosuke
0
690
認証・認可の基本を学ぼう前編
kouyuume
0
200
AIコーディングエージェント(skywork)
kondai24
0
170
FluorTracer / RayTracingCamp11
kugimasa
0
230
Featured
See All Featured
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
61k
Embracing the Ebb and Flow
colly
88
4.9k
Why You Should Never Use an ORM
jnunemaker
PRO
61
9.6k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Writing Fast Ruby
sferik
630
62k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
7.9k
Java REST API Framework Comparison - PWX 2021
mraible
34
9k
Agile that works and the tools we love
rasmusluckow
331
21k
Learning to Love Humans: Emotional Interface Design
aarron
274
41k
Optimizing for Happiness
mojombo
379
70k
Code Review Best Practice
trishagee
74
19k
Principles of Awesome APIs and How to Build Them.
keavy
127
17k
Transcript
҉߸ٕज़Λࢧ͑Δૉ ϓϩάϥϚͷͨΊͷֶษڧձ@Ԭ 2015.09.04 @shoyan
4IPIFJ:BNBTBLJ !TIPZBO • ϓϩάϥϚʔ • 2ࣇͷ • GMOϖύϘ
࣍ • ҉߸ٕज़ʹ͍ͭͯ • ެ։伴҉߸ʹ͍ͭͯ • RSA҉߸ͷ҆શੑʹ͍ͭͯ • ҉߸ֶతͳʹ͍ͭͯ •
·ͱΊ
҉߸ٕज़ʹ͍ͭͯ
Πϯλʔωοτͷ • ใͷ౪ௌ • ใͷվ͟Μ • ͳΓ͢·͠
͜ΕΒͷΛղܾ͢ΔͨΊʹ ҉߸ٕज़͕ΘΕ͍ͯΔ
҉߸ٕज़ͭʹྨ͞ΕΔ
ใΛಡΉ͜ͱ͕Ͱ͖ͳ͍Α͏ʹ ͢ΔͨΊͷ҉߸ٕज़ • ౪ௌऀ͕ใΛݟͯɺ༰͕Θ͔Βͳ͍Α ͏ʹ͢Δ • SSL / TLS •
SSH • IPsec
ใ͕վ͟Μ͞Ε͍ͯͳ͍͜ͱΛ֬ ೝ͢ΔͨΊͷ҉߸ٕज़ • ૹΒΕ͖ͯͨใ͕ਖ਼͍͠ใ͔Ͳ͏͔Λ νΣοΫ͢ΔʹɺϋογϡνΣοΫΛ༻͍ Δ • SHA-1 • MD5
ใΛૹͬͨ૬खΛ֬ೝ͢ΔͨΊͷ ҉߸ٕज़ • ใΛૹ৴ͨ͠૬ख͕ਖ਼͍͠૬ख͔Ͳ͏͔Λ νΣοΫ͢Δɻిࢠॺ໊ͱݺΕΔํ๏͕͋ Δ • ೝূہʹిࢠূ໌ॻΛൃߦͯ͠Β͏ • https௨৴Ͱར༻͞Ε͍ͯΔ
ެ։ݤ҉߸ʹ͍ͭͯ
ެ։ݤ҉߸ • ΠϯλʔωοτͰ࠷ΘΕ͍ͯΔ҉߸ٕज़ • ใͷ౪ௌΛ͙҉߸ٕज़ిࢠূ໌ॻͷੜ ʹΘΕ͍ͯΔ
ެ։ݤ҉߸ • ެ։伴Λͬͯ҉߸Խ͢Δ • ൿີ伴Λͬͯ෮߸Խ͢Δ • ड৴ऀ͋Β͔͡Ίެ։伴Λૹ৴ऀʹ͓ͯ͠ ͘ • ެ։伴Ͱ෮߸ԽͰ͖ͳ͍ͷͰ౪ௌ͞Εͯ
ͳ͍
ެ։ݤ҉߸ํࣜͰ࠷ීٴ͍ͯ͠Δ 34" • ϚανϡʔηοπՊେֶͷRon Rivestɺ Adi ShamirɺLeonard Adlemanͷ3ਓ͕։ൃ • 3ਓͷ։ൃऀͷ಄จࣈ͔ΒRSA҉߸ํࣜͱ໋໊
͞Εͨ
ެ։ݤͱൿີݤͷੜ • ൿີ伴ͱެ։伴ϖΞʹͳ͍ͬͯΔඞཁ͕͋ Γɺ͜ͷ2ͭͷΩʔͷ͜ͱΛΩʔϖΞͱݺͿ
ΩʔϖΞͷੜखॱ PͱQΛͬͯNΛܭࢉ͢Δ PͱQΛͬͯLΛܭࢉ͢Δ LΛͬͯEΛܭࢉ͢Δ EͱLΛͬͯDΛܭࢉ͢Δ
1ͱ2Λͬͯ/Λܭࢉ͢Δ • ʮPʯͱʮQʯͷ2ͭͷૉΛ४උ͢Δ • ͕খ͗͢͞Δͱղಡ͕༰қʹͳͬͯ͠·͏ • ͕େ͖͗͢Δͱॲཧʹ͕͔͔࣌ؒΔ • 1024 -
4096Ϗοτ(10ਐͰ300-1000ܻఔ) ͕ਪ͞Ε͍ͯΔ
ૉͱ • ૉͱ1ͱࣗࣗҎ֎ʹਖ਼ͷΛ࣋ͨͳ ͍ࣗવͰɺ1Ͱͳ͍ͷ͜ͱ ҎԼͷૉ • 2, 3, 5, 7,
11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97
Τϥτεςωεͷ;Δ͍ • ࢦఆ͞ΕͨxҎԼͷશͯͷૉΛൃݟ͢Δ ΞϧΰϦζϜ • ݹΪϦγϟͷՊֶऀɺΤϥτεςωε͕ ߟҊͨ͠ • ͍·ݱͰΘΕ͍ͯΔํ๏
/ /VNCFS ͷܭࢉࣜ N = P ✖ Q N =
13 ✖ 17 N= 221 • ʮPʯΛʮ13ʯɺʮQʯΛʮ17ʯͱͯ͠ʮNʯ Λܭࢉ͢Δ
1ͱ2Λͬͯ- -$.-FBTU $PNNPO.VMUJQMF Λܭࢉ͢Δ L = lcm(P - 1, Q
- 1) • ʮP - 1ʯͱʮQ - 1ʯͷ࠷খެഒΛٻΊΔ • LͷܭࢉͰɺNͷܭࢉͰͬͨPͱQΛ͏
-ͷܭࢉ݁Ռ L = lcm(13 - 1, 17 - 1) L
= 48 • 12(13 - 1) ͱ16(17 - 1) ͷ࠷খެഒʮ48ʯ
-Λͬͯ& &ODSZQUJPO Λ ܭࢉ͢Δ Eͷܭࢉࣜ 1 < E < L
god(E, L) = 1 • ʮEʯʮ1ʯΑΓେ͖͘ɺLΑΓখ͍͞ • ʮEʯͱʮLʯͷ࠷େެ͕1ͱͳΔ(ޓ͍ʹૉ)
&ͷܭࢉ݁Ռ • 48ͱૉʹͳΔʮEʯΛٻΊΔ • ʮEʯͷෳಘΒΕΔͷͰɺ͜ͷத͔ΒૉΛ1ͭ બ͢Δ god(E, 48) = 1
E = 5, 7, 11, 13, 17, 19, 23, 25, 29, 31, 35, 37, 41, 43, 47
&ͱ-Λͬͯ% %FDSZQUJPO Λ ܭࢉ͢Δ • ʮEʯͱʮDʯΛֻ͚߹Θͤɺʮmod LʯΛ ܭࢉ͕ͨ͠1ʹͳΔΑ͏ͳʮDʯͷΛٻΊ Δ E
✖ D mod L = 1 Dͷܭࢉࣜ
%ͷܭࢉ݁Ռ • ʮEʯͷΛʮ5ʯɺʮLʯͷΛʮ48ʯͱ͠ ͯܭࢉͨ͠߹ 5 ✖ D mod 48 =
1 D = 29
࡞͞ΕͨΩʔϖΞ ެ։伴ʮEʯͱʮNʯ E = 5 N = 221 ൿີ伴ʮDʯͱʮNʯ D
= 29 N = 221
34"ͷ҉߸Խॲཧ • ฏจΛʮEʯ͠ɺͦͷ݁ՌͷΛʮNʯͰׂ Γɺ༨ΓͷΛٻΊΔɻ • ʮEʯͱʮNʯ͕ެ։伴 ҉߸จ = ฏจ mod
N E
҉߸Խॲཧͷܭࢉ • ฏจͷ͕ʮ12ʯɺʮEʯͷ͕ʮ5ʯɺ ʮNʯͷ͕ʮ221ʯͷ߹ ҉߸จ = 12 mod 221 ҉߸จ
= 207 5
34"ͷ෮߸Խॲཧ • ҉߸จʮDʯͯ͠ɺͦͷ݁ՌͷΛʮNʯͰ ׂΓɺ༨ΓͷΛٻΊΔɻ • ʮDʯͱʮNʯ͕ൿີ伴 ฏจ = ҉߸จ mod
N D
෮߸Խॲཧͷܭࢉ • ҉߸จͷ͕ʮ207ʯɺʮDʯͷ͕ʮ29ʯɺ ʮNʯͷ͕ʮ221ʯͷ߹ ฏจ = 207 mod 221 ҉߸จ
= 12 29
34"҉߸ͷ҆શੑʹ͍ͭͯ
҉߸จΛղಡ͢Δͧʂ • ҉߸จʮDʯͱʮNʯ͕Θ͔Ε෮߸Ͱ͖Δ • ʮNʯͱʮEʯ౪ௌ͢Δ͜ͱ͕Ͱ͖Δ • N = P ✖
Q • ΩʔϖΞ ʮPʯͱʮ Qʯ͔Β࡞͞Ε͍ͯ Δ
ʮ/ʯΛʮ1ʯͱʮ2ʯʹղ ͢Ε҉߸ΛղಡͰ͖Δʂ
ʮ/ʯΛʮ1ʯͱʮ2ʯʹղ ʮૉҼղʯ
࠷؆୯ͳૉҼղ 6 = 2 ✖ 3 • ָউʂ
ΛૉҼղ 221 = 13 ✖ 17 • ͜Ε͘Β͍ͳΒͰ͖Δʂ
70000000013390000000171
͜ͷ22ܻͷେ͖ͳ 100000000019 ✖ 700000000009 ͱ͍͏2ͭͷૉͷੵʹղͰ͖Δ
ࢴͱԖච͕͋ΕೋΛֻ͚ࢉͯ͠ɺͱͷ ʹ͢͜ͱ༰қʹߦ͑Δ ͚ΕͲɺେ͖ͳΛૉҼղ͢Δͷ ͍͠
ཱ͔ͪͩΔૉҼղͷน
ͷܭࢉͱ҉߸ • ૉҼղͷ͠͞ܭࢉػΛ༻͍ͯҰ ʹղܾ͠ͳ͍ • ҰඵؒʹԿઍԯճͷܭࢉ͕Ͱ͖ΔܭࢉػΛ ࣋ͬͯͯ͠·ͬͨ͘ࣃ͕ͨͨͳ͍
ޮతͳૉҼղͷํ๏ • ۃΊͯߴͳֶͷཧΛ༻͍ͯૉҼղ ΛٻΊΔํ๏͕ੈքதͷֶऀͷؒͰݚ ڀ͞Ε͍ͯΔ͕… • ͦ͏ͨ͠ཧΛ༻͍ͯܭࢉػͷϓϩάϥϜΛ ࡞ͬͯɺ͍͠Ͱ͋Δ͜ͱʹมΘΓ ͳ͍
34"҉߸ͷ҆શੑ • ૉҼղ͕ࠔͳ͜ͱʹΑΓ୲อ͞Ε͍ͯΔ • ͨ͘͞Μͷܭࢉػͱ్ํͳ͍݄Λ͔͚ͯ ͬͱD͕ٻ·ͬͨͱͯͦ͠ͷࠒʹ౪ௌ͠ Α͏ͱ͍ͯͨ͠ใͷՁ͕ͳ͘ͳ͍ͬͯΔ • ౪ௌ͠Α͏ͱ͍ͯ͠Δใʹରͯ࣌ؒ͠ͱίε τ͕ݟ߹Θͳ͍
҉߸ֶతͳʹ͍ͭͯ
େ͖ͳ • ެ։伴҉߸Ͱͱͯେ͖ͳΛ͏ • RSA҉߸Ͱ1000Ϗοτఔ • 10ਐʹ͢Δͱ300ܻҎ্ͷࣈ
ఱจֶతͳ • ཧֶऀͷEddingtonʢΤσΟϯτϯʣɺશ Ӊͷཅࢠͷਖ਼֬ͳ136✖2 = 1.575 ✖ 10 (Eddingtonఆ)ͩͱ͍ͯ͠Δ •
ຊޠͰɺҰ൪େ͖͍ͷҐ͕ແྔେ (10 ) ͳͷͰ͜ͷΛಡΈ্͛Δ୯Ґଘࡏ ͠ͳ͍ 256 79 68
ਖ߷هʢ͡Μ͜͏͖ʣʹΑΔͷ ͑ํ
҉߸ֶతͳ • RSA҉߸Ͱ1000Ϗοτఔ • 1000Ϗοτ1.80 ✖ 10 • ্͑͛Δ͜ͱͰ͖ͳ͍͠ɺ૾͢ΒͰ͖ ͳ͍
308
·ͱΊ
·ͱΊ • ҉߸ٕज़େ͖͘3ͭʹΘ͚ΒΕΔ • ใΛಡΉ͜ͱ͕Ͱ͖ͳ͍Α͏ʹ͢Δ • ใͷվ͟ΜΛνΣοΫ͢Δ • ใΛૹͬͨ૬खΛ֬ೝ͢ΔͨΊͷ҉߸ٕज़
·ͱΊ • ެ։伴҉߸ • ެ։伴ͱൿີ伴ͷ࡞ํ๏ • ҉߸Խͱ෮߸Խʹ͍ͭͯ
·ͱΊ • RSA҉߸ͷ҆શੑʹ͍ͭͯ • ૉҼղ͕ࠔͳ͜ͱʹΑͬͯ୲อ͞Εͯ ͍Δ • ҉߸ֶతͳ్ํͳ͘େ͖͍
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠