隨著密碼技術和Internet技術的迅速發展,國內安全領域所廣泛使用的1024位RSA非對稱加密算法的安全性正面臨日益嚴峻的挑戰。根據國家密碼管理局公布的《SM2橢圓曲線公鑰密碼算法》,橢圓曲線密碼算法作為一種高安全性,高效率的非對稱加密算法,具備和RSA算法同樣的加解密,數字簽名和密鑰協商等重要的密碼功能,與RSA相比,具有安全性更高、運算復雜度更低的優點。根據國家有關政策的要求,使用公鑰密碼的信息系統應盡快將算法升級,使用SM2橢圓曲線密碼算法。現階段國內的主要VPN產品公鑰密碼算法雖然還是使用RSA,但隨著SM2算法的普及,在VPN系統中SM2橢圓曲線加密算法將逐漸取代RSA公鑰密碼算法。
目前國內大部分VPN系統是按照國際標準IETF制定的VPN協議來實現的。VPN系統中主要采用加密算法,消息摘要等的技術來實現信息傳輸的機密性、完整性、不可否認性。其中加密技術中,最常用的對稱加密算法有3DES、DES、AES、RC4、SM1。非對稱加密算法有RSA、DH算法。RSA主要用于生成數字證書、數字簽名。消息摘要算法用于確保身份的有效性和通訊的有效性,與數字證書結合實現身份驗證及通信的完整性驗證,常用的算法有MD5、SHA1。
SM2算法與RSA算法一樣,同屬于非對稱算法體系,是屬于橢圓曲線加密(ECC)算法的一種。但與RSA算法不同的是RSA算法是基于大整數分解數學難題,SM2算法是基于橢圓曲線上點群離散對數難題。SM2橢圓曲線算法在VPN系統中是用來替代RSA算法的,二者在加密系統中的作用是相同的,現有的信息系統在不久的將來,RSA算法會逐漸被SM2算法替代,在這個過度的時間里,RSA算法還是會發揮很重要的作用。因此在VPN系統SM2算法升級的過程要考慮同時支持SM2算法和RSA算法,VPN系統中的服務器和客戶端要同時支持SM2算法和RSA算法的使用。根據國密局規定,采用SM2公鑰密碼算法時IKE協議要使用國密局制定的IKE協議替代標準的IKE協議,對稱算法要求使用SM1對稱加密算法,摘要算法只允許使用SHA1、SM3算法。因此除了算法升級,還需要考慮按照國密局的規定進行協議改造。
目前VPN系統公鑰密碼算法的應用場景分為兩種:第一種, VPN服務器與VPN服務器之間的身份鑒定。第二種,客戶與VPN服務器之間的身份的鑒定。目前這兩種應用模式的VPN系統中,公鑰密碼算法主要還是采用RSA算法,大部分密鑰長度為1024位,少部分密鑰長度為2048位。現階段RSA的絕大部分應用場景中,無論是采用接口模式還是支撐平臺模式,其客戶端和服務器都依靠微軟的CSP、國際PKCS#11接口實現硬件加密設備的訪問,獲取加密、解密、簽名、驗證等密碼服務。這這類標準的接口中每個密碼算法均是以國際標準化組織ISO建立的OID來進行區分,應用系統通過識別OID來區分不同的密碼算法應用。對于國密局頒布的SM2橢圓曲線算法,由于該算法是國密局自有算法,其算法OID尚沒有被CSP、PKCS#11等標準接口包含,應用系統無法使用通過調用標準的OID接口方式來實現SM2橢圓曲線算法。
SM2算法還沒有被國際廠商完全支持的情況下,要在VPN系統中實現SM2算法,通過改變調用方式實現。在服務器端,對于信道加密處理不按照標準的IPSEC VPN協議和SSL VPN協議實現,全部按照國密局制定的改造的IKE協議,SSL協議實現,公鑰密碼算法替換現有的RSA算法為SM2算法。在客戶端應用環節中,不再借助微軟的CSP或者PKCS#11標準接口,通過國密局頒發的設備標準接口自行研制,然后進行客戶端設備的調用來實現。
根據國密局規定,SM2證書中簽名算法OID為1.2.156.10197.1.501,公鑰算法的OID為1.2.840.10045. 2.1。目前大部分的廠商都還不識別這兩個算法,能識別的系統直接顯示的是SM2算法。SM2證書在Windows系統上,可以通過查看證書屬性中的簽名算法和公鑰算法來判斷是否為SM2的證書。直接雙擊證書,安裝到IE中,查看證書信息,XP系統2003 server以下的操作系統目前都不識別此算法,直接顯示的是ID號,如下圖顯示2003 server系統的簽名算法和公鑰算法。Win7以上的操作系統對ECC的算法可以簡單識別,有些信息還是不能完全識別。
VPN系統中SM2橢圓曲線算法的鑒定除了由國密局檢測中心鑒定外,目前唯一的鑒定方法是通過抓包,查看隧道協商過程的參數。SSL VPN隧道協商中SM2證書鑒定,可查看協商Server Hello報文,其中含有交互證書信息,查看證書簽名算法OID,OID為1.2.156.10197.3.501可鑒定隧道協商使用SM2證書。
IPSEC VPN隧道協商SM2證書鑒定,由于第三四個報文是加密的,交互的證書
信息無法查看,如上圖所示,可以通過報文載荷中證書簽名長度來進行鑒定,SM2證書簽名的長度不是一個確定的值,其簽名長度值在70左右。