SM2國密算法證書解析

                                              SM2國密算法證書解析

一、數字證書的組成

1)證書數據結構

數字證書使用ASN.1編碼,證書文件以二進制或Base64格式存放,數據格式使用TLV(Tag Length Value)形式,T代表類型標識符,L是長度值標識符,V代表值編碼。數字證書中的每一項都有個對應的類型T。一個數字證書就是一個大的TLV序列,然後V又由多個TLV組合而成。

SM2證書數據和RSA算法證書一樣,包含證書版本、序列號、頒發者、使用者主體信息、使用者公鑰、有效期、證書擴展項等,只不過SM2證書的公鑰算法是使用ECC算法的Oid標識(1.2.840.10045.2.1),然後公鑰參數使用SM2國密算法的Oid標識(1.2.156.10197.1.301)。

2)簽名算法

SM2證書配套的簽名算法是基於SM3的SM2簽名算法,算法Oid標識爲1.2.156.10197.1.501,另外SM2國密算法還定義基於SHA_1、SHA_256的簽名,以及使用SM3算法的RSA的簽名,只不過簽名算法Oid標識不一樣。

3)簽名數據

SM2的簽名數據由2個BigInteger大數組成,再使用Der編碼存放簽名數據。證書的簽名數據由根證書私鑰進行簽名,使用根證書公鑰驗證,頂級根證書使用自己的證書公鑰驗證。

二、數字證書的對象標識符

數字證書的每項都有對象標識Oid,SM2數字證書的主要區別就是公鑰算法、公鑰參數、簽名算法標識不一樣,其餘的都是X509裏標準項。數字證書常見得對象標識有如下:

對象標識符 名稱 OID
rsaEncryption RSA算法標識 1.2.840.113549.1.1.1
sha1withRSAEncryption SHA1的RSA簽名 1.2.840.113549.1.1.5
ECC ECC算法標識 1.2.840.10045.2.1
SM2 SM2算法標識 1.2.156.10197.1.301
SM3WithSM2 SM3的SM2簽名 1.2.156.10197.1.501
sha1withSM2 SHA1的SM2簽名 1.2.156.10197.1.502
sha256withSM2 SHA256的SM2簽名 1.2.156.10197.1.503
sm3withRSAEncryption SM3的RSA簽名 1.2.156.10197.1.504
commonName 主體名 2.5.4.3
emailAddress 郵箱 1.2.840.113549.1.9.1
cRLDistributionPoints CRL分發點 2.5.29.31
extKeyUsage 擴展密鑰用法 2.5.29.37
subjectAltName 使用者備用名稱 2.5.29.17
CP 證書策略 2.5.29.32
clientAuth 客戶端認證 1.3.6.1.5.5.7.3.2

三、數字證書的解析

數字證書的解析主要是根據ASN.1語法和對象標識符來獲取值,然後再是證書的有效期、頒發機構根證書、CRL吊銷狀態和使用目的等驗證。RSA證書是標準算法大部分平臺都可以解析,而SM2國密算法證書的解析就不是那麼通用的。在Windows的一些較高版本打開SM2證書會顯示“驗證信任關係時,系統層上出現了一個錯誤”,這是因爲Windows還不支持SM2算法證書驗證,不能識別SM2簽名的算法標識,因此需要自行驗證SM2證書的簽名數據,可基於BouncyCastle開源加密庫來實現SM2驗證簽名,詳細參見我的國密算法SM2證書製作

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章