对称密码学分为序列密码和分组密码。
序列密码
序列密码单独加密每一位,它通过将密钥序列中的每一位与每个明文位相加实现。
序列密码也叫做流密码。
序列密码又分为同步序列密码与异步序列密码。
同步序列密码的密码序列仅仅取决于密钥,而异步序列密码的密码序列则取决于密钥和密文。
如果图中虚线出现,则为异步序列密码。
而绝大多数实际使用的都是同步序列密码。
分组密码
分组密每次使用相同的密钥加密整个明文位分组。这意味着对给定分组内任何明文位的加密都依赖于与它同在一个分组内的其他所以的明文位。
绝大多数分组密码的长度要么是128位(16字节),例如AES;要么是64位(8字节),例如DES。
序列密码和分组密码的区别
- 现实生活中分组密码的使用比序列密码更广泛,尤其是在Internet上计算机之间的通信加密。
- 由于序列密码小而快,所以他们非常适合计算机资源有限的应用,比如手机。序列密码的一个典型实例就是A5/1密码,它是GSM手机标准的一部分,常用于语音加密。但是序列密码有时也可用于加密Internet流量,例如RC4。
- 软件优化的序列密码的高效率意味着加密明文中的1位需要的处理器指令(或处理周期)更少。对硬件优化的序列密码而言,高效率意味着在相同加密数据率的情况下,序列密码比分组密码需要的门更少(或更小的芯片区域)。然而诸如AES的现代分组密码在软件上的实现也非常有效。此外,有一些分组密码在硬件上实现也非常有效,比如PRESENT,它 的效率与极紧凑型分组密码相当。
序列密码的加密与解密
序列密码是单独的加密每个明文位,将每个位xi与一个秘钥序列位si相加,在使用模数2执行运算。
定义:
明文、密文和密钥序列都是由单独的位组成,
由于加密函数和解密函数都是非常简单的加法模2运算,可以用下图表示(其中带加号的环表示模2的加法)
在加密和解密公式中,关于序列密码加密和解密函数有三点需要说明:
- 加密和解密使用相同函数
证明一下:
已知密文位yi≡xi+si mod 2,将这个y代入解密函数中则:xi≡(xi+si )+si mod 2≡xi+2×si mod 2≡xi mod 2 - 为什么模2加法是一个很好的加密函数:
在进行模2的计算时,只能得到1和0两个值,因此我们可以将模2的算术运算看成布尔函数 。
模2加法与XOR(异或)运算是等价的。异或运算在现代密码学中非常重要。
异或运算的真值表:
如果si是随机的,则y是1和0的概率是一样的。 - 密钥序列的本质:
事实证明,值si的生成是序列密码安全性的核心问题。密钥序列位si本身不是密钥位,生成密钥序其实就是序列密码的关键所在。
序列加密解密例子
Alice想要对A加密,其中A用ASCII码表示
A的ASCII码为:6510=10000012
假设密钥序列开头位为(s0,…,s6)=0101100。则:即A变成了m,而Oscar只能看到m。