楕円曲線暗号に぀いお利甚可胜

画像


公開鍵暗号に粟通しおいる人は、おそらく頭字語ECC 、 ECDH、およびECDSAに粟通しおいるでしょう。 最初は楕円曲線暗号楕円曲線の暗号の略語で、残りはそれに基づくアルゎリズムの名前です。

今日、楕円曲線暗号システムは、 TLS 、 PGP 、およびSSHで䜿甚されおいたす 。これらは、珟代のWebおよびITの䞖界が基盀ずする最も重芁な技術です。 ビットコむンやその他の暗号通貚に぀いおは話しおいない。

ECCが普及する前は、ほずんどすべおの公開キヌアルゎリズムは、モゞュラヌ挔算に基づく代替暗号システムであるRSA、DSA、およびDHに基づいおいたした。 RSAず䌚瀟は今でも人気があり、倚くの堎合ECCず組み合わせお䜿甚​​されたす。 しかし、RSAや類䌌のアルゎリズムの基瀎ずなる魔法は倚くの人に説明しやすく理解しやすく、 倱瀌な実装は非垞に簡単に曞かれおいるずいう事実にもかかわらず、ECCの基本はただほずんどの人にずっお謎です。

この䞀連の蚘事では、楕円曲線の暗号化の䞖界の基瀎を玹介したす。 私の目暙は、ECCの完党で詳现なガむドを䜜成するこずではなくむンタヌネットはこのトピックに関する情報でいっぱいです、 ECCの簡単な抂芁ず、それが安党であるず考えられる理由の説明です 。 長い数孊的蚌明や退屈な実装の詳现に時間を費やしたせん。 たた、芖芚的なむンタラクティブツヌルずスクリプトを䜿甚した䟿利な䟋を瀺したす。

特に、次のトピックを怜蚎したす。

  1. 実数ず矀則䞊の楕円曲線
  2. 有限䜓䞊の楕円曲線ず離散察数問題
  3. キヌペアの生成ず2぀のECCアルゎリズムECDHおよびECDSA
  4. ECCハッキングアルゎリズムずRSAずの比范

この蚘事を理解するには、集合論、幟䜕孊、モゞュラヌ算術の基瀎を理解し、察称および非察称暗号化の原理を理解する必芁がありたす。 最埌に、「単玔な」タスクず「耇雑な」タスクが䜕であるか、および暗号化におけるそれらの圹割を明確に理解する必芁がありたす。

準備はいい さあ始めたしょう

パヌト1実数ず矀則䞊の楕円曲線


楕円曲線


たず、楕円曲線ずは䜕ですか Wolfram MathWorldには優れた包括的な定矩がありたす。 しかし、楕円曲線は、方皋匏で蚘述された点のセットであるだけで十分です。

y 2 = x 3 + a x + b


どこで 4 a 3 + 27 b 2 n e 0  、これは特別な曲線を陀倖するために必芁です。 䞊蚘の方皋匏は、楕円曲線の通垞のワむ゚ルシュトラス定匏化ず呌ばれたす。

異なるヒュヌマン円曲線の異なる圢状

楕円曲線の異なる圢状 b = 1 、 a 2から-3たで倉化したす。

特異点の皮類

特城の皮類巊偎-戻り点のある曲線尖点 y 2 = x 3  右偎には自己亀差曲線 Y 2 = X 3 - 3 X + 2  これらの䟋は䞡方ずも完党な楕円曲線ではありたせん。

倀に応じお a そしお b 楕円曲線は、平面䞊で異なる圢状を取るこずができたす。 簡単に確認および怜蚌できるように、楕円曲線は軞に察しお察称です。 X 。

目的のために、 無限遠点 理想点ずも呌ばれる が曲線の䞀郚である必芁もありたす。 これからは、シンボル0れロで無限遠のポむントを瀺したす。

無限倧の点を明瀺的に考慮する必芁がある堎合、楕円曲線の定矩は次のように明確にできたす。

\å·Š\ {x、y\ in \ mathbb {R} ^ 2 \ | \ y ^ 2 = x ^ 3 + ax + b、\ 4 a ^ 3 + 27 b ^ 2 \ ne 0 \右\ } \ \カップ\ \å·Š\ {0 \右\}

\å·Š\ {x、y\ in \ mathbb {R} ^ 2 \ | \ y ^ 2 = x ^ 3 + ax + b、\ 4 a ^ 3 + 27 b ^ 2 \ ne 0 \右\ } \ \カップ\ \å·Š\ {0 \右\}


グルヌプ


数孊では、グルヌプは「加算」ず呌ばれる+で衚されるバむナリ挔算を定矩したセットです。 蚭定するには  mathbbG グルヌプであった堎合、次の4぀のプロパティに察応するように远加を定矩する必芁がありたす。

  1. 回路 if a そしお b 含たれおいたす  mathbbG それから a+b に含たれる  mathbbG ;
  2. 結合性 a+b+c=a+b+c ;
  3. ナニット芁玠 0があり、 a+0=0+a=a ;
  4. 各芁玠には逆倀がありたす 。぀たり、 a そのようなものがありたす b あれ a+b=0 。

5番目の芁件を远加する堎合

  1. 可換性 a+b=b+a 、

そのグルヌプはアヌベル矀ず呌ばれたす。

通垞の远加では、敎数のセット  mathbbZ グルヌプですさらに、それはアヌベルのグルヌプです。 倚くの自然数  mathbbN ただし、4番目のプロパティを満たさないため、グルヌプではありたせん。

グルヌプは、4぀のプロパティすべおに準拠しおいるこずが蚌明されるず、「負荷に察しお」他のプロパティを自動的に受け取るずいう点で䟿利です。 たずえば、 単䞀の芁玠は䞀意です。 さらに、 盞互の倀は䞀意です 。぀たり、それぞれに察しお a ただ䞀぀ b そのような a+b=0 そしお私たちは曞くこずができたす b どうやっお −a  盎接的たたは間接的に、これらおよびグルヌプの他のプロパティは、将来的に非垞に圹立ちたす。

楕円曲線の矀則


楕円曲線のグルヌプを定矩できたす。 すなわち


敎列した3぀のポむント

1぀の盎線䞊にある3぀のポむントの合蚈は0です。

最埌のルヌルでは、1぀の盎線䞊に3぀のポむントのみが必芁であり、これらの3぀のポむントの順序は重芁ではないこずを考慮する䟡倀がありたす。 これは、3぀のポむントが P 、 Q そしお R 䞀盎線䞊に暪たわる P+Q+R=Q+P+R=R+P+Q= cdots=0 。 したがっお、 挔算子+が結合性ず可換性の特性を持っおいるこずを盎感的に蚌明したした私たちはアヌベル矀に属しおいたす。

これたでのずころ、すべおが順調に進んでいたす。 しかし、2぀の任意のポむントの合蚈をどのように蚈算したすか

幟䜕孊的な加算


私たちはアヌベル矀に属しおいるずいう事実のために、私たちは曞くこずができたす P+Q+R=0 どうやっお P+Q=−R 。 この圢匏のこの方皋匏により、2点の合蚈を蚈算する幟䜕孊的な方法を導き出すこずができたす。 P そしお Q  を介しお線を匕く堎合 P そしお Q 、この線は曲線の3番目の点ず亀差したす R これは、 P 、 Q そしお R 同じ行にありたす 。 この点の逆数をずるず −R 私たちは量を芋぀けたす P+Q 。

ポむントト算

盎線を描く P そしお Q 。 線は3番目の点を暪切る R 。 圌女のポむントに察称 −R 結果です P+Q 。

幟䜕孊的手法は機胜したすが、改善が必芁です。 特に、いく぀かの質問に答える必芁がありたす。


これで幟䜕孊的手法が完成し、すべおのケヌスが考慮されたす。 鉛筆ず定芏を䜿甚しお、楕円曲線のすべおの点を远加できたす。 詊しおみたい堎合は、楕円曲線の合蚈を蚈算するために䜜成したHTML5 / JavaScriptビゞュアルツヌルをご芧ください 。

代数加算


コンピュヌタヌに点の远加を凊理させるには、幟䜕孊的手法を代数的手法に倉換する必芁がありたす。 䞊蚘のルヌルを䞀連の方皋匏に倉換するこずは簡単に思えるかもしれたせんが、実際には、3次方皋匏を解く必芁があるため、かなり面倒です。 したがっお、結果のみを衚瀺したす。

始めるために、最も厄介なデッドロックを取り陀きたしょう。 私たちはすでにそれを知っおいたす P+−P=0 、そしお私たちはそれを知っおいたす P+0=0+P=P 。 したがっお、方皋匏では、これらの2぀のケヌスを回避し、2 ぀の非れロの非察称ポむントのみを考慮したす。 P=xP、yP そしお Q=xQ、yQ 。

もし P そしお Q 䞀臎しない  xP nexQ 、それらを通る盎線には募配がありたす 

m= fracyP−yQxP−xQ


この線ず楕円曲線の亀点が 3番目の点です R=xR、yR 

 beginarrayrclxR=m2−xP−xQyR=yP+mxR−xP endarray


たたは同様に

yR=yQ+mxR−xQ


だから xP、yP+xQ、yQ=xR、−yR 兆候に泚意を払い、それを芚えおおいおください P+Q=−R 

結果の正確性を怜蚌する必芁がある堎合、次のこずを確認する必芁がありたす。 R 曲線ずかどうか P 、 Q そしお R 䞀盎線䞊に。 1行であるこずの怜蚌は簡単で、所属の怜蚌は R 曲線-いいえ、3次方皋匏を解かなければならないので、これは完党に悲しいこずです。

代わりに、䟋を詊しおみたしょう 芖芚ツヌルによるず、 P=1、2 そしお Q=3,4 曲線に属する y2=x3−7x+10 、それらの合蚈は等しい P+Q=−R=−3,2 。 これが方皋匏ず䞀臎するかどうかを確認したしょう

 beginarrayrclm= fracyP−yQxP−xQ= frac2−41−3=1xR=m2−xP−xQ=12−1−3=−3yR=yP+mxR−xP=2+1 cdot−3−1=−2=yQ+mxR−xQ=4+1 cdot−3−3=−2 endarray


はい、そうです

これらの方皋匏は、 ポむントが P たたは Q タッチポむントです。 確認したしょう P=−1、4 そしお Q=1、2 。

 beginarrayrclm= fracyP−yQxP−xQ= frac4−2−1−1=−1xR=m2−xP−xQ=−12−−1−1=1yR=yP+mxR−xP=4+−1 cdot1−−1=2 endarray


結果が出たした。 P+Q=1、−2 、 芖芚ツヌルで埗られた結果ず䞀臎したす 。

その機䌚に P=Q 少し異なる方法で凊理する必芁がありたす。 xR そしお yR 同じたたですが、それを考慮しお xP=xQ 傟斜には別の方皋匏を䜿甚する必芁がありたす。

m= frac3x2P+a2yP


ご想像のずおり、この匏は m は䞀階埮分です

yP= pm sqrtx3P+axP+b


この結果の正確性を蚌明するには、次のこずを怜蚌するだけで十分です。 R 曲線に属し、その線が通過する P そしお R 曲線ずの亀差点は2぀だけです。 しかし、ここでもそれを蚌明せず、代わりに䟋を分析したす。 P=Q=1、2 。

 beginarrayrclm= frac3x2P+a2yP= frac3 cdot12−72 cdot2=−1xR=m2−xP−xQ=−12−1−1=−1yR=yP+mxR−xP=2+−1 cdot−1−1=4 endarray


私たちに䞎えるもの P+P=−R=−1、−4 。 そう

結果を取埗する手順は非垞に面倒ですが、方皋匏は非垞に簡単です。 これはすべお、Weierstrassの通垞の定匏化のおかげです。これがないず、これらの方皋匏は非垞に長く耇雑になりたす。

スカラヌ乗算


加算に加えお、別の挔算を定矩できたす スカラヌ乗算 、぀たり

nP=\アンダヌブレヌスP+P+ cdots+Pn  texttimes


どこで n 自然数です。 たた、スカラヌ乗算甚の芖芚ツヌルも䜜成したので、詊しおみおください。

この圢匏で曞くずき、蚈算は明らかです nP が必芁です n 远加。 もし n から成る k 小数点以䞋の堎合、アルゎリズムは耇雑になりたす O2k あたり良くありたせん。 しかし、より高速なアルゎリズムがありたす。

それらの1぀は、 倍加加算アルゎリズムです。 その動䜜の原理は、䟋を䜿甚しお簡単に説明できたす。 取る n=151 。 バむナリ圢匏では、次の圢匏になりたす 100101112 。 このようなバむナリ圢匏は、2の环乗の合蚈ずしお衚すこずができたす。

 beginarrayrcl151=1 cdot27+0 cdot26+0 cdot25+1 cdot24+0 cdot23+1 cdot22+1 cdot21+1 cdot20=27+24+22+21+20 endarray


すべおの2進数を取りたした n 2のべき乗を掛けたす。

これを念頭に眮いお、次のように蚘述できたす。

151 cdotP=27P+24P+22P+21P+20P


倍加アルゎリズムは、次の手順を定矩したす。


その結果、蚈算したす 151 cdotP 7回の倍増ず4回の远加だけを完了したした。

これが完党に明確でない堎合、このアルゎリズムを実装するPythonスクリプトを次に瀺したす。

def bits(n): """    n,     . bits(151) -> 1, 1, 1, 0, 1, 0, 0, 1 """ while n: yield n & 1 n >>= 1 def double_and_add(n, x): """   n * x,   -. """ result = 0 addend = x for bit in bits(n): if bit == 1: result += addend addend *= 2 return result 

倍増ず加算が挔算の堎合 O1 このアルゎリズムは耇雑です O logn たたは Ok ビット長を考慮しお、これはかなり良いです。 そしおもちろん、元のアルゎリズムよりもはるかに優れおいたす On 

察数


䞎えられた n そしお P 少なくずも1぀の倚項匏蚈算アルゎリズムがありたす Q=nP 。 しかし、逆問題はどうですか もし知っおいたら Q そしお P 、そしお決定する必芁がありたす n  この問題は察数問題ずしお知られおいたす 。 他の暗号システムずの䞀貫性のために、「陀算」ずいう甚語の代わりに「察数」ずいう蚀葉を䜿甚したす乗算ではなくべき乗が䜿甚されたす。

察数問題を解決するための単䞀の「単玔な」アルゎリズムは知りたせんが、 乗算を実隓するず 、いく぀かのパタヌンを簡単に怜出できたす。 たずえば、曲線を描く y2=x3−3x+1 そしおポむント P=0、1 。 すぐに確認できたす n 奇劙な nP 巊半平面の曲線䞊にありたす。 もし n それでも nP -右半平面。 さらに実隓を行うず、この曲線の察数を効率的に蚈算するためのアルゎリズムを曞くこずに぀ながる他のパタヌンを芋぀けるこずができたす。

しかし、察数問題にはバリ゚ヌションがありたす。 離散察数問題です。 次の郚分で芋るように、楕円曲線の定矩の領域を枛らすず、 スカラヌ乗算は「単玔」のたたであり、離散察数は「難しい」タスクになりたす 。 このような二重性は、楕円曲線の暗号化の重芁な特城です。

次のパヌトでは、 有限䜓ず離散察数問題、および実隓の䟋ずツヌルを調べたす 。

パヌト2有限䜓䞊の楕円曲線ず離散察数問題


前のパヌトでは、実数䞊の楕円曲線を䜿甚しおグルヌプを定矩する方法に぀いお説明したした。 ぀たり、ポむントの加算ルヌルを決定したした。1぀の盎線䞊にある3぀のポむントの合蚈はれロです P+Q+R=0  ポむントの加算を蚈算するための幟䜕孊的および代数的手法を導き出したした。

次に、スカラヌ乗算の抂念を導入したした nP=P+P+ cdots+P そしお、スカラヌ乗算を蚈算するための「単玔な」アルゎリズムである、2倍加算を芋぀けたした。

次に、楕円曲線を実数ではなく有限䜓に制限し、その倉化を確認したす。

pを法ずする敎数のフィヌルド


最埌のフィヌルドは、たず、有限数の芁玠のセットです。 有限䜓の䟋は、モゞュロを䜿った敎数のセットです p どこで p 玠数です。 䞀般的に、これは  mathbbZ/p 、 Gfp たたは  mathbbFp 。 最埌の゚ントリを䜿甚したす。

フィヌルドには、加算+ず乗算・の2぀の二重挔算がありたす。 どちらも閉じられおおり、連想的で可換です。 䞡方の操䜜に固有のナニット芁玠があり、各芁玠に逆倀の固有の芁玠がありたす。 そしお最埌に、乗算は加算に関しお分配的です x cdoty+z=x cdoty+x cdotz 。

モゞュロ敎数セット p 0からのすべおの敎数で構成されたす p−1 。 加算ず乗算は、 モゞュラヌ挔算のように機胜したす。 以䞋に操䜜の䟋をいく぀か瀺したす  mathbbF23 


これらの方皋匏に䞍慣れで、モゞュラヌ算術の基瀎を孊びたい堎合は、カヌンアカデミヌでコヌスを受講しおください 。

敎数を法ずしお蚀ったように p フィヌルドであるため、䞊蚘のプロパティはすべお保存されたす。 その芁件は p 玠数でした、非垞に重芁です 4を法ずする敎数の集合は䜓ではありたせん2は乗法の反転を持ちたせんすなわち、方皋匏 2 cdotx bmod4=1 決定はありたせん。

モゞュロp


すぐに楕円曲線を定矩したす  mathbbFp しかし、最初にそれを明確に理解する必芁がありたす x/y 意味する  mathbbFp 。 簡単に蚀えば x/y=x cdoty−1 、たたはプレヌンテキストで、 x 分子ず y 分母の x 倍の逆数 y 。 これは驚くこずではありたせんが、陀算を行う簡単な方法を提䟛したす 数倀の逆数を芋぀けおから、単玔な乗算を行いたす。

逆数蚈算は、 拡匵ナヌクリッドアルゎリズムを䜿甚しお「単玔に」実行できたす。最悪の堎合は耇雑になりたす O logp たたは Ok ビット長を考慮する堎合。

ナヌクリッド拡匵アルゎリズムの詳现には觊れたせん。これは蚘事の䞀郚ではありたせんが、Pythonでの実甚的な実装を玹介したす。

 def extended_euclidean_algorithm(a, b): """      (gcd, x, y), ,  a * x + b * y == gcd,  gcd -    a  b.              O(log b). """ s, old_s = 0, 1 t, old_t = 1, 0 r, old_r = b, a while r != 0: quotient = old_r // r old_r, r = r, old_r - quotient * r old_s, s = s, old_s - quotient * s old_t, t = t, old_t - quotient * t return old_r, old_s, old_t def inverse_of(n, p): """    n   p.       m,   (n * m) % p == 1. """ gcd, x, y = extended_euclidean_algorithm(n, p) assert (n * x + p * y) % p == gcd if gcd != 1: #  n  0,  p   . raise ValueError( '{} has no multiplicative inverse ' 'modulo {}'.format(n, p)) else: return x % p 

楕円曲線  mathbbFp


これで、楕円曲線をフィヌルドに制限するために必芁なすべおの芁玠ができたした。  mathbbFp 。 前のパヌトでは次の圢匏であったポむントのセット

\ begin {array} {rcl} \ left \ {x、y\ in \ mathbb {R} ^ 2 \ right。 ïŒ†\巊。 | \右。 ïŒ†\巊。 y ^ 2 = x ^ 3 + ax + b、\右。 \\\巊。 4a ^ 3 + 27b ^ 2 \ ne 0 \ right \} \ \ cup \ \ left \ {0 \ right \} \ end {array}


今になりたす

\ begin {array} {rcl} \ left \ {x、y\ in\ mathbb {F} _p^ 2 \ right。 ïŒ†\巊。 | \右。 ïŒ†\巊。 y ^ 2 \ equiv x ^ 3 + ax + b \ pmod {p}、\右。 \\\巊。 4a ^ 3 + 27b ^ 2 \ not \ equiv 0 \ pmod {p} \ right \} \ \ cup \ \ left \ {0 \ right \} \ end {array}


ここで、0はただ無限倧の点であり、 a そしお b -2぀の敎数  mathbbFp 。

Fpのネむティブ円曲線

曲線 y2 equivx3−7x+10 pmodp ず p=19、97、127、487 。 それぞれに泚意しおください x 最倧2぀のポむントがありたす。 察称性にも泚目しおください y=p/2 。

fpの特異曲線

曲線 y2 equivx3 pmod29 単数圢であり、䞭に䞉重点がある 0、0 。 真の楕円曲線ではありたせん。

以前は連続曲線であったものが、平面䞊の個々の点のセットになりたした xy 。 しかし、定矩の領域の制限にもかかわらず、 楕円曲線が  mathbbFp ただアヌベルグルヌプを䜜成したす 。

ポむント加算


明らかに、远加の定矩を少し修正しお、  mathbbFp 。 実数に぀いおは、1行の3点の合蚈がれロ P+Q+R=0  この定矩を維持するこずはできたすが、䞊の1぀の盎線䞊に3぀のポむントがあるずはどういう意味ですか  mathbbFp 

それらを結ぶ線があれば、3点は同じ線䞊にあるず蚀えたす 。 もちろん、たっすぐ  mathbbFp 䞊蚘の行ずは異なりたす  mathbbR 。 䞊蚘の行ず蚀えたす  mathbbFp たくさんのポむントです x、y 方皋匏を満たす ax+by+c equiv0 pmodp これは、远加された郚分を持぀行の暙準方皋匏です  textmod p "。

Z / pの楕円曲線のポむント加算

曲線に点を远加する y2 equivx3−x+3 pmod127 で P=16、20 そしお Q=41、120 。 接続線がどのようにポむントするかに泚意 y equiv4x+83 pmod127 飛行機で「繰り返し」。

私たちがただグルヌプにいるこずを考えるず、ポむントの远加はすでに知っおいるプロパティを保存したす


代数の量


ポむントの远加を実行するための方皋匏は、前の郚分ずたったく同じですが、各匏の最埌に远加する必芁があるこずを陀きたす。 \テキストmod p 」。したがっお、 P=xP、yP 、 Q=xQ、yQ そしお R=xR、yR それから P+Q=−R 次のように蚈算できたす。

 beginarrayrclxR=m2−xP−xQ bmodpyR=[yP+mxR−xP] bmodp=[yQ+mxR−xQ] bmodp endarray


もし P neQ その埌、斜面 m 次の圢匏を取りたす。

m=yP−yQxP−xQ−1 bmodp


そうでなければ、 P=Q 私達は埗る

m=3x2P+a2yP−1 bmodp


方皋匏は倉曎されおおらず、これは偶然ではありたせん。実際、これらの方皋匏は、有限および無限の䞡方のフィヌルドで機胜したすただし、  mathbbF2 そしお  mathbbF3 特別なケヌスです。 説明する必芁があるず思いたす。 しかし、問題がありたす。グルヌプ法の蚌明には通垞、耇雑な数孊的抂念が必芁です。 しかし、最も単玔な抂念のみを䜿甚するStefan Friedlの蚌明を芋぀けたした。 これらの方皋匏がどのフィヌルドでもほが動䜜する理由に興味がある堎合は、それをお読みください。

曲線に戻りたしょう-幟䜕孊的な方法を決定したせん。実際、問題が発生したす。 たずえば、前の郚分では、蚈算するこずを蚀った P+P 曲線の接線を P 。 しかし、連続性がない堎合、「接線」ずいう蚀葉はすべおの意味を倱いたす。 この問題や他の問題を回避する方法を芋぀けるこずができたすが、玔粋に幟䜕孊的な方法は耇雑すぎお完党に非実甚的です。

代わりに、 ポむントを远加するために䜜成した察話型ツヌルを詊すこずができたす。

楕円曲線のグルヌプ順序


有限䜓䞊に定矩された楕円曲線は有限数の点を持っおいるず蚀いたした。 重芁な質問に答える必芁がありたす。そこにはいく぀のポむントがありたすか

最初に、グルヌプ内のポむントの数をグルヌプ順序ず呌びたす。

可胜なすべおの倀を確認する x 0からの範囲で p−1 ポむントをカりントするこずは䞍可胜な方法になりたす。 Op 次の堎合、このタスクは「難しい」 p 倧きな玠数です。

幞いなこずに、順序を蚈算するためのより高速なアルゎリズムがありたす Schoofのアルゎリズム 。 私はその詳现には立ち入りたせん-䞻なこずは、それが倚項匏時間で行われるこずであり、これが我々が必芁なこずです。

スカラヌ乗算ず巡回サブグルヌプ


実数の堎合、乗算は次のように定矩できたす。

nP=\アンダヌブレヌスP+P+ cdots+Pn  texttimes


繰り返しになりたすが、倍加アルゎリズムを䜿甚しお、乗算を実行できたす。 Ok どこで k ビット数です n  スカラヌ乗算のためのむンタラクティブツヌルを曞きたした 。

楕円曲線䞊の点の乗算  mathbbFp 興味深い特性がありたす。 曲線を描く y2 equivx3+2x+3 pmod97 そしおポむント P=3、6 。 ここで、次の倍数であるすべおの倀を蚈算したす P 

埪環サブグルヌプ

すべおの倀はの倍数です P=3、6 5぀の異なるポむント 0 、 P 、 2P 、 3P 、 4P 呚期的に繰り返されたす。 楕円曲線のスカラヌ乗算ずモゞュラヌ挔算の加算の類䌌性に気付くのは簡単です。


すぐに2぀の機胜に気付くこずができたす。たず、倀の倍数の倀 P 、5぀のみ楕円曲線の他の点は決しおそれらになりたせん。 第二に、それらは呚期的に繰り返されたす。 あなたは曞くこずができたす


党䜓ずしお k 。 剰䜙陀算挔算子のおかげで、これらの5぀の方皋匏は1぀に「絞る」こずができたす。 kP=k bmod5P 。

さらに、 これらの5぀のポむントが加算操䜜に関しお閉じおいるこずをすぐに瀺すこずができたす 。 それはどういう意味ですか芁玄しおも 0 、 P 、 2P 、 3P たたは 4P 、結果は垞にこれら5぀のポむントのいずれかになりたす。 繰り返したすが、楕円曲線の他のすべおの点が結果になるこずはありたせん。

同じこずが他のすべおのポむントにも圓おはたりたす。 P=3、6 。 実際、私たちが取れば P 䞀般的な圢匏では

nP+mP=\䞋括匧P+ cdots+Pn  texttimes+\䞋括匧P+ cdots+Pm  texttimes=n+mP


぀たりの倍数である2぀の倀を远加するず P 、その埌、 P ぀たり、倀の倍数である倀 P 加算操䜜に関しお閉じられおいたす。 これは、耇数のセットが P 倀は 、楕円曲線によっお圢成されるグルヌプの埪環サブグルヌプです 。

「サブグルヌプ」は、別のグルヌプのサブセットであるグルヌプです。 「埪環サブグルヌプ」は、前の䟋で瀺したように、芁玠が埪環的に繰り返されるサブグルヌプです。 ポむント P 埪環サブグルヌプのゞェネレヌタたたはベヌスポむントず呌ばれたす。

サむクリックサブグルヌプは、ECCおよびその他の暗号システムの基盀です。 埌でこれがなぜそうなのかを説明したす。

サブグルヌプ泚文


ポむントによっお生成されたサブグルヌプの順序は䜕だろうず思うかもしれたせん P たたは、蚀い換えれば、順序は䜕ですか P  この質問に答えるためにSchoofアルゎリズムを䜿甚するこずはできたせん。このアルゎリズムは楕円曲線党䜓に察しおのみ機胜し、サブグルヌプには機胜しないためです。 問題の解決に進む前に、さらに情報が必芁です。


これらの2぀の事実により、基点を持぀サブグルヌプの順序を決定する機䌚が埗られたす。 P 

  1. 楕円曲線の次数を蚈算する N Schufアルゎリズムを䜿甚したす。
  2. すべおの仕切りを芋぀ける N 。
  3. 各陀数に぀いお n 秩序の N 蚈算する nP 。
  4. 最小 n そのような nP=0 は、サブグルヌプの順序です。

たずえば、曲線 y2=x3−x+3 フィヌルド䞊  mathbbF37 順序がありたす N=42 。 そのサブグルヌプは秩序があるかもしれたせん n=1 、 2 、 3 、 6 、 7 、 14 、 21 たたは 42 。 代甚すれば P=2、3 それから私たちはそれを芋るでしょう P ne0 、 2P ne0 、...、 7P=0 ぀たり、順序 P 等しい n=7 。

ランダムな陀数ではなく、最小のものを取るこずが重芁であるこずを考慮しおください。 ランダムに遞択するず、取埗できたす n=14 、これはサブグルヌプの順序ではなく、耇数の順序の1぀です。

別の䟋方皋匏によっお定矩された楕円曲線 y2=x3−x+1 フィヌルド䞊  mathbbF29 順序がありたす N=37 玠数です。 そのサブグルヌプは泚文のみ可胜です n=1 たたは 37 。 掚枬できるように n=1 、サブグルヌプには無限遠点のみが含たれたす。 い぀ n=N 、サブグルヌプには楕円曲線のすべおの点が含たれたす。

ベヌスポむント怜玢


ECCアルゎリズムには、高次のサブグルヌプが必芁です。 したがっお、通垞、楕円曲線が遞択され、その次数が蚈算されたす N 、グルヌプの順序 n 倧きな陀数が遞択され、適切なベヌスポむントが芋぀かりたす。 ぀たり、基点を遞択せず​​、その順序を蚈算した埌、逆の操䜜を実行したす。たず、かなり適切な順序を遞択しおから、適切な基点を探したす。 これを行う方法

最初に、別の抂念を導入する必芁がありたす。 ラグランゞュの定理は、その数が h=N/n 垞に党䜓 なぜなら n -仕切り N  数 h それはそれ自身の名前を持っおいたすそれはサブグルヌプ補因子です。

ここで、楕円曲線の各点に察しお、 NP=0 。 これは本圓です N 可胜な倍数です n 。 補因子の定矩に基づいお、次のように蚘述できたす。

nhP=0


今、それを仮定したす n -玠数蚘事の最初の郚分で述べられおいる理由から、単玔な泚文を奜む。 この圢匏で曞かれたこの方皋匏は、 G=hP 順序のサブグルヌプを䜜成したす n 陀く G=hP=0 サブグルヌプの順序は1です。

これに照らしお、次のアルゎリズムを定矩できたす。

  1. 泚文を蚈算する N 楕円曲線。
  2. 泚文を遞択しおください n サブグルヌプ。 アルゎリズムが機胜するには、数倀が玠数で陀数である必芁がありたす N 。
  3. 補因子を蚈算する h=N/n 。
  4. 曲線䞊のランダムな点を遞択したす P 。
  5. 蚈算する G=hP 。
  6. もし G 0に等しい堎合、ステップ4に戻りたす。それ以倖の堎合、次数を持぀サブグルヌプゞェネレヌタヌが芋぀かりたした。 n そしお補因子 h 。

アルゎリズムは次の堎合にのみ機胜するこずに泚意しおください。 n シンプル。 堎合のみ n 泚文は簡単ではなかった G 仕切りの1぀である可胜性がありたす n 。

離散察数


連続楕円曲線の堎合ず同様に、次の質問に぀いお議論する必芁がありたす。 P そしお Q それから䜕になりたす k そのような Q=kP 

楕円曲線の離散察数問題ずしお知られるこのタスクは、「耇雑」であるず芋なされ、埓来のコンピュヌタヌで実行されおいる倚項匏時間アルゎリズムは芋぀かりたせんでした。 ただし、このビュヌには数孊的蚌拠はありたせん。

このタスクは、デゞタル眲名アルゎリズムDSA、Diffie-HellmanプロトコルDH、El-Gamalスキヌムなどの他の暗号システムで䜿甚される離散察数問題に䌌おいたす。 タスクの名前は偶然䞀臎したせん。 それらの違いは、これらのアルゎリズムがスカラヌ乗算ではなく、环乗法を䜿甚するこずです。 それらの離散察数問題は次のように定匏化できたす既知の堎合 a そしお b それから䜕になりたす k そのような b=ak bmodp 

これらの問題は䞡方ずも、有限集合より具䜓的には埪環サブグルヌプを䜿甚するため、「離散」です。 そしお、それらは通垞の察数に䌌おいるため、「察数」です。

ECCは、珟時点では、楕円曲線の離散察数問題が暗号化で䜿甚される他の同様のタスクず比范しお「より耇雑」であるずいう点で興味深いです。 これは、党䜓ずしお必芁なビットが少ないこずを意味したす k 他の暗号システムず同じレベルの保護を埗るために、この蚘事の最埌の第4郚でこれを詳现に怜蚎したす。

パヌト3ECDHおよびECDSA


スコヌプパラメヌタヌ


楕円曲線アルゎリズムは、有限䜓䞊の楕円曲線の埪環サブグルヌプで機胜したす。 したがっお、アルゎリズムには次のパラメヌタヌが必芁です。


その結果、アルゎリズムのドメむンのパラメヌタヌは6 (p,a,b,G,n,h) 。

ランダム曲線


離散察数問題が「耇雑」だず蚀ったずき、私は完党に正確ではありたせんでした。かなり匱い楕円曲線のクラスがあり、特殊なアルゎリズムを䜿甚しお離散察数問題を効果的に解決できたす。たずえば、p=hn぀たり、最終フィヌルドの次数は楕円曲線の次数に等しい、スマヌト攻撃に察しお脆匱です。これは、叀兞的なコンピュヌタヌで倚項匏時間の離散察数を解くために䜿甚できたす。

今、カヌブ定矩゚リアのパラメヌタを䞎えたず仮定したす。誰にも知られおいない新しいクラスの匱い曲線を発芋した可胜性があり、おそらく、曲線の離散察数を蚈算するための「高速」アルゎリズムを䜜成したした。どうすればその反察、぀たり 脆匱性に぀いお知らないのですか曲線が「保護されおいる」こずをどのように保蚌できたすか自分の攻撃に䜿甚できないずいう意味で。

この問題を解決するには、定矩゚リアの远加パラメヌタヌを䜿甚する必芁がある堎合がありたす。シヌド倀 S 。 これは、係数の生成に䜿甚される乱数です。 a そしお b たたは基点 Gたたは䞡方。これらのパラメヌタヌは、ハッシュ蚈算によっお生成されたす。S 。 ハッシュは、ご存じのずおり、蚈算は「簡単」ですが、元に戻すのは「困難」です。


生成倀からランダム曲線を生成するための単玔なスキヌム乱数ハッシュを䜿甚しお、曲線のさたざたなパラメヌタヌを蚈算したす。


定矩゚リアのパラメヌタヌからハッシュをチヌトしお再䜜成したい堎合、「困難な」問題を解決する必芁がありたすハッシュを逆にする。

生成倀を䜿甚しお生成された曲線は、ランダムにチェックず呌ばれたす。ハッシュを䜿甚しおパラメヌタを生成する原理は、「私の袖に䜕もない」ずしお知られおおり、暗号化で広く䜿甚されおいたす。

このトリックは、䜜者に知られおいる脆匱性を持぀ような方法で曲線が特別に䜜成されなかったずいう特定の保蚌を䞎えたす。実際、生成倀ず䞀緒に曲線を䞎えるず、パラメヌタヌをarbitrarily意的に遞択できなかったこずを意味したすa そしお b、そしおあなたは私が特別な攻撃を䜿甚できないこずを比范的冷静にするこずができたす。「盞察」ずいう蚀葉を䜿甚する理由に぀いおは、第4郚で説明したす。

ランダム曲線を生成およびチェックするための暙準化されたアルゎリズムは、ANSI X9.62で説明されおおり、SHA-1に基づいおいたす。興味がある堎合は、SECG仕様でテスト可胜なランダム曲線を生成するためのアルゎリズムに぀いお読むこずができたす「怜蚌可胜なランダム曲線ずベヌスポむントゞェネレヌタヌ」を参照。OpenSSLに同梱されおいるすべおのランダム曲線をチェック

する小さなPythonスクリプトを䜜成したした。私はそれを芋るこずを匷くお勧めしたす

楕円曲線暗号


私たちは倚くの時間を費やしたしたが、぀いにそこに着きたした簡単です

  1. 秘密鍵はランダムな敎数ですd から遞択 {1,
,n−1} どこ n -サブグルヌプの順序。
  2. 公開鍵がポむントですH=dG どこ G -サブグルヌプの基点。

ほら 知っおいればd そしお G 定矩ドメむンの他のパラメヌタヌず䞀緒に、次に芋぀けたす H「シンプル。」しかし、私たちが知っおいればH そしお G、秘密鍵を怜玢 d 離散察数問題を解く必芁があるため、「難しい」問題です。

次に、この原理に基づいた2぀の公開キヌアルゎリズムに぀いお説明したす暗号化に䜿甚されるECDH楕円曲線の楕円曲線Diffie-Hellman、Diffie-Hellmanプロトコル、およびデゞタル眲名に䜿甚されるECDSA楕円曲線デゞタル眲名アルゎリズム。

ECDHを䜿甚した暗号化


ECDHは、楕円曲線甚のDiffie-Hellmanアルゎリズムのバリ゚ヌションです。実際、暗号化アルゎリズムではなく、鍵合意プロトコルである可胜性が高くなりたす。本質的に、これはECDHがキヌを生成および亀換する順序をある皋床たで定矩するこずを意味したす。このようなキヌを䜿甚しお、デヌタを暗号化する方法を自分で遞択できたす。

次の問題を解決したす。2者通垞はAliceずBobは、第䞉者仲介者、Man In the Middleが情報を傍受できるが解読できないように、情報を安党に亀換したい。たずえば、これはTLSの原則の1぀です。

仕組みは次のずおりです。

  1. たず、アリスずボブは、自分の秘密鍵ず公開鍵を生成したす。アリスには秘密鍵がありたすdA および公開鍵 HA=dAG ボブには鍵がありたす dB そしお HB=dBG 。 アリスずボブの䞡方が同じ定矩領域パラメヌタヌを䜿甚するこずに泚意しおください1぀のベヌスポむント G 同じ有限䜓の1぀の楕円曲線䞊。
  2. アリスずボブは公開鍵を亀換したす HA そしお HB 保護されおいないチャネルを通じお。仲介䞭間者傍受HA そしお HB しかし、どちらも識別できたせん dA たた dB 離散察数問題を解くこずなく。
  3. アリス蚈算 S=dAHB ボブ自身の秘密鍵ずボブの公開鍵を䜿甚、ボブは蚈算したす S=dBHA アリス自身の秘密鍵ずアリスの公開鍵を䜿甚。に泚意しおくださいSアリスずボブの䞡方で同じです。実際には

    S=dAHB=dA(dBG)=dB(dAG)=dBHA


ただし、仲介者は HA そしお HB定矩ドメむンの他のパラメヌタず䞀緒に、圌は共有秘密鍵を芋぀けるこずができなくなりたす S 。 これはDiffie-Hellman問題ず呌ばれ、次のように定匏化できたす。

結果はどうなりたすか abP 3点 P 、 aP そしお bP 

たたは同様に

結果はどうなりたすか kxy 3぀の党䜓のために k 、 kx そしお ky 

埌者の定匏化は、モゞュラヌ挔算に基づいた元のDiffie-Hellmanアルゎリズムで䜿甚されたす。

Ecdh

Diffie-Hellmanプロトコルアリスずボブは共有秘密キヌを「単玔に」蚈算できたすが、仲介者は「困難な」問題を解決する必芁がありたす。

Diffie-Hellman問題の根底にある原理は、YouTubeの優れたKhan Academyビデオでも説明されおいたす。このビデオでは、埌でモゞュラヌ挔算楕円曲線ではないに適甚されるDiffie-Hellmanアルゎリズムに぀いお説明しおいたす。

楕円曲線のDiffie-Hellman問題は「耇雑」ず芋なされたす。離散察数問題ず同じくらい「耇雑」であるず考えられおいたすが、これに぀いおの数孊的蚌拠はありたせん。察数問題を解くこずはDiffie-Hellman問題を解く方法であるため、「難しく」なるこずはできないず自信を持っお蚀うこずができたす。

共有秘密キヌを受け取ったアリスずボブは、察称暗号化でデヌタを亀換できたす。

たずえば、座暙を䜿甚できたすx キヌ SAESや3DESなどの安党な暗号でメッセヌゞを暗号化するためのキヌずしお。これがTLSの機胜です。違いは、TLSが座暙を接続するこずですx 接続に関連する他の数倀を䜿甚しお、結果のバむト文字列のハッシュを蚈算したす。

ECDH実隓


私は楕円曲線䞊で秘密/公開鍵ず共有秘密鍵を蚈算する別のPythonスクリプトを曞きたした。

前述の䟋ずは異なり、このスクリプトでは、小さなフィヌルドの単玔な曲線ではなく、暙準化された曲線を䜿甚したす。私はカヌブ遞んだsecp256k1グルヌプSECGベヌス、«効率的な暗号化グルヌプのための芏栌です» のCerticom。同じ曲線がビット眲名でデゞタル眲名に䜿甚されたす。スコヌプのオプションは次のずおりです。


これらの番号はOpenSSL゜ヌスコヌドから取埗されたす。

もちろん、スクリプトを倉曎し、定矩領域の他の曲線ずパラメヌタヌを䜿甚できたす。単玔なフィヌルドず通垞のWeierstrass定匏を䜿甚しおください。そうしないず、スクリプトは機胜したせん。

このスクリプトは非垞にシンプルで、䞊蚘のアルゎリズムの䞀郚ポむントの远加、倍加、ECDHが含たれおいたす。勉匷しお実行するこずをお勧めしたす。およそ次の出力が䜜成されたす。

 Curve: secp256k1 Alice's private key: 0xe32868331fa8ef0138de0de85478346aec5e3912b6029ae71691c384237a3eeb Alice's public key: (0x86b1aa5120f079594348c67647679e7ac4c365b2c01330db782b0ba611c1d677, 0x5f4376a23eed633657a90f385ba21068ed7e29859a7fab09e953cc5b3e89beba) Bob's private key: 0xcef147652aa90162e1fff9cf07f2605ea05529ca215a04350a98ecc24aa34342 Bob's public key: (0x4034127647bb7fdab7f1526c7d10be8b28174e2bba35b06ffd8a26fc2c20134a, 0x9e773199edc1ea792b150270ea3317689286c9fe239dd5b9c5cfd9e81b4b632) Shared secret: (0x3e2ffbc3aa8a2836c1689e55cd169ba638b58a3a18803fcf7de153525b28c3cd, 0x43ca148c92af58ebdb525542488a4fe6397809200fe8c61b41a105449507083) 

゚フェメラルECDH


ECDHではなくECDHEに぀いお聞いたこずがある人もいるかもしれたせん。ECHDEの「E」は「Ephemeral」䞀時を衚し、送信されたキヌが䞀時的であり、静的ではないずいう事実によるものです。

ECDHEは、たずえば、TLSで䜿甚されたす。TLSでは、接続を確立するずきに、クラむアントずサヌバヌがその堎で秘密/公開キヌペアを生成したす。次に、鍵はTLS蚌明曞承認甚で眲名され、圓事者間で転送されたす。

ECDSAで眲名する


シナリオは次のずおりです。アリスは自分の秘密鍵dA、ボブはアリスの公開鍵で眲名を怜蚌したいHA アリス以倖は有効な眲名を䜜成できないはずです。誰もが眲名を怜蚌できるはずです。

アリスずボブは再び同じスコヌプパラメヌタヌを䜿甚したす。楕円曲線に適甚されるデゞタル眲名アルゎリズムの䞀皮であるECDSAアルゎリズムを芋おいきたす。

ECDSAは、メッセヌゞ自䜓ではなく、メッセヌゞハッシュで機胜したす。ハッシュ関数の遞択は残りたすが、明らかに、暗号化ハッシュ関数を遞択する必芁がありたす。ハッシュビット長がビット長ず同じになるように、メッセヌゞハッシュを切り捚おる必芁がありたすnサブグルヌプの順序。切り捚おられたハッシュは敎数であり、次のように瀺されたす z 。

アリスがメッセヌゞに眲名するために実行するアルゎリズムは、次のように機胜したす。

  1. ランダムな敎数を取る k から遞択 {1,
,n−1} どこ n -これはただグルヌプの順序です。
  2. ポむントを蚈算する P=kG どこ G -サブグルヌプの基点。
  3. 数を蚈算したす r = x P mod n どこ xP 座暙です xP 
  4. もし r=0 、別のものを遞択 k もう䞀床やり盎しおください。
  5. 蚈算する s=k−1(z+rdA)modn どこ dA -アリスの秘密鍵、および k−1 -乗法反転 k モゞュロ n 
  6. もし s=0 、別のものを遞択 k もう䞀床やり盎しおください。

倫婊 (r,s) は眲名です。

ECDSA

アリスはハッシュに眲名したす z 秘密鍵を䜿甚する dA そしおランダム k 。 ボブはアリスの公開鍵を䜿甚しおメッセヌゞの眲名を怜蚌したす HA 。

簡単に蚀えば、このアルゎリズムは最初に秘密鍵 k  ポむントの乗算のおかげでこれは、私たちが知っおいるように、䞀方向は「単玔」で、反察方向は「耇雑」です、秘密鍵は r 。 それから r 方皋匏によっおメッセヌゞハッシュに添付 s=k−1(z+rdA)modn 。

蚈算するこずに泚意しおください s 逆数を蚈算したした k モゞュロ n 。 前の郚分で述べたように、これは次の堎合にのみ機胜するこずが保蚌されおいたす。 n 玠数です。 サブグルヌプが耇玠数のオヌダヌである堎合、ECDSAは䜿甚できたせん。すべおの暙準化された曲線が単玔な順序を持っおいるこずは偶然ではなく、困難な順序を持぀こずはECDSAに適甚されたせん。

眲名怜蚌


眲名を怜蚌するには、アリスの公開鍵が必芁です HA 、切り捚おられたハッシュ z そしお明らかに眲名 (r,s) 。

  1. 敎数を蚈算したす u1=s−1zmodn 。
  2. 敎数を蚈算したす u2=s−1rmodn 。
  3. ポむントを蚈算する P=u1G+u2HA 。

眲名は次の堎合にのみ有効です r=xPmodn 。

アルゎリズムの正確さ


䞀芋、アルゎリズムのロゞックは明らかではないかもしれたせんが、以前に曞き留めたすべおの方皋匏を組み合わせるず、すべおが明確になりたす。

で始たるP=u1G+u2HA 。 公開鍵の定矩から、私たちはそれを知っおいたす HA=dAG どこ dA-秘密鍵。あなたは曞くこずができたす

P=u1G+u2HA=u1G+u2dAG=(u1+u2dA)G


定矩の察象 u1 そしお u2 曞くこずができたす

P=(u1+u2dA)G=(s−1z+s−1rdA)G=s−1(z+rdA)G


ここでは、「 mod n "、簡朔さず、ポむントによっお生成された埪環サブグルヌプ G 順序がありたす n 、぀たり、 mod n「冗長。

以前に決定したs=k−1(z+rdA)modn 。 方皋匏の䞡偎に乗算する k そしお、陀算 s 私達は埗る k=s−1(z+rdA)modn 。 この結果を次の方皋匏に代入したす P 私達は埗る

P=s−1(z+rdA)G=kG


これは同じ方皋匏です。 P 眲名生成アルゎリズムのステップ2で取埗したものです眲名を生成しおチェックするずき、同じポむントを蚈算したすP、ちょうど異なる方皋匏のセット。これがアルゎリズムが機胜する理由です。

ECDSAの実隓


もちろん、眲名を生成および怜蚌するPythonスクリプトを䜜成したした。コヌドは、ECDHスクリプトの䞀郚、特に定矩領域のパラメヌタヌず秘密/公開キヌペアを生成するアルゎリズムをコピヌしたす。

このスクリプトによっお生成される出力は次のずおりです。

 Curve: secp256k1 Private key: 0x9f4c9eb899bd86e0e83ecca659602a15b2edb648e2ae4ee4a256b17bb29a1a1e Public key: (0xabd9791437093d377ca25ea974ddc099eafa3d97c7250d2ea32af6a1556f92a, 0x3fe60f6150b6d87ae8d64b78199b13f26977407c801f233288c97ddc4acca326) Message: b'Hello!' Signature: (0xddcb8b5abfe46902f2ac54ab9cd5cf205e359c03fdf66ead1130826f79d45478, 0x551a5b2cd8465db43254df998ba577cb28e1ee73c5530430395e4fba96610151) Verification: signature matches Message: b'Hi there!' Verification: invalid signature Message: b'Hello!' Public key: (0xc40572bb38dec72b82b3efb1efc8552588b8774149a32e546fb703021cf3b78a, 0x8c6e5c5a9c1ea4cad778072fe955ed1c6a2a92f516f02cab57e0ba7d0765f8bb) Verification: invalid signature 

ご芧のずおり、スクリプトは最初にメッセヌゞバむト文字列「Hello」に眲名し、次に眲名をチェックしたす。次に、圌は別のメッセヌゞの同じ眲名を怜蚌しようずしたす "こんにちは"怜蚌は倱敗したす。最埌に、圌は正しいメッセヌゞの眲名の怜蚌を怜蚌しようずしたすが、別のランダムな公開鍵を䜿甚しお、怜蚌も倱敗したす。

重芁床k


ECDSA眲名を生成するずきは、秘密にしおおくこずが重芁です k本圓に秘密。䜿甚した堎合kすべおの眲名たたは乱数ゞェネレヌタヌがある皋床予枬可胜であれば、攻撃者は秘密鍵を決定できたす

゜ニヌは数幎前に同様の間違いを犯したした。PlayStation 3ゲヌムコン゜ヌルでは、ECDSAアルゎリズムを䜿甚しおSonyによっお眲名されたゲヌムのみを実行できたした。぀たり、PlayStation 3甚の新しいゲヌムを䜜成する堎合、Sonyの眲名がないナヌザヌに配垃するこずはできたせん。問題は、Sonyによっお䜜成されたすべおの眲名が静的を䜿甚しお生成されたこずでしたk 。

これは、乱数ゞェネレヌタの䜜成者が、゜ニヌに觊発されたものず思わXKCD、たたはディルバヌト。

このような状況で、あなたは簡単に秘密鍵を回埩するこずができたすdS ゜ニヌは、眲名枈みのゲヌムを2぀だけ賌入した埌、ハッシュを抜出したす z1 そしお z2 および眲名 (r1,s1) そしお (r2,s2) ドメむンのパラメヌタず䞀緒に。 これは次のように行われたす。


最埌の方皋匏により、蚈算するこずができたす kハッシュずそれに察応する眲名が2぀だけです。今の方皋匏を䜿甚しおs 秘密鍵を取埗できたす。

s=k−1(z+rdS)modn  â‡’  dS=r−1(sk−z)modn


同様の手法は次の堎合に適甚できたす。 k 静的ではありたせんが、䜕らかの圢で予枬可胜です。

パヌト4ECC保護をハッキングするためのアルゎリズムずRSAずの比范


前のパヌトでは、2぀のアルゎリズムECDHずECDSAを調べ、楕円曲線の離散察数問題がその安党性に重芁な圹割を果たす理由を芋぀けたした。しかし、芚えおいるなら、離散察数問題の耇雑さの数孊的蚌明はないず蚀った。それは「耇雑」であるず信じおいるが、それに぀いおは確信がない。蚘事の最初の郚分では、珟代の技術で実際にどれだけ「難しい」かを評䟡しようずしたした。

第二郚では、RSAおよびモゞュラヌ挔算に基づく他の暗号システムがうたく機胜する堎合、なぜ楕円曲線の暗号化が必芁なのかずいう質問に答えようずしたした。

離散察数のハッキング


次に、楕円曲線䞊の離散アルゎリズムを蚈算するための最も効率的な2぀のアルゎリズム、ベむビヌステップアルゎリズム、ゞャむアントステップアルゎリズム、およびポラヌドρアルゎリズムを怜蚎したす。

開始する前に、離散察数問題が䜕であるかを思い出したす。2぀の䞎えられた点を芋぀ける P そしお Q æ•Žæ•° x 方皋匏を満たす Q=xP 。 点は、基点を持぀楕円曲線のサブグルヌプに属したす G そしお泚文 n 。

ベビヌステップ、ゞャむアントステップ


たず、簡単な議論をしたす。い぀でもすべおを曞き留めるこずができたす x どうやっお x=am+b どこで a 、 m そしお b-3぀の任意の敎数。たずえば、次のように曞くこずができたす10=2⋅3+4 。

これを念頭に眮いお、離散察数問題の方皋匏を次のように曞き換えるこずができたす。

Q=xPQ=(am+b)PQ=amP+bPQ−amP=bP


ベビヌステップゞャむアントステップは、「䞭間䌚議」アルゎリズムです。総圓たり攻撃すべおのポむントを蚈算する必芁があるずは異なりxP それぞれに぀いお x 芋぀けるたで Q 、「耇数の」倀を蚈算するこずが可胜です bP および「いく぀かの」倀 Q−amP䞀臎が芋぀かるたで。アルゎリズムは次のように機胜したす。

  1. 蚈算する m=⌈√n⌉
  2. それぞれに぀いお b から 0,
,m 蚈算する bP 結果をハッシュテヌブルに保存したす。
  3. それぞれに぀いお a から 0,
,m 
    1. 蚈算する amP ;
    2. 蚈算する Q−amP ;
    3. ハッシュテヌブルをチェックしおポむントを探す bP そのような Q−amP=bP ;
    4. そのような点が存圚する堎合、私たちは芋぀けたした x=am+b 。

ご芧のずおり、最初にポむントを蚈算したす bP係数の小さな増分「ベビヌステップ」b  1P 、 2P 、 3P、...。アルゎリズムの2番目の郚分では、ポむントを蚈算したすamP倧きな増分「ゞャむアントステップ」「ゞャむアントステップ」でam  1mP 、 2mP 、 3mP 、... m -倚数。

Baby-step, giant-step

ベビヌステップ、ゞャむアントステップアルゎリズム最初に、小さなステップでいく぀かのポむントを蚈算し、それらをハッシュテヌブルに保存したす。次に、倧きなステップを実行しお、新しいポむントをハッシュテヌブル内のポむントず比范したす。察応が芋぀かったら、項の単玔な順列により離散アルゎリズムを蚈算できたす。

アルゎリズムがどのように機胜するかを理解するために、しばらくの間、bP キャッシュされ、方皋匏を取りたす Q=amP+bP 。 これから次のこずを考慮しおください。


その結果、すべおのポむントをチェックしたした 0P 前に nP ぀たり、可胜なすべおのポむントこれ以䞊完了するこずにより 2m 加算ず乗算正確にm 「子䟛の歩み」のために、もう m「ゞャむアントステップ」の堎合。

ハッシュテヌブルの怜玢に時間がかかるず仮定するO(1)このアルゎリズムには時間的および空間的な耇雑性があるこずが簡単にわかりたす O(√n) たたは O(2k/2) ビット長を考慮しお。これはただ指数関数的な時間ですが、ブルヌトフォヌス攻撃よりもはるかに優れおいたす。

実際のベビヌステップのゞャむアントステップ


耇雑さの意味を理解するこずは理にかなっおいたす。 O(√n)実際に。暙準化された曲線を取りたすprime192v1she secp192r1、ansiX9p192r1。この曲線は秩序ですn= 0xffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831。の平方根n-これは玄7.922816251426434・10 28ほが80オクティリオン [箄Transl .:短いスケヌルで]です。

栌玍するものを想像しおください√nハッシュテヌブル内のポむント。各ポむントが正確に32バむトを占有するずしたす。ハッシュテヌブルには玄2.5・10 30バむトのメモリが必芁です。むンタヌネットを怜玢するず、䞖界䞭のドラむブの珟圚の合蚈容量がれタバむト10 21バむト皋床であるこずがわかりたす。これは、ハッシュテヌブルに必芁なメモリ量よりもほが10桁少ないですポむントがそれぞれ1バむトを占めおいたずしおも、すべおを保存するこずはできたせんでした。

これは印象的であり、芚えおいるならさらに印象的ですprime192v1-これは最小次数を持぀曲線の1぀です。secp521r1別の暙準NIST曲線の次数は玄6.9・10 156です

ベビヌステップゞャむアントステップの実隓


私が曞いたのPythonにスクリプトをアルゎリズムベビヌステップゞャむアント・ステップを䜿甚しお、離散察数を蚈算し、。明らかに、これは小さな次数の曲線でのみ機胜しsecp521r1たすMemoryError。取埗したい堎合を陀き、䜿甚しないでください。

スクリプトは、およそ次の出力を生成したす。

 Curve: y^2 = (x^3 + 1x - 1) mod 10177 Curve order: 10331 p = (0x1, 0x1) q = (0x1a28, 0x8fb) 325 * p = q log(p, q) = 325 Took 105 steps 


ρポラヌド


ρポラヌドは、離散察数を蚈算するための別のアルゎリズムです。同じ挞近的な時間の耇雑さを持ちたす。O(√n) ベビヌステップのゞャむアントステップですが、その空間的な耇雑さは O(1) 。巚倧なメモリ芁件のために、ベビヌステップゞャむアントステップが離散察数を解決できなかった堎合、ρポラヌドはそれを凊理できたすか確認したしょう...

最初に、離散察数問題をもう䞀床思い出させおくださいfind for givenP そしお Q 党䜓 x そのような Q=xP 。 ポラヌドρアルゎリズムでは、わずかに異なる問題を解決したす。 P そしお Q 党䜓 a 、 b 、 A そしお B そのような aP+bQ=AP+BQ 。

4぀の敎数が芋぀かったら、次の方皋匏を䜿甚できたす。 Q=xP 蚈算する x 

aP+bQ=AP+BQaP+bxP=AP+BxP(a+bx)P=(A+Bx)P(a−A)P=(B−b)xP


今、私たちは取り陀くこずができたす P 。 しかし、これを行う前に、サブグルヌプが呚期的であり、順序があるこずを忘れないでください n 、぀たり、ポむントの乗算に䜿甚される係数はモゞュロで取埗されたす n 

a−A≡(B−b)x(modn)x=(a−A)(B−b)−1modn


Oll Pollardの操䜜原理は単玔です。ペアの擬䌌ランダムシヌケンスを定矩したす (a,b) 。 このペアのシヌケンスを䜿甚しお、ポむントのシヌケンスを生成できたす。 aP+bQ 。 以来 P そしお Q1぀の埪環サブグルヌプの芁玠、点のシヌケンス aP+bQ たた、呚期的。

これは、ペアの擬䌌ランダムシヌケンスを回る堎合(a,b)遅かれ早かれ、サむクルが芋぀かりたす。぀たり、ペアが芋぀かりたす (a,b) そしお別のペア (A,B) そのような aP+bQ=AP+BQ 。同じポむント、別々のペア䞊蚘の方皋匏を適甚しお察数を芋぀けるこずができたす。

課題は、効率的な方法でルヌプを怜出する方法ですか

カメずりサギ


ルヌプを怜出するために、すべおの可胜な倀を確認できたす a そしお bペア倉換関数を䜿甚したすが、n2 そのようなペア、アルゎリズムは耇雑になりたす On2、これは単玔な総圓たり攻撃よりもはるかに悪いです。

しかし、より高速な方法がありたすタヌトルアンドりサギアルゎリズムフロむドサむクル怜玢アルゎリズムずも呌ばれたす。䞋の図は、ポラヌドρアルゎリズムの基になっおいるカメずりサギの方法の動䜜原理を瀺しおいたす。

Tortoise and Hare

曲線がありたす y2≡x3+2x+3(mod97) ずポむント P=(3,6) そしお Q=(80,87) 。 ポむントは5次の埪環サブグルヌプに属したす。2぀の異なるペアが芋぀かるたで、異なる速床のペアのシヌケンスを巡回したす。 (a,b) そしお (A,B) ワンポむントを䞎えたす。この堎合、ペアが芋぀かりたした (3,3) そしお (2,0) 、察数を次のように蚈算できたす x=(3−2)(0−3)−1mod5=3 。 そしお実際、私たちはそれをやった Q=3P 。

本質的には、ペアの擬䌌ランダムシヌケンスを䜿甚したす (a,b) 察応するポむントのシヌケンスずずもに aP+bQ 。 ペアのシヌケンス (a,b) 埪環する堎合もしない堎合もありたすが、ポむントのシヌケンスは正確に埪環したす。 P そしお Q1぀の基点から生成され、サブグルヌプのプロパティから、スカラヌの乗算ず加算によっおのみサブグルヌプから「゚スケヌプ」できないこずがわかりたす。

次に、カメずりサギの2匹の動物を取り、巊から右に順番に回したす。カメ画像の緑色の点は遅く、各点を次々に読み取りたす。ノりサギ赀い点は速く、すべおのステップで点をスキップしたす。

しばらくするず、カメずノりサギは1぀のポむントを芋぀けたすが、係数のペアは異なりたす。たたは、方皋匏に入れるために、カメはペアを芋぀けたす(a,b) りサギはカップルです (A,B) そのような aP+bQ=AP+BQ 。

ランダムシヌケンスがアルゎリズムを介しお静的に栌玍されおいない決定された堎合、操䜜の原則にはすべおが必芁であるこずが簡単にわかりたす。 O(logn) スペヌス。挞近時間の耇雑さの蚈算はそれほど単玔ではありたせんが、時間の耇雑さを瀺す確率的蚌明を構築できたす O(√n 、私たちが蚀ったように。

ρポラヌドの実隓


Pollardρアルゎリズムを䜿甚しお離散察数を蚈算するPythonスクリプトを䜜成したした。これは初期のρPollardの実装ではなく、そのわずかなバリ゚ヌションですより効率的な方法でペアの擬䌌ランダムシヌケンスを生成したした。スクリプトには䟿利なコメントがありたすので、アルゎリズムの詳现に興味がある堎合は読んでください。

このスクリプトは、ベビヌステップゞャむアントステップず同様に、小さな曲線に察しお機胜し、同じ出力を生成したす。

ロ・ポラヌドの実践


巚倧なメモリ芁件のため、ベビヌステップのゞャむアントステップは実際には䜿甚できないず述べたした。䞀方、Pollardのroアルゎリズムは、ほずんどメモリを必芁ずしたせん。どのくらい実甚的ですか

1998幎に、Certicomはビット長が109〜369の楕円曲線の離散察数を蚈算するための競争を開始したした。珟圚たで、109ビットのみが正垞に解読されおいたす。最埌に成功した詊みは2004幎に行われたした。りィキペディアを匕甚するには

この賞は2004幎4月8日に、クリスモニコを代衚ずする玄2,600人に授䞎されたした。たた、ポラヌドの䞀皮の䞊列化されたroアルゎリズムも䜿甚したした。この蚈算には17か月のカレンダヌ時間がかかりたした。

先ほど蚀ったように、prime192v1これは「最小の」楕円曲線の1぀です。たた、ρポラヌドには䞀時的な耇雑さがありたすO(√n) 。Chris Monikoず同じ手法同じアルゎリズム、同じ機噚、マシン数を䜿甚した堎合、察数を蚈算するのにどれくらい時間がかかりprime192v1たすか

17  Ã—√2192√2109≈5⋅1013 


埗られた結果はそれ自䜓を物語っおおり、そのような技術を䜿甚しお離散察数を解読するこずがいかに難しいかを明確にしたす。

ρポラヌドずベむビヌステップゞャむアントステップの比范


私が結合するこずを決めたスクリプトステップの赀ちゃんステップの巚人、ポラヌドROスクリプトおよび無効化スクリプトを䞭に第四スクリプト圌らのパフォヌマンスを比范したす。

この4番目のスクリプトは、異なるアルゎリズムを䜿甚しお「小さな」曲線䞊のすべおのポむントのすべおの察数を蚈算し、それがかかった時間を報告したす。

 Curve order: 10331 Using bruteforce Computing all logarithms: 100.00% done Took 2m 31s (5193 steps on average) Using babygiantstep Computing all logarithms: 100.00% done Took 0m 6s (152 steps on average) Using pollardsrho Computing all logarithms: 100.00% done Took 0m 21s (138 steps on average) 

ご想像のずおり、列挙方法は他の2぀に比べお非垞に遅いです。ベビヌステップゞャむアントステップはより高速であり、ポラヌドのroアルゎリズムは、ベビヌステップゞャむアントステップよりも3倍以䞊遅くなりたすただし、䜿甚するメモリははるかに少なく、平均しお少ないステップです。

ステップ数を芋おみたしょう。ブルヌトフォヌスで各察数を蚈算するには、平均で5193ステップが必芁でした。5193は10331/2に非垞に近い曲線の次数の半分。ベビヌステップのゞャむアントステップずロ・ポラヌドは、それぞれ152ステップず138ステップを䜿甚したした。これらの2぀の数倀は、10331101.64の平方根に非垞に近い倀です。

さらなる考慮事項


これらのアルゎリズムの説明では、倚くの数字を䜿甚したした。それらを読むずきは、泚意するこずが重芁です。倚くの面でアルゎリズムを倧幅に最適化できたす。機噚が改善される堎合がありたす。特殊な機噚を䜜成できたす。

アプロヌチが今日実甚的でないず思われる堎合、これは改善できないずいう意味ではありたせん。これは、他のより良いアプロヌチがないこずも意味したせん離散察数問題の耇雑さの蚌拠がないこずを忘れないでください。

ショアアルゎリズム


最新の技術が適甚できない堎合、近い将来の技術に぀いおはどうでしょうか状況はたすたす懞念を匕き起こしおいたす倚項匏時間で離散察数を蚈算できる量子アルゎリズムがすでにありたす時間の耇雑さを持぀ショアアルゎリズムO((logn)3) ず空間の耇雑さ O(logn) 。

量子アルゎリズムの効率は、状態の重ね合わせにありたす。叀兞的なコンピュヌタヌでは、メモリセルビットの倀は1たたは0です。それらの間に䞭間状態はありたせん。䞀方、量子コンピュヌタヌキュヌビットのメモリセルは、䞍確実性の原理に埓いたす。枬定されるたで、完党に定矩された状態はありたせん。状態の重ね合わせは、各量子ビットが倀0ず1を同時に持぀こずができるこずを意味したせんむンタヌネットでよく曞かれおいるように。぀たり、キュヌビットを枬定するずき、0を芳枬する確率ず1を芳枬する確率がありたす。量子アルゎリズムの仕事は、各キュヌビットの確率を倉曎するこずです。

この奇劙なこずは、限られた数のキュヌビットで、倚くの可胜な入力デヌタを同時に凊理できるこずを意味したす。たずえば、量子コンピュヌタヌに数字があるこずを䌝えるこずができたすx 0ず n−1 。 必芁なものすべお logn 代わりにキュヌビット nlogn ビット。 次に、量子コンピュヌタヌにスカラヌ乗算を実行するように呜什するこずができたす xP 。 結果ずしお、すべおの点によっお䞎えられる状態の重ね合わせを 0P 前に (n−1)P ぀たり、ここですべおのキュヌビットを枬定するず、次のいずれかのポむントが取埗されたす。 0P 前に (n−1)P 確率で 1/n 。

状態の重ね合わせの完党な力を理解できるように、これに぀いお話したした。Shoreのアルゎリズムはそのようには機胜したせん。実際、より耇雑です。「ふりをする」こずはできたすが、n 同時に、いく぀かの段階で、この状態の数をいく぀かに枛らす必芁がありたす。出力では、数ではなく1぀の数が必芁なためです぀たり、1぀の察数を知っおいる必芁があり、おそらく倚くの誀った察数は必芁ありたせん。

ECCおよびRSA


さお、量子コンピュヌティングに぀いおは忘れたしょう。これはただ深刻な問題にはなりたせん。私は次の質問に答えたいず思いたすRSAが既にうたく機胜 するのに、なぜ楕円曲線に悩たされるのですか

NISTは、同じレベルの保護を埗るために必芁なRSAずECCキヌのサむズを比范した衚を提瀺するこずで、簡単な答えを出したした。
RSAキヌサむズビットECCキヌサむズビット
1024160
2048224
3072256
7680384
15360521

RSAキヌサむズずECCキヌサむズの間に線圢関係はないこずに泚意しおください぀たり、RSAキヌサむズを2倍にした堎合、ECCキヌサむズを2倍にする必芁はありたせん。この衚は、ECCが䜿甚するメモリが少ないだけでなく、それにサむンむンしたキヌの生成がはるかに高速であるこずを瀺しおいたす。

しかし、これはなぜですか答えは、楕円曲線䞊の離散アルゎリズムを蚈算するための最速のアルゎリズムは、ポラヌドρアルゎリズムずベむビヌステップゞャむアントステップであり、RSAの堎合はより高速なアルゎリズムであるずいうこずです。特に、それらの1぀は、数倀フィヌルドをふるう䞀般的な方法です。離散察数の蚈算に䜿甚できる敎数の因数分解アルゎリズム。数倀フィヌルドをふるいにかける䞀般的な方法は、敎数を因数分解するためのはるかに高速なアルゎリズムです。

これはすべお、DSA、Diffie-Hellman、El-Gamalなど、モゞュラヌ挔算に基づいた他の暗号システムに適甚されたす。

NSAの隠れた脅嚁


それでは、難しい郚分に移りたしょう。ここたで、アルゎリズムず数孊に぀いお説明しおきたした。人々ず話し合う時が来たので、事態はさらに耇雑になっおいたす。

芚えおいるなら、第3郚で楕円曲線のいく぀かのクラスが匱いず蚀ったので、疑わしい゜ヌスから信頌できる曲線を取埗する問題を解決するために、定矩ドメむンのパラメヌタヌにランダムシヌド倀を远加したす。たた、暙準のNIST曲線を芋るず、怜蚌可胜なランダムであるこずがわかりたす。

「袖に䜕もない」ずいう原則に぀いおりィキペディアのペヌゞを読むず、次のこずがわかりたす。


これらの番号は均等に分垃しおいるため、ランダムです。そしお、圌らには正圓化があるので、圌らは疑いを匕き起こしたせん。

ここで、次の疑問が生じたす。NIST曲線のランダム生成倀はどこから来るのでしょうか回答残念ながら、私たちは知りたせん。これらの倀には理由がありたせん。

NISTが「かなり倧きな」クラスの匱い楕円曲線を発芋し、倀を生成するさたざたな可胜性のあるバリ゚ヌションを詊し、脆匱な曲線を芋぀けた可胜性はありたすか私はこの質問に答えるこずはできたせんが、それは論理的で重芁な質問です。 NISTが脆匱な乱数ゞェネレヌタヌを少なくずも正垞に暙準化したこずがわかっおいたす。ゞェネレヌタヌは、奇劙なこずに、楕円曲線に基づいおいたす。おそらく圌は倚くの匱い楕円曲線も正垞に暙準化したのでしょうか確認方法は たさか。

「怜蚌可胜なランダム」ず「保護された」は同矩語ではないこずを理解するこずが重芁です。察数タスクの耇雑さやキヌの長さは関係ありたせん。アルゎリズムがハッキングされた堎合、私たちにできるこずは䜕もありたせん。

これに関しお、悪甚される可胜性のある特別なドメむンパラメヌタを必芁ずしないため、RSAが勝ちたす。 RSA他のモゞュラヌ算術システムず同様は、圓局を信頌できず、定矩ドメむン甚に独自のパラメヌタヌを䜜成できない堎合に適した代替手段ずなりたす。奜奇心が匷い堎合はい、TLSはNIST曲線を䜿甚できたす。 Googleにチェックむンするず、接続時にECDHEずECDSAがprime256v1に基づいおいるsecp256p1に基づく蚌明曞ずずもに䜿甚されるこずがわかりたす。

以䞊です


この蚘事をお楜しみください。楕円曲線䞊の暗号の珟圚の状態を理解するために必芁な基本情報、甚語、仮定を玹介しようずしたした。私が成功すれば、既存のECCベヌスの暗号システムに察凊し、より深いドキュメントを読むこずで知識を広げるこずができたす。この蚘事を曞くずき、私は倚くの詳现をスキップし、簡略化された甚語を䜿甚したしたが、そうでなければ、むンタヌネット䞊に提瀺された情報を理解しおいないだろうず感じたした。私は、情報の単玔さず完党性の間の良い劥協点を芋぀けるこずができたず信じおいたす。

ただし、この蚘事だけを読んだ埌は、ECCに基づいた安党な暗号化システムを実装できないこずに泚意しおください。セキュリティには、倚くの埮劙ではあるが重芁な詳现に関する知識が必芁です。スマヌト攻撃ずSony゚ラヌの芁件を芚えおおいおください。これらは、安党でないアルゎリズムを䜜成する方法ず、それらを簡単に悪甚できる方法の2぀の䟋です。

それでは、ECCの䞖界をさらに深く掘り䞋げおみたいずお考えなら、どこから始めたすか

たず、単玔なフィヌルド䞊のワむ゚ルシュトラス曲線を芋たしたが、他のタむプの曲線ずフィヌルドがあるこずを知っおおく必芁がありたす。


ECCの実装の詳现に興味がある堎合は、OpenSSLおよびGnuTLSの゜ヌスを読むこずをお勧めしたす。

そしお最埌に、アルゎリズムの安党性ず効率ではなく、数孊的な詳现に興味がある堎合は、次のこずを知る必芁がありたす。


そしお、堎の理論ずずもに有限の堎を研究するこずを忘れないでください。このトピックに興味がある堎合は、そのようなキヌワヌドを探す䟡倀がありたす。この蚘事は正匏に終了したす。フレンドリヌなコメント、ツむヌト、手玙をありがずう。倚くの人が、関連するトピックに関する他の蚘事を曞くかどうか尋ねたした。私の答えは倚分。あなたはあなたの提案を送るこずができたすが、私は䜕も玄束したせん。



Source: https://habr.com/ru/post/J335906/


All Articles