常见的密码算法有对称密码算法、公钥密码算法和密码杂凑算法等类型。习惯上,对称密码算法简称“对称密码”;公钥密码算法简称“公钥密码”;密码杂凑算法简称“杂凑算法”,也叫“散列算法”或“哈希算法”。
对称密码算法加密与解密过程用同样或易相互推导出的密钥,即加密与解密两方的密钥是“对称”的。这如同往一个上了锁的箱子里放物品,放入时需用钥匙打开;想要取出物品时,还需用同样的钥匙开锁。
从传统的习惯看,加密与解密一定是用同一个密钥,因为只能用同样的钥匙开一把锁。因此,传统的密码算法都是对称形式的密码算法。
针对不同的数据类型和应用环境,对称密码有两种主要形式:一是序列密码(把明文逐比特/字符运算的一种对称密码算法,也叫“流密码”);二是分组密码(把输入数据划分成固定长度的分组加解密的一类对称密码算法)。
(一)序列密码
序列密码适用于实时性要求高的场景,如电话、视频通信等。
序列密码加密过程很简单,就是把密钥与明文数据的字母逐个“相加”;解密再用同样的密钥对密文按逐个字母“相减”。序列密码需快速产生一个足够长的密钥,因为有多长的明文,就要有多长的密钥。为此,序列密码的主要任务是从一个短的初始密钥,快速产生一个足够长的“密钥流”。因此,序列密码也叫“流密码”。
ZUC算法是我国颁布的商用密码标准算法中的序列密码算法,也叫祖冲之算法。ZUC算法用128比特的主密钥与128比特初始向量作为输入参数。ZUC算法用128bit的主密钥与128bit初始向量作输入参数,有较大安全余量,且算法速度快,软硬件实现性能都较好。ZUC算法已作为国际第4代移动通信加密标准使用。
(二)分组密码
分组密码是把明文数据分为多个等长的块,这样的数据块叫分组。每个分组用同样的处理过程、同样的密钥加密与解密。它的加解密过程一般用混淆和扩散部件的多次迭代方式。但分组密码不用产生很长的密钥流。它的特点是适应能力强,可用于多种计算平台,易于标准化,多用于大数据量的加密场景。
SM4算法是我国颁布的商用密码标准算法中的分组密码算法。SM4算法的分组与密钥的长度均是128bit,解密与加密算法一样。它有算法速度快、实现效率高、安全性好等优点,主要用来保护数据的机密性。