随着密码技术和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左右。