唯一在理论上不可破译的密码。按位异或加密、一次性密码本,以及它为什么至今仍是保密的黄金标准。
每一种古典密码(在现代密码系统兴起之前)都有一个弱点:它依赖确定性的算法和重复的密钥。统计分析(卡西斯基方法、重合指数)迟早会揭示出消息。
从根本上克服这一弱点的尝试,就是维尔南密码:加密建立在消息与密钥序列的按位组合之上。但真正重要的不是变换本身,而是密钥的性质。完美保密(绝对保密)只在这种方案的一个特例中才能实现——一次性密码本:密钥真正随机、长度不小于消息、由相互独立的元素组成、严格保密,并且只使用一次。如果所有这些条件都满足,就无法从密文推断出原始消息:对攻击者来说,每一种可能的明文看起来都同样可能。
1949 年,克劳德·香农从数学上证明了一次性密码本——采用理想密钥的维尔南密码——的绝对安全性。据推测,这种方法用于关键的军事或外交通信,那里需要绝对的、可证明的安全性(包括抵御量子计算机)。
这种密码的核心是一个简单而巧妙的运算:异或(XOR)。消息和密钥都表示为比特串,消息的每一位都按照异或规则与密钥中对应的位组合。
| 消息比特(P) | 密钥比特(K) | 密文(C = P ⊕ K) |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
消息(文本)通过某种编码转换为二进制序列:在维尔南密码诞生的年代,标准是博多码(每个字符 5 位)。游戏中还可以选择 ASCII 和 UTF-8:要加密中文(或俄文),请选择 UTF-8——博多码和 ASCII 只能表示拉丁字母。
生成一个随机比特串,长度与消息相同。每一位都真正随机(0 或 1 的概率各为 ½)。密钥只有发送方和接收方知道,并且只使用一次。
C = P ⊕ K——按模 2 逐位相加。得到的密文可以通过公开信道发送:没有密钥,它看起来就像随机噪声。
例如:消息 101 ⊕ 密钥 011 = 密文 110。
持有同一个密钥的鲍勃把密文与密钥做异或:P = C ⊕ K。由于 (P ⊕ K) ⊕ K = P,原始消息被毫无损失地恢复出来。
H = 72 = 010010001011010111111101 = 253(不可打印字符)11111101 ⊕ K = 1011010101001000 → H在交互式模拟中,你实际上会做什么?
游戏完整地展示了完美保密的原理:你会亲眼看到,没有密钥时密文就像随机噪声,而有了密钥,它立刻变回原始消息。
1917 年,AT&T 的工程师吉尔伯特·维尔南(Gilbert Vernam)为一种密码申请了专利:把电报纸带(5 位博多码)与打孔的密钥纸带做异或。后来,约瑟夫·莫博涅(Joseph Mauborgne)提出使用随机密钥;1949 年,克劳德·香农发表了《保密系统的通信理论》,严格证明了一次性密码本是完全安全的密码。
有三个实际问题:
量子物理如何解决为一次性密码本安全传输密钥的问题。
基于热噪声、放射性衰变或量子效应的硬件随机数发生器。
如果一个密钥被使用了两次,密码分析者如何仅凭密文恢复消息(C1⊕C2 = P1⊕P2)。
维尔南的原理如何在 Salsa20、ChaCha20 和 AES-CTR 中延续(生成伪随机密钥流)。
完美保密的严格数学证明,表明密钥的熵必须至少与消息的熵一样大:H(K) ≥ H(M)。
为什么安全地交付长随机密钥仍然是一次性密码本在实际中的主要限制。
维尔南密码在以下文献中有所提及:
现在你已经理解了它的数学基础,正是亲眼看看维尔南密码如何运作的好时机——一位一位地、直观地、互动地!
在模拟中,你可以选择编码、生成随机密钥、逐步加密消息,并观看数据传输的动画。