- 功能型密碼算法設計與分析
- 黃欣沂 賴建昌
- 686字
- 2023-11-07 17:24:07
1.6 SM2公鑰加密方案
本節介紹我國商用密碼SM2公鑰加密方案。作為我國的商用密碼行業標準(也是國家標準),SM2在區塊鏈、物聯網等新領域應用廣泛。由于SM2公鑰加密方案的安全性分析沒有公開,本節主要描述SM2公鑰加密方案的構造,不討論其安全性。方案描述如下:
●SysGen:輸入安全參數λ,KGC首先選取密碼哈希函數H:{0,1}*→{0,1}z,密鑰派生函數KDF:{0,1}*→{0,1}klen,其中klen為加密消息M的比特長度。選擇橢圓曲線E的一個基點g,g的階為p。計算余因子h=#E(Fq)/p,其中E(Fq)為Fq上橢圓曲線E的所有有理點組成的集合。最后輸出系統參數SP=(g,p,H,KDF,h)。
●KeyGen:輸入系統參數SP,隨機選取,作為用戶私鑰sk,計算pk=gs,作為用戶公鑰。
●Encrypt:設待加密的明文消息為比特串M,接收者公鑰為pk。加密者執行以下運算步驟。
1)選取隨機數;
2)計算橢圓曲線點C1=gk=(x1,y1),將C1的數據類型轉換為比特串;
3)計算橢圓曲線點S=pkh,若S為無窮遠點,則報錯并退出;
4)計算橢圓曲線點pkk=(x2,y2),將坐標(x2,y2)的數據類型轉換為比特串;
5)計算t=KDF(x2||y2,klen),若t為全0比特串,則返回到第1步;
6)計算C2=M⊕t;
7)計算C3=H(x2||M||y2);
8)輸出密文C=C1||C2||C3。
●Decrypt:設待解密密文C=C1||C2||C3,私鑰為sk=s,解密者執行以下運算步驟。
1)從C中取出比特串C1,將C1的數據類型轉換為橢圓曲線上的點,驗證C1是否滿足橢圓曲線方程,若不滿足則報錯并退出;
2)計算橢圓曲線點,若S是無窮遠點,則報錯并退出;
3)計算,將坐標(x2,y2)的數據類型轉換為比特串;
4)計算t=KDF(x2||y2,klen),若t為全0比特串,則報錯并退出;
5)從C中取出比特串C2,計算M′=C2⊕t;
6)計算μ=H(x2||M′||y2),從C中取出比特串C3,若μ≠C3,則報錯并退出;
7)輸出明文M′。