《图解密码技术》Notes

来源:[图解入门系列] 结城浩-图解密码技术(2016,人民邮电出版社)

2024-05-02@isSeymour

[TOC]

第一部分 密码

第 1 章 环游密码世界

1.1 对称密码与公钥密码

  • 对称密码 Symmetric Cryptography

    加密和解密时使用同一密钥。

  • 公钥密码 Public-key Cryptography

    加密和解密时使用不同密钥。

  • 混合密码系统 Hybrid Cryptosystem

    结合对称密码和公钥密码的优势。

P1-7

1.2 密码学家的工具箱

  • 对称密码
  • 公钥密码
  • 单向散列函数
  • 消息认证码
  • 数字签名
  • 伪随机数生成器

1.3 威胁与技术

P1-8

1.4 隐写术、数字水印

  • 密码隐藏的是内容,
  • 隐写术隐藏的是消息本身。

1.5 密码与信息安全常识

  • 不要使用保密的密码算法。

    (隐蔽式安全 security by obsecurity,危险且愚蠢)

  • 使用低强度的密码比不使用密码更加危险。

    (这通常会使得用户在通信时麻痹大意)

  • 任何密码总有一天都会被破解。

    (严格来说,绝对不会被破解的密码算法存在,即一次性密码本,但是它并不是现实可用的)

  • 密码只是信息安全的一部分。

    (最脆弱的不是密码,而是人类本身)

第 2 章 历史上的密码

写一篇别人看不懂的文章。

2.1 凯撒密码

P2-1
  • 破解:暴力破解

2.2 简单替换密码

P2-4
  • 破解:频率分析

2.3 Enigma

P2-5
结构
P2-6 P2-7
加密
P2-8
解密
P2-9

2.4 为什么需要密钥?

  • 将密钥和密码算法分开,

    是希望重复使用,同时不会因为重复使用而增加风险。

第 3 章 对称密码

用相同的密钥进行加密解密。

3.1 一次性密码本

  • 一次性密码本是无法破译的。

  • 为什么没有使用?

    不现实

    1. 密钥的配送
    2. 密钥的保存
    3. 密钥的重用
    4. 密钥的同步
    5. 密钥的生成
  • 一次性密码本孕育出了 流密码

3.2 DES

  • DES, Data Encryption Standard, 是美国联邦信息处理标准FIBS中所采用的一种对称密码。
  • DES 是一种将 64 比特明文加密成 64 比特密文的对称密码算法。
  • 密钥长度:56比特(56+8校验位=64比特)
P3-2
加密方式:Feistel 网络轮函数
P3-3
多轮加密
P3-4
解密方式
P3-5
多轮解密
P3-6
Feistel 网络的性质
  1. 轮数可以任意增加。
  2. 加密时无论使用任何函数作为轮函数都可以正确解密。
  3. 加密和解密可以使用完全相同的结构来实现。

3.3 差分分析与线性分析

  • 差分分析

    选择明文攻击。

    是一种针对分组密码的分析方法。

    思路是”改变一部分明文,并分析密文如何随之改变“。

    • 理论上,即便明文1比特的变化,密文也应该发生彻底的变化。
    • 由此分析密文改变产生的偏差,就可以获取破译密钥的线索。
  • 线性分析

    已知明文攻击。

    思路是”将明文和密文的一些对应比特进行XOR,并计算其结果为0的概率

    • 如果密文具备足够的随机性,则任选一些明文和密文的比特进行XOR为0的概率应为 1/2。
    • 如果找到大幅偏差 1/2的部分,就可以借此获得与密钥有关的一些信息。
    • 对于DES 需要 2472^{47} 组明文密文对,虽然仍然很多,但是相对于暴力破解的 2562^{56} 个密钥已经大大减少了。

3.4 三重DES

  • 为了增加 DES 的强度,将 DES 重复 3 次所得到的一种密码算法,3DES。
加密
  • 注意:是 ”加密、解密、加密“。
P3-7
兼容性
  • 当三重DES的所有密钥都相同时,就是普通DES。
  • 由此,3DES兼容DES。
P3-8

3.5 DES-EDE2与DES-EDE3

  • 若三个密钥均不同,

    那就是 DES-EDE3。

  • 第一个和第三个相同,第二个不同,就只需要两个密钥,

    那就是 DES-EDE2。

P3-9
解密
  • 执行顺序相反
  • 密钥顺序相反
P3-10

3.6 AES

  • AES, Advanced Encryption Standard, 是取代前任标准 DES 成为新标准的一种对称密码算法。

  • 最终选中 Rijndael 算法。

  • 没有使用 Feistel 结构,而是 SPN 结构。

加密操作
  • 每一轮的处理为:
    1. SubBytes
    2. ShiftRows
    3. MixColumns
    4. AddRoundKey
P3-11 P3-12 P3-13 P3-14
解密操作
  • 每一轮的操作:(Inv表示逆运算)
    1. AddRoundKey
    2. InvMixColumns
    3. InvShiftRows
    4. InvSubBytes
P3-17
数学支持
  • Rijndael 算法背后有严谨的数学结构,从明文到密文的计算过程都可以使用数学公式表示。

  • 这是以前密码算法都不具备的。

  • 不过因为有数学公式,意味或许可以通过数学方式破译。

    但是这只是假设,目前还没有对 Rijndael 有效的攻击方式。

第 4 章 分组密码的模式

分组密码是如何迭代的。

密码算法可以分为:

  1. 分组密码:每次只能处理特定长度的一块数据的一类密码算法。
  2. 流密码:对数据流进行连续处理的一类密码算法。

模式:

  • 由于分组密码只能处理固定长度的分组,

    而明文长度可能超过分组的固定长度。

    (小于时,则用特定数据填充)

  • 由此,需要对密码算法进行迭代,而迭代的方式就是模式。

  • 模式
    1. ECB 模式:Electronic CodeBook mode, 电子密码本模式
    2. CBC 模式:Cipher Block Chaining mode, 密码分组链接模式
    3. CFB 模式:Cipher FeedBack mode, 密码反馈模式
    4. OFB 模式:Output FeedBack mode, 输出反馈模式
    5. CTR 模式:CounTeR mode, 计数器模式

4.1 ECB 模式

  • 将明文分组加密之后的结果直接成为密文分组。
  • 特点:
    1. 攻击者 Mallory 无需破译密码就能操纵明文。
P4-2

4.2 CBC 模式

  • 将明文分组与前一个密文分组进行 XOR 运算,然后再进行加密。
  • 特点:
    1. 一个密文分组损坏,最多会有两个明文分组受影响无法解密。
    2. 若某一密文分组存在缺失的比特,那么后续所有明文分组都受影响无法正常解密。
    3. 对CBC的攻击:初始向量的比特反转、填充提示攻击。
P4-3

4.3 CFB 模式

  • 前一个密文分组会被送到密码算法的输入端。
  • 特点:
    1. 可以看作,CFB 是一种使用分组密码实现流密码的方式。
    2. 对CFB模式,可以实施 重放攻击 Replay Attack。(接收方无法评定是否是攻击)
P4-9

4.4 OFB 模式

  • 密码算法的输出反馈到密码算法的输入端。
  • 特点:
    1. 无法跳过明文分组1而对明文分组2加密,必须从第一个明文分组开始按顺序加密。
    2. 但是提前准备好密钥流,可以快速完成加密。生成密钥流和XOR运算是并行的。
P4-12 P4-12-2

4.5 CTR 模式

  • 是一种通过将逐次累加的计数器进行加密来生成密钥流的流密码。
  • 特点:
    1. 加密解密使用完全相同的结构,软件实现容易。
    2. 可以按任意顺序进行加密解密,意味着可以并行操作,速度很快。
P4-14

4.6 拓展:CTS 模式

P4-C1

4.7 总览

T4-1

第 5 章 公钥密码

用公钥加密,用私钥解密。

5.1 密钥配送问题

  • 在对称密码中,密钥配送是很难从根本上解决问题的。
P5-1
  • 可以说,密钥必须配送,又不能发送。
  • 解决方法:
    1. 事先共享密钥
    2. 密钥配送中心
    3. Diffie-Hellman 密钥交换
    4. 公钥密码

5.2 公钥密码

  • 密钥分为 公钥(加密密钥) 和 私钥(解密密钥)。
  • 发送者使用 公钥 对消息进行加密。
  • 接收者使用 私钥 对消息进行解密。

解密密钥(私钥)从一开始就是在接收者自己保管的,

加密密钥(公钥)是接收者对外公开的,大家都可以使用。

因此,可以看到,根本不存在密钥配送问题(指私钥)。

(但是,存在对公钥的合法性问题)

流程
P5-2

5.3 RSA

  • RSA 是一种公钥密码算法。

    名字由三位开发者命名:Ron Rivest, Adi Shamir, Leonard Adleman.

  • 原理:

    大整数质因数分解的困难度(离散对数问题)

加密、解密
  • 公钥:

    (E,N)(E, N)

  • 加密:

    密文=EmodN密文 = 明文^{E} \mod N

  • 私钥:

    (D,N)(D, N)

  • 解密:

    明文=DmodN明文 = 密文^{D} \mod N

P5-4
生成密钥对
P5-5
对 RSA 的攻击
  1. 通过密文求明文:不可行

    人类目前还没有发现求解离散对数问题的高效算法。

  2. 通过暴力破解找出 D :现实时间内不可行

    暴力破解的难度随着 D 的长度的增加而变大,当 D 足够长,就不可能在现实时间内通过暴力破解找出 D 。

    在 RSA 中,p 和 q 都是1024比特以上,那么 N 就是 2048比特以上, E、D 与N 长度差不多,因此找出D需要进行2048比特以上的暴力破解,极其困难。

  3. 通过 E 和 N 找出 D:不可行

    由于 E×DmodL=1E \times D \mod L = 1

    其中 L=lcm(p1,q1)L = lcm(p-1, q-1)

    但是破译者并不知道 p,qp,q​ 是多少。

  4. 对 N 进行质因数分解攻击:不可行

    由于 N=p×qN = p \times q ,那么是否可以将 N 质因数分解得到 p, q?

    不可行。

    的确,一旦发现了对大整数质因数分解的高效算法,RSA就能被破译。

    但是,目前还没发现高效方法,甚至未证明大整数质因数分解是否是非常困难的问题,也不知道是否存在一种简单方法。

    实际上,求 D对 N 质因数分解 是等价问题。

中间人攻击:可行
  • man-in-the-middle attack

    主动攻击者 Mallory 混入发送者和接收者中间,对发送者伪装成接收者,对接收者伪装成发送者。

    中间人攻击可以针对所有公钥密码。

P5-6
  • 在这个过程中,公钥密码没有被破译,秘密算法也确保了机密性。

    只不过,这里的机密性确保的是中间人与两边的机密性。

    可见,仅靠公钥密码本身是无法防御中间人攻击的!

  • 解决方法:证书(对公钥的数字签名)

选择密文攻击:可行
  • 解密提示:

    发送任意数据,服务器都会当作密文进行解密并返回解密的结果。

  • 解决方法:

    ”密文是否是合法渠道生成的?“

    即对密文进行“认证”。

  • 改良算法:

    RSA-OAEP (Optimal Asymmetric Encryption Padding, 最优非对称加密填充)

5.4 其他公钥密码算法

  • ElGamal 方式

    原理:mod N 下求离散对数的困难度

  • Rabin 方式

    原理:mod N 下求平方根的困难度

  • ECC 椭圆曲线密码 Elliptic Curve Cryptography

    原理:椭圆曲线乘法运算的逆运算非常困难

    特点:密钥长度比RSA短

5.5 对比对称密码

  • 对称密码与公钥密码,各有优缺点。
  • 对称密码往往只需要更短的密钥长度。
T5-4

第 6 章 混合密码系统

用对称密码提高会话速度,用公钥密码保护会话密码。

6.1 公钥密码问题

  1. 公钥密码处理速度远远低于对称密码。

    解决方法:混合密码系统

  2. 公钥密码难以抵御中间人攻击。

    解决方法:认证

6.2 混合密码系统

  • 将对称密码和公钥密码的优势结合。

  • 使用技术:

    1. 对称密码
    2. 公钥密码
    3. 伪随机数生成器
  • 组成机制:

    1. 用对称密码加密消息。

      用伪随机数生成器生成对称密码加密所需的会话密钥。

    2. 用公钥密码加密对称密码。

      从系统外部赋予公钥密码加密时使用的密钥。

      (公钥,源自接收者发布。不需要考虑私钥,本身就在接收者那里)

加密
P6-2
解密
P6-3

第二部分 认证

第 7 章 单向散列函数

获取消息的“指纹”。

7.1 简介

  • 单向散列函数 one-way hash function

    根据消息内容计算出散列值,散列值可以用来检验消息的完整性。

    输入:任意长度的纯比特序列

    输出:固定长度的比特序列

  • 由于散列值很短,就会很容易处理和使用。

P7-5
  • 如:用于检验文件完整性
P7-3

7.2 性质

  1. 根据任意长度的消息计算出固定长度的散列值。
  2. 能够快速计算出散列值。
  3. 消息不同,散列值也不同。(哪怕只有1比特不同,散列值也会大不相同)
  4. 具有单向性。(无法通过散列值反算出消息)
  • 碰撞 Collision

    两个不同的消息产生同一个散列值的情况。

  • 抗碰撞性

    难以发现碰撞的性质。

  • 弱抗碰撞性

    要找到和该条消息具有相同散列值的另一条消息是非常困难的。

  • 强抗碰撞性

    要找到散列值相同的两条不同消息是非常困难的。

  1. 单向散列函数都必须具备弱抗碰撞性。
  2. 密码技术中,单向散列函数还需要具备强抗碰撞性。
  3. 单向散列函数不是加密,因为无法通过散列值还原消息(单向性)。

7.3 应用:下载软件进行检测

P7-9

7.4 密码学应用

  1. 基于口令的加密,Password Based Encryption, PBC
  2. 消息认证码
  3. 数字签名
  4. 伪随机数生成器
  5. 一次性口令, one-time password

7.5 具体例子

MD4、MD5
  • 输出长度:128 比特

  • 现均已 不安全。

SHA-1、SHA-2
名称 输出长度 当前安全性
SHA-1 160 比特 不推荐使用(强碰撞性已被攻破)
SHA-256 256 比特 未攻破(属于SHA-2)
SHA-384 384 比特 未攻破(属于SHA-2)
SHA-512 512 比特 未攻破(属于SHA-2)
RIPEMD-160
  • 输出长度:160 比特
  • 安全性:不推荐使用,强碰撞性已被攻破。
SHA-3
  • 采用 Keccak 算法

  • 输出长度:

  • 安全性:安全

  • 结构:

P7-10 P7-11
  • 状态:
P7-13
  • 操作:
P7-14 P7-15 P7-16 P7-17

7.6 问题

  • 单向散列函数无法解决的问题:

    能够辨别“篡改”,但是无法辨别“伪装”。

  • 解决方法:认证

    1. 消息认证码
    2. 数字签名

第 8 章 消息认证码

消息被正确传送了吗?

8.1 简介

  • 消息认证码 Message Authentication Code, MAC

    是一种确认完整性和认证的技术。

    • 输入:任意长度的消息 + 发送者接收者的共享密钥
    • 输出:固定长度的数据

    消息认证码是一种与密钥相关联的单向散列函数。

P8-1

8.2 使用步骤

P8-2

8.3 共享密钥的配送问题

  • 与对称密码密钥配送问题的解决方法一样。

8.4 实现方法

  1. 单向散列函数实现
  2. 分组密码实现
  3. 其他方法实现(流密码、公钥密码)

8.5 HMAC

  • 使用单向散列函数来构造消息认证码的方式(H为Hash)
image-20240503222957528 P8-3-2

8.6 攻击方法

  • 重放攻击

    可以将事先保存的正确的MAC值不断重放来攻击。

    P8-4
  • 解决方法

    1. 序号(每次递增的编号)
    2. 时间戳(当前时间)
    3. nonce(一次性的随机数)

8.7 无法解决的问题

  1. 对第三方证明
  2. 防止否认

解决方法:数字签名

第 9 章 数字签名

消息到底是谁写的?

9.1 操作行为

数字签名技术出现了下面两种行为:

  1. 生成消息签名
  2. 验证消息签名
  • 签名密钥:只能本人持有,用于签名。
  • 验证密钥:任何人都可以持有,用于验证。

这一点和公钥密码很像:

  • 私钥:只能接收者持有,用于解密。
  • 公钥:任何人都可以使用,用于加密。

数字签名就是将公钥密码反过来使用。

私钥用于加密(签名),公钥用于解密(验证)。

P9-1 P9-2

9.2 生成签名

P9-5

9.3 验证签名

P9-6

9.4 时间流程

P9-7

9.5 疑问

  1. 为什么是反用公钥密码?

    其实公钥密码的公钥私钥可以互通。

    可以认为是“使用私钥进行加密,使用公钥进行解密”。

    因此,只有私钥能生成签名,公钥能验证签名。

  2. 数字签名保证机密性吗?

    不保证机密性。但是可以另外做加密处理来保证机密性(与数字签名本身无关)。

  3. 数字签名可以随意复制?那就不是原件了?

    是的,可以随意复制。

    但是是不是原件并不重要,重要的是特定的签名者与特定的消息绑定了。

    ”谁对这条消息进行了签名“的事实不会变。

  4. 消息内容会不会被修改?

    可以任意修改,但是在大家 验证签名 时,就会验证失败,也就识破了。

    数字签名做的不是防止修改,而是识别修改

    可不可以同时修改消息和签名?

    事实上做不到,这需要破解得到私钥才能做到。

  5. 可不可以重复使用签名?

    也就是说“能不能扣下来,给其他消息使用”。

    实际上和前面一样的道理。可以做,但是在验证签名时会被识破。

  6. 删除签名也无法“作废合同”吗?

    是的!!!

    这一点很重要,仅仅是把文件删除了,并没有作废合同。

    难以保证可能有人偷偷搞了一个备份,以后拿出来,也是有效的。

    那怎么办?

    解决方法:

    1. 声明已作废(需要不断更新声明)
    2. 数字签名中添加有效期
  7. 防止否认?

    只有持有私钥才能生成签名,而私钥只在本人手上。

    所以说,生成的签名,就一定是本人签名的。

    会不会出现私钥被盗?

    确实,那么需要另外解决(声明某私钥的所有签名完全作废)。

9.6 应用

  1. 安全信息公告
    • 是一种明文签名。
P9-8
  1. 软件下载
  2. 公钥证书
  3. SSL/TLS

9.7 RSA实现

  • 生成签名

    签名=DmodN签名 = 消息^{D} \mod N

  • 验证签名

    由签名求得的消息=EmodN由签名求得的消息 = 签名^{E} \mod N

  • 比对

    将 ”消息“ 与 ”由签名求得的消息“ 对比

9.8 其他实现

  • 其他公钥密码也可以:
    1. ElGamal 方式
    2. DSA, Digital Signature Algorithm, 数字签名算法
    3. ECDSA, Elliptic Curve Digital Signature Algorithm, 椭圆曲线数字签名算法
    4. Rabin 方式

9.9 攻击方法

  • 中间人攻击

    解决方法:需要确认拿到的公钥是否为自己的通信对象的公钥(即公钥合法性,证书)

  • 对单向散列函数攻击

    解决方法:抗碰撞性

  • 利用数字签名攻击公钥密码

    由于都是使用私钥

    请解密消息“ 和 ”请对消息签名“ 是一样的。

    解决方法:

    1. 绝对不要对意识不清晰的消息签名(因为可能是在套你的解密消息)
    2. 公钥密码和数字签名,两者分别使用不同的密钥对。
  • 潜在伪造

    若是攻击者能够生成一个合法的签名(即便验证时发现签名没什么意义,但是验证通过了)

    那么就是”潜在伪造“。

    解决方法:RSA-PSS,不再是对消息签名,而是对 ” 消息的散列值 + 盐 “进行签名。

9.10 对比消息认证码

T9-3
  • 密码机密性的精华。
  • 散列值完整性的精华。

9.11 无法解决的问题

  • 数字签名可以识别篡改、伪造,也能防止否认。

  • 但是有一个大前提:

    用于验证的公钥必须属于真正的发送者。

    如果这个用于验证签名的公钥是中间人的,那么一切都是白费。

  • 解决方法:

    证书

    就是将公钥当作一个消息,有一个第三方对其签名后所得到的公钥。

    那不还是把问题转移了而已?还得验证这个公钥啊?

    的确,但是是有意义的。

    这里引出了:

    1. 公钥基础设施 PKI, Publci Key Infrastructure
    2. 物理内嵌在计算机中的可信第三方的证书

第 10 章 证书

为公钥加上数字签名。

10.1 简介

  • 证书

    也称” 公钥证书 “,PKC, Public-Key Certificate

    记录下属于本人的公钥,并由认证机构(CA, Certification Authority)对这一事情施加数字签名。

    也就是说,只要看到证书,我们就能知道,认证机构担保这个公钥的确属于这个人。

    这里实际上,我们已经默认认证机构是可信的第三方。

  • 示例

    T10-1

10.2 流程

P10-1

10.3 公钥基础设施 PKI

  • 组成要素:
    1. 用户——使用 PKI 的人
    2. 认证机构——颁发证书的人
    3. 仓库——保存证书的数据库
image-20240503233644231

10.4 作废证书、CRL

  • 当用户的私钥被盗或作废时,认证机构需要对证书进行作废 revoke。

  • 证书作废清单 CRL, Certification Revocation List

    CRL 是认证机构宣布作废的证书一览表。

    具体来说,是一张已作废证书序列号的清单,并加上认证机构的数字签名。

  • 因此,即便是一个证书有认证机构的有效签名,也在有效期,也不能认定为有效。

    还需要查询认证机构最新的CRL,确认是否有效。

10.5 证书层级

P10-5

10.6 攻击方法

  1. 在公钥注册之前攻击

    在这个注册流程时,进行攻击。

    解决方法:

    在注册发送待自己注册的公钥时,使用认证机构的公钥加密。

    同时认证机构回信也把待注册的公钥的散列值返回给用户确认是否是对的待注册公钥。

  2. 注册相似人名进行攻击

    解决方法:认证机构要确认是否是本人的真实信息,而不是潜在恶意信息的注册。

  3. 窃取认证机构的私钥进行攻击

    的确,认证机构的私钥泄露,那就一切瘫痪了。

    解决方法:在发现认证机构本身的私钥泄露后,立马通过 CRL 告知所有用户。

  4. 攻击者伪装成认证机构

    如果认证机构本身不可信,即便公钥声称合法,也是不可使用的。

    解决方法:注意识别认证机构是否是可信的第三方(现在一般都物理内嵌在计算机内部)

  5. 装 CRL 的空子攻击

    1. 利用 CRL 发布的时间差

      解决方法:

      • 公钥作废需要尽快通知、更新 CRL
      • 用户每次使用公钥需再次确认 CRL
    2. 装空子实现否认

      解决方法:OCSP协议(RFC2560,不再深入)

  6. Superfish

    安装软件偷偷改动了系统的根证书,劫持通信,更换证书。

    解决方法:注意软件安装是否可信

10.7 疑问

  1. 为什么需要证书?

    防止中间人攻击。

    如果有办法获得可信的公钥,就不需要认证机构。

  2. 使用自己私自开发的技术来认证更安全?

    错误。

    靠隐蔽保证安全是错误的。隐蔽式安全是危险且愚蠢的。

  3. 为什么要相信认证机构?

    很好的问题。

    这涉及到”信任是如何产生的“。

第三部分 密钥、随机数、应用技术

第 11 章 密钥

密钥是机密性的精华。

11.1 密钥保存问题

  • 用一个密钥统一加密保存所有密钥

    有意义吗?

    有:减少需要保管的密钥数量。

P11-6

11.2 Diffie-Hellman 密钥交换

  • 意义

    使用这种方法,通信双方只需交换一些可以公开的数字就能实现生成一个相同的共享密钥。

    实际上,双方并没有交换密钥,而是通过计算生成了一个相同的共享密钥,因此也叫”密钥协商“。

  • 防破解原理:离散对数问题

    根据 GAmodPG^A \mod P 求出 AA 的有效算法至今没有出现。

  • 流程图

    P11-7

还有其他版本:椭圆曲线 Diffie-Hellman 密钥交换

11.3 基于口令的密码 PBE

  • 基于口令的密码 Password Based Encryption

    根据口令生成密钥,并使用该密钥进行加密的方法。

  • 加密

    P11-8
  • 解密

    P11-9

11.4 盐的作用

  • 防御字典攻击
P11-10

第 12 章 随机数

不可预测的源泉。

12.1 应用场景

  1. 生成密钥

    对称密码、消息认证码

  2. 生成密钥对

    公钥密码、数字签名

  3. 生成初始化向量

    分组密码的 CBC、CFB、OFB 模式

  4. 生成 nonce

    防御重放攻击、CTR模式

  5. 生成盐

    基于口令的密码PBE

为什么使用随机数?

不让攻击者看穿!

12.2 定义

  • 随机数按性质分为三类,且为递进关系:

    1. 弱随机数:随机性——不存在统计学偏差,是完全杂乱的数列

      杂乱无章不代表不会被看穿。

    2. 强随机数:不可预测性——不能通过过去的数列推出下一个数字

      不可预测性是通过使用其他密码技术来实现的。

    3. 真随机数:不可重现性——除非将数列本身保存下来,否则不可能出现重现相同的数列

      首次出现重复之前数列的长度称为周期。

      对于软件所生成的数列必定是周期有限的,可能很长,但是肯定是有限数。

      要生成不可重现的数列,需要从周围的物理环境中获取,如温度、湿度、声音。

      硬件:新型因特尔CPU新增RDSEED通过热噪声实现真随机数。

12.3 伪随机数生成器

  • 上述的CPU通过热噪声生成随机数,是真随机数,是随机数生成器
  • 下述,我们通过密码技术实现强随机数,是伪随机数生成器
P12-2

12.4 具体方法

  1. 写出杂乱数字:不可行

    不理解算法,就无法判断具备不可预测性。

  2. 线性同余法:弱随机数,不能用于密码技术

    初始的R 由种子给出,后续由下式计算:

    Rn+1=(A×Rn+C)modMR_{n+1} = (A \times R_n +C) \mod M

    P12-4
  3. 单向散列函数法:可行,强随机数

    单向性是支撑不可预测性的基础。

    P12-5

    注意:下面这种不可行!

    因为可以通过前面的散列值,也能自己推出下一次的输出数字。

    那么就不具备不可预测性。

    P12-6
  4. 密码法:可行,强随机数

    密码的机密性是支撑不可预测性的基础。

    P12-7
  5. ANSI X9.17:可行,强随机数

    P12-8 P12-8-2
  6. 其他算法

    如 梅森旋转算法。

12.5 攻击方法

  1. 对种子进行攻击
  2. 对随机数池进行攻击(随机数池一般是用伪随机数生成器生成备用的那些数字)

第 13 章 PGP

密码技术的完美组合。

13.1 简介

  • PGP, Pretty Good Privary, 很好的隐私

    一种密码软件。

  • 支持功能

    1. 对称密码
    2. 公钥密码
    3. 数字签名
    4. 单向散列函数
    5. 证书
    6. 压缩
    7. 文本数据
    8. 大文件的拆分和拼合
    9. 钥匙串管理

13.2 生成公钥对

P13-3

13.3 加密解密

P13-4 P13-5

P13-6

13.4 数字签名

P13-7 P13-8

P13-9

13.5 数字签名+加密

P13-10 P13-11

P13-12

13.6 信任网

  • PGP 采用的确认公钥合法性的方法——信任网。

  • PGP 用户会互相对对方的公钥进行数字签名。

  • 所有者信任级别:

    1. 绝对信任(本人),Ultimately trusted
    2. 完全信任,Fully trusted
    3. 有限信任,Marginnally trusted
    4. 不信任,Never trust this key
    5. 未知密钥,Not enough information
    6. 未设置,Not owner trust assigned
  • 公钥合法性和所有者信任是不同的。

  • 所有者信任级别是因人而异的。

  • 各种场景:

    P13-13

第 14 章 SSL/TLS

为了更安全的通信。

14.1 简介

  • SSL,Secure Socket Layer,安全套接层
  • TLS,Transport Layer Security,传输层安全性
  • TLS 是 SSL 的后续版本,但是一般还是统称 SSL/TLS。
P14-3

14.2 TLS 层次结构

P14-5

14.3 使用到的密码技术

T14-1

14.4 对 SSL/TLS 的攻击

  1. 对各个密码技术的攻击
  2. OpenSSL 的心脏出血漏洞
  3. SSL 3.0 漏洞与 POODLE 攻击
  4. FREAK 攻击与密码产品出口管制
  5. 对伪随机数生成器的攻击
  6. 利用证书的时间差进行攻击

第 15 章 密码技术与现实社会

我们生活在不完美的安全中。

15.1 密码学家的工具箱

  1. 对称密码
  2. 公钥密码
  3. 单向散列函数
  4. 消息认证码
  5. 数字签名
  6. 伪随机数生成器

精华:

  • 不可预测性:伪随机数生成器

  • 机密性:密码

  • 完整性:单向散列函数

P15-1

15.2 密码就是压缩

P15-2

15.3 比特币

  • 比特币能够成为流通的货币,完全依赖于全世界所有比特币用户组成的P2P网络。

  • 可以说,比特币是一种基于 P2P 网络的支付结算系统

  • 比特币交易通过比特币地址完成。

  • 区块链是保存比特币全部交易记录的公共账簿。

    P15-4
  • 向区块链中添加区块就好像从金矿中挖出比特币一样,因此称为”挖矿“。

  • 成功添加区块的矿工将会获得手续费。

  • 为了防止伪造,需要证明确实完成了规定的工作量——工作证明 Proof of Work, PoW。

  • 若是出现分歧,则以工作量大的分支为正确分支。

    (假定善意的矿工所需的计算资源是大于恶意的矿工所需的计算资源)

15.4 量子密码

  • 原理

    1. 从原理上说,无法准确测出光子的偏振方向。

      根据这一事实,可以让窃听得到的内容不正确。

    2. 测量行为本身会导致光子的状态发生变化。

      根据这一事实,接收者可以判断通信是否被窃听。

  • 量子密码与量子计算机

    量子密码是密码学家的终极工具。

    量子计算机是密码破译者的终极工具。

    哪个技术会先出现?

    • 若是量子密码:

      则能够实现一次性密码本,产生完美的密码。

    • 若是量子计算机:

      目前所有密码技术的密文都能被快速暴力破解。

    以后怎么办?

    • 耐量子密码、后量子密码
    • 多变量公钥密码:利用NP完全问题的复杂度,被认为是能够对抗量子计算机的密码系统。

15.5 忠告

  1. 理论是完美的,现实是残酷的。
  2. 防御必须天衣无缝,攻击只需突破一点。