07 · 网络安全(Network Security)

📅 预计 90 分钟 | ⭐ 本章主题:加密、数字签名、证书、HTTPS 与常见攻击


7.0 网络安全要解决什么问题

把网络想象成一条公共走廊,数据像信件一样从你的门送到对方的门。走廊里来来往往什么人都有:有人想偷看信的内容,有人想改信上的话,有人干脆想把你家的门堵住。网络安全(network security)解决的就是这三类问题,总结成 CIA 三元组

目标 英文 意思 破坏它的攻击
机密性 Confidentiality 内容只有该看的人能看 窃听、中间人窃取
完整性 Integrity 内容没有被篡改 篡改报文
可用性 Availability 服务一直可用 DDoS 瘫痪服务器

记这三个词的钥匙就是"保密、保鲜、保在"。后面所有技术都围绕这三点。

⚠️ 常见错误

  1. 把机密性和完整性混为一谈:机密性防"看"(加密),完整性防"改"(校验/签名),是两件事。
  2. 以为"加密"解决所有问题:加密只解决机密性;防篡改靠完整性校验,防抵赖靠数字签名。
  3. CIA 缩写记成别的:Confidentiality-Integrity-Availability。

7.1 对称加密:一把钥匙开一把锁

DES / AES

对称加密(symmetric encryption)用同一个密钥既加密又解密。就像你和朋友约定好一把相同的钥匙:你用钥匙锁上,他用同一把钥匙打开。

过程描述:

明文 "HELLO" --(密钥 K 加密)--> 密文 "x8#k!" --(同一密钥 K 解密)--> 明文 "HELLO"
  • DES(Data Encryption Standard):早期标准,密钥长度 56 位,在今天已经可以被暴力破解,基本淘汰。
  • 3DES:把 DES 连做三次,属于临时过渡方案。
  • AES(Advanced Encryption Standard):当前主流,密钥长度可选 128 / 192 / 256 位,安全且高效,浏览器、WiFi(WPA2)都在用。

对称加密的优点是快(适合加密大量数据);缺点是密钥分发难题——你俩相隔千里,怎么安全地把同一把钥匙交给对方?要是钥匙被偷,等于白锁。

⚠️ 常见错误

  1. DES 与 AES 记反:DES 老、密钥 56 位、不安全;AES 新、128/192/256 位、主流。
  2. 以为对称加密也用于身份验证:对称加密主要管机密性;验身份、防抵赖靠数字签名(非对称)。
  3. 忽略"密钥分发"问题:这是对称加密的核心短板,也是非对称加密登场的原因。

7.2 非对称加密:一公一私两把钥匙

RSA

非对称加密(asymmetric encryption)用一对钥匙公钥(public key)公开给所有人,私钥(private key)自己保管。用公钥加密的内容,只有配对的私钥能解;反之亦然。它像公共信箱:谁都能往投递口塞信(公钥加密),但只有握着信箱钥匙的收件人(私钥)能打开取信。

  • RSA 是最经典的非对称算法,安全性建立在"两个大素数的乘积容易算,但把乘积分解回两个素数极难"这一数学事实上。
  • 比 RSA 更新的有 ECC(椭圆曲线)等,密钥更短、性能更好。

非对称加密的核心用途有两个方向(务必分清):

用途 用哪把钥匙加密 用哪把钥匙解密 解决什么
加密传输 接收方公钥 接收方私钥 机密性(只有接收方能看)
数字签名 发送方私钥 发送方公钥 完整性 + 身份验证 + 防抵赖

用 RSA 的小数字例子体会"加密-解密"往返(真实密钥远大于此):

选素数 p=61, q=53,n = p*q = 3233
公钥 (e, n) = (17, 3233)
私钥 (d, n) = (2753, 3233)

加密:密文 = 明文^e mod n
     65^17 mod 3233 = 2790
解密:明文 = 密文^d mod n
     2790^2753 mod 3233 = 65   ← 还原成功

⚠️ 常见错误

  1. "加密"与"签名"的钥匙方向记反:加密用接收方公钥,签名用发送方私钥——这是本讲被问最多的混淆点。
  2. 以为公钥能解密私钥加密的一切:同一对钥匙互为逆运算,但"公钥加密私钥解"用于保密,"私钥加密公钥解"用于签名。
  3. 非对称 vs 对称搞混:对称一把钥匙、快、有分发难题;非对称一对钥匙、慢、无分发难题。

7.3 数字签名与数字证书:盖章与验章

数字签名:防篡改 + 防抵赖

数字签名(digital signature)解决两件事:内容没被人改过(完整性)、发送方无法抵赖(不可否认)。它像文件上的手写签名加骑缝章

过程(发送方):

1. 对明文做哈希(hash,如 SHA-256)→ 得到固定长度的"指纹"(摘要)
2. 用发送方【私钥】对指纹加密 → 得到"数字签名"
3. 把【明文 + 数字签名】一起发给对方

过程(接收方验证):

1. 用发送方【公钥】解密签名 → 得到"对方算出的指纹 A"
2. 自己再对收到的明文做同样的哈希 → 得到"我算出的指纹 B"
3. 若 A == B:明文没被改过,且确实来自持有该私钥的人

这里必须带出 哈希(hash)这个概念:它是一个"单向"函数——内容随便多长,算出来都是固定长度(如 SHA-256 是 256 位);内容只要改一个字符,指纹就完全变样;而且几乎不可能从指纹反推出原文。哈希本身不加密、也不解密,它是"数字指纹"。

数字证书:把公钥和"人"绑定

非对称加密有个前提问题:你怎么确定手里的公钥真是对方的?中间人可能把自己的公钥塞给你。数字证书(digital certificate)就是由权威机构 CA(Certificate Authority,证书颁发机构)给"公钥 + 持有人身份"签名盖章,证明"这把公钥确实属于某某网站"。它像身份证:你自己说你是谁没用,得由发证机关(CA)盖章。

工作流程(浏览器访问 HTTPS 网站时):

1. 网站把"证书"发给浏览器:证书里有网站域名 + 网站公钥 + CA 的签名
2. 浏览器用【CA 的公钥】验证证书上的签名 → 证书是真的、没被篡改
3. 浏览器确认证书里的域名 == 正在访问的域名
4. 信任证书里的公钥,用它完成后续加密通信

CA 的公钥怎么来?它来自根证书(root certificate),预装在操作系统/浏览器里。这就形成了一条信任链:根证书 → 中间 CA → 网站证书。

⚠️ 常见错误

  1. 证书解决的是"公钥是谁的",不是"数据是否加密"——加密靠密钥协商,证书提供信任基础。
  2. 哈希 ≠ 加密:哈希不可逆、无密钥;加密可逆、有密钥。SHA-256 不是"加密算法"。
  3. 签名方向记反:签名用私钥,验签用公钥;而加密用接收方公钥,解密用接收方私钥。
  4. 忽略域名校验:证书合法但域名对不上(如你访问 a.com 收到 b.com 的证书),浏览器会报警,说明可能正遭遇中间人攻击。

7.4 TLS/SSL 与 HTTPS:加密的握手

TLS 握手:先谈好"暗号",再开始聊天

TLS(Transport Layer Security)是 HTTP 加密的基础,前身叫 SSL(Secure Sockets Layer),现代标准是 TLS,但大家常混叫"SSL"。HTTPS = HTTP + TLS。

TLS 的第一步是握手(handshake)——双方先协商出"用什么算法、用什么密钥",然后再用这个密钥加密传输内容。简化流程如下:

客户端                          服务器
  │ ① ClientHello:我支持 TLS1.3、这些加密算法 ──→│
  │  ←─ ② ServerHello:我们用它;并发送【数字证书】 │
  │ ③ 验证证书(CA 签名 + 域名)                    │
  │ ④ 用证书里的公钥协商出一个"会话密钥"(细节:     │
  │    客户端生成预主密钥,用服务器公钥加密发过去)──→│
  │  ←─ ⑤ Finished:我也准备好了                  │
  │ ⑥ Finished:开始用会话密钥加密通信              │
  └───────────────────────────────────────────→
之后的所有 HTTP 请求/响应都用【会话密钥】对称加密传输

关键点:握手阶段用非对称加密传递秘密(慢但安全),正式通信阶段用对称加密(会话密钥)加密海量数据(快)。两种加密在这里配合登场。

⚠️ 常见错误

  1. 以为 HTTPS 全程都用 RSA:只有密钥协商阶段用非对称,传输阶段用对称的会话密钥。
  2. SSL 与 TLS 混淆:SSL 是老版本、已不推荐;现在用的是 TLS,TLS 1.2 / 1.3。
  3. 以为 HTTPS 只是"HTTP 加把锁"这么简单:涉及证书校验、密钥协商、加密套件协商三件事。
  4. 端口:HTTPS 443,别写 80。

7.5 防火墙:小区的门卫

防火墙(firewall)是部署在网络边界(内网与外网之间)的门卫,根据预设规则决定放行还是拦截数据包。它保护"内网"不被外部恶意访问,也能限制内网向外访问。

常见类型(从"粗"到"细"):

类型 检查到哪一层 特点
包过滤防火墙 网络层/传输层(IP、端口、协议) 快,按五元组放行/丢弃
状态检测防火墙 网络层/传输层 + 连接状态 能识别"这是合法连接的后续包"
应用层代理防火墙 应用层 最细,能识别 HTTP 内容,慢

包过滤的典型规则:只放行从内网发起的连接及其响应,禁止外部主动连入内网的 22 端口(SSH)。状态检测比普通包过滤聪明的地方在于:它记录连接状态,只放行"会话中"的合法回包。代理则替内网用户转发请求,内网主机对外不可见。

⚠️ 常见错误

  1. 把防火墙和杀毒软件混淆:防火墙管"放行/拦截网络流量",杀毒软件管"主机上的病毒"。
  2. 以为防火墙能防一切:防火墙拦不住来自内网内部的攻击,也拦不住已被加密封装的可疑流量。
  3. 类型层级记反:包过滤最粗、代理最细;代理慢但查得深。

7.6 常见攻击

中间人攻击(MITM)

中间人攻击(Man-In-The-Middle)指攻击者插入通信双方之间,双方都以为自己在和对方说话,其实都在和中间人说话。中间人可以窃听(读内容)、篡改(改内容)、甚至冒充(伪造身份)。对策:加密 + 证书验证(HTTPS),让中间人"看不懂、改不了、装不成"。

A ──信─→ [M 中间人,偷看/改写] ──信─→ B
   A 以为在跟 B 通信,B 以为在跟 A 通信

DDoS 攻击

DDoS(Distributed Denial of Service,分布式拒绝服务)通过大量被控制的机器(僵尸网络)同时向目标发送海量请求,把服务器的带宽、连接数、CPU 打满,让正常用户访问不到——破坏的是 CIA 里的"可用性"。单机发起的叫 DoS,DDoS 是"分布式"(许多台一起)。防御思路:流量清洗、限速、CDN 分摊、封禁恶意 IP。

SQL 注入

SQL 注入(SQL Injection)利用程序把用户输入直接拼接进 SQL 语句的漏洞,让数据库执行攻击者构造的恶意语句。比如登录框输入:

用户名:admin' --
密码:随便
拼接成的 SQL:SELECT * FROM users WHERE username='admin' --' AND password='随便'

-- 是 SQL 注释,把后面的密码判断"注释掉"了,于是攻击者以 admin 身份直接登录。防御核心:参数化查询(占位符),永远不要字符串拼接 SQL。

补充两个概念

  • 暴力破解(brute-force):逐个试密码。
  • XSS(跨站脚本):把恶意脚本注入到网页里,在别人浏览器中执行。

⚠️ 常见错误

  1. DDoS 破坏的是可用性,不是机密性——目标是"让服务不可用"。
  2. SQL 注入的根因是"字符串拼接 SQL",不是数据库本身不安全。
  3. 中间人攻击的前提是对方没验证证书;HTTPS + 证书校验能有效拦截。
  4. 不要把 DoS 和 DDoS 完全等同:DDoS 是分布式发起,更难以防御。

7.7 本讲小结

网络安全 = 围绕 CIA 三元组。对称加密管快、非对称加密管钥匙分发、哈希管完整性、数字签名管防抵赖、证书 + CA 管信任、TLS/HTTPS 把它们组合落地、防火墙守边界、各种攻击提醒我们这些技术为什么存在。

🧠 记忆口诀

  • CIA:机密(Confidentiality)、完整(Integrity)、可用(Availability)。
  • 钥匙方向:加密用对方公钥,签名用自己私钥——"加密给人看,签名给自己证"。
  • 哈希是指纹:不可逆、定长、一变全变。
  • 握手分两段:非对称传密钥,对称传正文。
  • 攻击三连:MITM 插中间,DDoS 塞满门,SQL 注入改查询。

📌 中英术语表(本讲)

中文 English 说明
网络安全 network security 保护网络与数据的机密性/完整性/可用性
机密性 confidentiality 内容只给该看的人看
完整性 integrity 内容未被篡改
可用性 availability 服务始终可用
对称加密 symmetric encryption 一把密钥加解密
DES Data Encryption Standard 56 位密钥,已不安全
AES Advanced Encryption Standard 128/192/256 位,当前主流
非对称加密 asymmetric encryption 公钥/私钥一对
公钥 / 私钥 public key / private key 公开 / 保密
RSA RSA 经典非对称算法,基于大数分解
哈希 hash 单向指纹函数,不可逆
数字签名 digital signature 私钥签、公钥验,防篡改防抵赖
数字证书 digital certificate CA 为公钥+身份盖章
证书颁发机构 Certificate Authority (CA) 签发证书的可信第三方
信任链 chain of trust 根证书 → 中间 CA → 网站证书
TLS / SSL Transport Layer Security 传输层加密协议
握手 handshake 协商算法与密钥的过程
会话密钥 session key 本次会话用的对称密钥
防火墙 firewall 网络边界的访问控制
包过滤 packet filtering 按 IP/端口/协议放行
状态检测 stateful inspection 结合连接状态判断
代理防火墙 proxy firewall 应用层代转发
中间人攻击 man-in-the-middle (MITM) 插在双方中间窃听篡改
分布式拒绝服务 DDoS 大量机器同时攻击使服务瘫痪
SQL 注入 SQL injection 拼接 SQL 语句的漏洞
暴力破解 brute-force attack 逐个试密码
跨站脚本 cross-site scripting (XSS) 在网页中注入脚本

⭐ 本章考点清单

  1. CIA 三元组及各自对应的攻击。
  2. DES / AES 的密钥长度与安全定位。
  3. RSA 的公钥/私钥用途方向:加密 vs 签名。
  4. 数字签名过程:哈希 → 私钥签名 → 公钥验签。
  5. 哈希的性质(不可逆、定长、一变全变)。
  6. 证书的作用与 CA 的信任链。
  7. TLS 握手两步:非对称协商密钥 + 对称传输。
  8. HTTPS 与 HTTP 的区别;端口 443。
  9. 防火墙三类及各自的检查层级。
  10. 中间人、DDoS、SQL 注入的原理与对策。