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
勉強会 #6
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
titech.crypto
May 27, 2018
0
360
勉強会 #6
デジタル署名について
titech.crypto
May 27, 2018
Tweet
Share
More Decks by titech.crypto
See All by titech.crypto
Crypgeek 勉強会 #13
titechcrypto
0
300
Lightning network
titechcrypto
0
36
About Bitcoin and its cryptography
titechcrypto
0
100
第8回 CrypGeek勉強会
titechcrypto
0
70
勉強会_7ゼロ知識証明.pdf
titechcrypto
0
430
勉強会7.pdf
titechcrypto
0
310
勉強会 #6
titechcrypto
0
360
勉強会 #4
titechcrypto
0
320
勉強会 #4
titechcrypto
0
250
Featured
See All Featured
Making Projects Easy
brettharned
120
6.6k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
1.9k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
380
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
0
3.4k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
60
42k
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
110
Building the Perfect Custom Keyboard
takai
2
690
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
61
52k
The Cult of Friendly URLs
andyhume
79
6.8k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
1.8k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
Transcript
σδλϧॺ໊ 2 2018/5/25 ϒϩοΫνΣʔϯษڧձ #6 Seiko Netsu 1
͡Ίʹ ࠓճͷษڧձͰɺ͍͔ͭ͋͘Δσδλϧॺ໊ʹ͍͓ͭͯ͠͠·͢ɻ લͰ֤छσδλϧॺ໊ͷ؆୯ͳհɺޙͰRSAॺ໊ͱSchnorrॺ໊ͷ ΞϧΰϦζϜʹ͍ͭͯղઆ͠·͢ɻ·ͨSchnorrॺ໊ɺLamportॺ໊ͱϒϩο ΫνΣʔϯͱͷؔΘΓʹ͍ͭͯհ͠·͢ɻ ࢿྉͷ४උʹ͋ͨͬͯɺҎԼͷॻ੶ɾWebΛࢀߟʹ͍͖ͤͯͨͩ͞·ͨ͠ɻ ɾ҉߸ٕज़ͷͯ͢ʢIPUSIRON ஶʣ ɾ҉߸ٕज़ೖʢ݁ ߒ
ஶʣ ɾͼΓ͋ΔͷݚڀϊʔτʢSchnorrॺ໊ʣ ɾγϡϊΞॺ໊͕ϏοτίΠϯͷεέʔϥϏϦςΟʹ༩͑ΔӨڹ ɾྔࢠίϯϐϡʔλ࣌ʹ༗ޮͳϥϯϙʔτॺ໊ͲΜͳΈ͔ ʢޱ༔ل༤ ஶʣ 2
લɹ 1. ֤छσδλϧॺ໊ΞϧΰϦζϜͷհ ɾRSAॺ໊ ɾElGamalॺ໊ ɾSchnorrॺ໊ ɾDSAॺ໊ ɾECDSAॺ໊ʢପԁۂઢDSAʣ ɾLamportॺ໊ 2.
Schnorrॺ໊ͱϏοτίΠϯ 3. Lamportॺ໊ϒϩοΫνΣʔϯʹΘΕΔ͔ 3
ޙɹ 4. RSAॺ໊ͷΞϧΰϦζϜ 5. Schnorrॺ໊ͷΞϧΰϦζϜ 4
ɾRSAॺ໊ ɾDSAॺ໊ ɾECDSAॺ໊ʢପԁۂઢDSAʣ ɾSchnorrॺ໊ ɾElGamalॺ໊ ɾLamportॺ໊ දతͳσδλϧॺ໊ DSSʢDigital Signature Standardʣ:σδλϧॺ໊ඪ४
FIPS PUB 186-4 5
RSAॺ໊ Rivest, Shamir, AdlemanʹΑͬͯRSA҉߸ͱಉ࣌ʹఏ Ҋ͞Ε͍ͯͨσδλϧॺ໊ɻσδλϧॺ໊ͷΞΠσΟ ΞࣗମDiffiem, HellmanʹΑͬͯఏএ͞Ε͍͕ͯͨɺ ͦΕΛ࠷ॳʹ۩ମԽͨ͠ͷ͕RSAॺ໊ɻγϯϓϧͳσ δλϧॺ໊ɺ͋ΒΏΔ߈ܸʹରͯ͠੬ऑɻ ྺ࢙తͳܦҢΜΛΓ͍ͨํɺʮ҉߸ղಡʢ্ɾ
ԼʣʯΛͥͻɻ 6
ElGamalॺ໊ ɾ1984ʹElGamalʹΑͬͯఏҊ͞Εͨࢄର ʹجͮ͘σδλϧॺ໊ɻ ɾ߈ܸطϝοηʔδ߈ܸʹରͯ͠੬ऑͰ͋Γɺ ElGamalॺ໊͕ͦͷ··༻͞ΕΔ͜ͱͳ͍ɻ → վྑ൛Ͱ͋ΔDSAॺ໊͕DSSʢDigital Signature StandardʣͷҰͭͱͯ͠ීٴ ҉߸ٕज़ͷͯ͢
7.8ষ ࢀߟ(p.535) Taher Elgamal (1955 ʙ) 7
Schnorrॺ໊ ɾࢄରରΛར༻ͨ͠σδλϧॺ໊ɻ ɾSchnorrͷূ໌ϓϩτίϧ※1 + ϋογϡؔɹͰߏɻ ɾൃ໌ऀͷSchnorr͕ࣗऔಘͨ͠ಛڐʹΑΓ2008·Ͱ อޢ͞Ε͍ͯͨɻ ɾSchnorrॺ໊ɺͦͷଞͷॺ໊ํࣜʹൺͯॺ໊͕ίϯ ύΫτͰɺݱࡏΑΓॺ໊ݕূͷεϐʔυ͕͍ɻ →BitcoinͰͷԠ༻͕ظ
҉߸ٕज़ͷͯ͢ 7.9ষ ࢀߟ(p.547) Claus P. Schnorr (1943 ʙ) ※1: ҉߸ٕज़ͷͯ͢ 9.1.5ষ ࢀߟ(p.643 8
DSAॺ໊ ɾถࠃඪ४ٕज़ݚڀॴʢNISTʣʹΑΓఏҊ͞Εͨσδ λϧॺ໊ɻRSAॺ໊ɺECDSAॺ໊ͱฒΜͰɺDSS ʢDigital Signature StandardʣͷҰͭɻ ɾElGamalॺ໊ͷॺ໊αΠζ͕খ͘͞ͳΔΑ͏ʹɺ Schnorrॺ໊ͷٕ๏Λ༻͍ͯվྑͨ͠ํࣜɻ ҉߸ٕज़ͷͯ͢ 7.10ষ
ࢀߟ(p.554) 9
ECDSAॺ໊ʢପԁۂઢDSAॺ໊ʣ ɾପԁۂઢ҉߸ɿପԁۂઢͱݺΕΔۂઢΛ༻͍ͨ҉ ߸ɻ ɾDSAʹ͍ͭͯɺପԁۂઢ҉߸Λ༻͍ΔΑ͏ʹͨ͠ม छ͕ECDSAॺ໊ɻ ɾପԁۂઢ҉߸ɺRSAʹൺ͍ͯ伴Ͱಉͩ͡ ͚ͷڧ͞Λ࣋ͭɻ Ex. 224ʙ255Ϗοτͷ伴Λ࣋ͭପԁۂઢ҉߸ɺ 2048Ϗοτͷ伴Λ࣋ͭRSA҉߸ͱಉͷڧ͞ɻ
ɾৄࡉɺୈ5ճษڧձࢿྉʢࢁຊ܅୲ʣ E: y2 = ax3 + bx2 + cx + d a = 1, b = 0, c = -2, d = 4 10
Lamportॺ໊ɿྔࢠੑ͋Γʂ ɾྔࢠίϯϐϡʔλͷొͰɺRSAΛ͡Ίͱ͢Δ҉߸ٕज़͕ةݥʹࡽ͞ΕΔ ɹˠ ྔࢠੑΛ࣋ͬͨ҉߸ٕज़͕ඞཁ ɹˠ Lamportॺ໊େنͳϋογϡؔΛ༻͍ͨྔࢠੑΛ࣋ͬͨσδλϧॺ໊ ɹˠ ҰํϋογϡؔΛ256ରͷཚʢ512ݸͷཚʣʹରͯ͠༻ɻ ɾྔࢠίϯϐϡʔλͱ͍͑Ͳɺ૯ͨΓ߈ܸʹ͕͔͔࣌ؒΔɻ
ϝϦοτɿߴɺ҆શɺ؆қͳߏɺ σϝϦοτɿॺ໊αΠζʢେʣɺϫϯλΠϜʢ܁Γฦ͑͠ͳ͍ʣ ࢀߟɿhttps://diamond.jp/articles/-/143803 11
લɹ 1. ֤छσδλϧॺ໊ΞϧΰϦζϜͷհ ɾRSAॺ໊ ɾElGamalॺ໊ ɾSchnorrॺ໊ ɾDSAॺ໊ ɾECDSAॺ໊ʢପԁۂઢDSAʣ ɾLamportॺ໊ 2.
Schnorrॺ໊ͱϏοτίΠϯ 3. Lamportॺ໊ϒϩοΫνΣʔϯʹΘΕΔ͔ 12
Schnorrॺ໊ͱϏοτίΠϯ ɾϏοτίΠϯͰɺϒϩοΫʹه͞ΕΔtxσʔλΛͰ͖Δ͚ͩখ͘͞ ͠ɺଟ͘ͷtxΛҰͭͷϒϩοΫʹऩΊΑ͏ͱ͍ͯ͠ΔʢϒϩοΫαΠζҾ͖ ্͛ɺSegwit, Lightning Network…ʣɻ ɾECDSAॺ໊Λར༻ͯ͠࡞͞Εͨॺ໊σʔλϒϩοΫʹه͞ΕΔ σʔλͷҰͭɻͳΜͱ͔͜ΕΛখ͘͞ग़དྷͳ͍͔ʁ γϡϊΞॺ໊͕ϏοτίΠϯͷεέʔϥϏϦςΟʹ༩͑Δিܸ εέʔϥϏϦςΟ
Schnorrॺ໊ͷ׆༻ ɾSchnorrॺ໊ɺͦͷଞͷॺ໊ํࣜʹൺͯॺ໊͕ίϯύΫτ͔ͭॺ໊ݕ ূͷεϐʔυ͕͍ɻ ɾಛʹෳਓͷॺ໊Λඞཁͱ͢ΔϚϧνγάʹΑΔૹۚͷσʔλαΠζΛେ ෯ʹݮͰ͖Δɻ 13
ɾSchnorrॺ໊Ͱɺෳͷॺ໊σʔλΛͻͱͭͷॺ໊σʔλʹ·ͱΊΔ͜ͱ͕Ͱ͖ Δ͜ͱ͕ϙΠϯτɻ ɾݱࡏͷBitcoinͰɺෳͷΞυϨε͔ΒҰͭͷΞυϨεʹૹۚ͢ΔࡍɺͦΕͧΕ ͷॺ໊͕ඞཁͱͳΔɻ ɾ·ͨϚϧνγάΛར༻͢Δ߹ɺෳͷॺ໊͕ඞཁͱͳΔɻྫ͑2-of-3 ͷΑ ͏ͳ߹ʹ2ͭͷॺ໊͕ඞཁɻ ɹˠ Schnorrॺ໊Ͱɺෳͷॺ໊ΛҰͭʹ·ͱΊΒΕΕ༰ྔͷઅʹͳΔɻ 14
Lamportॺ໊ϒϩοΫνΣʔϯ ʹΘΕΔ͔ ɾLamportॺ໊ͷྔࢠੑັྗతɻ͔͠͠ॺ໊ͷσʔλαΠζɻ ɾECDSAॺ໊ʢBitcoin, EthereumͰݱࡏ༻ʣͱൺֱͯ͠Lamportॺ໊ͷαΠ ζେ͖͍ɻ ɾECDSAॺ໊ɿެ։伴ʢ33 bytesʣɺॺ໊ʢ73 bytesʣ ɾLamportॺ໊ɿެ։伴ʢ16
KBʣɺॺ໊ʢ8 KBʣ Lamportॺ໊ͷެ։伴ͱॺ໊ɺECDSAॺ໊ΑΓ213ഒʢ106 bytes vs 24 KBʣ େ͖͍ɻެ։伴ͱॺ໊ͱϒϩοΫνΣʔϯͷτϥϯβΫγϣϯʹऔΓࠐ·ΕΔ ͷͰɺϒϩοΫαΠζͷංେԽΛੜͤ͡͞Δɻ →εέʔϥϏϦςΟʹٯߦ͢ΔྲྀΕɻ 15
ޙɹ 4. RSAॺ໊ͷΞϧΰϦζϜ 5. Schnorrॺ໊ͷΞϧΰϦζϜ 16
RSAॺ໊ੜΞϧΰϦζϜ ॺ໊ = ϝοηʔδd mod N ެ։伴 e,Nɺൿີ伴 d, ϝοηʔδ
m, ॺ໊ σ ͱ͢Δͱ ɾॺ໊ϝοηʔδmΛdͯ͠mod NΛͱͬͨͷɻγϯϓϧʂ ɾϙΠϯτɺൿີ伴dΛΒͳ͍ਓσΛੜͰ͖ͳ͍ɻ mɿॺ໊Λߦ͍͍ͨϝοηʔδɺdɿൿີ伴 e, Nɿެ։伴ɹσɿిࢠॺ໊σʔλ ※ Nೋͭͷେ͖ͳૉ p,q Λ͔͚ͨͷ N = p×q 17
RSAॺ໊ݕূΞϧΰϦζϜ ॺ໊͔Βಘͨϝοηʔδ = ॺ໊e mod N ެ։伴 e,Nɺൿີ伴 d, ϝοηʔδ
m, ॺ໊ σ ͱ͢Δͱ ɾݕূऀɺެ։伴 e, N ͱॺ໊ σͷใ͔ΒɺϝοηʔδmΛ෮ݩͰ͖Δ ɾॺ໊ͱҰॹʹఴ͞Ε͍ͯΔϝοηʔδmͱൺֱ͢Δ͜ͱͰɺॺ໊ͷਖ਼ੑΛ֬ೝ 18
ଘࡏʢજࡏʣతِ ॺ໊ର͕ҙຯͷͳ͍ʢϥϯμϜͳʣϝοηʔδm’ͩͱͯ͠ɺ ਖ਼͍͠σδλϧॺ໊σ’Λ࡞ΕΔ͔ʁ >>> YESʂʂσδλϧॺ໊ʹର͢ΔڴҖʹͳΔΒ͍͠… 1. ߈ܸऀϥϯμϜʹॺ໊σʔλσ’ΛબͿ 2. ϥϯμϜͳϝοηʔδm’ Λެ։伴(e,
N) ͔Βܭࢉ → m’ = σ’e mod N ,Λܭࢉ 3. ݕূऀʹm’, σ, (e,N)ΛૹΔ →ݕূऀݕূޭͯ͠͠·͏ 19
Schnorrॺ໊ɿه߸ͷఆٛ ه߸ͷఆٛ H(x), H(x//y) …… ϋογϡؔ pɿૉɻҎ߱ɺͯ͢ͷࣜ࠷ޙʹ p Ͱׂͬͨ༨ΓΛܭࢉ͍ͯ͠Δͱղऍ͢Δ qɿq|p-1Λຬͨ͢ɺૉqΛબ͍ͯ͠Δ
gɿɻgq = 1 mod p Λຬͨ͢ xɿൿີ伴 yɿެ։伴ʢy = gx mod pʣ mɿॺ໊Λߦ͍͍ͨϝοηʔδ tɿॺ໊ʹඞཁͳཚ s, hɿిࢠॺ໊σʔλ σʢs,hʣ 20
Schnorrॺ໊ͷײతཧղ H(x//y)ɺx,yΛҾͱ͢Δϋογϡؔ mॺ໊͢Δϝοηʔδ yެ։伴ͱͳΔ s,h͕γϡϊΞॺ໊Ͱܭࢉ͖͢σδλϧॺ໊σʔλʢΞϧΰϦζϜͷग़ྗσ(s,h)ʣ ࣜͷ྆ลΛݟΔͱh͕྆ํʹؚ·Εͨʮࣗݾݴٴܕʯͷࣜͱͳ͍ͬͯΔɻ ϋογϡؔHͷҰํੑΛߟ͑Δͱɺೖྗͷ”h”ͱग़ྗͷ”h”͕Ұக͢ΔΑ͏ʹ มϖΞ(s,h)ͷΛબͿͷࠔɻ Λຬͨ͢ ΛٻΊΑ͏ʂ
21
มϖΞ(s,h)ͷબͼํ ࣮ɺൿີ伴xΛ͍ͬͯΔͱɺ͜ͷมϖΞʢs,hʣΛٻΊΔ͜ͱ͕Ͱ͖Δɻ ϙΠϯτެ։伴y͕ɺൿີ伴 xͱgΛ༻͍ͯɹy = gx ͱදͤΔ͜ͱɻ ᶃॺ໊ʹඞཁͳཚt (= s
- xh) ΛઌʹܾΊΔɻ ᶄ h = H(m//gt) ΑΓɺh͕ٻ·Δɻ ᶅ ॺ໊ऀʹͱͬͯطͷt, h,x ΑΓ s ͕ٻ·Δɻ ᶆॺ໊σʔλσ = (s,h)ͷมϖΞΛಘΔɻ มϖΞ(s,h)ΛܭࢉͰ͖Δͷɺൿີ伴xΛ͍࣋ͬͯΔਓ͚ͩʂ ॺ໊ͱͯ͠Γཱͭɻ 22
Schnorrॺ໊ͷΞϧΰϦζϜ sͰͳ͘xͱࢥΘΕΔɻ y = gx mod p sk = x
23
KeyGen:伴ੜΞϧΰϦζϜ ɿಈ࡞4ɿsͰͳ͘xͱࢥΘΕΔɻy = gx mod p, sk = x ͱ͠ͳ͍ͱͭͭ͡·͕߹Θͳ͍ɻ
ൿີ伴xͱެ։伴y 24
ॺ໊ੜΞϧΰϦζϜ 1. దͳཚ t Λੜ͢Δ 2. h = H(m//r) =
H(m//gt) Λܭࢉ͢Δ(r = gt mod p) 3. 2ͰٻΊͨhΛར༻ͯ͠ɺs = t + xh mod pΛܭࢉ͢Δ 4. ٻΊͨ(h,s)Λσδλϧॺ໊ͷग़ྗͱ͢Δ pΛ͋Δڊେͳૉͱ͠ɺgΛpͱޓ͍ʹૉͳͱ͢Δɻ mॺ໊ϝοηʔδͱ͠ɺxΛൿີ伴ɺyΛެ։伴ͱ͢Δɻ H( )ϋογϡؔͰ͋Γɺͦͷग़ྗ͕hͰ͋Δɻ 25
ॺ໊ݕূΞϧΰϦζϜ 1. r’ = gsy-h mod p Λܭࢉ͢Δ 2. h’
= H(m//r’) Λܭࢉ ͢Δ 3. h’ = h Λ֬ೝɻΓཱͭ߹1Λग़ྗ͠ɺΓཱͨͳ͍߹0Λग़ྗ ༩͑ΒΕͨॺ໊Λݕূ͢Δʹ Λܭࢉ͠ɺh’ͱh͕Ұக͢Δ͔Λ֬ೝ͢ΕΑ͍ɻͳ͓ɺg, ॺ໊σʔλ(s,h), ެ։伴y ݕূऀʹͱͬͯطͰ͋Δɻ 26