从起源出发,一步步理解古典密码、对称加密、非对称加密、数字签名,并澄清容易被误解的安全概念
密码学并非计算机时代的产物。早在几千年前,人们就开始思考同一个问题:如何让消息只被想看的人看懂,而被截获也无妨?
从古希腊的密码棒到今天的 AES、RSA,这场攻防战从未停止。本文将带你从起源出发,一步步理解古典密码、对称加密、非对称加密、数字签名,并澄清那些容易被误解的安全概念。
古希腊斯巴达人使用一种木棒来加密。方法是:将一条羊皮纸螺旋状缠绕在木棒上,沿轴向书写消息;解开后羊皮纸上只有乱序的字母。收信人需要一根相同直径的木棒才能还原信息。
这就是最早的换位密码——只改变字符顺序,不改变字符本身。
替换密码将明文中的每个字符按固定规则映射为另一个字符。最著名的凯撒密码就是向后移动 3 位(A→D,B→E…)。更通用的做法是使用一张随机码表(如 A→X,B→Q…)。
古典密码都有一个致命弱点:频率分析。语言中字母出现频率相对稳定(英文中 e 最多),只要密文足够长,就能反推码表。
现代密码学的核心区别:加密的对象不再只是文字,而是任意二进制数据(图片、视频、程序等)。并且,算法设计遵循 Kerckhoffs 原则:算法公开,仅密钥保密。
特点:加密和解密使用完全相同的密钥。
优点:速度快、能耗低,适合大量数据加密。
缺点:密钥分发困难。通信双方必须提前安全地拿到同一个密钥,若通过网络传输密钥本身,又会陷入"先有鸡还是先有蛋"的困境。
核心思想:生成一对数学上关联的密钥 — 公钥(public key)和私钥(private key)。
签名不是"加密的逆过程",而是私钥加密(签名),公钥解密(验证)。
由于私钥只有持有者拥有,任何人无法伪造其签名。因此数字签名具有法律效力(类似纸质签名)。
假设 Alice 想给 Bob 发消息,但她从未见过 Bob 的公钥。
这就是为什么需要证书颁发机构(CA)和 PKI—— 用数字证书保证你拿到的公钥确实属于对方。
你可能会想:"我签名一小段固定字符串(比如'我是Alice')就能证明身份,为何还要对整个数据的哈希做签名?"
你的推理方向是对的:签名数据必须和原文强关联,否则无法防止重放和嫁接攻击。
攻击者需要一对 (明文,密文)。
然后逐个尝试所有可能的密钥:用候选密钥加密明文,看是否等于已知密文。
攻击者只需要公钥,就可以构造任意多个(明文,密文)对(自己选明文,用公钥加密)。
然后尝试穷举私钥空间。
例如 RSA-2048 的私钥空间巨大,无法直接穷举。真正威胁是数学攻击(如整数分解、离散对数)或量子计算(Shor 算法)。
| 类型 | 密钥关系 | 速度 | 主要用途 | 安全弱点 |
|---|---|---|---|---|
| 对称加密 | 加密=解密 | 极快 | 大量数据加密 | 密钥分发困难 |
| 非对称加密 | 公钥加密,私钥解密 | 慢 | 密钥协商、数字签名 | 性能差、怕中间人 |
| 数字签名 | 私钥签名,公钥验签 | 中等(对哈希操作) | 身份认证、防篡改 | 需要 PKI 保证公钥真实性 |
密码学的历史就是一部不断假设攻击者能力、并设计更坚固防御的历史。从密码棒到量子抗性密码,唯一不变的是那句古老的忠告:不要自己发明密码算法,使用经过全世界密码学家公开检验的标准方案。
私钥是一个随机数(起点),公钥是从起点开始、按照椭圆曲线算法"跳"一定次数后到达的终点。从起点到终点很容易(正向运算),但从终点几乎无法反推出你跳了多少次 —— 这就是椭圆曲线离散对数难题。