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

楕円曲線の点の乗算

 楕円曲線の点の乗算

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
 
 
 最初に座標系を変換して、計算後に座標系を 
 再変換することで逆元の計算コストを最小限に