Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
高速な楕円曲線の実装
Search
ykm11
March 30, 2020
Technology
2.9k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
高速な楕円曲線の実装
ラボユース第9期
ykm11
March 30, 2020
More Decks by ykm11
See All by ykm11
ChipWhispererを使ってマイコンの消費電力を測定してみる
ykm11
0
180
Other Decks in Technology
See All in Technology
AWS構成から考えるWebセキュリティ ― WordPressの構築経験から考える公開範囲と更新運用【JAWS FESTA 2026 in AKITA】
cscengineer
PRO
2
360
Lint の層を組み直した話
bengo4com
3
330
[JAWS Festa 2026]一番いい仕事は、請求書に現れない / jawsfesta2026
sh_fk2
2
390
IBC 2026 動画技術関連レポート / IBC 2026 Report
cyberagentdevelopers
PRO
2
440
並列度を下げたら速くなった — go build の重複コンパイルを実測で見る
tomoaki25
2
900
Sinatra on PicoRuby ローカルでセルフホスト
bash0c7
0
110
Kiro 入門 (1 つのエージェントを、どの画面からでも) | 目指せ Kiro マスター 01
inariku
PRO
5
1.1k
`go get`したらELFが降ってきた件
taiyow
0
190
The Author Pays
hiccupps
0
120
AWS基盤改善を支える 私たちの理念と行動指針
kentosuzuki
0
120
なぜ東京にいる私が、新潟の技術コミュニティを運営するのか by 八雲慎之助
yakumo
0
230
GCASアップデート(202607-202610)
techniczna
1
230
Featured
See All Featured
The untapped power of vector embeddings
frankvandijk
2
2k
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.2k
The Curse of the Amulet
leimatthew05
3
17k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
290
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
2
2.2k
Designing Experiences People Love
moore
143
24k
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
350
Building an army of robots
kneath
307
47k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
370
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
1
300
Building Better People: How to give real-time feedback that sticks.
wjessup
371
20k
Transcript
ߴͳପԁۂઢͷ࣮ ฏా ྒྷ 2020.03.30 αΠϘζɾϥϘϢʔεୈ 9 ظ Ռใࠂձ 1
ࣗݾհ • ฏా ྒྷ • ϥϘϢʔεୈ 9 ظੜ • ిؾ௨৴େֶ
3 • GitHub: ykm11 • Twitter: @ykm kn • झຯιϩπʔϦϯά 2
αΠϘζɾϥϘϢʔε ୈ 9 ظ • ༰ • ։ൃςʔϚ: C/C++ʹΑΔιϑτΣΞ։ൃ •
ϝϯλʔ: ޫ࣎ੜ͞Μ • ߴͳପԁۂઢΛ࣮ʢ& C++ͷษڧʣ • ಛఆͷପԁۂઢʹݶΒΕΔ͕͔ͳΓͷΛୡ • ҙਫ਼ʹରԠʢগ͠མͪΔʣ Ռ - https://github.com/ykm11/lab-youth/tree/master/ellipticCurve 3
࣍ • ପԁۂઢͱ • ߴԽ࣮ͷಓ • ΞϑΟϯ࠲ඪ͔ΒࣹӨ࠲ඪ • Πϯελϯεੜ, ԋࢉճͷݮ
• ಈతϝϞϦ֬อͷఫഇ • εΧϥʔഒࢉΞϧΰϦζϜ • ͞ΒͳΔߴԽ • ͲΕ͚ͩ͘ͳ͔ͬͨ 4
ପԁۂઢͱ ମ K ্Ͱఆٛ͞ΕΔପԁۂઢ E/K , E/K := {(x, y)
∈ K2 | y2 = x3 + ax + b} ∪ {O} a, b ∈ K P, Q ∈ E/K ʹ͠ࢉ + Λఆٛ͢Δͱ (E/K, +) Ճ๏܈ʹͳΔ P = (x1, y1), Q = (x2, y2) ∈ E/K ͷ͠ࢉ P + Q (x1, y1) + (x2, y2) =: (x3, y3) x3 = m2 − x1 − x2 y3 = m(x1 − x3) − y1 m = y2−y1 x2−x1 (P ̸= Q) 3x2 1 +a 2y1 (P = Q) ҉߸Ͱɺఆٛମ K ඪ͕ 2,3 Ͱͳ͍༗ݶମ͕Α͘ΘΕΔ 5
ߴԽ࣮ͷಓ Πϯτϩ ඪ • P ͷεΧϥʔഒ [k]P = P
+ P + .. + P Λ͍ͨ͘͠ • Α͍ΞϧΰϦζϜΛ͏ • ͠ࢉ, 2 ഒࢉΛ͘͢Δ • ֤छΞϧΰϦζϜ͠ࢉ, 2 ഒࢉͷΈ߹ΘͤͳͷͰɺ ͪ͜ΒΛ͘͢ΕεΧϥʔഒ͘ͳΔ 6
ߴԽ࣮ͷಓ ΞϑΟϯ࠲ඪ͔ΒࣹӨ࠲ඪ ΞϑΟϯ࠲ඪͰ࣮͢Δͱ͖ʹࠔΔ͜ͱ • ୯Ґݩʢແݶԕʣͷѻ͍ Ϋϥεͷϝϯόมʹ bool isInf ΛͨͤΔʁ •
͖ΛٻΊΔͱ͖ʹআࢉ͕ൃੜ • ֦ுϢʔΫϦουͷΞϧΰϦζϜΛ͏͔ɺ • p-2 ͢Δ͜ͱʹΑͬͯٯݩΛಘΔʢFermat ͷখఆཧΑΓ ܭࢉͷίετʁ ࣹӨ࠲ඪͰ࣮͢Δ͜ͱʹΑΓɺ্ͷΛղܾ 7
ߴԽ࣮ͷಓ ΞϑΟϯ࠲ඪ͔ΒࣹӨ࠲ඪ ࣹӨ࠲ඪͷݫີͳఆٛͳͲޫ͞Μͷஶॻ 1 K2 ϕ −→ P ∈
∈ (x, y) −→ (x : y : 1) (X/Z, Y /Z) ϕ−1 −→ (X : Y : Z) • ఆٛํఔࣜ y2 = x3 + ax + b ͔Β Y 2Z = X3 + aXZ2 + bZ3 ʹ • ୯Ґݩ (0 : 1 : 0) 1https://herumi.github.io/ango/ 8
ߴԽ࣮ͷಓ ΞϑΟϯ࠲ඪ͔ΒࣹӨ࠲ඪ (X1 : Y1 : Z1) + (X2 :
Y2 : Z2) =: (X3 : Y3 : Z3) ͷެࣜ ಋग़লུ͠·͢ • (X1 : Y1 : Z1) ̸= (X2 : Y2 : Z2) u := Y2Z1 − Y1Z2, v := X2Z1 − X1Z2, w := u2Z1Z2 − v3 − 2v2X1Z2, X3 := vw, Y3 := u(v2X1Z2 − w) − v3Y1Z2, Z3 := v3Z1Z2 • (X : Y : Z) ͷ̎ഒެࣜ u := 3X2 + aZ2, v := YZ, w := u2 − 8XYv, X3 := 2vw, Y3 := u(4XYv − w) − 8(Yv)2, Z3 := 8v3 9
ߴԽ࣮ͷಓ ΞϑΟϯ࠲ඪ͔ΒࣹӨ࠲ඪ ࣹӨ࠲ඪͷ࠾༻ʹΑΓ • Z ͷͰ୯Ґݩ͔Ͳ͏͔ΛผͰ͖Δ • আࢉ͕ແ͘ͳͬͨ • ࢉ͕૿͑Δ͕ɺআࢉʹൺΔͱ͔ͳΓ҆Ձ
Table 1: ίετൺֱ Ճࢉ P + Q 2 ഒࢉ (2P) ΞϑΟϯ࠲ඪ 3M + I 4M + I ࣹӨ࠲ඪ 14M 12M M ༗ݶମͷࢉ, I ٯݩͷܭࢉ 10
Πϯελϯεੜ, ԋࢉճͷݮ • ՃࢉͰ 14 ճͷ༗ݶମͷࢉ u := Y2Z1 −
Y1Z2, v := X2Z1 − X1Z2, w := u2Z1Z2 − v3 − 2v2X1Z2, X3 := vw, Y3 := u(v2X1Z2 − w) − v3Y1Z2, Z3 := v3Z1Z2 • ͬͱ͋Γͦ͏ʢʹݟ͑Δʣ • ಉ͡ܭࢉΛ͠ͳ͍ • ͔ͭɺ༗ݶମΠϯελϯεͷੜΛ࠷খݶʹ 11
Πϯελϯεੜ, ԋࢉճͷݮ • ՃࢉͰ 14 ճͷ༗ݶମͷࢉ u := Y2Z1 −
Y1Z2, v := X2Z1 − X1Z2, w := u2Z1Z2 − v3 − 2v2X1Z2, X3 := vw, Y3 := u(v2X1Z2 − w) − v3Y1Z2, Z3 := v3Z1Z2 • ͬͱ͋Γͦ͏ʢʹݟ͑Δʣ • ಉ͡ܭࢉΛ͠ͳ͍ • ͔ͭɺ༗ݶମΠϯελϯεͷੜΛ࠷খݶʹ 12
Πϯελϯεੜ, ԋࢉճͷݮ • Ұ࣌มΛੜ͠ͳ͍ʢมͯ͢ Fp ͷΠϯελϯεʣ x = y *
z - v * w; • վྑ mul(x, y, z); // x = y * z; mul(t, v, w); // t = v * w; sub(x, x, t); // x = x - t; • “% modulus” Λଟ༻͠ͳ͍ • Fp ͷݩͷՃࢉͷ࠷େ 2p − 2 • ݮࢉͷ࠷খ −p + 1 • Ճݮࢉͷ߹ɺԋࢉ݁Ռʹରͯ͠దٓ modulus Λ ͔͢Ҿ͔͘ͰΑ͍ 13
ಈతϝϞϦ֬อͷఫഇ • GMP mpz class malloc ͰಈతʹϝϞϦΛ֬อ͢Δ -
ಈతϝϞϦ֬อ͕ϘτϧωοΫ ରࡦ • ಈతϝϞϦ֬อΛ͠ͳ͍ - ϝϞϦཧΛࣗͰߦ͏ - mpz class Λྻʹஔ͖͍͑ͯ͘ - mpn ͕ؔ͋ΔͷͰଟഒͷ࢛ଇԋࢉΘΓͱ͔Μͨ Μʹॻ͚Δ 14
ߴԽ࣮ͷಓ Πϯτϩʢ࠶ܝʣ ඪ • P ͷεΧϥʔഒ [k]P = P
+ P + .. + P Λ͍ͨ͘͠ • Α͍ΞϧΰϦζϜΛ͏ • ͠ࢉ, 2 ഒࢉΛ͘͢Δ • ֤छΞϧΰϦζϜ͠ࢉ, 2 ഒࢉͷΈ߹ΘͤͳͷͰɺ ͪ͜ΒΛ͘͢ΕεΧϥʔഒ͘ͳΔ 15
εΧϥʔഒࢉΞϧΰϦζϜ ࣮ͨ͠ͷ • ӈ͖, ࠨ͖όΠφϦ๏ • sliding window method •
window NAF method ͋ΔପԁۂઢʹͷΈదԠͰ͖ΔΞϧΰϦζϜ͋Δ • GLV for secp256k1 ௨ৗͷεΧϥʔഒࢉΑΓ͓͓Αͦ 1.5 ഒఔߴ 16
͞ΒͳΔߴԽ • ϠίϏ࠲ඪΛར༻ • ࣹӨ࠲ඪΑΓ 2 ഒࢉͷίετ͕খ͍͞ • 2 ഒࢉΛΑ͘͏ͱ͖ʹ༗ޮ
• ߴͳଟഒԋࢉΛ࣮͢Δ • GMP mpn ͱ͍ͯ • ΞηϯϒϦϨϕϧͰ࠷దԽΛؤுΔ 17
ͲΕ͚ͩ͘ͳ͔ͬͨ • Golang ͷପԁۂઢ࣮ 2, sage-8.83 ͱΛൺֱ • ࣮ߦڥ OS:
Ubuntu 18.04 (on Mac) CPU: i7-8850H 2.60GHz compiler: gcc-9.2.1 -O3 (for C++) 2https://github.com/ykm11/goCurve 3Python Ͱ࣮ߦͰ͖ΔΦʔϓϯιʔεͳֶιϑτΣΞ 18
ͲΕ͚ͩ͘ͳ͔ͬͨ secp256k1 ͷύϥϝʔλΛͬͯܭଌ Table 2: ൺֱʢ୯Ґ usecʣ add dbl sage
19.88 24.68 GolangʢΞϑΟϯ࠲ඪʣ 5.670 6.374 C++ʢࣹӨ࠲ඪʣ 1.432 1.421 C++ʢϠίϏ࠲ඪʣ 1.440 1.002 19
ͲΕ͚ͩ͘ͳ͔ͬͨ εΧϥʔഒʹ͍ͭͯܭଌͯ͠ΈΔ ύϥϝʔλ secp256k1 Table 3: ΞϧΰϦζϜͷൺֱʢ୯Ґ usecʣ ࣹӨ࠲ඪ ϠίϏ࠲ඪ
ࠨ͖όΠφϦ๏ 527.17 421.00 ӈ͖όΠφϦ๏ 519.92 409.11 Sliding Window Method (size 2) 498.19 403.97 NAF (size 4) 484.88 360.63 GLV (NAF) 320.94 N/A 20
·ͱΊ • ߴʹಈ࡞͢ΔପԁۂઢΛ C++Ͱ࣮ͨ͠ • ͷ͠ࢉΛ͘͢ΔͱεΧϥʔഒ͕͘ͳΔ • ༗ݶମͷ࢛ଇԋࢉΛ͘͢Δͱͷ͠ࢉ͕͘ͳΔ • ར༻ՄೳͳପԁۂઢΛ૿͠ɺҙਫ਼Ͱ͕ग़ΔΑ͏
ʹ͍ͨ͠ 21