Upgrade to Pro — share decks privately, control downloads, hide ads and more …

楕円曲線の点の乗算

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.

 楕円曲線の点の乗算

Avatar for shigeyuki azuchi

shigeyuki azuchi

December 03, 2021
Tweet

More Decks by shigeyuki azuchi

Other Decks in Technology

Transcript

  1. 1 楕円曲線の点の乗算
 楕円曲線暗号では、さまざまな状況で点の乗算(スカラー倍算)を行う
 
 • 秘密鍵から公開鍵を計算する:P = xG
 ◦ G:各楕円曲線毎に定められているベースポイント


    ◦ x:秘密鍵
 • ECDSA/Schnorr署名の生成/検証
 • ECDH
 • HDウォレット
 • etc..
 
 ある点Pに対して、スカラー値xを乗算してできる点=Pをx回加算した点
 つまり、乗算の実態は同じ点の加算

  2. 2 点の加算とは?
 楕円曲線の点P = (x, y)の各座標は、 y2 ≡ x3 +

    ax + b (mod p)を満たす点
 
 • 点P = (x 1 , y 1 )と点Q(x 2 , y 2 )の加算公式:
 
 
 
 • P = Q = (x 1 , y 1 )の場合の加算公式:
 
 

  3. 3 バイナリ法
 乗算も本当にx回加算していては、とても遅い→高速化が必要 
 【バイナリ法】
 Q = xPを求める場合、
 1. スカラー値をバイナリ展開する(x→1001101101

    のように) 
 2. 結果の点Qを初期化する(無限遠点) 
 3. 計算に用いる一時的な点T = Pとする 
 4. 最下位ビットから順に各ビット値によって以下の計算を行う 
 a. bit = 1の場合、加算(Q += T)と2倍算(T = 2T)を行う 
 b. bit = 0の場合、2倍算(T = 2T)を行う 
 ビットシフトし、最上位ビットまで続ける。 
 バイナリ法の計算量はO(log x)の2倍算と、O((log x)/2)の点の加算 

  4. 4 射影座標の利用
 点の加算公式内の逆元の演算がコスト高 
 
 逆元の演算が不要な座標系を使うと計算速度が向上する 
 アフィン座標(x, y)ではなく射影座標(X, Y,

    Z)を利用する 
 プロジェクティブ座標系:Y2Z ≡ X3 + aXZ2 + bZ3 (mod p) → x = X/Z mod p, y = Y/Z mod p
 • P(X 1 , Y 1 , Z 1 ) + Q(X 2 , Y 2 , Z 2 )の加算
 ◦ u = Y 2 Z 1 - Y 1 Z 2
 ◦ v = X 2 Z 1 - X 1 Z 2
 ◦ A = u2Z 1 Z 2 - v3 - 2v2X 1 Z 2
 ◦ X 3 = vA
 ◦ Y 3 = u(v2X 1 Z 2 - A) - v3Y 1 Z 2
 ◦ Z 3 = v3Z 1 Z 3
 • P = Q = (X, Y, Z) の加算
 ◦ w= aZ2 + 3X2
 ◦ s = YZ 
 ◦ B = sXY 
 ◦ h = w2 - 8B
 
 
 ◦ X 3 = 2hs
 ◦ Y 3 = w(4B - h) - 8Y2s2
 ◦ Z 3 = 8s3
 
 
 最初に座標系を変換して、計算後に座標系を 
 再変換することで逆元の計算コストを最小限に