← 网络基础学习第 46 / 55 章进阶45 分钟

模块七 · 网络安全

网络安全与密码学原理

前面七个模块讲的都是"怎么把数据送到"。但从头到尾有一个前提没被检验过:送到的东西,别人能不能看、能不能改、对方到底是不是它声称的那个人? 这是网络安全要回答的三个问题,而且它们需要不同的工具。

本章要解决的问题:前面七个模块讲的都是"怎么把数据送到"。但从头到尾有一个前提没被检验过:送到的东西,别人能不能看、能不能改、对方到底是不是它声称的那个人? 这是网络安全要回答的三个问题,而且它们需要不同的工具。

本章的证据来源:概念讲法参考教材§8.1–8.2,纸书398–409页(PDF417–428页),具体出处见章末。旧稿的命令与数值属于历史转述,相关附件未随当前项目提供,本次没有重新采集或运行原实验;模型计算、协议规则与观察不能互相替代。

先从一个例子理解概念

你发一段私密文字,希望别人不能读,也希望对方能发现它是否被修改。先明确保护目标,再认识密钥和算法。

明文、密文与密钥

明文是待保护内容,密文是加密结果,密钥是算法使用的秘密或相关参数。安全不能依赖把算法名称藏起来。

对称密钥与公私钥

对称机制使用共享秘密;非对称机制使用成对的公钥与私钥。具体算法提供加密还是签名等能力,要按方案理解,不能只凭名称判断。

三个目标,三套不同的工具

「网络安全」听起来是一件事,其实是三个独立的目标:

目标要防什么靠什么实现
机密性别人偷看内容加密
完整性别人偷偷改动散列 / 消息鉴别码
身份认证对方冒充别人签名 / 挑战应答

它们必须分开对待,因为解决其中一个不等于解决另一个:

这一章讲加密(机密性),下一章讲完整性与签名。

第一类工具:对称加密

对称加密的意思是:加密和解密用同一把密钥。

明文 ──[ 密钥 K 加密 ]──→ 密文 ──[ 同一把 K 解密 ]──→ 明文

它的最大优点是快。 本机实测(AES-256-GCM 加密 1 MB):

0.0009 秒/次   →   吞吐约 1075.2 MB/s

每秒能加密一个 GB。 这个速度足够跟上现代网络带宽,甚至比磁盘还快。

但它有一个致命的问题:密钥怎么给对方?

A 想给 B 发加密消息
  → A 需要一个只有 A 和 B 知道的密钥
  → A 怎么把这个密钥安全地告诉 B?
  → 如果直接把密钥发过去,被截获了怎么办?
  → 如果用加密的方式发密钥,那加密密钥的密钥又从哪来?

这是一个死循环,叫"密钥分发问题"。 它是对称加密在开放网络(比如互联网)上无法单独使用的原因 —— 你和一台陌生服务器之间没有任何共享的秘密可作为起点。

第二类工具:公钥加密

公钥加密解决的就是这个死循环。 它不用一把密钥,而是一对:

密钥谁持有用途
公钥公开(谁都能拿)用它加密
私钥只有自己用它解密

关键性质:用公钥加密的东西,只有对应的私钥能解开。

于是密钥分发问题消失了:

服务器把公钥公开(贴在网页上、写在证书里都行)
客户端拿到公钥 → 用它加密数据 → 只有服务器的私钥能解开
中间人拿不到公钥对应的私钥,所以解不开

不需要事先共享任何秘密 —— 这就是它革命性的地方。

实测:那为什么不干脆全用公钥加密?

因为两个硬限制,而且都不是"优化一下就能解决"的。

本机实测(同一台机器、同一段代码,只换算法):

AES-256-GCM(对称)RSA-2048(公钥)
加密 1 MB 耗时0.0009 秒2.11 秒
吞吐1075.2 MB/s0.4737 MB/s
倍数差—约 2270 倍

差了三个多数量级。 原因在数学结构:

运算核心复杂度
AES位运算、查表、异或线性,硬件里有专门指令
RSA大数模幂(上千位的乘法和取模)远高于线性

这不是实现得好不好的问题,是这两种数学结构的固有差别。

第二个限制更彻底:长度

RSA-2048 + OAEP 单次可加密的最大明文:214 字节

214 字节。 连一个 HTTP 请求头都装不下,更别说文件。

这个上限也是数学上的:RSA 单次运算只能处理小于模数的一段数据,而填充(OAEP)还要占掉一部分空间。

所以"用公钥直接加密文件"在物理上不可行 —— 不是慢,是根本装不下。

混合加密:唯一的出路

两个限制合起来,只剩一种可行的做法:

① 用公钥加密【一小段数据】—— 具体说,就是一个对称密钥
② 用那个对称密钥去加密【真正的内容】

这叫混合加密。 它把两者的优点各取一半:

环节用什么为什么
协商密钥公钥加密解决"事先没有共享秘密"的问题
传输数据对称加密快 2270 倍,而且没有长度限制

这就是 HTTPS 握手里发生的事(下一章《TLS 深入》会看到具体过程),也是几乎所有安全协议的做法。

第三类工具:散列

散列(哈希)不是加密 —— 它单向、不可逆,把任意长度的输入压成固定长度的输出。

它的核心性质是"雪崩效应":改动输入的任何一个比特,输出会面目全非。

本机实测(SHA-256):

原文   :The quick brown fox jumps over the lazy dog
SHA-256:d7a8fbb307d7809469ca9abcb0082e4f8d5651e46d3cdb762d02d0bf37c9e592

改后   :The quick brown fox jumps over the lazy doh      ← 只改了最后一个字母
SHA-256:631386c0ac66eafac3a28dbe68a76c6cbc0ba6382011481d59e6795243499196

两个输出的差异:256 位里有 131 位不同(约 51%)

51% —— 理想值是 50%。 改一个字母,输出一半的位翻转了。

和第五模块的校验和对照一下

这个对比特别有说明力:

Internet 校验和(模块五实测)SHA-256(本章实测)
改一个比特能发现能发现
交换两个字段完全查不出来面目全非
+1 / −1 配平完全查不出来面目全非
插入全零字完全查不出来面目全非
为什么核心是求和(对顺序不敏感)核心是混淆与扩散(每一位都影响全局)

散列本身不提供完整性保证(攻击者改完数据重算一遍散列就行了)。它要配合密钥才能变成完整性工具 —— 那就是下一章的内容(MAC 与数字签名)。

三类工具的分工

工具提供什么速度关键限制
对称加密机密性快(1075 MB/s)需要事先共享密钥
公钥加密密钥分发、数字签名的基础慢(0.47 MB/s),且单次 ≤ 214 字节只能处理极短数据
散列完整性的基础很快本身不带密钥,不能单独防篡改

它们不是三选一,而是配合使用:公钥建立信任 → 对称加密传数据 → 散列保证数据没被改。HTTPS 三者全用。

实测:一条真实 TLS 连接的证书信息

顺带读了一条真实连接的证书(本机连接 www.cloudflare.com:443):

协议:     Tls13
密码套件: Aes256 / 256 位
主体:     CN=www.cloudflare.com
签发者:   CN=WE1, O=Google Trust Services, C=US
有效期:   2026-10-13 ~ 2027-01-11
签名算法: sha256ECDSA

这张证书里有几个值得注意的细节:

字段值说明
协议TLS 1.3当前最新版本
密码套件AES-256对称加密 —— 印证了上面"数据用对称加密传"的结论
签发者Google Trust ServicesCloudflare 的证书由 Google 的 CA 签发(不一定是自己的 CA)
有效期90 天现代实践倾向于用短周期证书
签名算法ECDSA + SHA-256用的是椭圆曲线签名,不是 RSA

注意"证书签名算法是 ECDSA"和"数据加密是 AES-256"这两件事 —— 它们对应上面表格里的两类不同工具:签名用公钥类算法(这里选了 ECDSA),数据用对称加密。

常见误解

误解一:「用了加密就安全了」

只解决了三个目标里的一个。 加密保证机密性(看不到内容),但不保证完整性(内容可能被改坏而你不知道)和身份认证(你可能正在和一个冒充者说话)。 三者需要不同工具:加密管机密性,散列/MAC 管完整性,签名/挑战应答管身份。

误解二:「公钥加密比对称加密慢,但慢得不多」

本机实测差约 2270 倍(1075 MB/s vs 0.47 MB/s)。这是三个多数量级的差距,由数学结构决定(AES 是位运算,RSA 是大数模幂),不是优化能追上的。

误解三:「可以用公钥直接加密文件传过去」

物理上不可行。 本机实测 RSA-2048 + OAEP 单次最多加密 214 字节 —— 这是数学上的长度上限,不是实现限制。连一个 HTTP 请求头都装不下。 所以只能走混合加密:公钥加密一小段(对称密钥),对称密钥加密内容。

误解四:「散列就是加密的逆运算」

不是。 散列是单向的 —— 没有"解密"这一步,它是把任意长度压成固定长度(SHA-256 永远是 256 位)。 它的用途不是保密,而是"指纹":用来判断数据有没有变。想保密必须用加密,散列做不到保密(它不还原原文)。

误解五:「散列能防篡改」

单独用不能。 攻击者改完数据之后,重算一遍散列一起发给你就行了 —— 你验证通过,但数据是假的。 要防篡改必须把散列和密钥结合起来(MAC 或数字签名)。这就是下一章的内容。

本章小结

结论类型
网络安全有三个独立目标:机密性、完整性、身份认证标准
解决其中一个不等于解决另一个(如加密不保证未被篡改)标准
对称加密用同一把密钥,速度快标准
实测:AES-256-GCM 加密 1 MB 耗时 0.0009 秒(约 1075.2 MB/s)实测
对称加密的死结是密钥分发:没有安全的起点就无法安全地交换密钥标准
公钥加密用一对密钥,解决了密钥分发问题标准
实测:RSA-2048 加密 1 MB 约需 2.11 秒(0.4737 MB/s),比 AES 慢约 2270 倍实测
实测:RSA-2048 + OAEP 单次最大明文仅 214 字节实测
实测:生成 RSA-2048 密钥对耗时 0.352 秒实测
由以上两条限制推出:只能用混合加密(公钥协商密钥 + 对称加密数据)推理
散列是单向的、定长的,用途是指纹而非保密标准
实测:SHA-256 改动一个字符导致 256 位中 131 位(约 51%)不同实测
与 Internet 校验和对比:校验和对结构性改动无感,散列则面目全非实测 + 对照
散列本身不提供完整性保证,必须与密钥结合(MAC / 签名)标准
实测:真实 TLS 连接使用 TLS 1.3 + AES-256,证书签发者为 Google Trust Services,有效期 90 天实测
证书里的"签名算法"与"数据加密算法"是两类不同工具的体现推理

自测题

7 题 · 先自己答,再展开对照

  1. 网络安全的三个目标是什么?为什么"加密了"不等于"安全了"?
    机密性(别人看不到)、完整性(别人改不了)、身份认证(对方确实是它声称的那个)。
    因为它们是独立的:加密了内容只保证"看不到",但攻击者仍可以把密文改坏 —— 接收方解密后得到一段被篡改的数据可能毫无察觉。同样,验证了身份也不代表内容保密。
    解决其中一个不等于解决另外两个,所以需要不同的工具。
  2. 对称加密的最大优点和最大问题分别是什么?
    优点:快。 本机实测 AES-256-GCM 约 1075 MB/s,比磁盘还快。
    问题:密钥分发。 你和对方必须事先共享一把密钥,但在开放网络上怎么安全地把它给对方? 直接发明文会被截获;用加密发又需要另一把密钥 —— 这是个死循环。所以对称加密无法单独用在陌生双方之间。
  3. 公钥加密解决了什么问题?它为什么能解决?
    它解决了"密钥分发"这个死循环。 因为公钥可以公开传播,不需要事先共享任何秘密:服务器公开公钥,客户端用它加密,只有服务器的私钥能解开。
    中间人拿不到私钥,所以解不开 —— 这样就建立起了安全的通信起点,不需要任何预先的共享秘密。
  4. 本机实测 AES 和 RSA 的速度差约多少倍?这个差距能通过优化消除吗?为什么?
    约 2270 倍(AES 1075 MB/s vs RSA 0.47 MB/s,即三个多数量级)。
    不能通过优化消除,因为差距来自数学结构的固有差别:AES 的核心是位运算和查表(线性),RSA 的核心是大数模幂(上千位的乘法和取模)。这是两种不同数学操作的量级差异。
  5. RSA-2048 单次能加密多少字节?这个限制带来什么后果?
    214 字节(RSA-2048 配合 OAEP 填充)。
    后果:连一个 HTTP 请求头都装不下,"用公钥直接加密文件"在物理上不可行 —— 不是慢的问题,是根本装不下。所以只能用公钥加密一小段数据(一个对称密钥),再拿那个密钥去加密真正的内容。
  6. 什么是混合加密?为什么要这样设计?
    混合加密 = 用公钥加密协商出一个对称密钥,然后用对称密钥加密真正的数据。
    为什么要这样:公钥解决了"事先没有共享秘密"的信任问题,但慢且长度受限;对称加密快且无长度限制,但需要事先有共享密钥。混合加密让公钥负责建立信任、对称加密负责传数据,各取所长。
    HTTPS 握手就是这么做的。
  7. 本机实测 SHA-256 改动一个字符后有 51% 的位不同。这个性质和第五模块的 Internet 校验和有什么本质区别?
    本质区别在"对结构性改动是否敏感"。
    本教程第五模块实测过:Internet 校验和对交换两个字段、一个 +1 一个 −1、插入全零字这三类改动完全查不出来,因为它的核心是求和(对顺序不敏感、只关心总和)。
    而散列的设计目标就是扩散:改动任何一位都让输出一半的位翻转(本机实测 51%),攻击者无法通过保持某种结构不变来蒙过去。
    这就是"防噪声"和"防篡改"的区别 —— 校验和是为随机传输错误设计的,散列是对抗有意构造的。

参考资料与适用范围

  • 《计算机网络:自顶向下方法(原书第8版)》§8.1–8.2,纸书398–409页(PDF417–428页):本章概念与机制的对应教学章节,引用时需保留模型与版本条件。
  • 教材作者配套教学资源入口:网站目前显示的教材版本与用户提供的第8版可能不同,页码以本章列出的中文第8版为准。

修订核对日期:2026-10-13。本次补充概念入口与教材出处;旧稿的具体数值为历史观察,未重新实测。相关脚本和完整日志未随当前项目提供,不能仅凭转述断言实验已复核,也不据此断言数据造假。

正文源自 m7-01-网络安全与密码学原理.md · 共 13 节 · 7 道自测题