SM2官方文件整理
演算法原理
SM2演算法介紹
我國自主智慧財產權的商業密碼演算法,是ECC(橢圓加密演算法)的一種,基於橢圓曲線離散對數問題(公鑰密碼體制所依據的難題主要為大素數分解問題、離散對數問題、橢圓曲線),計算複雜度是指數級。同等安全條件下,橢圓曲線密碼較其他公鑰演算法所需金鑰長度小很多。
ElGamal離散對數密碼體制
(一)公鑰金鑰生成
-
Alice首先構造一條橢圓曲線E,在曲線上選擇一點G作為生成元,並求G的階為n,要求n必須為質數。此時構成了一個迴圈群<G>。
-
Alice選擇一個私鑰k (k < n),生成公鑰 Q = kG
-
Alice將公鑰組E、Q、G傳送給Bob
(二)加密過程
- Bob收到資訊後,將明文編碼為M,M為曲線上一點,並選擇一個隨機數r(r < n, n為G的階)
- 2.Bob計算點Cipher1與Cipher2即兩段密文,計算方法如下
- Cipher1 = M + rQ
- Cipher2 = rG
- Bob把Cipher1和Cipher2發給Alice
(三)解密過程
- Alice收到密文後,為了獲得M,只需要Cipher1 - k · Cipher2,因為
Cipher1 - k*Cipher2 = M + rQ - krG = M + rkG - krG = M
- 將M解碼即可
SM2官方文件
標準文件連結:國家商業密碼標準
總則
- 規定了橢圓曲線的系統引數以及驗證方法
- 規定了橢圓曲線公鑰的驗證方法
- 附錄中給出了橢圓曲線示例
第二部分 數字簽名演算法
簽名演算法流程
(一)置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位橢圓曲線引數