2019年3月19日 星期二

ECDSA 數位簽章

參考文章: https://en.wikipedia.org/wiki/Elliptic_Curve_Digital_Signature_Algorithm
橢圓曲線數位簽章演算法:
假設  ECC(x,y) 是橢圓曲線方程式, 座標產生器 G 將大整數映設到 ECC 曲線上,  使用質數 p 取餘數(%),   1< n < p-1,  假設 order number = n, nG = O
1.  模除數改用橢圓曲線的 order  number  計算
2. 把私章 d, 1 < d < n -1 映射到橢圓曲線的座標 Q = dG = d*G(1) = G(d) ,  Q 就是簽章者的公鑰
3. 用 sha256 擷取文件特徵值 z, z < p,並選一亂數 k, 映設到橢圓曲線 (x, y) = kG = G(k) , 1 < k < n -1
4. 只取出 G(k)的 x 座標,  r = x, 計算出 k 的模倒數 k-1  = 1/k,   (k * k-1) % n = 1
5. 計算 s = (z + rd) / k  %  n =  (z + rd)*k-1  % n,    1 < s < n - 1
6. (z, r,  s , Q)就是帶數位簽章的文件
驗證方式:
1. 數改用橢圓曲線的 order  number  計算,
2. 計算 s 的模倒數 s-1 = 1/s,  (s * s-1) % n  = 1
3. 計算  u = z*s-1  mod n
4. 計算  v  = r*s-1  mod n
5. 用 ECC 加法運算, 計算出座標 K = uG + vQ =G(z*s-1) + G(rd*s-1) = G( (z+rd)*s-1)=G(k)
6. 取出 K 的 x 座標, 應該要等於 r

沒有留言: