从古典密码到现代加密:一文读懂密码学的核心原理与误区

从起源出发,一步步理解古典密码、对称加密、非对称加密、数字签名,并澄清容易被误解的安全概念

密码学 对称加密 非对称加密 数字签名

目录导航

引言

密码学并非计算机时代的产物。早在几千年前,人们就开始思考同一个问题:如何让消息只被想看的人看懂,而被截获也无妨?

从古希腊的密码棒到今天的 AES、RSA,这场攻防战从未停止。本文将带你从起源出发,一步步理解古典密码、对称加密、非对称加密、数字签名,并澄清那些容易被误解的安全概念。

一、起源:古典密码学

1 移位式加密 — 密码棒(Scytale)

古希腊斯巴达人使用一种木棒来加密。方法是:将一条羊皮纸螺旋状缠绕在木棒上,沿轴向书写消息;解开后羊皮纸上只有乱序的字母。收信人需要一根相同直径的木棒才能还原信息。

  • 加密算法:缠绕后书写
  • 密钥:木棒的尺寸(直径/周长)

这就是最早的换位密码——只改变字符顺序,不改变字符本身。

2 替换式加密 — 凯撒密码与码表

替换密码将明文中的每个字符按固定规则映射为另一个字符。最著名的凯撒密码就是向后移动 3 位(A→D,B→E…)。更通用的做法是使用一张随机码表(如 A→X,B→Q…)。

  • 加密算法:字符映射
  • 密钥:码表本身

古典密码都有一个致命弱点:频率分析。语言中字母出现频率相对稳定(英文中 e 最多),只要密文足够长,就能反推码表。

二、现代密码学的两大分支

现代密码学的核心区别:加密的对象不再只是文字,而是任意二进制数据(图片、视频、程序等)。并且,算法设计遵循 Kerckhoffs 原则:算法公开,仅密钥保密。

1 对称加密 — 一把钥匙开一把锁

特点:加密和解密使用完全相同的密钥。

  • 加密:明文 + 密钥 + 加密算法 → 密文
  • 解密:密文 + 密钥 + 解密算法 → 明文
经典算法:
  • DES(56位密钥) – 现已可被暴力破解,不安全。
  • AES(128/192/256位密钥) – 当前主流,安全高效。
  • SM4(中国国密标准)

优点:速度快、能耗低,适合大量数据加密。

缺点:密钥分发困难。通信双方必须提前安全地拿到同一个密钥,若通过网络传输密钥本身,又会陷入"先有鸡还是先有蛋"的困境。

对称加密流程图
明文
+
密钥
+
加密算法
密文
密文
+
密钥(相同)
+
解密算法
明文
同一把密钥完成加密与解密
2 非对称加密 — 公钥与私钥

核心思想:生成一对数学上关联的密钥 — 公钥(public key)和私钥(private key)。

  • 公钥加密 → 私钥解密
  • 私钥签名 → 公钥验证
一个经典比喻:
公钥就像一把打开的锁(谁都可以捡起来锁上),私钥是唯一能打开这把锁的钥匙。任何人用你的公钥把消息锁进箱子,只有你才能用私钥打开。
常用算法:
  • RSA– 可用于加密和签名。
  • ECC(椭圆曲线) – 更短的密钥实现同等安全,如 ECDSA。
  • DSA– 仅用于数字签名,无法加密。它通过牺牲加密功能换来了更快的签名验证速度。
非对称加密的痛点:
  • 性能极差(比 AES 慢几百到上千倍),因此实际应用中通常混合使用:用非对称加密传输一个临时对称密钥,之后用对称加密传输数据(即 TLS/HTTPS 的做法)。
  • 仍受中间人攻击,需要证书和 PKI 体系来保证公钥的真实性。
非对称加密流程图
发送方 Alice
明文
+
Bob的公钥
加密算法
密文
传输密文
接收方 Bob
密文
+
Bob的私钥
解密算法
明文
公钥加密,私钥解密 — 只有私钥持有者能解密

三、数字签名 — 防伪造、防抵赖

1 基本原理

签名不是"加密的逆过程",而是私钥加密(签名),公钥解密(验证)

完整流程:
  1. 发送方计算原文的哈希值(如 SHA-256)。
  2. 用自己的私钥加密该哈希值 → 生成签名。
  3. 将原文 + 签名一起发送给接收方。
  4. 接收方用发送方的公钥解密签名,得到哈希值 H1。
  5. 接收方对收到的原文计算哈希值 H2。
  6. 比较 H1 与 H2 —— 相等则证明:数据未被篡改 + 确实来自私钥持有者。
为什么不是直接加密原文?
因为非对称加密太慢,原文可能很大。哈希后签名既快又安全。
数字签名流程图(优化版)
签名方 (Alice)
原始消息
哈希函数 (SHA-256)
消息摘要 (hash)
+
Alice的私钥
签名算法 (私钥加密摘要)
数字签名
原文 + 签名
验证方 (Bob)
原文
+
签名
计算预期摘要
哈希原文
H2
解密签名
Alice公钥
+
验签
H1
比较 H1 与 H2
验证通过 (完整性+身份可信)
签名验证成功 = 数据未被篡改 + 确实来自私钥持有者
2 不可否认性

由于私钥只有持有者拥有,任何人无法伪造其签名。因此数字签名具有法律效力(类似纸质签名)。

非对称加密 + 数字签名组合流程(优化版)
发送方 Alice
加密 (保证机密性)
原始消息
+
Bob的公钥
非对称加密
密文 C
签名 (保证完整性与身份)
原始消息
哈希
+
Alice私钥
签名生成
签名 S
最终发送: 密文 C + 签名 S
C + S
接收方 Bob
解密
密文 C
+
Bob私钥
非对称解密
原始消息
验签
原始消息
哈希
H2
Alice公钥
+
签名 S
验签
H1
H1 == H2 ?
验证成功
获得:可信且未篡改的明文
组合效果:加密保证机密性(只有Bob能读),签名保证完整性与来源可信(防抵赖)

四、中间人攻击与常见误区

1 非对称加密也怕中间人

假设 Alice 想给 Bob 发消息,但她从未见过 Bob 的公钥。

  • 攻击者 Mallory 可以拦截 Alice 的公钥请求,把自己的公钥发给 Alice。
  • 于是 Alice 用 Mallory 的公钥加密了消息,Mallory 截获后用自己的私钥解密,再重新用 Bob 的公钥加密转发给 Bob。
  • 双方全程毫无察觉。

这就是为什么需要证书颁发机构(CA)PKI—— 用数字证书保证你拿到的公钥确实属于对方。

2 签名+加密时的一个常见疑惑

你可能会想:"我签名一小段固定字符串(比如'我是Alice')就能证明身份,为何还要对整个数据的哈希做签名?"

问题在于:签名可以被截取并重放。
Mallory 可以将 Alice 之前签名的"我是Alice"附在自己伪造的恶意数据后面一起发给 Bob。Bob 验签通过,却以为恶意数据来自 Alice。
解决方案:签名必须与原文内容绑定 —— 对原文的哈希签名,确保签名仅对这条具体消息有效。

你的推理方向是对的:签名数据必须和原文强关联,否则无法防止重放和嫁接攻击。

五、破解思路 — 攻击者如何下手?

1 对称加密的暴力破解

攻击者需要一对 (明文,密文)

然后逐个尝试所有可能的密钥:用候选密钥加密明文,看是否等于已知密文。

  • DES(56位):最大密钥空间约 7.2×10¹⁶,专用硬件可数小时内穷举。
  • AES-256:密钥空间 2²⁵⁶,穷举不可能(宇宙年龄都不够)。
2 非对称加密的破解

攻击者只需要公钥,就可以构造任意多个(明文,密文)对(自己选明文,用公钥加密)。

然后尝试穷举私钥空间。

例如 RSA-2048 的私钥空间巨大,无法直接穷举。真正威胁是数学攻击(如整数分解、离散对数)或量子计算(Shor 算法)。

3 当前公认的安全底线
  • 对称加密:AES-128 及以上
  • 非对称加密:RSA-2048 或 ECC-256 及以上
  • 哈希函数:SHA-256 及以上

六、总结与对照表

类型 密钥关系 速度 主要用途 安全弱点
对称加密 加密=解密 极快 大量数据加密 密钥分发困难
非对称加密 公钥加密,私钥解密 密钥协商、数字签名 性能差、怕中间人
数字签名 私钥签名,公钥验签 中等(对哈希操作) 身份认证、防篡改 需要 PKI 保证公钥真实性

密码学的历史就是一部不断假设攻击者能力、并设计更坚固防御的历史。从密码棒到量子抗性密码,唯一不变的是那句古老的忠告:不要自己发明密码算法,使用经过全世界密码学家公开检验的标准方案。

附:椭圆曲线的通俗解释

私钥是一个随机数(起点),公钥是从起点开始、按照椭圆曲线算法"跳"一定次数后到达的终点。从起点到终点很容易(正向运算),但从终点几乎无法反推出你跳了多少次 —— 这就是椭圆曲线离散对数难题