对称密码的特征是加密密钥和解密密钥完全相同或者一个密钥很容易从另一个密钥中导出。
对称密码有两种主要形式:
序列密码(也叫流密码,stream cipher),国密标准中的ZUC祖冲之算法
ZUC在生成密钥流时采用128bit的初始密钥和128bit的初始向量IV作为输入参数,随着电路时钟的变化,LFSR的状态被比特重组后输入非线性函数F,每一拍输出一个32bit密钥流Z。然后Z与明文P按位异或生成密文C。相关行标:GM/T 0001.1-2012
基于ZUC有两种算法:机密性算法128-EEA3和完整性算法128-EIA3。这两种算法主要用于4G移动通信中,移动用户设备和无线网络控制设备之间的无线链路上通信信令和数据加解密,完整性校验和对信令源进行鉴别。完整性算法128-EIA3可以产生消息鉴别码,通过对消息鉴别码MAC进行验证来实现对消息的完整性校验。相关行标 :GM/T 0001.2-2012,GM/T 0001.3-2012
分组密码(也叫块密码,block cipher),国密标准中的SM4,SM1(不公开)
我国与2008年发布国标GB/T 17964-2008 《信息安全技术 分组密码算法的工作模式》中规定,根据分组数据块连接的组合模式不同,可以分为7种工作模式,这里详细介绍常用的两种:CBC和CTR。
CBC模式的加解密过程如图所示
其中IV是初始向量,不需要保密,但会随着消息的更换而更换,并且收发双方必须使用同一个IV。
CBC模式的特点:
1.密文分组依赖于明文分组。
2.每次加密IV必须重新生成且保证随机性。
3.加密过程只能串行,无法并行;但解密过程可以并行。
当使用CBC模式生成消息鉴别码MAC时,最后一个分组输出的结果即为MAC,此状态下IV=0,且只能为约定好长度的消息产生MAC。MAC可以用作检验消息完整性和真实性等。
CTR模式加解密过程如图
CTR模式通过将逐次累加的计数器值进行加密来生成密钥流。该模式下的消息长度可以不是分组长度的整数倍,不需要再加密前进行填充。注意每次加密用到的计数器值都不同。
另一种方式是将单独的IV和计数器值拼在一起作为生成秘钥刘的输入分组,此时计数器从0或1开始。IV和计数器各占分组长度的一半。
CTR模式的特点:
1.可以加密和解密并行计算,可以提前生成密钥流。
2.只用到了分组密码算法中的分组加密操作
3.错误密文之英雄解密后明文的对应位置,错误不会传播。
SM4分组密码算法
2012年3月颁布行标GMT 0002-2012 SM4分组密码算法,2016年8月转化为国标GB/T 32907-2016. SM4主要用于有线数据传输,比如说智能密码钥匙产品。
SM4是一个迭代分组密码算法,数据分组长度128bit,秘钥长度为128bit,加密算法和密钥扩展算法都采用32轮非线性迭代结构。具体流程:https://blog.csdn.net/bird_tp/article/details/105988468
SM4算法的S盒设计具有较高的安全特性,先行置换的分支数达到最优,可以抵抗差分攻击,线性分析,代数统计等密码分析方法。其128bit密钥安全性与AES-128相当,且实现起来更简单。
注:SM1是由指定单位封装生产的密码产品,对外不公开算法,只需直接调用接口即可。