SM2數(shù)字簽名算法由一個簽名者對數(shù)據(jù)產(chǎn)生數(shù)字簽名,并由一個驗(yàn)證者驗(yàn)證簽名的可靠性。每個簽名者有一個公鑰和一個私鑰,其中私鑰用于產(chǎn)生簽名,驗(yàn)證者用簽名者的公鑰驗(yàn)證簽名。在簽名的生成過程之前,要用密碼雜湊函數(shù)對M (包含ZA和待簽消息M)進(jìn)行壓縮;在驗(yàn)證過程之前,要用密碼雜湊函數(shù)對M′(包含ZA和驗(yàn)證消息M′)進(jìn)行壓縮。
SM2推薦橢圓曲線參數(shù)如下:
使用素數(shù)域256位橢圓曲線
橢圓曲線方程:y2 = x3 + ax + b
p= FFFFFFFE FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF 00000000 FFFFFFFF FFFFFFFF
a= FFFFFFFE FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF 00000000 FFFFFFFF FFFFFFFC
b= 28E9FA9E 9D9F5E34 4D5A9E4B CF6509A7 F39789F5 15AB8F92 DDBCBD41 4D940E93
n= FFFFFFFE FFFFFFFF FFFFFFFF FFFFFFFF 7203DF6B 21C6052B 53BBF409 39D54123
Gx= 32C4AE2C 1F198119 5F990446 6A39C994 8FE30BBF F2660BE1 715A4589 334C74C7
Gy= BC3736A2 F4F6779C 59BDCEE3 6B692153 D0A9877C C62A4740 02DF32E5 2139F0A0
數(shù)字簽名生成流程:
關(guān)鍵參數(shù)說明:
ZA=H256(ENT LA || IDA || a || b || xG || yG || xA || yA) (SM3算法做摘要)
ENT LA : 用戶ID的位長度
IDA :用戶ID
xA :公鑰X
yA :公鑰Y
M :ZA || M (ZA 與 M拼接)
e : 密碼雜湊函數(shù)作用于消息M的輸出值(SM3(ZA||M)預(yù)處理得到的結(jié)果)
k : [1,n-1]范圍內(nèi)的隨機(jī)數(shù)
r : (e+x1)mod n (mod同余定理)
S :((1+dA)-1 *(k-r*dA)) mod n (dA 用戶的私鑰 )