计算机网络原理
第八章 第1节
第八章 网络安全:
1. 什么是网络安全?
网络安全不是单纯“加密”。它至少包括四个目标:
1. 机密性
2. 认证
3. 报文完整性
4. 可用性 / 访问控制
1.1 机密性 confidentiality
意思是:只有发送方和指定接收方能看懂报文内容。
比如 Alice 给 Bob 发消息,中间 Trudy 截获了报文,但是看不懂。
明文:我能直接看懂的内容
密文:别人看到了也看不懂的内容
1.2 认证 authentication
意思是:Bob 要确认:和我通信的人真的是 Alice。
不是别人说一句:I am Alice,Bob 就相信。
因为 Trudy 也可以说:I am Alice
所以认证的核心是:如何证明“你就是你”?
1.3 报文完整性 message integrity
意思是:报文在传输过程中没有被改过。
比如 Alice 发的是:转账 10 元Trudy 不能把它改成:
转账 10000 元
完整性关心的不是“别人能不能看到”,而是:别人有没有偷偷改?
1.4 可用性 availability
意思是:服务应该能正常使用。
比如网站服务器不能被大量请求打垮,正常用户应该还能访问。
这对应里的:拒绝服务攻击 DoS
不是偷数据,而是让服务不能正常工作。
2. Alice、Bob、Trudy 模型
这章一直用三个角色:
Alice:发送方
Bob:接收方
Trudy:攻击者 / 入侵者
Alice 和 Bob 想安全通信,Trudy 在中间可能做坏事。
Trudy 可能做的事:
1. 窃听:偷看报文
2. 插入:插入假的报文
3. 伪装:假装成 Alice 或 Bob
4. 劫持:中途接管连接
5. 拒绝服务:让服务无法正常使用
这部分要理解成一个模型,不是具体某一个攻击工具。考试一般会考这些安全目标和威胁类型。
3. 加密基本术语
基本结构是:
明文 m
↓ 加密算法 + 加密密钥 K_A
密文 K_A(m)
↓ 解密算法 + 解密密钥 K_B
明文 m
公式写成:
m = K_B(K_A(m))
意思是:
Alice 用加密密钥把明文变成密文,Bob 用解密密钥把密文还原成明文。
3.1 明文和密文
plaintext:明文,看得懂的原始内容
ciphertext:密文,加密后的内容
比如:
明文:bob, i love you. alice
密文:nkn, s gktc wky. mgbc
这里密文不一定有意义,它只是经过加密算法变换后的结果。
4. 如何破解一个加密方案?
有几类攻击方式,从弱到强。

4.1 唯密文攻击 ciphertext-only attack
Trudy 只有密文。
Trudy 看不到明文
只能分析密文规律
可能方法:
暴力破解:尝试所有可能密钥
统计分析:分析字母出现频率
比如英文里 e、t、a 出现频率高,如果密文中某个字母出现特别多,可能对应 e。
4.2 已知明文攻击 known-plaintext attack
Trudy 手上有一些:明文 + 对应密文
比如知道:
明文:hello
密文:xxxxx
它就可以推测加密规律。比唯密文攻击更强。
4.3 选择明文攻击 chosen-plaintext attack
Trudy 可以主动选择一些明文,让系统加密,然后拿到对应密文。
比如它故意输入:
aaaaa
bbbbb
abcde
看输出密文有什么规律。
这是更强的攻击模型。
5. 对称密钥加密
对称密钥加密的核心是:加密和解密使用同一个秘密密钥 K_S
也就是:
Alice 用 K_S 加密
Bob 用 K_S 解密
公式:
密文 = K_S(m)
明文 = K_S^{-1}(密文)
5.1 对称加密最大的问题
问题不是加密本身,而是:
Alice 和 Bob 一开始怎么安全地拥有同一把密钥?
如果网络本身不安全,那么直接把密钥发过去,Trudy 也能截获。
所以对称加密的问题是:密钥分发困难
6. 简单对称加密:替换密码

替换密码就是:一个字母替换成另一个字母(比如说凯撒加密)
比如:
a → m
b → n
c → b
那么:bob
就可能变成:nkn
这种方法的密钥就是:26 个字母到 26 个字母的映射关系
6.1 单表替换的问题
它太容易被统计分析破解。
比如英文里:
e 出现最多
the 很常见
ing 很常见
所以只要密文足够长,Trudy 可以根据频率猜出来。
7. 更复杂的替换密码
为了增强安全性,可以使用多个替换表:
M1, M2, M3, ..., Mn
并且循环使用。
比如 n = 4:
第 1 个字符用 M1
第 2 个字符用 M2
第 3 个字符用 M3
第 4 个字符用 M4
第 5 个字符再用 M1
...
这样同一个字母在不同位置可能加密成不同字符。
比单表替换强,但现代安全要求下仍然不够。
8. DES 和 AES
8.1 DES

DES 全称:Data Encryption Standard
特点:
1. 对称密钥加密
2. 56-bit 密钥
3. 64-bit 明文分组
4. 16 轮类似函数运算
DES 的流程可以简单理解成:
64-bit 输入
→ 初始置换
→ 分成左右两半
→ 16 轮变换
→ 最终置换
→ 64-bit 输出
8.2 DES 的问题
DES 的密钥只有 56 bit。
现在看太短了,容易被暴力破解。
所以后来有:3DES
AES
8.3 AES
AES 全称:Advanced Encryption Standard
它是 DES 的替代品。
特点:
1. 对称密钥加密
2. 分组长度 128 bit
3. 密钥长度可以是 128 / 192 / 256 bit
4. 现代常用
DES:老,56-bit 密钥,不够安全
AES:新,128/192/256-bit 密钥,更安全
9. 密码块链 CBC

前面分组加密有一个问题:如果两个明文块一样,加密后密文块也一样
比如:
m(1) = "HTTP/1.1"
m(17) = "HTTP/1.1"
如果都直接用同一个块密码加密,就可能得到相同密文。
这会泄露规律。
9.1 CBC 的基本思想
CBC:Cipher Block Chaining。
核心是:每一轮加密前,把当前明文块和上一轮密文块结合起来
大致形式:
c(i) = E_K( m(i) XOR c(i-1) )
这样即使:
m(1) = m(17)
由于前一个密文块不同,最后得到的密文也可能不同。
每一块加密都带上前一块的影响。 这样相同明文块不会简单对应相同密文块。
10. 公钥密码
对称加密的问题是:双方要先共享同一个秘密密钥
公钥密码解决这个问题。
公钥密码有两把钥匙:
公钥:公开,所有人都可以知道
私钥:秘密,只有本人知道
比如 Bob 有:
Bob 的公钥 K_B^+
Bob 的私钥 K_B^-
10.1 公钥加密怎么用?
Alice 想给 Bob 发秘密消息。
过程:
1. Alice 获取 Bob 的公钥 K_B^+
2. Alice 用 Bob 的公钥加密消息
3. Bob 收到密文
4. Bob 用自己的私钥 K_B^- 解密
公式:m = K_B^-(K_B^+(m))
核心:

公钥可以给全世界,别人只能用它加密给 Bob; 只有 Bob 的私钥能解开。
11. RSA 公钥密码
RSA 是典型公钥算法。
它要满足两个要求:
1. K_B^-(K_B^+(m)) = m
2. 已知公钥 K_B^+,很难推出私钥 K_B^-
RSA 的安全性来自一个事实:
大整数分解很难
也就是:n = p q
如果 p、q 很大,别人只知道 n,很难把 n 分解回 p 和 q。
12. RSA 前置知识:模运算
模运算就是取余数。
x mod n = x 除以 n 的余数
例子:
14 mod 10 = 4
196 mod 10 = 6
重要性质:
[(a mod n) + (b mod n)] mod n = (a+b) mod n
[(a mod n) - (b mod n)] mod n = (a-b) mod n
[(a mod n) × (b mod n)] mod n = (a×b) mod n
所以:(a mod n)^d mod n = a^d mod n
RSA 能把大指数计算拆开算
13. RSA 生成公钥和私钥
步骤如下。
1. 选择两个很大的质数 p, q
2. 计算 n = p q
3. 计算 z = (p-1)(q-1)
4. 选择 e,使 e 和 z 互素
5. 选择 d,使 ed mod z = 1
6. 公钥是 (n, e)
7. 私钥是 (n, d)
注意:
公钥:(n, e)
私钥:(n, d)
n 是两边都知道的。
14. RSA 加密和解密
设明文数字是 m,要求:
m < n
加密:c = m^e mod n
解密:m = c^d mod n
也就是:
m = (m^e mod n)^d mod n
数论保证它能还原。
15. RSA 例子
p = 5
q = 7
n = 35
z = (5-1)(7-1) = 24
e = 5
d = 29
因为:
e d mod z = 5 × 29 mod 24 = 145 mod 24 = 1
所以符合要求。
15.1 加密
明文:
m = 12
加密:
c = m^e mod n
c = 12^5 mod 35
计算:
12^2 = 144,144 mod 35 = 4
12^4 mod 35 = 4^2 = 16
12^5 mod 35 = 16 × 12 = 192
192 mod 35 = 17
所以:
c = 17
15.2 解密
解密:
m = c^d mod n
m = 17^29 mod 35
结果会还原为:
m = 12
所以:12 → 加密成 17 → 解密回 12
16. 为什么 RSA 可以用于数字签名?
K_B^-(K_B^+(m)) = m
K_B^+(K_B^-(m)) = m
也就是说:
先公钥后私钥可以
先私钥后公钥也可以
这就为数字签名做准备。
加密时:别人用 Bob 的公钥加密,只有 Bob 能用私钥解密
签名时:Bob 用自己的私钥处理,别人用 Bob 的公钥验证
注意这里逻辑不一样。
公钥加密:为了保密
私钥签名:为了证明身份
17. 为什么 RSA 安全?
如果攻击者知道 Bob 的公钥:(n, e)
要破解就要找:d
而求 d 通常需要知道:
z = (p-1)(q-1)
要知道 z,就需要知道 p 和 q。
但是攻击者只知道:n = p q
如果 n 很大,分解 n 非常困难。
所以 RSA 的安全性来自:大整数分解困难
18. RSA 实践:会话密钥
RSA 很强,但是有一个问题:RSA 指数运算很慢
DES/AES 这种对称加密至少比 RSA 快很多
所以实际系统不会用 RSA 加密大量数据。
实际做法是:
1. 用 RSA 安全交换一个对称密钥 K_S
2. 后面真正传大量数据时,用 K_S 进行 AES 等对称加密
这个 K_S 叫:会话密钥 session key
18.1 为什么这样设计?
因为:
RSA:安全交换密钥,但慢
AES:加密大量数据很快,但需要双方先有同一个密钥
所以两者结合:
RSA 解决密钥分发问题
AES 负责高效加密数据
公钥密码负责“安全递钥匙”,对称加密负责“真正锁门”。
19. 认证 authentication
现在进入下一个主题:认证。
认证目标:Bob 需要 Alice 证明她真的是 Alice
19.1 Protocol ap1.0:直接说身份
协议:Alice → Bob: I am Alice
这个显然不安全。
因为 Trudy 也可以发:
I am Alice
所以:只声明身份 ≠ 证明身份
19.2 Protocol ap2.0:加上 IP 地址
改进方案:Alice → Bob: I am Alice + Alice 的 IP 地址
这仍然不够安全。
因为攻击者可能伪造源地址,或者重放之前截获的报文。
所以问题是:IP 地址不是强身份凭证
后面认证会继续引入:
nonce 随机数
共享密钥
公钥签名
来防止伪装和重放。
对称加密像同一把钥匙开同一把锁;
公钥加密像每个人都有一个公开上锁孔和一个私人开锁钥匙;
RSA 负责安全交换钥匙,AES 负责真正快速加密数据;具体算法了解即可
认证要证明身份,不能只是嘴上说“我是 Alice”
