RSA是目前最有影响力和最常用的公钥加密算法,它能够抵抗到目前为止已知的绝大多数密码攻击,已被ISO推荐为公钥数据加密标准。SM2算法,由国家密码管理局于2010年12月发布,是我国自主设计的公钥密码算法。SM2基于更加安全先进的椭圆曲线密码机制,在国际标准的ECC椭圆曲线密码理论基础上进行改进而来,其加密强度更高。RSA算法,其数学原理相对简单,在工程应用中比较易于实现,但它的单位安全强度相对较低。随着计算机运算速度的提高和分布式计算的发展,加上因子分解方法的改进,对低位数的密钥攻击已成为可能。

ECC算法,其数学理论非常深奥复杂,在工程应用中比较难以实现,但它的单位安全强度相对较高,破译或求解难度基本上是指数级的。

因此,ECC算法的单位安全强度远高于RSA算法,可以用较少的计算能力提供比RSA算法更高的安全强度,而所需的密钥长度却远比RSA算法低。

目前,基于ECC的SM2算法普遍采用256位密钥长度,加密强度等同于3072位RSA证书,远高于业界普遍采用的2048位RSA证书。

此外,为了提高安全强度必须不断增加密钥长度,ECC算法密钥长度增长速度较慢(例如:224-256-384),而RSA算法密钥长度则需呈倍数增长(例如:1024-2048-4096)。

更长的密钥意味着必须来回发送更多的数据以验证连接,产生更大的性能损耗和时间延迟。因此,SM2算法能够以较小的密钥和较少的数据传递建立HTTPS连接,在确保相同安全强度的前提下提升连接速度。

经国外有关权威机构测试,在Web服务器中采用SM2算法,Web服务器响应时间比RSA算法快十几倍。

RSA-2048、ECDSA-521与SM2-256的对比:

签名:

国密算法java代码实现 国密算法优点_国密算法java代码实现

图3.4 RSA-2048、ECDSA-521与SM2-256的签名效率对比

验签:

国密算法java代码实现 国密算法优点_服务器_02

图3.5 RSA-2048、ECDSA-521与SM2-256的验签效率对比

SM3算法的压缩函数与SHA-256的压缩函数具有相似的结构,但是SM3算法的设计更加复杂,比如压缩函数的每一轮都使用2个消息字。2005年,Wang等人给出了MD5算法和SHA-1算法的碰撞攻击方法,证明现今被广泛应用的MD5算法和SHA-1算法不再是安全的算法。

SM3密码摘要算法是中国国家密码管理局2010年公布的中国商用密码杂凑算法标准。SM3算法适用于商用密码应用中的数字签名和验证,是在SHA-256基础上改进实现的一种算法。SM3算法采用Merkle-Damgard结构,消息分组长度为512位,摘要值长度为256位。现今为止,SM3算法的安全性相对较高。

MD5、SHA1、SH2-256与SM3效率的对比:

国密算法java代码实现 国密算法优点_安全_03

图3.6 MD5、SHA1、SH2-256与SM3效率的对比
百万次级SHA3算法与SM3算法对比如下:

哈希算法及实现 加密解密次数 总共耗时(s)
EthereumUtil sha3 100万次 2.89
SpongyCastle SM3 100万次 1.57

比较了第三方提供商SpongyCastle包中提供的SM3算法以及使用以太坊Util类中自带的哈希算法,速度相差不多,甚至国密更快。预计区块链换用国密算法后,速度不会因此下降。