ECDSA詳解

ECDSA(Elliptic Curve Digital Signature Algorithm),橢圓曲線數字簽名算法。git

橢圓曲線數字簽名生成

假設Alice但願對消息m進行簽名,所採用的橢圓曲線參數爲D=(p,a,b,G,n,h),對應的密鑰對爲(k,Q),其中Q爲公鑰,k爲私鑰。算法

Alice將按以下步驟進行簽名:ip

  1. 產生一個隨機數d1 \leq d \leq n-1. (簽名算法首先生成一個臨時私公鑰對,該臨時密鑰對用於計算rs值。)
  2. 計算dG=(x_1,y_1),將x_1轉化爲整數\overline{x_1}.
  3. 計算r=\overline{x_1} \ mod \  n,若r=0,則轉向第1步. (r值爲臨時公鑰的x座標值)
  4. 計算d^{-1} \ mod \ n.
  5. 計算哈希值H(m),並將獲得的比特串轉化爲整數e.
  6. 計算s=d^{-1}(e+kr) \ mod \ n,若s=0,則轉向第1步.
  7. (r,s)即爲Alice對消息m的簽名.

d^{-1} is the multiplicative inverse of d modulo n.逆元。文檔

橢圓曲線簽名驗證

爲驗證Alice對消息m的簽名(r,s),Bob須要獲得Alice所用的橢圓曲線參數D=(p,a,b,G,n,h)以及Alice的公鑰Qget

步驟以下:it

  1. 驗證rs是區間[1,n-1]上的整數.
  2. 計算H(m)並將其轉化爲整數e.
  3. 計算w=s^{-1} \ mod \ n.
  4. 計算u_1=ew \ mod \ n以及u_2=rw \ mod \ n.
  5. 計算X=(x_1,y_1)=u_1G+u_2Q.
  6. X=O,則拒絕簽名,不然將Xx座標x_1轉化爲整數\overline{x_1},並計算v=\overline{x_1} \ mod \ n.
  7. 當且僅當v=r時,簽名經過驗證.

橢圓曲線簽名正確性

要證實v=r,只須要證實X=dG便可。io

證實步驟:table

令:C=u_1G + u_2Q = u_1G+u_2kG=(u_1+u_2k)Gclass

u_1u_2帶入:C=(ew+rwk)G=(e+rk)wG=(e+rk)s^{-1}G隨機數

s=d^{-1}(e+kr) \mod  n得出s^{-1}=d(e+kr)^{-1} \mod n,帶入: C=(e+kr)d(d+kr)^{-1}G = dG

證實完畢。

參考文檔:
Elliptic Curve Digital Signature Algorithm
Elliptic Curve Cryptography: ECDH and ECDSA
Understanding How ECDSA Protects Your Data.

相關文章
相關標籤/搜索