國家密碼標準-商密SM2官方文檔整理

SM2官方文檔整理

演算法原理

SM2演算法介紹

中國自主知識產權的商業密碼演算法,是ECC(橢圓加密演算法)的一種,基於橢圓曲線離散對數問題(公鑰密碼體制所依據的難題主要為大素數分解問題、離散對數問題、橢圓曲線),計算複雜度是指數級。同等安全條件下,橢圓曲線密碼較其他公鑰演算法所需密鑰長度小很多。

ElGamal離散對數密碼體制

(一)公鑰密鑰生成

  1. Alice首先構造一條橢圓曲線E,在曲線上選擇一點G作為生成元,並求G的階為n,要求n必須為質數。此時構成了一個循環群<G>。

  2. Alice選擇一個私鑰k (k < n),生成公鑰 Q = kG

  3. Alice將公鑰組E、Q、G發送給Bob

(二)加密過程

  1. Bob收到資訊後,將明文編碼為M,M為曲線上一點,並選擇一個隨機數r(r < n, n為G的階)
  2. 2.Bob計算點Cipher1與Cipher2即兩段密文,計算方法如下
  • Cipher1 = M + rQ
  • Cipher2 = rG
  1. Bob把Cipher1和Cipher2發給Alice

(三)解密過程

  1. Alice收到密文後,為了獲得M,只需要Cipher1 – k · Cipher2,因為
Cipher1 - k*Cipher2 = M + rQ - krG = M + rkG - krG = M
  1. 將M解碼即可

SM2官方文檔

標準文檔鏈接:國家商業密碼標準

總則

  1. 規定了橢圓曲線的系統參數以及驗證方法
  2. 規定了橢圓曲線公鑰的驗證方法
  3. 附錄中給出了橢圓曲線示例

第二部分 數字簽名演算法

簽名演算法流程

(一)置M’ = ZA || M M為待簽名數據 ZA為A的可辨識標識、部分橢圓曲線系統參數和用戶A的公鑰的Hash值

(二)計算e = Hash(M’) 並將其轉化為整數

(三)用隨機數發生器生成隨機數k (k>1 k< n-1) n 橢圓曲線的階數 可以通過G計算出

(四)計算橢圓曲線點(x1,y1) = [k]G,並將其轉化為整數 G為橢圓上一點 [k]G指橢圓乘法k倍G

(五)計算r= (e + x1)mod n,若r=0或r+k=n返回(三)

(六)計算s= ((1+da) ^(-1) * (k-r*da))mod n,若s=0則返回(三) da為用戶A的私鑰

(七)將r、s數據類型轉化成位元組串,消息M的簽名為(r,s)

驗簽演算法流程

(一)驗證r>1 r<n-1

(二)驗證s>1 s<n-1

(三)置M’ = ZA || M

(四)計算e = Hash(M’) 並將其轉化為整數

(五)將r s數據類型轉換為整數 計算 t= (r+s)mod n ,若t=0則驗證不通過

(六)計算橢圓曲線點(x1,y1) = [s]G + [t]Pa Pa為A的公鑰

(七) 將x1的數據類型轉換成整數,計算R=(e+x1)mod n,驗證R=r,成立則驗證通過

第三部分 密鑰交換協議

密鑰交換流程

第四部分 公鑰加密演算法

加密演算法流程

(一)用隨機數發生器產生隨機數k (k>1 k<n-1)

(二)計算橢圓曲線點C1=[k]G=(x1,y1),並將其轉換為比特串(A的私鑰生成公鑰)

(三)計算橢圓曲線點S=[h]Pb,若S是無窮遠點,則報錯並退出 h為n的余因子

(四)計算橢圓曲線點[k]Pb=(x2,y2),並將其轉換為比特串(A的私鑰乘B的公鑰)

(五)計算t=KDF(x2||y2,klen),若t為全0比特串,則返回(一) KDF為密鑰派生函數

(六)計算C2=M⊕t

(七)計算C3=Hash(x2||M||y2)

(八)輸出密文C=C1||C3||C2

解密演算法流程

(一)從C中取出比特串C1,將其轉換為橢圓曲線上的點,驗證C1是否滿足橢圓曲線方程

(二)計算橢圓曲線點S=[h]Pb,若S是無窮遠點,則報錯並退出

(三)計算[db]C1=(x2,y2),並將其轉換為比特串 db B的公鑰

(四)計算t=KDF(x2||y2,klen),若t為全0比特串,則返回(一) KDF為密鑰派生函數

(五)從C中取出比特串C2,計算M=C2⊕t

(六)計算u=Hash(x2||M||y2),從C中取出比特串C3,若u不等於C3,則報錯並退出

(七)輸出明文M

第五部分 參數定義

給出了SM2使用素數域256位橢圓曲線參數