一、全章架构总览
第8章以"从密码学基础到各层安全协议,再到运行安全"的递进逻辑,系统构建了计算机网络安全的知识体系。全章以 Alice、Bob 和 Trudy(入侵者)三位虚拟角色贯穿始终,生动演绎安全需求、攻击手段和防御机制。
┌─────────────────────────────────────────────┐
│ 8.9 运行安全性 │
│ 防火墙 + IDS/IPS(Snort) │
│ "机构网络的出入安检" │
└─────────────────────────────────────────────┘
↑ 保护整个机构网络
╔═══════════════════════════════════════════════════════════════════════════════════╗
║ 自顶向下的各层安全协议 ║
╠═══════════════════════════════════════════════════════════════════════════════════╣
║ ║
║ ┌─────────────────────────────────────────────────────────────┐ 应用层 ║
║ │ 8.5 安全电子邮件 (PGP) │ ║
║ │ 机密性 + 发送方鉴别 + 报文完整性 │ ║
║ │ 会话密钥K_S + RSA + 数字签名 + 散列函数 │ ║
║ └─────────────────────────────────────────────────────────────┘ ║
║ ↓ ║
║ ┌─────────────────────────────────────────────────────────────┐ 运输层 ║
║ │ 8.6 TLS (使TCP连接安全) │ ║
║ │ 握手 → 密钥导出 → 数据传输(记录+HMAC+加密) │ ║
║ │ 不重数防御连接重放,序号防御报文段重放 │ ║
║ └─────────────────────────────────────────────────────────────┘ ║
║ ↓ ║
║ ┌─────────────────────────────────────────────────────────────┐ 网络层 ║
║ │ 8.7 IPsec 和 VPN │ ║
║ │ ESP协议:机密性+源鉴别+数据完整性+防重放攻击 │ ║
║ │ 隧道模式: 整个初始IP数据报→加密→新IP首部→"enchilada" │ ║
║ │ IKE两阶段密钥管理 │ ║
║ └─────────────────────────────────────────────────────────────┘ ║
║ ↓ ║
║ ┌─────────────────────────────────────────────────────────────┐ 链路层 ║
║ │ 8.8 无线安全 │ ║
║ │ WPA2四次握手: 相互鉴别+会话密钥推导 │ ║
║ │ 4G/5G AKA: MME/HSS协作鉴别 │ ║
║ │ EAP + RADIUS 协议栈 │ ║
║ └─────────────────────────────────────────────────────────────┘ ║
║ ║
╚═══════════════════════════════════════════════════════════════════════════════════╝
↑
┌─────────────────────────────────────────────┐
│ 8.1 网络安全四大属性 │
│ 机密性 | 报文完整性 | 端点鉴别 | 运行安全性 │
└─────────────────────────────────────────────┘
↑
┌───────────────────────────────────────────────────────────────────┐
│ 8.2-8.4 密码学基础 │
│ │
│ 8.2 密码学原理 8.3 报文完整性和数字签名 8.4 端点鉴别 │
│ ┌──────────────┐ ┌───────────────────┐ ┌──────────┐ │
│ │ 对称密钥密码 │ │ 密码散列函数(H) │ │ ap1.0 │ │
│ │ DES/AES/CBC │ │ MD5 → SHA-1 │ │ ↓ 身份声明│ │
│ ├──────────────┤ ├───────────────────┤ │ ap2.0 │ │
│ │ 公开密钥密码 │ │ 报文鉴别码(MAC) │ │ ↓ IP地址 │ │
│ │ RSA/DH │ │ HMAC = H(m+s) │ │ ap3.0 │ │
│ │ 会话密钥K_S │ ├───────────────────┤ │ ↓ 口令 │ │
│ └──────────────┘ │ 数字签名 │ │ ap3.1 │ │
│ │ K_B^-(H(m)) │ │ ↓ 加密口令│ │
│ ├───────────────────┤ │ ap4.0 │ │
│ │ 公钥认证(CA/X.509) │ │ ↓ 不重数 │ │
│ └───────────────────┘ └──────────┘ │
└───────────────────────────────────────────────────────────────────┘
核心洞察:网络安全 = 密码学基础(机密性工具)支撑报文完整性鉴别和端点鉴别,这三者再逐层应用到协议栈各层的安全协议中(PGP→TLS→IPsec→WPA2),最后辅以防火墙和IDS/IPS保护机构网络运行安全。对称密钥密码在整个体系结构中处于绝对的核心地位。
二、8.1 什么是网络安全
2.1 人物设定与叙事逻辑
全章以三位角色贯穿:
| 角色 | 身份 | 作用 |
|---|---|---|
| Alice | 发送方 | 发起安全通信的一方 |
| Bob | 接收方 | 接收安全通信的一方 |
| Trudy | 入侵者(intruder) | 企图破坏安全通信的第三方 |
Alice 和 Bob 希望"安全地"通信,Trudy 则能够:
- 窃听:监听并记录信道上传输的控制报文和数据报文
- 修改、插入或删除报文或报文内容
2.2 安全通信的四大属性
┌──────────────────────────────────────────────────────────────┐
│ 安全通信的四大属性 │
├───────────────┬──────────────────────────────────────────────┤
│ ① 机密性 │ 仅有发送方和接收方能够理解传输报文的内容 │
│ Confidentiality│ 需要加密(encryption) │
│ │ → 8.2节 密码学原理 │
├───────────────┼──────────────────────────────────────────────┤
│ ② 报文完整性 │ 通信内容在传输过程中未被篡改 │
│ Message │ 扩展检验和/散列技术 │
│ Integrity │ → 8.3节 报文完整性和数字签名 │
├───────────────┼──────────────────────────────────────────────┤
│ ③ 端点鉴别 │ 通信双方证实对方确实具有其所声称的身份 │
│ End-Point │ 人类靠视觉/声纹;网络靠报文和数据交换 │
│ Authentication│ → 8.4节 端点鉴别 │
├───────────────┼──────────────────────────────────────────────┤
│ ④ 运行安全性 │ 保护机构网络免受攻击(防火墙、IDS等) │
│ Operational │ 反制蠕虫、秘密窃取、DoS等威胁 │
│ Security │ → 8.9节 运行安全性 │
└───────────────┴──────────────────────────────────────────────┘
2.3 攻击者的能力(Trudy 能做什么)
基于图8-1的模型:
- 窃听:被动监听并记录控制和数据报文
- 篡改:修改报文内容、插入新报文、删除报文
- 假冒:冒充另一个实体
- 会话劫持:"劫持"一个正在进行的会话
- 拒绝服务:通过使系统资源过载拒绝合法用户的网络服务
2.4 需要安全通信的实体
不仅仅是人类用户之间的通信需要安全:
- DNS服务器之间(防DNS欺骗)
- 路由器之间交换路由选择信息(防OSPF/BGP攻击)
- 网络管理功能(防SNMP攻击)
- 电子商务(信用卡号传输)
- 在线银行交互
三、8.2 密码学原理
3.1 密码学基本术语
加密密钥 K_A 解密密钥 K_B
↓ ↓
明文 m ──────────→ [加密算法] ──────────→ [解密算法] ──────────→ 明文 m
(plaintext) │ 密文 c │ (recovered)
│ (ciphertext) │
└──────────────────────┘
K_A(m) = c K_B(c) = m
| 术语 | 英文 | 定义 |
|---|---|---|
| 明文 | plaintext / cleartext | 报文的初始形式,可理解的内容 |
| 密文 | ciphertext | 加密后的报文,对入侵者不可理解 |
| 加密算法 | encryption algorithm | 以明文和密钥为输入,产生密文 |
| 解密算法 | decryption algorithm | 以密文和密钥为输入,恢复明文 |
| 密钥 | key | 一串数字或字符,作为加密/解密算法的输入 |
| 对称密钥系统 | symmetric key system | Alice 和 Bob 的密钥相同且秘密 |
| 公开密钥系统 | public key system | 一对密钥:公钥公开,私钥保密 |
3.2 三种攻击模型
根据入侵者拥有的信息分为三种:
| 攻击类型 | 英文 | 入侵者拥有的信息 |
|---|---|---|
| 唯密文攻击 | ciphertext-only attack | 只能得到截取的密文,不了解明文内容 |
| 已知明文攻击 | known-plaintext attack | 知道某些(明文,密文)的匹配关系 |
| 选择明文攻击 | chosen-plaintext attack | 能够选择某一明文报文并得到其密文形式 |
3.3 古典密码(通向现代密码的阶梯)
凯撒密码 ──→ 单码代替密码 ──→ 多码代替密码 ──→ 现代块密码
(Caesar) (Monoalphabetic) (Polyalphabetic) (DES/AES)
k=3偏移 26! ≈ 10^26种 多个凯撒密码 函数模拟
25种可能 统计可破 循环使用 随机排列表
C₁,C₂,C₂,C₁,C₂ 密钥决定映射
凯撒密码:每个字母用字母表中后 k 个字母替换
- 密钥:k 的值
- 弱点:仅 25 种可能密钥
单码代替密码:每个字母有唯一替换字母,但映射方式任意
- 可能映射:26! 种(约 10^26)
- 弱点:统计分析------英语中 'e' 出现频率 13%,'t' 出现频率 9%,常见字母组合 "in", "it", "the", "ion", "ing"
多码代替密码:使用多个单码代替密码,不同位置的相同字母可能以不同方式编码
- 密钥:各凯撒密码的 k 值 + 使用次序模式
3.4 对称密钥密码体制(8.2.1节)
块密码(Block Cipher)基本原理
- 报文被处理为 k 比特的块,每块独立加密
- 本质:将 k 比特块的明文 一对一映射 为 k 比特块的密文
- 可能的映射数量:2^k! 种(对于 k=64 是天文数字)
- 实际实现:使用函数模拟随机排列表,通过多轮循环使每个输入比特影响多数输出比特
三大对称密钥块密码标准
| 标准 | 全称 | 块大小 | 密钥长度 | 备注 |
|---|---|---|---|---|
| DES | Data Encryption Standard | 64 比特 | 56 比特 | 已可被蛮力破解(1秒内尝试所有2^56个密钥) |
| 3DES | Triple DES | 64 比特 | 168 比特(三个56比特密钥) | DES的增强版 |
| AES | Advanced Encryption Standard | 128 比特 | 128/192/256 比特 | NIST标准;破解128比特AES需约149万亿年 |
密码块链接(CBC --- Cipher Block Chaining)
问题:直接独立加密每块 → 相同明文块产生相同密文块 → 攻击者可推断明文信息
解决方案:CBC 在密文中混合随机性
CBC 过程:
发送方首先生成随机初始向量 IV = c(0),以明文发送
第1块: c(1) = K_S( m(1) ⊕ c(0) )
第2块: c(2) = K_S( m(2) ⊕ c(1) )
第i块: c(i) = K_S( m(i) ⊕ c(i-1) )
解密: m(i) = K_S^{-1}(c(i)) ⊕ c(i-1)
(接收方已知 c(i-1))
CBC 的关键性质:
- 相同明文块产生(几乎)总是不同的密文块
- 入侵者不知密钥 K_S,即使知道 IV 也无法解密密文
- 仅增加一个初始块(IV),带宽开销可忽略
- 设计安全协议时需提供从发送方向接收方分发 IV 的机制
替代方案:随机数法
c(i) = K_S( m(i) ⊕ r(i) ) → 发送 c(1), r(1), c(2), r(2), ...
- 每块随机生成 r(i)
- 缺点:传输量翻倍
- CBC 通过复用前一密文块代替随机数解决了这个问题
3.5 公开密钥加密(8.2.2节)
核心思想
Bob的公钥 K_B^+ (全世界可见)
↓
Alice: 明文 m ──→ 加密 K_B^+(m) = c ──→ 密文 c ──→ Bob
Bob的私钥 K_B^- (仅Bob知道)
↓
Bob: 密文 c ──→ 解密 K_B^-(c) = m ──→ 明文 m 恢复
关键性质 :K_B-(K_B+(m)) = K_B+(K_B-(m)) = m
RSA 算法
密钥生成(Bob 执行):
1. 选择两个大素数 p 和 q(乘积 1024 比特量级)
2. n = p × q
3. z = (p - 1) × (q - 1)
4. 选择 e < n,且 e 与 z 互素(无公因数)
5. 求 d 使得 ed mod z = 1
6. 公钥 K_B^+ = (n, e) 私钥 K_B^- = (n, d)
RSA 加密/解密流程:
┌─────────────────────────────────────────────────────────┐
│ RSA 加密/解密流程 │
│ │
│ 加密 (Alice): │
│ 将报文表示为整数 m (m < n) │
│ c = m^e mod n │
│ 发送 c 给 Bob │
│ │
│ 解密 (Bob): │
│ m = c^d mod n │
│ 恢复初始报文 m │
│ │
│ ┌──────────┐ ┌──────────────┐ ┌──────────┐ │
│ │ Alice │────→│ 公开信道 │────→│ Bob │ │
│ │ m → c │ │ (可能被窃听) │ │ c → m │ │
│ │ 用公钥(n,e)│ │ │ │ 用私钥(n,d)│ │
│ └──────────┘ └──────────────┘ └──────────┘ │
│ │
└─────────────────────────────────────────────────────────┘
RSA 数值示例(p=5, q=7):
- n = 35, z = 24, e = 5, d = 29
- 加密 "l" (m=12): c = 12^5 mod 35 = 17
- 解密 c=17: m = 17^29 mod 35 = 12
RSA 的安全性基础:
- 依赖因数分解的困难性:给定 n=pq,目前没有已知的快速算法分解出 p 和 q
- 若已知 p 和 q,则由 e 可很容易计算出 d
- 安全性不是确保的(不确定是否存在快速因数分解算法)
会话密钥(Session Key)
问题:RSA 指数运算非常耗时,不适合加密大量数据
解决方案:RSA + 对称密钥密码结合
Alice 选择随机会话密钥 K_S
│
├─→ 用 K_S 对称加密大量数据
└─→ 用 Bob 的公钥 K_B^+ RSA加密 K_S → c = K_S^e mod n
Bob 收到 c 后用私钥解密:K_S = c^d mod n
然后用 K_S 对称解密数据
这就是实际中所有安全协议的核心模式:非对称加密分发对称密钥,对称密钥加密数据。
Diffie-Hellman 密钥交换
- 允许两个实体在不共享预先商定密钥的情况下,通过公开信道协商出一个共享的对称密钥
- 不能用于加密任意长度的报文
- 用于创建对称会话密钥,该密钥再用于加密长报文
- 在 IPsec 的 IKE 协议中被使用
四、8.3 报文完整性和数字签名
4.1 报文完整性问题的定义
Bob 接收到声称来自 Alice 的报文,需要证实:
- 该报文的确源自 Alice(源鉴别)
- 该报文在传输途中未被篡改
典型应用场景:OSPF 链路状态路由选择 --- 路由器需确认接收的链路状态报文来自声称的路由器且未被动过手脚。
4.2 密码散列函数(8.3.1节)
任意长度报文 m ──→ [散列函数 H] ──→ 固定长度散列值 H(m)
(报文的"指纹")
密码散列函数的附加性质:
- 找到任意两个不同的报文 x 和 y 使得 H(x) = H(y),在计算上是不可能的
- 这意味着入侵者无法用其他报文替换由散列函数保护的报文
为什么简单检验和不够:
- 如图8-8所示,"IOU100.99BOB" 和 "IOU900.19BOB" 具有相同的检验和
- 给定初始数据,很容易找到具有相同检验和的其他数据
两大主要散列算法:
| 算法 | 输出长度 | 设计者 | 备注 |
|---|---|---|---|
| MD5 | 128 比特 | Ron Rivest | 4步过程:填充→添加长度→初始化→4轮循环处理16字块 |
| SHA-1 | 160 比特 | NIST(美国联邦标准) | 更安全(输出更长);联邦政府应用强制使用 |
4.3 报文鉴别码 MAC(8.3.2节)
MAC vs 简单散列
简单散列(有缺陷):
Alice: 发送 (m, H(m))
Trudy: 生成 m',计算 H(m'),发送 (m', H(m'))
Bob: H(m') 匹配 → 被骗!
→ 问题:任何人都能计算 H(m')
MAC(正确方案):
Alice 和 Bob 共享秘密鉴别密钥 s
Alice: 发送 (m, H(m + s)) ← MAC = H(m + s)
Bob: 用共享 s 计算 H(m + s),与收到的 MAC 比较
Trudy: 不知 s,无法伪造 MAC
→ 正确!因为 Trudy 不知道 s
MAC 的优良特点
- 不要求加密算法:仅使用散列函数和共享秘密
- 许多应用(如 OSPF 链路状态路由)仅关心报文完整性,不关心机密性
- 最流行标准:HMAC(使用 MD5 或 SHA-1),将数据和鉴别密钥通过散列函数运行两次
鉴别密钥分发问题
因特网中如何向通信双方分发共享的鉴别密钥 s?
- 人工方式:网络管理员物理访问每台路由器手动配置
- 公钥加密方式:用路由器的公钥加密鉴别密钥后通过网络发送
4.4 数字签名(8.3.3节)
数字签名的需求
如同手工签名,数字签名应当:
- 可鉴别(verifiable):必须能证明某个人确实签署了该文件
- 不可伪造(non-forgable):只有这个人能够签署该文件
数字签名方案
┌──────────────────────────────────────────────────────────────┐
│ 发送方 Bob 生成数字签名: │
│ │
│ 报文 m ──→ [散列函数 H] ──→ H(m) ──→ [Bob的私钥 K_B^-] │
│ ──→ 数字签名 K_B^-(H(m))│
│ │
│ 发送:(原始报文 m, 数字签名 K_B^-(H(m))) │
│ │
├──────────────────────────────────────────────────────────────┤
│ 接收方 Alice 验证数字签名: │
│ │
│ 收到的 m ──→ [散列函数 H] ──→ H(m) │
│ 收到的数字签名 ──→ [Bob的公钥 K_B^+] ──→ K_B^+(K_B^-(H(m))) │
│ = H(m) │
│ │
│ 比较两个 H(m):若相等 → ✓ 签名有效 │
│ → ✓ 报文未被篡改 │
│ → ✓ 发送方确实是 Bob │
└──────────────────────────────────────────────────────────────┘
为什么先散列再签名(而不是直接签名报文)?
- 散列值 H(m) 远小于报文 m,加密/解密开销大幅降低
- 对报文散列签名比对整个报文加密签名更高效
数字签名的法律/逻辑基础
Alice 能够在法庭上证明 Bob 签署了文档,因为:
- 生成签名必须使用私钥 K_B^-(使得 K_B+(K_B-(m)) = m)
- 只有 Bob 知道 K_B^-(假设未泄露/未失窃)
- 公钥 K_B^+ 无助于得知私钥
MAC vs 数字签名
| 维度 | MAC | 数字签名 |
|---|---|---|
| 生成方式 | H(m + s),s 为共享鉴别密钥 | K_B^-(H(m)),使用私钥 |
| 涉及加密 | 不涉及任何加密 | 使用公开密钥加密 |
| 所需基础设施 | 共享秘密 s | 公钥基础设施 PKI(CA支持) |
| 技术复杂度 | 较低 | 较高 |
| 典型应用 | OSPF路由协议、TLS、IPsec | PGP安全电子邮件 |
| 可否抵赖 | 双方共享密钥,发送方可抵赖 | 不可抵赖(仅发送方拥有私钥) |
4.5 公钥认证和证书(CA)
比萨恶作剧问题
正常场景:Bob 下订单 + Bob的数字签名 → Alice 用 Bob 的公钥验证 ✓
攻击场景:
Trudy 发送 "我是 Bob" + Trudy的公钥(冒充Bob的) + Trudy的签名
→ Alice 用 "这把公钥" 验证通过
→ Alice 认为订单来自 Bob
→ 比萨送到了 Bob 家,但是 Trudy 下的单!
问题本质:Alice 无法确定她拿到的公钥确实属于 Bob。
认证中心 CA(Certification Authority)
CA 的职责:
-
验证实体身份:CA 证实一个人的真实身份(验证方法无强制规定,信任取决于 CA 的信誉)
-
签发证书 :生成将身份和公钥绑定的证书(certificate) ,并对证书进行数字签名
┌────────────────────────────────────────────────────────┐
│ CA 证书签发流程 │
│ │
│ Bob的身份信息 + Bob的公钥 K_B^+ │
│ ↓ │
│ CA 验证 Bob 的真实身份 │
│ ↓ │
│ CA 用自己的私钥 K_CA^- 对证书签名 │
│ ↓ │
│ 证书 = (Bob的身份, K_B^+, CA的数字签名) │
│ │
│ 任何人可用 CA 的公钥 K_CA^+ 验证证书真伪 │
└────────────────────────────────────────────────────────┘
X.509 证书字段
| 字段名 | 描述 |
|---|---|
| 版本 | X.509 规范的版本号 |
| 序列号 | CA 颁发的证书的唯一标识符 |
| 签名 | 规定 CA 使用的签名算法 |
| 颁发者名称 | 发行该证书的 CA 的标识(DN 格式) |
| 有效期 | 证书合法性开始和结束的时间范围 |
| 主题名 | 公钥与该证书相联系的实体标识(DN 格式) |
| 主题公钥 | 该主题的公钥及其使用的公钥算法 |
五、8.4 端点鉴别
5.1 核心问题
端点鉴别:一个实体经计算机网络向另一个实体证明其身份的过程。
与 8.3 节报文完整性的区别:端点鉴别关注当前活跃的实体,而不是过去某点发送的报文。
鉴别协议在通信实体运行其他协议之前运行,先建立相互满意的各方标识。
5.2 鉴别协议的递进式设计:ap1.0 → ap4.0
ap1.0 ap2.0 ap3.0 ap3.1 ap4.0
身份声明 → IP地址验证 → 口令 → 加密口令 → 不重数
┌────┐ ┌────────┐ ┌────┐ ┌───────┐ ┌───────────┐
│"我是│ │检查源IP │ │口令 │ │加密口令│ │不重数R │
│Alice"│ │地址 │ │明文 │ │K_A-B │ │+K_A-B(R) │
└────┘ └────────┘ └────┘ └───────┘ └───────────┘
│ │ │ │ │
▼ ▼ ▼ ▼ ▼
任何人都 IP哄骗可 嗅探可 回放攻击 ✓ 安全
可以声称 绕过 窃取口令 可绕过 防重放+活性证明
各版本的详细分析
| 协议 | 机制 | 安全缺陷 | Trudy 的攻击方式 |
|---|---|---|---|
| ap1.0 | Alice 发送"我是 Alice" | 无任何验证 | Trudy 直接发送"我是 Alice"即可冒充 |
| ap2.0 | Bob 验证源 IP 地址是否为 Alice 的已知地址 | IP 哄骗 | Trudy 构造具有 Alice 源 IP 地址的数据报(可修改操作系统内核实现) |
| ap3.0 | Alice 发送秘密口令 | 嗅探窃取口令 | Trudy 嗅探明文传输的口令;现实中 Telnet/FTP 登录口令即以明文传输 |
| ap3.1 | Alice 用共享对称密钥 K_A-B 加密口令 | 回放攻击(playback attack) | Trudy 记录加密的口令,然后向 Bob 重放该加密版本以冒充 Alice |
| ap4.0 | 使用不重数(nonce) | 安全(给定共享对称密钥安全的前提下) | Trudy 无法通过回放攻击,因为不重数每个会话只使用一次 |
5.3 不重数(Nonce)与 ap4.0
不重数(nonce) :在一个协议的生存期中只使用一次的数。一旦使用,永不重用。
ap4.0 协议流程:
Alice Bob
│ │
│ (1) "我是 Alice" │
│──────────────────────────────→│
│ │
│ (2) 不重数 R │ Bob 选择不重数 R
│←──────────────────────────────│
│ │
│ (3) K_A-B(R) │ Alice 用共享密钥加密不重数
│──────────────────────────────→│
│ │
│ Bob 解密:若解密结果 = R
│ 则鉴别 Alice 成功:
│ ① Alice 知道密钥 K_A-B(验证身份)
│ ② Alice 刚加密了新生成的不重数(验证活性)
│ │
ap4.0 建立了两点验证:
- 身份:Alice 知道加密 R 所需的秘密密钥 K_A-B
- 活性:Alice 加密的是 Bob 刚刚产生的新不重数 R(非重放旧报文)
类比:TCP 三次握手使用初始序号解决类似问题 --- 服务器选择初始序号发给客户,等待客户以该序号响应来确认客户"活跃且真实"。
六、8.5 安全电子邮件
6.1 为什么需要多层安全?
应用层 ──── PGP (安全电子邮件)
↓
运输层 ──── TLS (使 TCP 连接安全)
↓
网络层 ──── IPsec (网络层"地毯式覆盖"安全)
↓
链路层 ──── WPA2/4G-AKA (无线链路安全)
为什么不在仅一层(如网络层)提供安全?
- 网络层安全不能提供用户级安全(例如商业站点不能仅依赖 IP 层安全来鉴别购买顾客)
- 在较高层部署新服务更容易(只需要修改客户/服务器代码,无需等待全网部署)
- PGP 是第一个在因特网上得到广泛部署的安全技术,仅因为只需客户和服务器代码
6.2 安全电子邮件的渐进式设计
阶段一:仅提供机密性
Alice 侧:
① 选择随机对称会话密钥 K_S
② 用 K_S 加密报文 m → K_S(m)
③ 用 Bob 的公钥 K_B^+ 加密 K_S → K_B^+(K_S)
④ 发送:"包" = K_B^+(K_S) + K_S(m)
Bob 侧:
① 用私钥 K_B^- 解密 → 得到 K_S
② 用 K_S 解密 K_S(m) → 得到 m
阶段二:仅提供发送方鉴别和报文完整性
Alice 侧:
① 对报文 m 应用散列函数 H → H(m)
② 用私钥 K_A^- 对散列签名 → K_A^-(H(m))
③ 发送:(m, K_A^-(H(m)))
Bob 侧:
① 用 Alice 的公钥 K_A^+ 验证签名 → 得到 H(m)
② 自己对 m 计算散列 → H'(m)
③ 比较 H(m) 与 H'(m):相等即验证通过
阶段三:完整的安全电子邮件(机密性 + 发送方鉴别 + 报文完整性)
┌──────────────────────────────────────────────────────────────────┐
│ 完整安全电子邮件:将阶段一和阶段二组合 │
│ │
│ Alice 侧: │
│ │
│ 报文 m ──→ [散列 H] ──→ H(m) │
│ │ │
│ ↓ K_A^- │
│ 数字签名 K_A^-(H(m)) │
│ │ │
│ ↓ │
│ "预备包" = (m, 数字签名) │
│ │ │
│ ← 将此预备包作为"新报文"对待 ← │
│ │ │
│ ① 选 K_S ② 用 K_S 加密预备包 │
│ ③ 用 K_B^+ 加密 K_S │
│ │ │
│ 发送:"最终包" = K_B^+(K_S) + K_S(预备包) │
│ │
│ Bob 侧: │
│ ① K_B^-(K_B^+(K_S)) → K_S │
│ ② K_S^{-1}(K_S(预备包)) → 预备包 │
│ ③ K_A^+(K_A^-(H(m))) = H(m) │
│ ④ 自己计算 H(m),比较 → 验证 │
│ │
│ Alice 使用两次公钥密码:自己的私钥 + Bob 的公钥 │
│ Bob 使用两次公钥密码:自己的私钥 + Alice 的公钥 │
└──────────────────────────────────────────────────────────────────┘
6.3 PGP(Pretty Good Privacy)
| 特性 | 说明 |
|---|---|
| 设计者 | Phil Zimmermann,1991年 |
| 大致设计 | 基本上与图8-21的完整设计相同 |
| 散列算法 | MD5 或 SHA |
| 对称加密 | CAST、三重DES 或 IDEA |
| 公钥加密 | RSA |
| 密钥生成 | 安装时为用户生成公钥对;公钥可发布到网站或公钥服务器 |
| 私钥保护 | 使用用户口令保护,每次访问私钥需输入口令 |
| 操作选项 | 可选择仅签名、仅加密、或同时签名和加密 |
| 公钥认证 | 可信Web(Web of Trust)------ 用户互相签署彼此的密钥(非传统CA模型);通过密钥签署方(key-signing party)互相验证 |
七、8.6 使 TCP 连接安全:TLS
7.1 TLS 概述
| 属性 | 说明 |
|---|---|
| 全称 | Transport Layer Security |
| 前身 | SSL(Secure Sockets Layer)版本 3,由 Netscape 设计 |
| 标准化 | IETF RFC 4346 |
| 层次定位 | 技术上位于应用层,但从开发者角度看是一个增强 TCP 安全性的运输层协议 |
| 保护对象 | TCP 连接,因此能应用于运行在 TCP 之上的任何应用程序 |
| 部署范围 | 所有流行浏览器和 Web 服务器;Gmail;Amazon、eBay、淘宝等电子商务 |
| API | 提供类似于 TCP 套接字的简单 API |
7.2 电子商务场景中的安全需求
Bob 在 Alice 的香水网站下单:
┌────────────────────────────────────────────────────────┐
│ 无机密性 → Trudy 截获信用卡号 → 盗刷 │
│ 无完整性 → Trudy 修改订单量 → Bob 买了 10 倍的香水 │
│ 无服务器鉴别 → Trudy 冒充 Alice 的站点 → 骗钱/身份盗贼 │
└────────────────────────────────────────────────────────┘
TLS 通过提供:机密性 + 数据完整性 + 服务器鉴别 + 客户鉴别
→ 解决以上所有问题
7.3 TLS 的三个阶段(简化版------类TLS)
┌────────────────────────────────────────────────────────────────┐
│ TLS 的三个阶段 │
│ │
│ 第一阶段:握手 (Handshake) │
│ ┌──────────────────────────────────────────────────────────┐ │
│ │ ① 创建 TCP 连接 │ │
│ │ ② Bob → hello → Alice │ │
│ │ ③ Alice → 证书(含公钥) → Bob │ │
│ │ ④ Bob 验证证书,生成主密钥 MS │ │
│ │ ⑤ Bob → EMS = K_A^+(MS) → Alice │ │
│ │ ⑥ Alice 用私钥解密得到 MS │ │
│ │ 此时仅 Bob 和 Alice 知道 MS │ │
│ └──────────────────────────────────────────────────────────┘ │
│ ↓ │
│ 第二阶段:密钥导出 (Key Derivation) │
│ ┌──────────────────────────────────────────────────────────┐ │
│ │ 从 MS 生成 4 个密钥: │ │
│ │ E_B: Bob→Alice 的会话加密密钥 │ │
│ │ M_B: Bob→Alice 的会话 HMAC 密钥 │ │
│ │ E_A: Alice→Bob 的会话加密密钥 │ │
│ │ M_A: Alice→Bob 的会话 HMAC 密钥 │ │
│ └──────────────────────────────────────────────────────────┘ │
│ ↓ │
│ 第三阶段:数据传输 (Data Transfer) │
│ ┌──────────────────────────────────────────────────────────┐ │
│ │ 将 TCP 字节流分割为"记录" │ │
│ │ 每条记录 = 数据 + HMAC(数据+M_B+序号) → 用 E_B 加密 │ │
│ │ 序号计数器防御重排序、重放、删除攻击 │ │
│ └──────────────────────────────────────────────────────────┘ │
└────────────────────────────────────────────────────────────────┘
7.4 TLS 记录格式
┌──────────┬──────────┬──────────┬─────────────┬──────────┐
│ 类型 │ 版本 │ 长度 │ 数据 │ HMAC │
│ (1字节) │ (2字节) │ (2字节) │ (可变) │ │
├──────────┴──────────┴──────────┴─────────────┴──────────┤
│ ← 明文(不加密) → │ ← 用 E_B 加密 → │
└────────────────────────────────────────────────────────┘
- 类型:握手报文 / 应用数据 / 关闭 TLS 连接
- 版本:自解释
- 长度:用于从 TCP 字节流中提取 TLS 记录
- 数据 + HMAC:加密传输
7.5 序号防御中间人攻击
问题:Trudy 作为中间人,可颠倒 TCP 报文段次序、删除或重放报文段。TCP 序号未被加密,Trudy 可调整它们。
TLS 序号防御:
- Bob 维护序号计数器,从 0 开始,每发一条 TLS 记录递增 1
- 序号不实际包含在记录中,但包含在 HMAC 的计算中
- HMAC = Hash(数据 + M_B + 序号)
- Alice 跟踪 Bob 的序号,验证 HMAC 时使用正确的序号
- 如果序号不匹配 → HMAC 验证失败 → 检测到篡改
7.6 TLS 1.3 完整握手协议(8.6.2节)
┌──────────────────────────────────────────────────────────────────┐
│ TLS 完整握手协议 │
│ │
│ Client (Bob) Server (Alice) │
│ │ │ │
│ │ (1) 支持的密码算法列表 + 客户不重数 │ │
│ │─────────────────────────────────────→│ │
│ │ │ │
│ │ (2) 选择的算法 + 证书 + 服务器不重数 │ │
│ │←─────────────────────────────────────│ │
│ │ │ │
│ │ (3) 验证证书,提取公钥 │ │
│ │ 生成 PMS (Pre-Master Secret) │ │
│ │ 发送: K_A^+(PMS) │ │
│ │─────────────────────────────────────→│ │
│ │ │ │
│ │ (4) 双方独立计算: │ │
│ │ MS = 密钥导出函数(PMS, 两个不重数) │ │
│ │ 然后从 MS 切片生成: │ │
│ │ E_B, M_B, E_A, M_A, IV_B, IV_A │ │
│ │ │ │
│ │ (5) 所有握手报文的 HMAC │ │
│ │─────────────────────────────────────→│ │
│ │ │ │
│ │ (6) 所有握手报文的 HMAC │ │
│ │←─────────────────────────────────────│ │
│ │ │ │
│ │ 此后:所有报文均加密和鉴别(使用 HMAC) │ │
│ │
└──────────────────────────────────────────────────────────────────┘
步骤 5-6 的意义:防御握手篡改攻击
- 步骤 1 中算法列表以明文发送(因为加密算法尚未协商)
- Trudy 作为中间人可删除强算法,迫使客户选择弱算法
- 步骤 5 中客户发送所有已收发握手报文的 HMAC,服务器可检测不一致
- 步骤 6 同理,客户可检测服务器侧的不一致
不重数的双重防御作用:
| 防御目标 | 防御机制 |
|---|---|
| 连接重放攻击(Trudy 第二天重放整个序列) | 不重数:每个 TCP 会话不同的不重数 → 加密密钥不同 → 重放无法通过完整性检查 |
| 会话内个别分组重放(重排序/删除/重放) | TLS 序号计数器:序号包含在 HMAC 中 → 不匹配则检测 |
7.7 连接关闭与截断攻击防御
截断攻击(truncation attack):Trudy 在 TLS 会话中途发送 TCP FIN,使 Alice 误以为收到了全部数据。
防御:TLS 记录的类型字段指示"关闭 TLS 会话"。如果 Alice 在收到关闭 TLS 记录之前收到 TCP FIN,她知道有异常发生。
八、8.7 网络层安全性:IPsec 和虚拟专用网
8.1 IPsec 提供的安全服务
┌───────────────────────────────────────────────────────────────┐
│ IPsec 的网络层"地毯式覆盖" │
│ │
│ 网络实体对之间(路由器-路由器、主机-主机、路由器-主机) │
│ 所有数据报的载荷均被加密,包括: │
│ TCP 报文段、UDP 报文段、ICMP 报文、管理报文(SNMP等) │
│ │
│ IPsec 服务的四大支柱: │
│ ① 机密性 (Confidentiality) → 载荷加密 │
│ ② 源鉴别 (Source Authentication)→ 验证安全数据报源 │
│ ③ 数据完整性 (Data Integrity) → HMAC 验证 │
│ ④ 防重放攻击 (Anti-Replay) → 序号字段 │
└───────────────────────────────────────────────────────────────┘
8.2 VPN(虚拟专用网)
公共因特网
┌──────────┐ ╔══════════════╗ ┌──────────┐
│ 总部 │ ║ IPsec隧道 ║ │ 分支机构 │
│ 172.16.1/24│ ═════╣══════════════╣══════ │ 172.16.2/24│
│ │ 加密进入 ║ 加密的数据报 ║ 解密出 │ │
└──────────┘ ╚══════════════╝ └──────────┘
↑ ↑
网关路由器 网关路由器
200.168.1.100 193.68.2.23
↕
销售员便携机
- 专用网络:与公共因特网完全分离的物理网络(昂贵)
- VPN:在公共因特网上通过 IPsec 加密创建的逻辑上的专用网络
- 机构内部流量使用经典 IPv4,跨越公共因特网的流量经 IPsec 加密
8.3 AH 和 ESP 协议
| 协议 | 全称 | 提供的服务 |
|---|---|---|
| AH | Authentication Header(鉴别首部) | 源鉴别 + 数据完整性,不提供机密性 |
| ESP | Encapsulation Security Payload(封装安全性载荷) | 源鉴别 + 数据完整性 + 机密性 |
ESP 使用更广泛,因为机密性对 VPN 至关重要。
8.4 安全关联 SA(Security Association)
SA 是网络层的一个单工(单向)逻辑连接。
安全关联 SA 的状态信息:
┌─────────────────────────────────────────┐
│ SPI(安全参数索引):32比特SA标识符 │
│ 源接口 IP 地址 │
│ 目的接口 IP 地址 │
│ 加密类型(如具有CBC的3DES) │
│ 加密密钥 │
│ 完整性检查类型(如具有MD5的HMAC) │
│ 鉴别密钥 │
└─────────────────────────────────────────┘
SA 存储位置:安全关联数据库 SAD(Security Association Database)
安全策略库 SPD(Security Policy Database):指示哪些数据报需要 IPsec 处理("做什么"),以及应使用哪个 SA(SAD 指示"怎么做")。
SA 计数示例:总部(1) + 分支机构(1) + n 个销售员 = 需要 (2 + 2n) 个 SA(每个双向通信需要 2 个单工 SA)。
8.5 IPsec 数据报结构(ESP 隧道模式)
┌─────────────────────────────────────────────────────────────────────┐
│ IPsec 数据报构造(隧道模式) │
│ │
│ 初始 IPv4 数据报: │
│ ┌──────────────────────────────────────┐ │
│ │ 初始IP首部 │ 载荷数据 │ 源: 172.16.1.17 │
│ │(20字节) │ │ 目的: 172.16.2.48 │
│ └───────────┴──────────────────────────┘ │
│ │ │
│ ▼ 附加 ESP 尾部 │
│ ┌──────────────────────────────────────┬──────────┐ │
│ │ 初始IP首部 │ 载荷数据 │ ESP尾部 │ ESP尾部: │
│ │ │ │填充/长度/ │ 填充+填充长度 │
│ │ │ │下一首部 │ +下一首部 │
│ └──────────────────────────────────────┴──────────┘ │
│ │ │
│ ▼ 加密(用 SA 规定的算法和密钥) │
│ ┌────────────────────────────────────────────────────────────────┐ │
│ │ 加密的单元(ciphertext) │ │
│ └────────────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ 附加 ESP 首部(明文) │
│ ┌───────────────┬────────────────────────────────────────────────┐ │
│ │ ESP首部 │ 加密的单元 │ │
│ │ SPI + 序号 │ │ │
│ └───────────────┴────────────────────────────────────────────────┘ │
│ │ │
│ ▼ 计算 MAC(跨整个 enchilada)→ 附加 ESP MAC │
│ ┌───────────────┬────────────────────────────────┬──────────────┐ │
│ │ ESP首部 │ 加密的单元 │ ESP MAC │ │
│ │ (SPI+序号) │ │ (鉴别) │ │
│ └───────────────┴────────────────────────────────┴──────────────┘ │
│ │ │
│ ▼ 附加新 IP 首部 │
│ ┌────────────────────────────────────────────────────────────────┐ │
│ │ 新IP首部(20B)│ ESP首部 │ 加密的单元 │ ESP MAC │ │ │
│ │ 源:200.168.1.100 │ │ │ │
│ │ 目的:193.68.2.23 │ │ │ │
│ │ 协议号:50(=ESP) │ │ │ │
│ └────────────────────────────────────────────────────────────────┘ │
│ │
│ "enchilada" = ESP首部 + 初始IP数据报(加密) + ESP尾部(加密) │
└─────────────────────────────────────────────────────────────────────┘
关键字段说明:
| 字段 | 作用 |
|---|---|
| 新 IP 首部 | 源/目的 = 隧道端点路由器接口地址;协议号 = 50 (ESP) |
| ESP 首部 - SPI | 告知接收方该数据报属于哪个 SA |
| ESP 首部 - 序号 | 防御重放攻击 |
| 初始 IP 数据报 | 被加密,包含真正的源/目的 IP 地址和上层协议数据 |
| ESP 尾部 - 填充 | 使加密单元为块长度的整数倍 |
| ESP 尾部 - 填充长度 | 指示填充量 |
| ESP 尾部 - 下一首部 | 指示载荷数据类型 |
| ESP MAC | 覆盖整个 enchilada 的完整性验证码 |
8.6 IPsec 安全服务总结(从 Trudy 视角)
| Trudy 的企图 | 结果 | 原因 |
|---|---|---|
| 查看初始数据报内容 | 失败 | 加密;连协议号、源/目的 IP 也隐藏了 |
| 篡改数据报比特 | 失败 | 完整性检查(HMAC)失败 |
| 假冒 R1 发送 IPsec 数据报 | 失败 | HMAC 验证失败(不知鉴别密钥) |
| 重放攻击 | 失败 | 序号机制防御 |
8.7 IKE(Internet Key Exchange)
定位:IPsec 的自动密钥管理协议 RFC 5996
大型 VPN 的需求:成百上千台 IPsec 路由器/主机,人工键入 SA 信息不切实际
IKE 两阶段:
阶段一(创建双向 IKE SA):
┌────────────────────────────────────────────────┐
│ 第一次交换: 使用 Diffie-Hellman 生成: │
│ - 双向 IKE SA(鉴别的+加密的信道) │
│ - IKE SA 的加密/鉴别密钥 │
│ - 主密钥(用于阶段二) │
│ 注意: 此阶段不使用 RSA 公钥/私钥 │
│ │
│ 第二次交换: 通过安全 IKE SA 信道: │
│ - 对报文签名以透露身份(但嗅探者看不到) │
│ - 协商 IPsec SA 使用的加密/鉴别算法 │
└────────────────────────────────────────────────┘
↓
阶段二(为每个方向创建 SA):
┌────────────────────────────────────────────────┐
│ 生成每个方向的 SA 的加密/鉴别会话密钥 │
│ 不涉及任何公钥密码 → 计算成本低 │
│ 可以生成大量 SA │
└────────────────────────────────────────────────┘
两个阶段的动机:计算成本 --- 阶段二不涉及公钥密码,可低成本生成大量 SA。
九、8.8 实现安全的无线局域网和 4G/5G 蜂窝网络
9.1 无线安全的两个核心问题
| 问题 | 说明 |
|---|---|
| 相互鉴别 | 网络鉴别移动设备 + 移动设备鉴别网络(防流氓基站) |
| 加密 | 对称密钥加密无线链路上的帧数据(高速要求) |
WEP → WPA1 → WPA2 → WPA3 的演进:
| 标准 | 年份 | 关键特性 |
|---|---|---|
| WEP | 最初 | 有线等效隐私;严重安全缺陷(公开软件可破解) |
| WPA1 | 2003 | 报文完整性检查;避免密钥推断攻击 |
| WPA2 | 后续 | 强制使用 AES 对称密钥加密 |
| WPA3 | 2018.6 | 防止四次握手中不重数重用攻击;更长密钥 |
9.2 802.11 安全的四个阶段
┌─────────────────────────────────────────────────────────────────────┐
│ 802.11 安全(WPA2)的四个阶段 │
│ │
│ 移动设备(M) 接入点(AP) 鉴别服务器(AS) │
│ │ │ │ │
│ │ ① 发现 (Discovery) │ │ │
│ │ AP 宣布支持的鉴别/加密形式│ │ │
│ │←──────────────────────→│ │ │
│ │ │ │ │
│ │ ② 相互鉴别 + 共享对称会话密钥推导(四次握手核心) │ │
│ │←──────────────────────────────────────────────→│ │
│ │ (AP 作为直通设备中继EAP报文) │ │
│ │ │ │ │
│ │ ③ 对称会话密钥分发 │ │ │
│ │ │← K_M-AP ──────────────│ │
│ │ │ │ │
│ │ ④ 加密通信 │ │ │
│ │←── AES 加密的帧 ──────→│ │ │
│ │
└─────────────────────────────────────────────────────────────────────┘
9.3 WPA2 四次握手
┌─────────────────────────────────────────────────────────────────┐
│ WPA2 四次握手(简化版) │
│ │
│ 移动设备(M) 鉴别服务器(AS) │
│ 已知: K_AS-M (共享密钥) 已知: K_AS-M │
│ │ │ │
│ │ (a) Nonce_AS │ │
│ │←───────────────────────────────────│ │
│ │ │ │
│ │ (b) Nonce_M + HMAC(Nonce_AS, K_AS-M) │
│ │───────────────────────────────────→│ │
│ │ │ │
│ │ 双方各自计算: │ │
│ │ K_M-AP = f(Nonce_AS, Nonce_M, │ │
│ │ K_AS-M, MAC_M, MAC_AS) │ │
│ │ │ │
│ │ (c)(d) 用于群体通信的第二个密钥推导 │ │
│ │←─────────── ... ─────────────────→│ │
│ │
│ 关键点: │
│ - 步骤 a-b 完成相互鉴别和对称会话密钥推导 │
│ - AS 通过验证 HMAC 签名确认 M 知道 K_AS-M(M 被鉴别) │
│ - M 看到 Nonce_AS 的 HMAC 签名版知道 AS 是活的(AS 被鉴别) │
│ - K_M-AP 用于之后 M 和 AP 之间的 AES 加密/解密 │
└─────────────────────────────────────────────────────────────────┘
9.4 EAP 和 RADIUS 协议栈
┌──────────┐ ┌──────────┐
│ 移动设备 │ │ 鉴别服务器 │
│ (M) │ │ (AS) │
└────┬─────┘ └────┬─────┘
│ │
│ EAP (端到端协议) │
│ ┌──────────────────────────────────────────┐ │
│ │ EAP over LAN (EAPoL) │ │
│ │ 802.11无线链路 │ │
│ └──────────────┬───────────────────────────┘ │
│ │ │
│ ┌────┴─────┐ │
│ │ 接入点AP │ │
│ │(解封装后 │ │
│ │ 重新封装)│ │
│ └────┬─────┘ │
│ │ │
│ │ RADIUS over UDP/IP │
│ └──────────────────────────────┤
│ │
EAP: 定义端到端请求/响应报文格式
EAPoL: EAP over LAN --- 在无线链路上封装EAP
RADIUS: 在AP和AS之间通过UDP/IP传输鉴别报文
DIAMETER: RADIUS的预期继任者
9.5 4G/5G 蜂窝网络的鉴别和密钥协商(AKA)
架构组件
| 组件 | 全称 | 作用 |
|---|---|---|
| M | Mobile Device | 移动设备 |
| BS | Base Station | 基站 |
| MME | Mobility Management Entity | 移动性管理实体(在被访网络中) |
| HSS | Home Subscriber Server | 归属用户服务器(在归属网络中) |
4G AKA 协议
┌─────────────────────────────────────────────────────────────────────┐
│ 4G AKA 鉴别和密钥协商 │
│ │
│ M MME HSS │
│ (已知K_HSS-M) (被访网络) (归属网络, │
│ │ │ 已知K_HSS-M) │
│ │ (a) 连接请求(含IMSI) │ │ │
│ │─────────────────────────────→│ 请求(IMSI+VN信息) │ │
│ │ │─────────────────────→│ │
│ │ │ │ │
│ │ │ (b) 鉴别响应 │ │
│ │ │ auth_token + xres_HSS│ │
│ │ │←─────────────────────│ │
│ │ │ │ │
│ │ (b) auth_token │ MME 保留 xres_HSS │ │
│ │←─────────────────────────────│ 供后续比较使用 │ │
│ │ │ │ │
│ │ M 解密 auth_token: │ │ │
│ │ K_HSS-M(K_HSS-M(IMSI))=IMSI │ │ │
│ │ → 验证 HSS 知道密钥 → HSS被鉴别 │ │
│ │ │ │ │
│ │ (c) res_M │ │ │
│ │─────────────────────────────→│ │ │
│ │ │ │ │
│ │ (d) MME 比较 res_M 与 xres_HSS │ │
│ │ 若相等 → M 被鉴别 │ │
│ │ │ │ │
│ │ (e) 密钥推导 │ │ │
│ │ K_BS-M 用于加密无线帧 │ │ │
│ │ (数据平面和控制平面不同密钥) │ │ │
│ │←─────────────────────────────→│ │ │
│ │
└─────────────────────────────────────────────────────────────────────┘
5G 安全的关键变化
| 变化 | 说明 |
|---|---|
| 鉴别决策权 | 归属网络接受鉴别(而非被访网络的 MME);被访网络可拒绝但不可接受 |
| 新协议 | 支持 AKA'(类似4G AKA但采用 EAP 报文流)和面向物联网的新协议(无需预共享密钥) |
| IMSI 保护 | 使用公钥加密技术加密设备的永久身份(IMSI),永不以明文传输 |
十、8.9 运行安全性:防火墙和入侵检测系统
10.1 防火墙的三个目标
┌──────────────────────────────────────────────────────────────────┐
│ 防火墙(Firewall) │
│ │
│ 硬件 + 软件,将机构内部网络与整个因特网隔离开 │
│ │
│ ┌────────────────────────────────────────────────────────────┐ │
│ │ 目标1: 所有进出流量都通过防火墙(单一接入点便于管理) │ │
│ │ 目标2: 仅被授权的流量允许通过(由本地安全策略定义) │ │
│ │ 目标3: 防火墙自身免于渗透(自身不安全 = 提供安全假象) │ │
│ └────────────────────────────────────────────────────────────┘ │
│ │
│ 主流厂商: Cisco、Check Point │
│ 开源实现: Linux iptables │
│ 现代趋势: 在路由器中实现 + SDN 远程控制 │
└──────────────────────────────────────────────────────────────────┘
10.2 三种防火墙对比
| 维度 | 传统分组过滤器 | 状态分组过滤器 | 应用程序网关 |
|---|---|---|---|
| 检查层级 | IP/TCP/UDP 首部 | IP/TCP/UDP 首部 + 连接状态 | 首部 + 应用层数据 |
| 决策依据 | 地址、端口、协议、标志位 | 首部字段 + 连接表 | 首部字段 + 用户身份 + 应用内容 |
| 每分组独立 | 是,孤立检查每个数据报 | 否,跟踪TCP连接状态 | 否,理解应用协议 |
| 核心数据结构 | 访问控制列表(ACL) | ACL + 连接表 | 应用程序特定逻辑 |
| 粒度 | 粗粒度 | 中等粒度 | 细粒度(用户级) |
| 典型过滤规则 | 阻挡外部发起的TCP连接(ACK=0的入分组) | 允许已建立连接的相关分组通过 | 要求用户先鉴别,再中继到外部主机 |
| 优点 | 简单、快速 | 防御异常分组攻击 | 用户级鉴别、深度检查 |
| 缺点 | 无法关联连接状态 | 不能检查应用内容 | 每个应用需独立网关;性能负担重;客户需知道如何联系网关 |
| 可防御 | 基本访问控制 | 非连接中的异常分组 | 应用层攻击 |
传统分组过滤器的过滤因素
- IP 源/目的地址
- IP 协议类型字段(TCP/UDP/ICMP/OSPF)
- TCP/UDP 源和目的端口
- TCP 标志比特(SYN、ACK 等)
- ICMP 报文类型
- 进出方向的不同规则
- 不同路由器接口的不同规则
状态过滤器的连接表
连接表跟踪所有进行中的 TCP 连接:
┌──────────────┬──────────────┬────────┬────────┐
│ 源地址 │ 目的地址 │ 源端口 │ 目的端口│
├──────────────┼──────────────┼────────┼────────┤
│ 222.22.1.7 │ 37.96.87.123 │ 12699 │ 80 │
│ 222.22.93.2 │ 199.1.205.23 │ 37654 │ 80 │
│ 222.22.65.143│ 203.77.240.43│ 48712 │ 80 │
└──────────────┴──────────────┴────────┴────────┘
连接跟踪方式:
- 观察三次握手(SYN→SYNACK→ACK)识别新连接
- 观察 FIN 分组识别连接结束
- 约60秒无活动后保守假设连接已结束
10.3 IDS/IPS 系统
| 系统 | 全称 | 行为 |
|---|---|---|
| IDS | Intrusion Detection System(入侵检测系统) | 检测可疑流量 → 产生告警 |
| IPS | Intrusion Prevention System(入侵防止系统) | 检测可疑流量 → 滤除分组 |
核心能力 :深度分组检查(Deep Packet Inspection)--- 不仅检查首部,而且深入检查分组携带的实际应用数据。
检测的攻击类型:网络映射(nmap)、端口扫描、TCP栈扫描、DoS带宽洪泛攻击、蠕虫和病毒、操作系统脆弱性攻击、应用程序脆弱性攻击。
基于特征 vs 基于异常的 IDS
| 维度 | 基于特征的 IDS | 基于异常的 IDS |
|---|---|---|
| 工作原理 | 维护攻击特征数据库,匹配过往分组与特征 | 建立正常流量概况文件,寻找统计异常的流量 |
| 特征来源 | 安全工程师研究已知攻击生成 | 自动学习 |
| 优点 | 对已知攻击检测准确 | 不依赖已有攻击知识,可检测新攻击 |
| 缺点1 | 无法检测新攻击(无特征则无检测) | 区分正常和统计异常极具挑战 |
| 缺点2 | 可能产生虚假告警(匹配非攻击) | 准确度难以保证 |
| 缺点3 | 大特征集 → 处理过载 | --- |
| 部署现状 | 大多数部署的 IDS 主要基于特征 | 某些 IDS 包含部分基于异常的特性 |
Snort
| 属性 | 说明 |
|---|---|
| 类型 | 公共域开源 IDS |
| 部署量 | 数十万 |
| 平台 | Linux、UNIX、Windows |
| 嗅探接口 | libpcap(与 Wireshark 相同) |
| 性能 | 100Mbps 轻松处理;Gbps 需多传感器 |
Snort 特征示例:
alert icmp $EXTERNAL_NET any -> $HOME_NET any
(msg:"ICMP PING NMAP"; dsize: 0; itype: 8;)
- 匹配:从外部进入机构网络的 ICMP 分组
- 条件:类型=8(ICMP ping) 且 空负载(dsize=0)
- 用途:检测 nmap 的 ping 扫描
- 特征语法允许网络管理员定制和创建新特征
最大优势 :庞大的用户社区和安全专家群体。新攻击出现后几小时内即可编写并分发攻击特征,供全球数十万部署下载。
10.4 网络部署架构(DMZ)
公共因特网
│
┌──────┴──────┐
│ 分组过滤器 │
└──────┬──────┘
│
┌─────────────┼─────────────┐
│ │ │
┌────┴────┐ ┌───┴────┐ ┌────┴────┐
│ DMZ │ │应用程序 │ │ 高度安全 │
│ (非军事区)│ │ 网关 │ │ 区域 │
├─────────┤ └───┬────┘ └────┬────┘
│ Web服务器│ │ │
│ DNS服务器│ └────────────┘
└─────────┘
│
IDS传感器 IDS传感器 IDS传感器
↘↓↙
中心 IDS 处理器
↓
网络管理员告警
十一、核心公式速查
| 公式 | 含义 | 位置 |
|---|---|---|
| K_B-(K_B+(m)) = m | 公钥加密后私钥解密恢复明文 | 8.2.2节 |
| K_B+(K_B-(m)) = m | 私钥签名后公钥验证恢复明文(数字签名基础) | 8.2.2节 |
| c = m^e mod n | RSA 加密 | 8.2.2节 |
| m = c^d mod n | RSA 解密 | 8.2.2节 |
| n = p × q | RSA 模数 | 8.2.2节 |
| z = (p-1)(q-1) | RSA 欧拉函数值 | 8.2.2节 |
| ed mod z = 1 | RSA 公私钥数学关系 | 8.2.2节 |
| K_B^+ = (n, e) | RSA 公钥 | 8.2.2节 |
| K_B^- = (n, d) | RSA 私钥 | 8.2.2节 |
| c(i) = K_S(m(i) ⊕ c(i-1)) | CBC 加密(c(0) = IV) | 8.2.1节 |
| m(i) = K_S^{-1}(c(i)) ⊕ c(i-1) | CBC 解密 | 8.2.1节 |
| MAC = H(m + s) | 报文鉴别码(s 为共享鉴别密钥) | 8.3.2节 |
| 数字签名 = K_B^-(H(m)) | 数字签名(对散列签名而非对报文) | 8.3.3节 |
| (a mod n)^d mod n = a^d mod n | 模算术恒等式(RSA 原理的基础) | 8.2.2节 |
| m^ed mod n = m | RSA 加密再解密恢复原报文 | 8.2.2节 |
十二、核心概念词汇表
| 术语 | 英文 | 定义 |
|---|---|---|
| 明文 | plaintext / cleartext | 报文的最初形式,可被理解 |
| 密文 | ciphertext | 加密后的报文,对入侵者不可理解 |
| 加密 | encryption | 使用密钥和算法将明文转换为密文 |
| 解密 | decryption | 使用密钥和算法将密文恢复为明文 |
| 对称密钥密码 | symmetric key cryptography | 通信双方共享同一个秘密密钥 |
| 公开密钥密码 | public key cryptography | 使用公钥/私钥对;公钥公开,私钥保密 |
| 块密码 | block cipher | 将报文分为 k 比特块独立加密 |
| DES | Data Encryption Standard | 64比特块,56比特密钥的对称块密码 |
| AES | Advanced Encryption Standard | 128比特块,128/192/256比特密钥 |
| CBC | Cipher Block Chaining | 密码块链接;使用 IV 和前一块密文异或 |
| IV | Initialization Vector | 初始向量;CBC 中第一个随机 k 比特串 |
| RSA | RSA algorithm (Rivest-Shamir-Adleman) | 基于大数因数分解困难性的公钥密码算法 |
| 会话密钥 | session key | 用于一次会话的对称密钥 |
| Diffie-Hellman | Diffie-Hellman key exchange | 允许双方通过公开信道协商共享密钥 |
| 密码散列函数 | cryptographic hash function | 生成报文固定长度"指纹",且碰撞在计算上不可行 |
| MD5 | Message Digest 5 | 128 比特散列算法(Ron Rivest) |
| SHA-1 | Secure Hash Algorithm 1 | 160 比特散列算法(美国联邦标准) |
| 报文鉴别码 | MAC (Message Authentication Code) | H(m+s);使用共享秘密 s 保证报文完整性 |
| HMAC | Hash-based MAC | 基于散列的 MAC 标准(数据+密钥经散列两次) |
| 数字签名 | digital signature | 用私钥对报文散列加密,提供可鉴别性和不可伪造性 |
| 公钥认证 | public key certification | 由 CA 证明公钥属于特定实体 |
| 认证中心 | CA (Certification Authority) | 验证身份并签发证书的机构 |
| 证书 | certificate | CA 签名的将身份与公钥绑定的文档 |
| X.509 | X.509 | ITU 的认证服务标准 |
| 端点鉴别 | end-point authentication | 一个实体经网络向另一个实体证明其身份 |
| 不重数 | nonce | 在协议生存期中只使用一次的数(防重放) |
| 回放攻击 | playback attack | 记录并重放合法报文以冒充某实体 |
| PGP | Pretty Good Privacy | 安全电子邮件加密方案(Phil Zimmermann, 1991) |
| 可信Web | Web of Trust | PGP 的公钥认证机制(用户互相签署密钥) |
| TLS | Transport Layer Security | 运输层安全协议(前身 SSL) |
| SSL | Secure Sockets Layer | TLS 的前身(Netscape 设计) |
| 主密钥 | MS (Master Secret) | TLS 握手中生成的共享密钥,用于导出会话密钥 |
| 前主密钥 | PMS (Pre-Master Secret) | TLS 握手过程中生成主密钥之前的密钥材料 |
| 截断攻击 | truncation attack | 过早终止 TLS 会话的中间人攻击 |
| 连接重放攻击 | connection replay attack | 第二天重放整个 TLS 报文序列 |
| IPsec | IP Security | 网络层安全协议族 |
| AH | Authentication Header | IPsec 协议之一:提供源鉴别+完整性(不提供机密性) |
| ESP | Encapsulation Security Payload | IPsec 协议之一:提供机密性+源鉴别+完整性(使用更广) |
| SA | Security Association | 安全关联;网络层单工逻辑连接 |
| SPI | Security Parameter Index | 安全参数索引;32 比特 SA 标识符 |
| SAD | Security Association Database | 安全关联数据库;存储所有 SA 状态信息 |
| SPD | Security Policy Database | 安全策略库;指示哪些数据报需 IPsec 处理 |
| VPN | Virtual Private Network | 虚拟专用网;通过 IPsec 在公共因特网上创建 |
| IKE | Internet Key Exchange | 因特网密钥交换协议;IPsec 自动密钥管理 |
| enchilada | enchilada | ESP 的加密/鉴别单元(首部+加密数据+尾部) |
| WEP | Wired Equivalent Privacy | 最初的 802.11 安全规范(已废弃,存在严重缺陷) |
| WPA/WPA2/WPA3 | WiFi Protected Access | WiFi 联盟的安全标准演进 |
| EAP | Extensible Authentication Protocol | 可扩展鉴别协议;端到端请求/响应模式 |
| EAPoL | EAP over LAN | 无线链路上封装 EAP 报文 |
| RADIUS | Remote Authentication Dial-In User Service | AP 和鉴别服务器之间的鉴别传输协议 |
| 4G/5G AKA | Authentication and Key Agreement | 4G/5G 网络中的鉴别和密钥协商协议 |
| HSS | Home Subscriber Server | 归属用户服务器(存储用户密钥和鉴别数据) |
| MME | Mobility Management Entity | 移动性管理实体 |
| IMSI | International Mobile Subscriber Identity | 国际移动用户身份标识 |
| 防火墙 | firewall | 隔离机构内网与因特网的硬件/软件结合体 |
| 传统分组过滤器 | traditional packet filter | 基于首部字段孤立检查每个数据报 |
| 状态分组过滤器 | stateful packet filter | 跟踪 TCP 连接的防火墙 |
| 应用程序网关 | application gateway | 基于应用数据做策略决定的防火墙 |
| ACL | Access Control List | 访问控制列表 |
| DMZ | DeMilitarized Zone | 非军事区;较低安全区域(放置公共服务器) |
| IDS | Intrusion Detection System | 入侵检测系统(告警但不阻断) |
| IPS | Intrusion Prevention System | 入侵防止系统(检测并阻断) |
| 深度分组检查 | deep packet inspection | 不仅检查首部,还深入检查应用数据 |
| 基于特征的 IDS | signature-based IDS | 匹配攻击特征数据库 |
| 基于异常的 IDS | anomaly-based IDS | 寻找统计上不寻常的分组流 |
| Snort | Snort | 最流行的公共域开源 IDS |
| 唯密文攻击 | ciphertext-only attack | 仅知密文的攻击方式 |
| 已知明文攻击 | known-plaintext attack | 已知部分(明文,密文)匹配的攻击 |
| 选择明文攻击 | chosen-plaintext attack | 可选择明文并获得其密文的攻击 |
十三、对比表格汇总
13.1 对称密钥 vs 公开密钥密码
| 维度 | 对称密钥密码 | 公开密钥密码 |
|---|---|---|
| 密钥数量 | 1 个共享秘密密钥 | 2 个(公钥 + 私钥) |
| 密钥分发 | 困难:需预先安全地共享密钥 | 容易:公钥可公开发布 |
| 加密速度 | 快(块密码操作) | 慢(大数指数运算) |
| 核心算法 | DES、AES、3DES | RSA、Diffie-Hellman |
| 主要用途 | 加密大量数据 | 分发会话密钥、数字签名、鉴别 |
| 需对称密钥参与? | --- | 是(通常用于分发对称会话密钥) |
| 典型应用 | PGP中的数据加密、TLS记录加密、IPsec载荷加密、WPA2帧加密 | PGP中K_S的加密分发、TLS中PMS的加密、数字签名 |
13.2 MAC vs 数字签名
| 维度 | MAC(报文鉴别码) | 数字签名 |
|---|---|---|
| 生成方式 | H(m + s);s 为共享鉴别密钥 | K_B^-(H(m));使用发方私钥 |
| 是否涉及加密 | 不涉及 | 涉及公钥密码 |
| 基础设施需求 | 共享秘密 s | PKI(CA 支撑) |
| 可否抵赖 | 可抵赖(双方共享密钥) | 不可抵赖 |
| 计算成本 | 低(仅散列) | 高(公钥加密运算) |
| 典型应用 | OSPF、TLS(HMAC)、IPsec | PGP、CA证书签名 |
13.3 鉴别协议演进:ap1.0 → ap4.0
| 协议 | 鉴别方式 | 致命缺陷 | Trudy 的攻击 | 安全性 |
|---|---|---|---|---|
| ap1.0 | 声明"我是Alice" | 无任何验证 | 直接声明"我是Alice" | 无 |
| ap2.0 | 验证源IP地址 | IP哄骗 | 构造具有Alice源IP的数据报 | 极低 |
| ap3.0 | 秘密口令(明文) | 嗅探 | 嗅探明文传输的口令 | 低 |
| ap3.1 | 加密口令 | 回放攻击 | 记录加密口令并重放 | 低(不防回放) |
| ap4.0 | 不重数 + 对称密钥 | 无(前提:密钥安全) | 无法突破 | 安全 |
13.4 AH vs ESP(IPsec)
| 维度 | AH(鉴别首部) | ESP(封装安全性载荷) |
|---|---|---|
| 机密性 | 不提供 | 提供 |
| 源鉴别 | 提供 | 提供 |
| 数据完整性 | 提供 | 提供 |
| 防重放 | 提供 | 提供 |
| 使用广度 | 较少 | 广泛(机密性对VPN至关重要) |
13.5 三种防火墙对比
| 维度 | 传统分组过滤器 | 状态过滤器 | 应用程序网关 |
|---|---|---|---|
| 检查的数据 | IP/TCP/UDP 首部字段 | 首部字段 + 连接状态 | 首部 + 应用层数据 |
| 是否独立检查每个分组 | 是 | 否(关联连接状态) | 否(理解应用协议) |
| 核心机制 | 访问控制列表 ACL | ACL + 连接表 | 应用程序特定逻辑 |
| 粒度 | 粗 | 中 | 细(用户级) |
| 性能 | 高 | 中 | 低(应用数据检查+中继) |
| 主要限制 | 无法关联连接 | 不能检查应用内容 | 每应用需独立网关;客户需知如何联系网关 |
13.6 基于特征 vs 基于异常的 IDS
| 维度 | 基于特征的 IDS | 基于异常的 IDS |
|---|---|---|
| 检测原理 | 匹配已知攻击特征数据库 | 对比正常流量概况,寻找统计异常 |
| 特征来源 | 安全工程师研究已知攻击后编写 | 系统自动学习正常流量 |
| 对新攻击的检测 | 不能 | 能(理论上的最大优势) |
| 误报率 | 可能有虚假告警 | 区分正常和统计异常极具挑战 |
| 处理负载 | 较大(每条分组与大量特征比较) | 依算法而定 |
| 当前部署 | 占主导 | 部分包含 |
十四、对称密钥在所有安全协议中的核心地位
对称密钥密码(DES / AES / 3DES)
┌──────────────┬──────────────┬──────────────┬──────────────┐
│ PGP │ TLS │ IPsec │ WPA2 / 4G │
│ (安全电子邮件) │ (使TCP安全) │ (网络层安全) │ (无线安全) │
├──────────────┼──────────────┼──────────────┼──────────────┤
│ K_S 加密邮件 │ E_B/E_A 加密 │ SA会话密钥 │ K_M-AP 加密 │
│ 报文内容 │ TLS记录 │ 加密载荷 │ 无线帧 │
│ │ │ │ │
│ RSA 加密 K_S │ RSA/DH 分发 │ IKE 分发 │ 四次握手推导 │
│ (公钥分发会话 │ PMS/MS │ 会话密钥 │ K_M-AP │
│ 密钥) │ │ │ │
└──────────────┴──────────────┴──────────────┴──────────────┘
共同模式:
① 用对称密钥密码加密大量数据(DES/AES,快速)
② 用公钥密码或带外方式安全分发/推导该对称密钥(解决密钥分发问题)
③ 用 HMAC/MAC 保证数据完整性(基于散列,不依赖加密)
④ 用不重数和序号防御重放攻击
十五、全书知识点在安全协议中的体现
| 密码学基础概念 | PGP | TLS | IPsec | WPA2/4G AKA |
|---|---|---|---|---|
| 对称密钥加密 (AES/DES) | 加密邮件内容 | 加密TLS记录 | 加密载荷 | 加密无线帧 |
| 公开密钥加密 (RSA) | 加密会话密钥K_S | 加密PMS | IKE 阶段 | 5G中加密IMSI |
| Diffie-Hellman | --- | 可选 | IKE 阶段一 | --- |
| 密码散列函数 (MD5/SHA) | 报文摘要 | HMAC | HMAC | HMAC |
| 数字签名 | 发送方签名 | --- | --- | --- |
| MAC/HMAC | --- | 记录完整性 | enchilada的MAC | 四次握手签名 |
| CA/证书 | Web of Trust (可信Web) | 服务器证书 | IKE证书 | --- |
| 会话密钥 K_S | 加密邮件 | MS→4个密钥 | ESP会话密钥 | K_M-AP / K_BS-M |
| 不重数 (nonce) | --- | 防连接重放 | 序号防重放 | 相互鉴别 |
| CBC | --- | 可选(含IV) | 指定加密模式 | --- |