图解密码技术读书笔记

3 对称密码

3.3.2 XOR

0 XOR 0 = 0
0 XOR 1 = 1
1 XOR 0 = 1
1 XOR 1 = 0

如果将0理解为偶数,将1理解为奇数,就可以将XOR和一般的加法运算等同起来

偶数(0) + 偶数(0) = 偶数(0)

偶数(0) + 奇数(1) = 奇数(1)

奇数(1) + 偶数(0) = 奇数(1)

奇数(1) + 奇数(1) = 偶数(0)

由于XOR和加法运算很相似,因此一般用+O组合而成的符号来表示XOR

两个相同的数进行XOR运算的结果一定为0

3.4 一次性密码本

将明文与一串随机的比特序列(密钥)进行XOR运算,得到一串新的比特序列,这个结果就是一次性密码本的密文

这里的随机数并不是通过计算机程序生成的伪随机数,而必须是无重现性的真正随机数

解密就是加密的反向运算。也就是说,用密文和密钥进行XOR运算,就可以得到明文

一次性密码本是无法破译的,因为没有办法判断解密出来的字符串就是正确的明文

一次性密码本绝对不能重用过去用过的随机比特序列。因为作为密钥的比特序列一旦泄露,过去所有的机密通信内容将全部被解密

3.7.1 什么是AES

AES(Advanced Encryption Standard)是取代其前任标准(DES)而成为新标准的一种对称密码算法

7 单向散列函数

7.2 什么是单向散列函数

7.2.3 单项散列函数的性质

  • 根据任意长度的消息计算出固定长度的散列值

  • 能够快速计算出散列值

  • 消息不同散列值也不同

    碰撞:两个不同的消息产生同一个散列值的情况称为

    弱抗碰撞性:当给定某条消息的散列值时,单向散列函数必须确保要找到和该条消息具有相同散列值的另外一条消息是非常困难的

    强抗碰撞性:是指要找到散列值相同的两条不同的消息是非常困难的这一性质。这里的散列值可以是任意值。

    单向散列函数,不仅要具备弱抗碰撞性,还必须具备强抗碰撞性

  • 具备单向性

7.2.4 关于术语

单向散列函数也称为消息摘要函数(message digest function)、哈希函数或者杂凑函数

输入单向散列函数的消息也称为原像(pre-image)

单向散列函数输出的散列值也称为消息摘要(message digest)或者指纹(fingerprint)

7.3单向散列函数的实际应用

  • 检测软件是否被篡改
  • 基于口令的加密
  • 消息认证码
  • 数字签名
  • 伪随机数生成器
  • 一次性口令

7.4 单向散列函数的具体列子

  • MD5(Message Digest)、SHA-1

    强抗碰撞性已经被攻破

  • SHA-2

    包括SHA-256、SHA-384、SHA-512

    目前建议使用的Hash算法,截至目前是安全的

8 消息认证码

8.2.1 什么是消息认证码