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

zhushoucheng發表於2021-05-16

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位橢圓曲線引數

相關文章