什么是一次性密码本?加密原理及其与登录 OTP 的区别
了解一次性密码本如何使用异或运算和全新的随机密钥、完美保密性的含义、密钥复用的风险,以及它与登录 OTP 的区别。

一次性密码本(one-time pad)使用与消息等长的秘密随机密钥加密消息,每次加密都使用全新的密钥材料。在严格的条件下,攻击者即使看到密文,也无法获得关于消息的额外信息。
缩写 OTP 也可能指登录时使用的一次性口令或验证码。一次性密码本、登录 OTP 和只能打开一次的链接,解决的是不同的问题。
真正的一次性密码本需要哪些条件
在二进制构造中,n 位消息需要 n 位全新且保密的密钥材料:
- 均匀随机地选择密钥:每个 n 位密钥被选中的概率必须相同。
- 密钥的生成必须独立于消息和其他密钥材料。
- 不让观察者获知密钥。
- 每段密钥只能用于加密一条消息。不能将重叠的密钥片段再次用于其他加密。
这些假设是 Mike Rosulek 的一次性密码本章节中安全性证明的基础。容易记忆的短语或重复使用的密钥并不满足这些条件。
一个四位异或运算示例
异或运算写作 ⊕:两个比特相同时结果为 0,不同时为 1。加密时对消息与密钥进行异或,解密时再次使用同一密钥进行异或。
| 步骤 | 运算 | 结果 |
|---|---|---|
| 加密 | 1010 ⊕ 0110 |
1100 |
| 解密 | 1100 ⊕ 0110 |
1010 |
这里的消息是 1010,密钥是 0110,密文是 1100。再次异或会抵消密钥的作用。这个例子只说明数学原理;实际通信还需要安全的密钥管理和身份认证。
完美保密性究竟是什么意思
在 Claude Shannon 原始论文的第 10 节中,完美保密性意味着:观察者得知密文后,对各条可能消息的概率判断保持不变。
这不要求所有消息具有相同的概率。如果一条等长消息原本就更可能出现,看到密文后,其出现概率仍可高于其他等长消息。关键在于密文没有提供新的证据。通常使用的固定长度模型也不隐藏通信时间、参与者或消息长度。
为什么复用密钥会破坏保证
如果两条等长消息使用相同的密钥 K,那么 C1 = M1 ⊕ K,C2 = M2 ⊕ K。将两个密文异或,K 就会被抵消:
C1 ⊕ C2 = M1 ⊕ M2
攻击者由此得知两条消息之间的关系。这并不意味着两段完整明文会自动暴露。但如果攻击者已知一段明文,就能推导出对应的密钥片段,以及另一条消息中相同位置的内容。可预测的消息结构也能帮助攻击者验证猜测。
公式之外的实际限制
双方必须事先共享足够的秘密密钥材料,还要保护其存储、同步使用位置,并防止已用片段再次使用。需要分发的密钥量随着发送的信息量增长;异或运算本身无法解决密钥分发问题。
密码本本身既不提供完整性保护,也不认证发送者身份。改变密文中的一个比特,会改变解密结果中对应的比特,而系统本身不会发出警告。仅靠保密性无法确认是谁发送了消息,也无法确认消息是否遭到篡改。
一次性密码本、登录 OTP 与单次查看链接的区别
| 术语 | 用途 | “一次性”的含义 |
|---|---|---|
| 一次性密码本 | 加密消息内容 | 每段密钥材料只用于一次加密 |
| 登录 OTP | 认证用户持有某个认证器 | 生成的验证码在有效期内只被接受一次 |
| 单次查看链接 | 限制通过服务访问内容 | 成功解锁一次后,阻止新的内容解锁 |
NIST 认证器指南第 3.1.4 节介绍了利用认证器的秘密值以及时间值或计数器生成的登录 OTP。它们用于认证,并不是用来加密消息的密码本。
LOCK.PUB 在其中起什么作用
LOCK.PUB 的密码保护备忘录提供访问控制,并非一次性密码本。服务器会处理备忘录明文,因此它也不是端到端加密或零知识方案。普通备忘录链接默认可以重复打开;若使用单次查看选项,正确输入密码并成功显示内容一次后,才会阻止新的解锁。限制访问不等于立即删除存储的内容,也不能收回下载文件、截图或其他副本。
实际分享方法可参考秘密备忘录指南。文本加密指南介绍了保护文本时需要考虑的事项。
常见问题
一次性密码本真的无法破解吗?
理想方案在满足假设的前提下提供完美保密性。密钥泄露、片段复用、终端被入侵及消息篡改等问题,仍需分别考虑。
用短种子能生成真正的一次性密码本吗?
安全的伪随机生成器可以把短种子扩展为较长的掩码,并在一定假设下提供计算安全性。但它的输出并不均匀覆盖所有更长的比特串,因此无法提供一次性密码本的完美保密性。
“一次性”是否意味着消息会消失?
对于密码本,它描述的是密钥的使用方式;对于链接,它描述的是访问方式。这两个词本身都不能证明内容已被删除,也不能移除别人已经制作的副本。