?

基于國密算法的證書簽名值驗證的分析

2019-05-24 14:11華嬌王婭男
電腦知識與技術 2019年4期
關鍵詞:數字簽名

華嬌 王婭男

摘要:在國家已經大力推行性能更優更安全的SM2公鑰密碼算法的背景下,基于國密算法的證書也將越來越廣泛地被采用,則證書的合法性需要驗證,因此本文主要研究了如何驗證SM2證書的簽名值。通過研究SM2證書的結構,獲取簽名原文數據和簽名數據,使用基于SM3摘要算法的SM2算法實現驗證簽名值。文中選取了示例證書進行驗證,且驗證結果通過。

關鍵詞:國密算法;數字簽名;根證書;橢圓曲線

中圖分類號:TP393 文獻標識碼:A 文章編號:1009-3044(2019)04-0034-02

1 引言

隨著計算機技術及密碼技術的飛速發展,1024位RSA算法這一目前常用的算法已經面臨嚴重的安全威脅,因此2010年12月17日國家密碼管理部門經過研究,決定采用SM2橢圓曲線公鑰密碼算法來替換RSA算法。SM2算法相較于RSA算法來說,密碼復雜度更高、處理速度更快、機器性能消耗更小,整體來說性能更優更安全。

目前來說,大多數情況下常使用的X509證書仍是基于RSA算法的,但既然國家已經在大力推行國密算法,未來的各種基于PBOC3.0的IC卡也都是支持國密算法的,那基于國密算法的證書也將越來越廣泛地被采用,因此本文研究一下如何驗證SM2國密證書的合法性。

2 SM2證書介紹

SM2證書與RSA等其他數字證書相同點有:均使用ASN.1編碼;數據格式均使用通用的TLV(Tag Length Value)形式(T為類型標識符,L為長度值標識符,V代表實際數據。數字證書中的所有項都有對應的類型。完整的證書數據是一個TLV,而 V由多個TLV組合而成);均包含證書版本、序列號、頒發者、使用者主體信息、使用者公鑰、有效期、證書擴展項等內容;均以二進制或Base64格式存放。

SM2證書與RSA證書不同的是SM2證書的公鑰算法是使用ECC算法的Oid標識(1.2.840.10045.2.1),公鑰參數使用SM2國密算法的Oid標識(1.2.156.10197.1.301)。

3 橢圓曲線算法原理

橢圓曲線是指在射影平面上滿足齊次方程Weierstrass方程的所有點的集合,( Weierstrass方程即:Y2Z+a1XYZ+a3YZ2=X3+a2X2Z+a4XZ2+a6Z3),并且橢圓曲線上的每個點都是非奇異(或光滑)的,在數學中,非奇異或光滑的指曲線上任意一點的偏導數不能同時都為0。下圖左為一個橢圓曲線的示例;而用于密碼學中的橢圓曲線與一般橢圓曲線不同的是它是離散的點,是不連續的,因此它需要定義在只由有限個元素組成的有限域上。下圖右為例。

橢圓加密算法是建立在橢圓曲線離散對數問題這一數學難題之上的密碼體制。所謂橢圓曲線離散對數問題即在橢圓曲線上給定兩個點K和G,若使K=kG,求整數k;這相對于給定橢圓曲線上的一個點G,并選取一個整數k,求解橢圓曲線上的另一個點K=kG來說是一個難題。在K=kG中,橢圓曲線上的點K為公鑰(這個點在OpenSSL里面是用結構體EC_Point來表示),整數k(實際上是一個大整數)則為私鑰。

利用橢圓曲線進行加密通信的過程如下圖所示:

1)接收方選取橢圓曲線Ep(a,b)上的一點G作為基點并選擇一個私有密鑰k,生成公開密鑰K=kG,將Ep(a,b)和點K,G一起傳給發送方。

2)發送方收到橢圓曲線信息后將待傳輸的明文編碼到曲線上的一點M,產生一個隨機整數r,計算點C1=M+rK;C2=rG,并將C1、C2傳給接收方。

3)接收方收到信息后計算M=C1-kC2,再解碼M得到的就是明文。

如果有其他用戶看到這個加密通信過程中,那么其他用戶只能看到Ep(a,b)、K、G、C1、C2,而并不能得到明文信息,因為想要通過K、G 求k 或通過C2、G求r 都是相對困難的。

因此橢圓加密算法與一般非對稱密鑰體系的驗簽方法對比除了需要私鑰與公鑰以外,還需要私鑰與公鑰對應的橢圓曲線,因為簽名和驗簽的過程中用到涉及橢圓曲線得多倍點的乘法。所以僅僅知道公鑰和私鑰是不能調用OpenSSL自帶的簽名和驗簽API來實現橢圓加密算法的簽名驗證的,還需要知道對應的橢圓曲線。

4 簽名值驗證

驗證證書的合法性主要是解析證書、驗證證書的有效期、驗證頒發機構根證書、驗證CRL吊銷狀態以及使用目的等。本文主要研究證書中簽名數據的有效性驗證。前面已經了解了SM2證書的結構,那么可以根據ASN.1語法和對象標識符來獲取相應數據,證書的第一個數據塊是證書的實際內容,即為簽名數據原文;第二個數據塊是證書使用的簽名算法,SM2證書配套的簽名算法是基于SM3摘要算法的SM2簽名算法,算法Oid標識為1.2.156.10197.1.501;證書的最后一個數據塊就是證書的簽名數據,簽名數據由兩個BigInteger大數組成,再使用Der編碼存放。一般來說,證書的簽名數據都是其上級根證書私鑰簽名的,故需要使用上級根證書公鑰進行驗證,而頂級根證書的簽名數據是自簽名的,故需要使用自身的證書公鑰進行驗證。

本文選取了樣例證書進行了驗證,首先解析TLV結構獲取證書的簽名原文數據和簽名值數據,其中簽名值數據為封裝的ECC簽名數據塊,需要解析后取出兩個大整數,即曲線上點的X、Y坐標,如下圖中選中的數據即為簽名值數據:

驗證簽名第一步需要組建數據ZA并計算其HASH值A:

ZA=用戶ID的長度+用戶ID+橢圓曲線公鑰密碼算法推薦曲線參數a+橢圓曲線公鑰密碼算法推薦曲線參數b+橢圓曲線公鑰密碼算法推薦曲線參數Gx+橢圓曲線公鑰密碼算法推薦曲線參數Gy+公鑰X+公鑰Y;

HashA=SM3摘要算法(ZA);

第二步,上面的SM3結果加上證書實際內容數據M,再進行SM3計算得到HASH值B:

HashB=SM3摘要算法(HashA + M);

最后使用公鑰驗簽。

其中,曲線參數使用的國密推薦256位曲線參數,具體值如下:

5 結論

按照上述驗證方法驗證了示例證書的簽名值、上級根證書的簽名值以及頂極根證書的自簽名值,均驗證通過。

正確的驗證SM2證書的合法性有利于國密算法的推廣使用,則在應用中的秘鑰生成速度和加解密速度均能達到更優。

參考文獻:

[1] DayThinking. ECC算法原理的認識.https://blog.csdn.net/sszgg2006/article/details/41945163,2014.

[2] jonllen. SM2國密算法證書解析.(1998-08-16).[1998-10-04].http://www.cajcd.edu.cn/pub/wml.txt/980810-2.html,

[3] 方娜. 基于橢圓曲線的電子簽章系統的研究與應用[D]. 貴州大學, 2007.

【通聯編輯:唐一東】

猜你喜歡
數字簽名
基于正交拉丁方理論的數字簽名分組批量驗證
交通運輸行業數字簽名系統的設計與實現分析
淺析計算機安全防護中數字簽名技術的應用
數字簽名助力系統安全
基于數字簽名的QR碼水印認證系統
以數字簽名為基礎的檔案文件安全性管理
數字簽名簡述
探討網絡安全中的數字簽名技術應用效果
基于數字簽名和HSM的數據庫篡改檢測機制
基于JAVA的數字簽名設計與實現
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合