第 2 章:密码学基础 —— 信息的"锁"与"钥匙"¶
场景: 你要给朋友寄一封密信,不想让任何人看到内容。你可以把信锁进一个盒子,用钥匙锁上——朋友用同样的钥匙打开(对称加密)。或者,朋友给你一把"公开的锁",你用这把锁锁上盒子——只有朋友的"私人钥匙"能打开(非对称加密)。
2.1 密码学基本概念¶
| 术语 | 含义 | 比喻 |
|---|---|---|
| 明文(Plaintext) | 原始的可读信息 | 没上锁的信 |
| 密文(Ciphertext) | 加密后的不可读信息 | 锁进保险箱的信 |
| 加密(Encryption) | 明文 → 密文的过程 | 把信锁进保险箱 |
| 解密(Decryption) | 密文 → 明文的过程 | 用钥匙打开保险箱 |
| 密钥(Key) | 控制加密/解密的参数 | 保险箱的钥匙 |
| 算法(Algorithm) | 加密/解密的数学方法 | 保险箱的锁芯设计 |
2.2 对称加密¶
核心比喻:对称加密就是"一把钥匙开一把锁"
你和朋友各有一把相同的钥匙。你锁上盒子,朋友用同样的钥匙打开。问题是:怎么安全地把钥匙交给朋友?如果钥匙在传递途中被截获,加密就失效了。
对称加密特点¶
| 特点 | 说明 |
|---|---|
| 密钥数量 | 加密和解密使用 同一密钥 |
| 加密速度 | 快 (适合大量数据加密) |
| 密钥分发 | 困难 (需要安全通道传递密钥) |
| 密钥管理 | n 个人两两通信需要 \(n(n-1)/2\) 个密钥 |
常见对称加密算法¶
| 算法 | 密钥长度 | 分组长度 | 安全性 | 现状 |
|---|---|---|---|---|
| DES | 56 位 | 64 位 | ❌ 已被暴力破解 | 淘汰 |
| 3DES | 112/168 位 | 64 位 | ⚠️ 较弱 | 逐步淘汰 |
| AES | 128/192/256 位 | 128 位 | ✅ 安全 | 当前标准 |
| SM4 | 128 位 | 128 位 | ✅ 安全 | 中国国密标准 |
| ChaCha20 | 256 位 | 流密码 | ✅ 安全 | 移动端常用 |
分组密码工作模式¶
| 模式 | 全称 | 特点 |
|---|---|---|
| ECB | Electronic Codebook | 简单但不安全(相同明文产生相同密文) |
| CBC | Cipher Block Chaining | 前一个密文块影响后一个(需要 IV) |
| CTR | Counter | 将分组密码转为流密码,支持并行 |
| GCM | Galois/Counter Mode | CTR + 认证,提供加密和完整性保护 |
2.3 非对称加密¶
核心比喻:非对称加密就是"公开的锁 + 私人的钥匙"
朋友给你寄了一个打开的锁(公钥),任何人都能拿到这把锁。你用这把锁锁上盒子——之后只有朋友的私人钥匙(私钥)能打开。
公钥可以公开分发,私钥必须严格保密。这完美解决了对称加密的"密钥分发难题"。
非对称加密特点¶
| 特点 | 说明 |
|---|---|
| 密钥数量 | 公钥 (公开)+ 私钥 (保密) |
| 加密速度 | 慢 (比对称加密慢 100~1000 倍) |
| 密钥分发 | 简单 (公钥可以公开) |
| 密钥管理 | n 个人只需 n 对密钥 |
常见非对称加密算法¶
| 算法 | 基于的数学难题 | 密钥长度 | 用途 |
|---|---|---|---|
| RSA | 大整数分解 | 2048/4096 位 | 加密、数字签名 |
| ECC | 椭圆曲线离散对数 | 256 位 | 加密、签名(移动端) |
| SM2 | 椭圆曲线 | 256 位 | 中国国密标准 |
| DSA | 离散对数 | — | 仅数字签名 |
RSA vs ECC
ECC 用更短的密钥达到与 RSA 相同的安全强度:
| 安全强度 | RSA 密钥长度 | ECC 密钥长度 |
|---|---|---|
| 128 位 | 3072 位 | 256 位 |
| 256 位 | 15360 位 | 512 位 |
ECC 特别适合移动设备和物联网设备(计算能力有限)。
2.4 哈希函数¶
核心比喻:哈希就是给文件盖"防伪印章"
你有一份重要合同,你在上面盖了一个防伪印章——印章图案由合同内容唯一决定。哪怕合同只改了一个标点符号,印章图案就完全不同了。
哈希函数就是数学版的"防伪印章"——输入任意长度的数据,输出固定长度的"指纹"。
哈希函数特性¶
| 特性 | 含义 |
|---|---|
| 定长输出 | 无论输入多长,输出长度固定 |
| 单向性 | 从哈希值无法反推出原始数据 |
| 抗碰撞性 | 很难找到两个不同输入产生相同哈希值 |
| 雪崩效应 | 输入微小变化导致输出剧烈变化 |
SHA-256 示例:
输入: "Hello"
输出: 185f8db32271fe25f561a6fc938b2e264306ec304eda518007d1764826381969
输入: "hello" (仅 h 大小写不同)
输出: 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
↑ 完全不同!
常见哈希算法¶
| 算法 | 输出长度 | 安全性 | 现状 |
|---|---|---|---|
| MD5 | 128 位 | ❌ 已被破解 | 仅用于非安全场景(如文件校验) |
| SHA-1 | 160 位 | ❌ 已被破解 | 淘汰 |
| SHA-256 | 256 位 | ✅ 安全 | 广泛使用 |
| SHA-3 | 可变 | ✅ 安全 | 最新标准 |
| SM3 | 256 位 | ✅ 安全 | 中国国密标准 |
2.5 数字签名¶
核心比喻:数字签名就是"亲笔签名 + 按手印"
你在合同上签名并按手印——签名证明是你签的(不可否认),手印证明合同没被替换(完整性)。
数字签名 = 哈希 + 非对称加密:先对消息做哈希,再用私钥加密哈希值。
签名过程:
消息 ──→ 哈希 ──→ 哈希值 ──→ 用私钥加密 ──→ 数字签名
│
└── 附在消息后一起发送
验证过程:
收到消息 + 签名
│
├──→ 消息 ──→ 哈希 ──→ 哈希值 A
│
└──→ 签名 ──→ 用公钥解密 ──→ 哈希值 B
比较 A == B?
├── 相等 → ✅ 签名有效,消息未被篡改
└── 不等 → ❌ 签名无效或消息被篡改
数字证书与 PKI¶
数字签名解决了"消息来自谁"的问题,但"公钥属于谁"还需要数字证书来证明。
| 概念 | 说明 |
|---|---|
| 数字证书 | 由 CA 签发的"公钥身份证",绑定身份和公钥 |
| CA | 证书颁发机构(Certificate Authority),可信第三方 |
| PKI | 公钥基础设施,管理证书的签发、吊销、更新 |
| 证书链 | 根 CA → 中间 CA → 终端证书的信任链 |
2.6 常见考试题型¶
例题 1: 以下属于对称加密算法的是( )。
A. RSA B. AES C. ECC D. SM2
查看答案
答案:B
AES(Advanced Encryption Standard)是对称加密算法。RSA、ECC、SM2 都是非对称加密算法。
例题 2: 哈希函数的"雪崩效应"是指( )。
A. 输入越长输出越长 B. 输入微小变化导致输出剧烈变化 C. 可以反推出原始数据 D. 输出长度不固定
查看答案
答案:B
雪崩效应(Avalanche Effect)是指输入数据的任何微小变化(如改变一个比特)都会导致哈希输出发生剧烈且不可预测的变化,这是安全哈希函数的重要特性。
例题 3: 数字签名使用( )对消息摘要进行加密。
A. 发送方的公钥 B. 发送方的私钥 C. 接收方的公钥 D. 接收方的私钥
查看答案
答案:B
数字签名使用发送方的私钥对消息摘要(哈希值)进行加密。验证时使用发送方的公钥解密。这样只有拥有私钥的发送方才能生成有效的签名。
要点总结¶
- 对称加密:同一密钥加解密,速度快(AES),密钥分发困难
- 非对称加密:公钥加密、私钥解密,速度慢(RSA/ECC),密钥分发简单
- 哈希函数:定长输出、单向、抗碰撞、雪崩效应(SHA-256/SM3)
- 数字签名 = 哈希 + 私钥加密,提供身份认证和完整性保护
- 实际应用:HTTPS 用非对称加密交换密钥,用对称加密传输数据
课后练习¶
-
算法分类 :将以下算法分为对称加密、非对称加密和哈希三类:AES、RSA、SHA-256、3DES、ECC、MD5、SM2、SM3、SM4。
-
签名分析 :描述数字签名的生成和验证过程,说明为什么数字签名能同时保证完整性和不可否认性。
-
真题演练 :HTTPS 协议中,使用( )加密算法安全交换会话密钥,使用( )加密算法加密实际传输的数据。
下一章预告: 密码学解决了"数据怎么保护"的问题。但"你是谁"——身份认证——是安全的第一道门。第 3 章见。