计算机网络第七章:网络安全学习总结
随着计算机网络的普及和深入应用,网络安全已成为信息社会不可或缺的重要组成部分。本章旨在介绍网络安全的基本概念、核心技术和常用协议,帮助理解如何保护网络通信和数据免受各种威胁。
1. 安全基础
网络安全的目标是保护信息系统及其数据免受未经授权的访问、使用、泄露、破坏、修改或拒绝服务。
1.1 CIA 三要素
这是信息安全最基本的三大目标:
- 机密性 (Confidentiality) :确保信息只被授权用户访问,防止信息泄露给未经授权的实体或进程。
- 实现手段:加密、访问控制。
- 完整性 (Integrity) :确保信息在存储或传输过程中不被未经授权地修改或破坏,并保证信息的一致性和准确性。
- 实现手段:散列函数(Hash)、数字签名。
- 可用性 (Availability) :确保授权用户在需要时能够及时、可靠地访问和使用信息及信息系统。
- 实现手段:冗余、备份、负载均衡、DDoS 防护。
1.2 攻击类型
网络攻击通常分为两大类:
- 被动攻击 (Passive Attacks) :攻击者不改变数据,只是窃听或分析通信。
- 窃听 (Eavesdropping):截获通信内容。
- 流量分析 (Traffic Analysis):通过观察通信模式、频率、长度等推断信息。
- 特点:难以检测,但可以预防(如加密)。
- 主动攻击 (Active Attacks) :攻击者修改数据流或创建虚假数据流。
- 篡改 (Modification):修改传输中的数据。
- 伪造 (Masquerade):冒充合法用户进行通信。
- 重放 (Replay):截获合法通信并重新发送。
- 拒绝服务 (Denial of Service, DoS/DDoS):阻止合法用户访问服务。
- 特点:容易检测,但难以完全预防。
1.3 恶意软件类型
恶意软件 (Malware) 是指旨在损害、破坏或未经授权访问计算机系统的软件。
- 病毒 (Virus):依附于其他程序,通过执行宿主程序传播。
- 蠕虫 (Worm):独立运行,通过网络自我复制传播,无需宿主程序。
- 木马 (Trojan Horse):伪装成合法软件,但执行恶意功能。
- 后门 (Backdoor):绕过正常认证机制,提供对系统的秘密访问。
- 僵尸网络 (Botnet):被恶意软件感染的计算机组成的网络,受攻击者控制。
- 勒索软件 (Ransomware):加密用户文件并要求支付赎金才能解密。
- 间谍软件 (Spyware):秘密收集用户信息的软件。
- 广告软件 (Adware):强制显示广告的软件。
2. 密码学基础
密码学是网络安全的核心,通过数学方法实现信息的机密性、完整性和认证。
2.1 对称加密 (Symmetric Encryption)
- 原理:加密和解密使用相同的密钥。
- 特点:速度快,适合大量数据加密;密钥分发困难。
- 传统密码 :
- 替代密码 (Substitution Cipher):将明文中的字符替换为其他字符(如凯撒密码)。
- 置换密码 (Transposition Cipher):改变明文中的字符顺序(如栅栏密码)。
- 现代算法 :
- DES (Data Encryption Standard) :
- 分组长度:64 位。
- 密钥长度:56 位(实际使用)。
- 安全性:因密钥长度较短,已被认为不安全,易受暴力破解。
- AES (Advanced Encryption Standard) :
- 分组长度:128 位。
- 密钥长度:128 位、192 位或 256 位。
- 安全性:目前公认的安全标准。
- DES (Data Encryption Standard) :
2.2 非对称加密 (Asymmetric Encryption / Public-Key Cryptography)
- 原理 :使用一对密钥------公钥 (Public Key) 和私钥 (Private Key)。公钥公开,私钥保密。
- 用公钥加密的数据只能用对应的私钥解密。
- 用私钥签名的数据只能用对应的公钥验证。
- 特点:解决了密钥分发问题;速度慢,不适合大量数据加密。
- RSA 算法 :
- 原理 :基于大整数分解的困难性。即给定两个大素数 p p p 和 q q q,计算它们的乘积 n = p q n=pq n=pq 很容易,但给定 n n n 很难反向分解出 p p p 和 q q q。
- 密钥生成 :
- 选择两个大素数 p , q p, q p,q。
- 计算模数 n = p × q n = p \times q n=p×q。
- 计算欧拉函数 ϕ ( n ) = ( p − 1 ) ( q − 1 ) \phi(n) = (p-1)(q-1) ϕ(n)=(p−1)(q−1)。
- 选择一个整数 e e e (公钥指数),满足 1 < e < ϕ ( n ) 1 < e < \phi(n) 1<e<ϕ(n) 且 e e e 与 ϕ ( n ) \phi(n) ϕ(n) 互质。
- 计算私钥指数 d d d,满足 d × e ≡ 1 ( m o d ϕ ( n ) ) d \times e \equiv 1 \pmod{\phi(n)} d×e≡1(modϕ(n))。
- 公钥 为 ( e , n ) (e, n) (e,n),私钥 为 ( d , n ) (d, n) (d,n)。
- 加密 :密文 C = M e ( m o d n ) C = M^e \pmod n C=Me(modn),其中 M M M 是明文。
- 解密 :明文 M = C d ( m o d n ) M = C^d \pmod n M=Cd(modn)。
3. 消息完整性与认证
3.1 报文摘要 (Message Digest) / Hash 函数
- 原理:将任意长度的输入数据通过散列算法转换成固定长度的输出(散列值、摘要)。
- 特点 :
- 单向性 (One-way):从摘要无法逆推出原始数据。
- 抗碰撞性 (Collision Resistance):很难找到两个不同的输入产生相同的摘要。
- 雪崩效应 (Avalanche Effect):输入微小变化导致输出巨大变化。
- 长度固定:无论输入多大,输出长度固定。
- 常用算法 :
- MD5 (Message-Digest Algorithm 5):输出 128 位,已被证明存在碰撞,不推荐用于安全敏感场景。
- SHA-1 (Secure Hash Algorithm 1):输出 160 位,也存在理论上的碰撞攻击,逐渐被淘汰。
- SHA-2 (SHA-256, SHA-384, SHA-512):输出 256 位、384 位、512 位,目前广泛使用。
- 用途:验证数据完整性(文件校验、密码存储)。
3.2 数字签名 (Digital Signature)
- 原理 :发送方使用自己的私钥 对报文摘要进行加密,生成数字签名。接收方使用发送方的公钥解密签名,并与自己计算的报文摘要进行比对。
- 功能 :
- 认证 (Authentication):证明消息确实来自声称的发送方(只有私钥持有者能生成有效签名)。
- 完整性 (Integrity):确保消息在传输过程中未被篡改(摘要比对)。
- 不可否认性 (Non-repudiation):发送方不能否认曾发送过该消息。
- 流程 :
- 发送方 A 对原始消息 M M M 计算 Hash 值 H ( M ) H(M) H(M)。
- A 使用自己的私钥 P R A PR_A PRA 对 H ( M ) H(M) H(M) 进行加密,得到数字签名 S = E P R A ( H ( M ) ) S = E_{PR_A}(H(M)) S=EPRA(H(M))。
- A 将消息 M M M 和签名 S S S 一起发送给接收方 B。
- B 收到 M M M 和 S S S。
- B 使用 A 的公钥 P U A PU_A PUA 解密 S S S,得到 H ( M ) ′ H(M)' H(M)′。
- B 对收到的消息 M M M 重新计算 Hash 值 H ( M ) ′ ′ H(M)'' H(M)′′。
- B 比较 H ( M ) ′ H(M)' H(M)′ 和 H ( M ) ′ ′ H(M)'' H(M)′′。如果两者一致,则消息完整且确实由 A 发送。
3.3 身份认证 (Identity Authentication)
- 数字证书 (Digital Certificate) :
- 一种由证书认证机构 (CA) 签名的电子文档,它将某个实体的公钥与其身份信息(如姓名、组织、电子邮件地址等)绑定在一起。
- 包含:公钥、所有者信息、CA 信息、有效期、CA 的数字签名。
- CA (Certificate Authority) :
- 受信任的第三方机构,负责颁发、管理、吊销数字证书。
- CA 的公钥通常预装在操作系统或浏览器中,作为信任链的根。
- PKI (Public Key Infrastructure) :
- 公钥基础设施,一套创建、管理、分发、使用、存储和撤销数字证书的系统。
- 包括 CA、注册机构 (RA)、证书库、证书吊销列表 (CRL) 或在线证书状态协议 (OCSP) 等组件。
4. 网络安全协议
4.1 传输层:SSL/TLS (Secure Sockets Layer / Transport Layer Security)
- 作用:在应用层和传输层之间提供安全通道,实现数据机密性、完整性和身份认证。广泛用于 HTTPS。
- TLS 握手过程详解 :
- Client Hello :客户端向服务器发送支持的 TLS 版本、加密套件(加密算法、Hash 算法)、压缩算法、随机数 R C R_C RC。
- Server Hello :服务器选择一个 TLS 版本、加密套件、压缩算法,并发送服务器的随机数 R S R_S RS。
- Server Certificate:服务器发送其数字证书(包含服务器公钥)。
- Server Key Exchange (可选):如果选择了 Diffie-Hellman 等密钥交换算法,服务器会发送密钥交换参数。
- Server Hello Done:服务器通知客户端握手消息发送完毕。
- Client Certificate (可选):如果服务器要求客户端认证,客户端发送其数字证书。
- Client Key Exchange :
- 客户端生成一个预主密钥 (Pre-Master Secret) P M S PMS PMS。
- 客户端使用服务器证书中的公钥 加密 P M S PMS PMS,发送给服务器。
- Change Cipher Spec:客户端通知服务器后续通信将使用协商好的加密套件和密钥。
- Client Finished:客户端发送一条加密的握手消息,验证握手过程。
- Server 解密 PMS :服务器使用自己的私钥 解密收到的 P M S PMS PMS。
- 双方生成主密钥和会话密钥 :客户端和服务器分别使用 P M S PMS PMS、 R C R_C RC、 R S R_S RS 共同计算出主密钥 (Master Secret) ,再从主密钥派生出用于对称加密和 MAC 的会话密钥 (Session Keys)。
- Change Cipher Spec:服务器通知客户端后续通信将使用协商好的加密套件和密钥。
- Server Finished:服务器发送一条加密的握手消息,验证握手过程。
- 安全通信:双方使用协商好的会话密钥进行对称加密通信。
4.2 网络层:IPsec (Internet Protocol Security)
- 作用:在 IP 层提供安全服务,包括数据源认证、数据完整性、机密性和抗重放攻击。
- 主要协议 :
- AH (Authentication Header) 鉴别首部 :
- 提供:数据源认证、数据完整性、抗重放攻击。
- 不提供:机密性(不加密数据)。
- 工作方式:在 IP 数据报中插入一个 AH 首部,包含一个 MAC (Message Authentication Code)。
- ESP (Encapsulating Security Payload) 封装安全载荷 :
- 提供:机密性、数据源认证、数据完整性、抗重放攻击。
- 工作方式:加密 IP 数据报的有效载荷,并添加 ESP 首部和尾部。
- AH (Authentication Header) 鉴别首部 :
- 工作模式 :
- 传输模式 (Transport Mode) :
- 保护范围 :只保护 IP 数据报的有效载荷(传输层报文及以上)。
- 应用场景:主机到主机之间的端到端安全通信。
- 隧道模式 (Tunnel Mode) :
- 保护范围 :保护整个原始 IP 数据报(包括原始 IP 首部和有效载荷)。
- 工作方式:将整个原始 IP 数据报封装在一个新的 IP 数据报中,并对新的有效载荷(即原始 IP 数据报)进行加密和/或认证。
- 应用场景:VPN (Virtual Private Network),网关到网关或主机到网关的通信。
- 传输模式 (Transport Mode) :
4.3 应用层:PGP (Pretty Good Privacy)
- 作用:提供电子邮件和文件加密、数字签名、压缩等功能。
- Web of Trust (信任网络) :
- PGP 不依赖于中心化的 CA,而是通过用户之间相互签名公钥来建立信任。
- 用户可以为其他用户的公钥签名,表示信任该公钥的真实性。
- 信任是传递的:如果 A 信任 B,B 信任 C,那么 A 可能(但不一定)信任 C。
- 邮件加密流程 :
- A 对邮件签名 :A 对邮件内容计算 Hash 值,用自己的私钥加密 Hash 值生成数字签名。
- A 对邮件加密 :A 生成一个随机的会话密钥,用该会话密钥对称加密邮件内容和数字签名。
- A 加密会话密钥 :A 使用接收方 B 的公钥加密会话密钥。
- A 发送:A 将加密后的邮件内容、加密后的数字签名和加密后的会话密钥发送给 B。
- B 解密会话密钥 :B 用自己的私钥解密会话密钥。
- B 解密邮件:B 用会话密钥解密邮件内容和数字签名。
- B 验证签名 :B 用 A 的公钥解密数字签名,得到 Hash 值,并与自己计算的邮件内容 Hash 值比对。
5. 系统安全
5.1 防火墙 (Firewall)
- 作用:隔离内部网络和外部网络,根据预设规则控制网络流量,阻止未经授权的访问。
- 类型 :
- 分组过滤防火墙 (Packet Filtering Firewall) :
- 工作在:网络层和传输层。
- 原理:根据 IP 数据报的头部信息(源/目的 IP 地址、源/目的端口号、协议类型等)进行过滤。
- 特点:简单、高效,但安全性较低,无法理解应用层协议。
- 状态检测防火墙 (Stateful Inspection Firewall) :
- 工作在:网络层、传输层。
- 原理:在分组过滤的基础上,跟踪 TCP 连接的状态,只允许符合已建立连接状态的报文通过。
- 特点:比分组过滤更安全,能有效防御某些攻击。
- 应用网关防火墙 (Application Gateway Firewall / Proxy Firewall) :
- 工作在:应用层。
- 原理:作为应用层代理,所有应用层流量都必须经过代理服务器。它会检查应用层协议的完整性和合法性。
- 特点:安全性最高,但性能开销大,对每种应用协议需要专门的代理。
- 分组过滤防火墙 (Packet Filtering Firewall) :
5.2 入侵检测系统 (IDS - Intrusion Detection System)
- 作用:监控网络或系统活动,发现可疑行为或已知的攻击模式,并发出警报。
- 类型 :
- 特征检测 (Signature-based Detection / Misuse Detection) :
- 原理:维护一个已知攻击模式(特征码)的数据库,将网络流量或系统日志与这些特征码进行匹配。
- 特点:对已知攻击检测准确率高,误报率低。但无法检测未知攻击。
- 异常检测 (Anomaly-based Detection) :
- 原理:首先建立一个正常行为的基线模型,然后将实时活动与基线进行比较,任何显著偏离基线的行为都被认为是异常或潜在入侵。
- 特点:能够检测未知攻击。但可能产生较高的误报率,且需要持续学习和更新基线。
- 特征检测 (Signature-based Detection / Misuse Detection) :
重点突破
典型例题
1. RSA 算法计算
Problem : 给定两个小质数 p = 3 , q = 11 p=3, q=11 p=3,q=11 和公钥指数 e = 3 e=3 e=3。请计算:
(1) 模数 n n n 和欧拉函数 ϕ ( n ) \phi(n) ϕ(n)。
(2) 私钥指数 d d d(展示扩展欧几里得计算过程)。
(3) 若明文 m = 5 m=5 m=5,计算密文 c c c。
Solution :
(1) 计算模数 n n n 和欧拉函数 ϕ ( n ) \phi(n) ϕ(n):
- 模数 n = p × q = 3 × 11 = 33 n = p \times q = 3 \times 11 = 33 n=p×q=3×11=33。
- 欧拉函数 ϕ ( n ) = ( p − 1 ) ( q − 1 ) = ( 3 − 1 ) ( 11 − 1 ) = 2 × 10 = 20 \phi(n) = (p-1)(q-1) = (3-1)(11-1) = 2 \times 10 = 20 ϕ(n)=(p−1)(q−1)=(3−1)(11−1)=2×10=20。
(2) 计算私钥指数 d d d:
- 我们需要找到 d d d 使得 e × d ≡ 1 ( m o d ϕ ( n ) ) e \times d \equiv 1 \pmod{\phi(n)} e×d≡1(modϕ(n)),即 3 d ≡ 1 ( m o d 20 ) 3d \equiv 1 \pmod{20} 3d≡1(mod20)。
- 使用扩展欧几里得算法 :
* 我们希望找到整数 x , y x, y x,y 使得 a x + b y = gcd ( a , b ) ax + by = \text{gcd}(a, b) ax+by=gcd(a,b)。在这里,我们找 d d d 使得 3 d + 20 k = 1 3d + 20k = 1 3d+20k=1。
* 20 = 6 × 3 + 2 20 = 6 \times 3 + 2 20=6×3+2
* 3 = 1 × 2 + 1 3 = 1 \times 2 + 1 3=1×2+1
* 从第二个方程反推: 1 = 3 − 1 × 2 1 = 3 - 1 \times 2 1=3−1×2
* 将第一个方程中的 2 = 20 − 6 × 3 2 = 20 - 6 \times 3 2=20−6×3 代入上式:
1 = 3 − 1 × ( 20 − 6 × 3 ) 1 = 3 - 1 \times (20 - 6 \times 3) 1=3−1×(20−6×3)
1 = 3 − 20 + 6 × 3 1 = 3 - 20 + 6 \times 3 1=3−20+6×3
1 = 7 × 3 − 1 × 20 1 = 7 \times 3 - 1 \times 20 1=7×3−1×20
* 因此, d = 7 d=7 d=7。 - 验证 : 3 × 7 = 21 ≡ 1 ( m o d 20 ) 3 \times 7 = 21 \equiv 1 \pmod{20} 3×7=21≡1(mod20)。所以私钥指数 d = 7 d=7 d=7。
(3) 计算密文 c c c:
- 加密公式为 c = m e ( m o d n ) c = m^e \pmod n c=me(modn)。
- c = 5 3 ( m o d 33 ) c = 5^3 \pmod{33} c=53(mod33)
- c = 125 ( m o d 33 ) c = 125 \pmod{33} c=125(mod33)
- 125 = 3 × 33 + 26 125 = 3 \times 33 + 26 125=3×33+26
- 所以,密文 c = 26 c=26 c=26。
Analysis : 本题考察了 RSA 算法密钥生成和加密过程中的核心计算。理解模数 n n n 和欧拉函数 ϕ ( n ) \phi(n) ϕ(n) 的计算是基础;私钥指数 d d d 的计算是关键,它依赖于模逆运算,通常通过扩展欧几里得算法求解;最后是明文加密为密文的幂运算和模运算。
2. 混合加密流程
Problem : 描述 A 向 B 发送一份既加密又签名的文档的完整步骤。请明确指出使用了谁的公钥、谁的私钥、以及会话密钥 (Session Key) 的生成和传递方式。
Solution :
为了实现文档的机密性 (加密)和认证/不可否认性(签名),A 和 B 将采用混合加密和数字签名相结合的方案。
发送方 A 的操作:
- 生成会话密钥 (Session Key) :A 生成一个随机的、一次性的对称会话密钥 K S K_S KS。
- 对称加密文档 :A 使用 K S K_S KS 对原始文档 M M M 进行对称加密,得到密文 C = E K S ( M ) C = E_{K_S}(M) C=EKS(M)。这保证了文档的机密性。
- 计算报文摘要 :A 对原始文档 M M M 计算其 Hash 值 H ( M ) H(M) H(M)。
- 数字签名 :A 使用自己的私钥 P R A PR_A PRA 对 H ( M ) H(M) H(M) 进行加密,得到数字签名 S = E P R A ( H ( M ) ) S = E_{PR_A}(H(M)) S=EPRA(H(M))。这保证了文档的认证性和不可否认性。
- 加密会话密钥 :A 使用接收方 B 的公钥 P U B PU_B PUB 对会话密钥 K S K_S KS 进行非对称加密,得到加密的会话密钥 E P U B ( K S ) E_{PU_B}(K_S) EPUB(KS)。这保证了会话密钥传递的机密性。
- 发送消息 :A 将加密后的文档 C C C、数字签名 S S S 和加密后的会话密钥 E P U B ( K S ) E_{PU_B}(K_S) EPUB(KS) 一起发送给 B。
接收方 B 的操作:
- 解密会话密钥 :B 收到消息后,首先使用自己的私钥 P R B PR_B PRB 解密 E P U B ( K S ) E_{PU_B}(K_S) EPUB(KS),得到会话密钥 K S K_S KS。
- 解密文档 :B 使用会话密钥 K S K_S KS 对密文 C C C 进行对称解密,得到文档 M ′ M' M′。
- 验证数字签名 :
- B 使用发送方 A 的公钥 P U A PU_A PUA 解密数字签名 S S S,得到 Hash 值 H ( M ) ′ ′ H(M)'' H(M)′′。
- B 对解密后的文档 M ′ M' M′ 重新计算 Hash 值 H ( M ) ′ H(M)' H(M)′。
- B 比较 H ( M ) ′ ′ H(M)'' H(M)′′ 和 H ( M ) ′ H(M)' H(M)′。
- 结果判断 :
- 如果两个 Hash 值一致,则表明文档在传输过程中未被篡改(完整性),且确实是由 A 发送的(认证性)。
- 如果 Hash 值不一致,则文档可能已被篡改或并非来自 A。
Analysis: 本题展示了混合加密在实际应用中的完整流程。它巧妙地结合了对称加密的高效性(用于加密大量数据)和非对称加密的安全性(用于密钥交换和数字签名)。关键在于明确区分公钥和私钥在加密和签名中的不同用途,以及会话密钥在整个流程中的生成、加密和传递方式。
易错点分析
-
公钥/私钥的用途:
- 误区:认为公钥就是用来加密,私钥就是用来解密,反之亦然。
- 正解 :
- 为了保证机密性 :发送方使用接收方(B)的公钥 加密数据,只有接收方能用其私钥解密。
- 为了保证认证性和不可否认性 :发送方使用自己的(A)私钥 对报文摘要进行签名,任何人都可以用发送方公钥验证签名。
- 总结 :加密用接收方公钥 ,解密用接收方私钥 ;签名用发送方私钥 ,验证用发送方公钥。
-
KDC vs CA:
- 误区:混淆对称密钥分发中心 (KDC) 和公钥认证中心 (CA) 的功能和信任根源。
- 正解 :
- KDC (Key Distribution Center) :用于对称密钥的分发。通信双方都信任 KDC,KDC 为他们生成并安全地分发共享的对称密钥。KDC 本身是信任的根源。
- CA (Certificate Authority) :用于非对称密钥的公钥认证。CA 颁发数字证书,证明某个公钥确实属于某个实体。用户信任 CA 的根证书,从而信任 CA 签发的其他证书。CA 解决的是公钥的真实性问题。
- 区别:KDC 解决对称密钥分发问题,CA 解决公钥的真实性问题。
-
Hash vs 加密:
- 误区:误以为 Hash 函数本身可以提供机密性或直接用于认证。
- 正解 :
- Hash 函数 :是一种单向函数 ,将任意长度输入映射为固定长度输出(摘要)。它不可逆 ,主要用于验证数据完整性 (通过比较摘要判断数据是否被篡改)。Hash 函数本身不提供机密性,因为任何人都可以计算 Hash 值。
- 加密 :是一种可逆过程 ,通过密钥将明文转换为密文,主要用于提供机密性。
- 认证:单纯的 Hash 值不能用于认证,因为攻击者可以篡改数据并重新计算 Hash 值。要实现认证,Hash 函数必须与密钥(如 HMAC)或数字签名(用私钥加密 Hash 值)结合使用。