1 科谱:密码学中的常见概念
1.1 密钥
根据密钥的使用方法,可以将密钥分为两种:
对称密钥
是指在加密和解密时使用同一密钥的方式公钥
加密和解密使用的不是同一种密钥,也称非对称密钥
1.2 单向散列
单向散列是由单向散列函数计算出来的一组数值。它不能保证数据的机密性,是用来保证数据的完整性的。例如,有安全意识的软件发布者会向用户公布软件的散列值,一般是 MD5. 可以通过检验软件的 MD5 散列值,判断软件是否被篡改过。
1.3 随机数
随机数可以通过硬件生成,也可以通过软件来生成。通过硬件生成的随机数列,是根据传感器收集的热量、声音的变化等事实上无法预测和重现的自然现象信息来生成的,可以称为 真随机数
. 而一般由软件生成的随机数是可以周期性重现的,这种随机数称为 伪随机数
。生成随机数的软件叫做 伪随机数生成器
。
2 对称加密
常用的对称加密方法有 DES 与 AES 两种。
2.1 DES
DES 是一种将 64bit 的明文加密成 64bit 密文的对称密钥算法,它是密钥长度也是 64bit,但是它的密钥每隔 7bit 会设置一个用于错误检查的 bit, 所以实质上其密钥长度是 56bit . 因为 DES 每次只能加密 64bit 明文,所以需要对超过 64bit 的明文进行分组。以分组为单位进行处理的密码算法也称为 分组密码
。分组后的明文以什么样的方式进行加密,我们称之为 模式(mode)
。 DES 的基本结构以其设计者的名字(Horst Feistel)命名,也称 Feistel 网络可 Feistel结构。在 Feistel 结构中,将 64bit 明文再分作两部分,每部分 32bit。假如标记为 A B 两部分,那么有如下步骤:
- 对 B 使用子密钥 subkey 进行加密运算,生成 B‘:
f(B,subkey) = B'
- B~ 与 A 进行异或运算,生成 C :
B'
XOR A = C
- C 与 B 组合,生成密文 D :
C # B = D
这三个步骤称为一个 轮(round)
.可以看到,密文D的后半部分 B 没有被加密。我们将组成 D 的 C 与 B 部分进行互置,即令 A = B, B = C,再重复上面的步骤 1 ~ 3 ,这样明文的每一个部分都被加密了。 DES 就是一种由 16 个轮循环组成的 Feistel 网络。每一轮都会生成一个不同的密钥,所以称为子密钥。