一、对称密码算法:ZUC、SM1、SM4、SM7、DES、TDES、AES
(一)序列密码算法(流密码):ZUC、SNOW、RC4(标红国际)
将密钥和初始向量作为输入,通过密钥流生成算法输出密钥流,然后将明文序列和密钥流进行异或,得到密文序列。
特点:密钥流可以在明文序列到来之前生成。序列密码对于每个明文序列的加密操作仅是一次异或,执行速度非常快,计算资源占用少,常用于功耗或计算能力受限的系统。
(二)分组密码算法:SM1、SM4、SM7、DES、TDES(3DES)、AES(标红国际)
首先对明文消息根据分组大小进行分组,再将明文分组、密钥和初始向量(如果有)一起作为输入,通过分组加密算法直接输出密文分组。
二、公钥(非对称)密码算法:SM2、SM9、RSA、ECC
公钥加密算法主要用于短数据的加密,例如产生数字信封等。数字签名主要用于确认数据的完整性、签名者身份的真实性和签名行为的不可否认性。数字签名算法中一般都需要先使用密码杂凑算法对原始消息进行杂凑运算,再对得到的消息摘要进行数字签名。
(一)SM2公钥算法(已在电子认证领域广泛应用)
SM2公钥算法是国家密码管理局发布的标准,已经转化为国家标准,该标准基于ECC算法。该算法目前在国内有成熟的体系,但仍然处于替换RSA的过程中。在算法速度和密钥数据量方面,SM2有明显的优势,更适用于大数据量和资源小、功耗低的应用场景。
1.GM/T 0003-2012《SM2椭圆曲线公钥密码算法》
2.GM/T 0009-2012《SM2 密码算法使用规范》
3.GM/T 0010-2012《SM2 密码算法加密签名消息语法规范》
4.GM/T 0015-2012《基于SM2密码算法的数字证书格式规范》
其中GM/T 0003包含五部分,分别介绍了SM2的算法原理、签名算法、密钥交换、加密算法和曲线参数及示例
(二)SM9公钥算法
SM9公钥算法是在传统公钥基础设施基础上发展来的标识密码算法(IBC)。除了具有PKI的技术优点之外,主要解决了具体安全应用中PKI需要大量交换数字证书的问题,使安全应用更加易于部署和使用。IBC中每个人的公钥就是他的身份标识,例如手机号、Email地址等。SM9公钥算法的规范见GM/T 0044-2016《SM9标识密码算法》。
SM9属于标识密码算法,不需要数字证书(CA)的支撑,可以有效减少对第三方的依赖,在成本和部署方面上更具优势。但该算法引入了用户私钥分发的问题,而公钥算法的本质就是要解决密钥管理的问题。
SM9算法使用双线性对运算,对处理器的计算速度提出了较高的要求,难以适应低成本的场景。
(三)RSA公钥算法
三、杂凑(散列、哈希)算法:SM3、SHA1、SHA256、SHA512、MD5
(一)性质
1.抗原像攻击
为一个给定的输出找出能映射到该输出的一个输入在计算上是困难的。即给定一个明文消息“abcedfg”,可以很容易推导出其杂凑值h;但给定h,找到一个对应的M是非常困难的。
2.抗第二原像攻击
为一个给定的输入找出能映射到同一个输出的另一个输入在计算上是困难的。即给定h=H(M1),想找到M2使得H(M2)=H(M1)是困难的。
3.强抗碰撞性
要发现不同的输入映射到同一输出在计算上是困难的。SM3杂凑算法涉及的国密规范包括:GM/T 0004-2012《SM3密码杂凑算法》。
(二)对比
SM3杂凑算法是国家密码管理局公开发布的。国际上使用广泛的杂凑算法包括MD5、SHA0、SHA1、SHA2、SHA3等。目前MD5、SHA0、SHA1都已经不再安全,即将推出历史舞台。商密认证推荐使用SM3杂凑算法。