evo真人(中国)

文章橫幅PC版
文章橫幅iPad版
文章橫幅手機版

國密算法sm2

TIME:2019-03-20 14:39  click: 1504 次 來源: 未知

《SM2密碼算法使用規範》規定了數字證書SM2算法的公/私鑰及加密簽名格式。

1.SM2公鑰格式用ASN.1描述如下:

SM2PublicKey::=BIT STRING

SM2公鑰是SM2曲線上的一個點,由橫、縱坐標兩個分量來表示,記為(x,y),簡記為Q,每個分量長度為256位。SM2PublicKey內容格式為:04‖X‖Y。其中,X和Y分別表示公鑰的x分量和y分量,其長度各為256位。

2.SM2私鑰格式用ASN描述如下:

SM2PrivateKey::=INTEGER

SM2私鑰是一個大於或等於1且小於n-1的整數(n為SM2算法的階),簡記為k,長度為256位。

3.SM2加密數據格式用ASN1描述如下:

SM2Cipher::=SEQUENCE {

XCoordinate INTEGER,--x分量

YCoordinate INTEGER,--y分量

HASH  OCTET STRING SIZE(32),--摘要值

CigherText  OCTET STRING    --密文

}

假設使用SM2公鑰Q(SM2PublicKey類型)對明文m(字符串類型)進行加密計算。則XCoordinate和YCoordinate為隨機產生的公鑰的x分量和y分量。HASH為使用SM3算法對明文數據運算得到的摘要值,其長度為256位,HASH=SM3(x‖m‖y),其中x和y為Q的x分量和y分量。CipherText是與明文等長的密文。

假設使用SM2私鑰d(SM2Privatekey類型)對密文c(SM2Cipher類型)進行解密計算,則解密後將取得明文m,其長度等於密文(c→Cipher Text)的長度。

4.SM2簽名數據格式用ASN描述如下:

SM2Signature::=SEQUENCE {

R  INTEGER,  --簽名值的第一部分

S  INTEGER,  --簽名值的第二部分

}

其中,R和S的長度各為256位。

假設使用簽名方私鑰d(SM2PrivateKey類型)對待簽名數據M(字符串類型)進行簽名計算。具體計算步驟如下:

①預處理1:使用簽名方的用戶身份標識ID(字符串類型)和簽名方公鑰Q(SM2PublicKey類型),顺利获得運算得到Z值(字符串類型)。

Z=SM3(ENTL‖ID‖a‖b‖XG‖yG‖xA‖yA)

其中,ENTL為2位元組表示的ID的比特長度。ID為用戶身份標識,無特殊約定情況下,長度為16位元組,默認值從左至右依次為: 

0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38。a和b為系統曲線參數。xG和yG為基點,xA和yA為簽名方公鑰。

②預處理2:使用預處理1結果Z值(字符串類型)和待簽名數據M(字符串類型),顺利获得SM3運算得到摘要值H(字符串類型)。

H=SM3(Z‖M)

③簽名:使用預處理2結果H(字符串類型)和簽名方私鑰d(SM2PrivateKey類型),顺利获得簽名計算得到簽名結果sign(SM2Signature類型)。

簽名驗證時,使用預處理2結果H(字符串類型)、簽名結果sign(SM2Signature類型)和簽名方公鑰Q(SM2PublicKey類型),顺利获得驗簽計算確定簽名結果是否顺利获得驗證。

在SM2密鑰對傳遞時,需加密保護它。

5.SM2密鑰對的保護數據格式用ASN.1描述如下:

SM2EnvelopedKey::=SEQUENCE {

symAlgID     Algorithmldentifier,  --對稱密鑰算法標識

symEncryptedKey  SM2Ciphe          --對稱密鑰密文

Sm2PublicKey      SM2PublicKey,    --SM2公鑰

Sm2EncryptedPrivateKey BIT STRING  --SM2私鑰密文

}

其中,具體的保護方法為:

①產生一個對稱密鑰。

②按對稱密鑰算法標識指定的算法加密SM2私鑰,得到私鑰密文。若對稱算法為分組算法,則其運算模式為ECB。

③使用外部SM2公鑰加密對稱密鑰得到對稱密鑰密文。

④把私鑰密文、對稱密鑰密文封裝到密鑰對保護數據中。

上一篇:數字證書存儲方式 下一篇:私鑰存儲