8.4 密码学与安全:完美保密的熵刻度


8.4 密码学与安全:完美保密的熵刻度

本节摘要:复述香农的完美保密定义与"密钥熵不低于消息熵"的代价定理;分析一次一密的地位与不可操作性;用唯一解距离给唯密文攻击画边界;说明现代密码为何转向计算安全性,以及信息论安全在当代的回潮。

保密的信息论定义:密文对明文零信息

香农在一九四九年把密码学也放上了天平。完美保密的定义用互信息写只有一行:密文与明文的互信息为零——观察密文不减少对明文的任何不确定度,看到密文前后,你对明文的猜测概率分布完全不变。这是保密的最强形式:不依赖攻击者的算力,不依赖尚未被攻破的算法,纯粹的信息论断言。

这个定义立刻逼出一条代价定理:完美保密要求密钥的熵不低于明文的熵。直觉论证:若密钥的可能取值太少,同一密文能解出的明文集合就有限,攻击者排除掉大部分候选——密文携带了信息,互信息大于零。要把互信息压到零,密钥必须"富"到能为每个明文配上独立的开锁路径。一次一密(密钥真随机、与明文等长、只用一次)是满足定义的经典构造:任何明文配上合适密钥都能产生观察到的密文,攻击者得不到任何偏向性证据。

一次一密:理论满分,工程零分

一次一密的处境是"信息论优等生、工程困难户"的三重困境。密钥分发困境:能安全传递与明文等长的随机密钥的信道,本身就能直接传明文——保密体系退化成了搬运问题。密钥消耗困境:流量多大,真随机密钥就要多大,海量数据的密钥管理成本随流量线性膨胀。重用致命困境:同一密钥加密两份明文,异或相减后密钥消失、留下两明文的异或——规律立刻渗出,这正是历史上多起密码事故的成因(密钥重用攻击)。真随机数的发生也是工程硬骨头——伪随机发生器的种子熵不足,整个体系的地基就塌了。

# 一次一密的演示与"密钥重用"事故复现 import random random.seed(9) key1 = [random.randint(0, 255) for _ in range(16)] key2 = list(key1) # 事故:重用了密钥 m1 = [ord(c) for c in "attack at dawn!!"] m2 = [ord(c) for c in "attack at dusk!!"] c1 = [a ^ b for a, b in zip(m1, key1)] c2 = [a ^ b for a, b in zip(m2, key2)] x = [a ^ b for a, b in zip(c1, c2)] # 攻击者把两份密文异或 print("两密文异或后还原为两明文异或:") print("零字节数 =", sum(1 for v in x if v == 0), "非零位置 =", [i for i, v in enumerate(x) if v]) print("非零位置对应的明文字母对:", [(m1[i], m2[i]) for i, v in enumerate(x) if v]) # 输出: # 两密文异或后还原为两明文异或: # 零字节数 = 13 非零位置 = [11, 12, 13] # 非零位置对应的明文字母对: [('a', 'u'), ('w', 's'), ('n', 'k')] # 明文相同的部分相互抵消为零, 'dawn' 与 'dusk' 只有三处差异直接渗出 # 攻击者由此剥离密钥, 配合英文统计规律顺藤摸瓜恢复两份明文

演示的要点在最后一行:两份明文只有"dawn"与"dusk"不同,其余位置异或后全部归零——差异像墨水滴进水里一样在密文层渗开。攻击者拿到这一串,配合英文的统计规律(哪几个位置非零、构词约束),恢复两份明文在计算上并不困难。一次一密的满分建立在"绝不重用"的纪律上,而这个纪律在规模化运营中恰恰最难维持。

唯一解距离:给唯密文攻击画条线

放弃完美保密后,香农还留下一把实用的尺子——唯一解距离:唯密文攻击下,能唯一确定密钥所需的最少密文量。近似公式是密钥熵除以语言冗余度:语言冗余越大(明文的可预测部分越多),攻击者需要的密文越少。

# 唯一解距离速算:密钥熵 / 语言冗余度 # 英语的字符熵约 1.5 比特, 等概上限 4.7 比特 → 冗余约 3.2 比特/字符 D = 4.7 - 1.5 for key_bits, name in [(56, "旧式 56 比特密钥"), (128, "128 比特密钥"), (256, "256 比特密钥")]: print(f"{name}: 唯一解距离 ≈ {key_bits / D:.0f} 字符") # 输出: # 旧式 56 比特密钥: 唯一解距离 ≈ 18 字符 # 128 比特密钥: 唯一解距离 ≈ 40 字符 # 256 比特密钥: 唯一解距离 ≈ 80 字符

这把尺子读出一个反直觉的结论:密钥再长,唯一解距离也只是线性地涨。几百比特的密钥,几十上百字符的密文就足以唯一锁定密钥(假设攻击者有无限算力穷举验证)。现代密码的安全不靠"解不唯一",而靠验证唯一解的算力不可负担——穷举空间大到宇宙时间也翻不完。这就是信息论安全(无条件)与计算安全(有条件)的分水岭:现代密码学整体选择了后者,把安全性建立在"困难问题的计算复杂度"上,换来密钥短、可规模化、支持公钥体系的全套工程便利。

代价是对算力进步的暴露:摩尔定律、专用硬件、以及量子算法(对因数分解与离散对数的多项式时间攻击)都会把"不可负担"重新定价——后量子密码的整个研究纲领,就是赶在旧地基贬值前换上新的困难问题。

信息论安全的当代回潮

计算安全的堤坝之下,信息论安全的溪流从未断过,近十年更见涨势。物理层安全利用信道的不对称性(合法接收者比窃听者信道好)实现无须密钥的保密传输——保密容量成为新的容量刻度。量子密钥分发(第 7 章)把"密钥分发困境"交给量子物理,用测量扰动暴露窃听,配一次一密使用即达完美保密——工程上密钥速率受限,但"信息论安全的管道"首次有了可铺设的材质。本地差分隐私(统计数据库场景)也在信息论意义上量化"个体信息泄露量"——熵与互信息继续充当记账货币。安全与信息论的分家正在部分复合:当算力假设动摇时,物理与数学的无条件保证重新变得值钱

两类安全性的对照

两类安全性的对照

熵在密码工程里的另外两个岗位

密钥生成是真随机性的质检关口。密钥的强度直接等于其熵——一个"八位数字口令"的熵不足二十七比特,暴力枚举分分钟;而"二十个随机汉字"的熵轻松过九十比特。工程上的事故常出在熵源虚报:号称随机的源实际被环境因素锁定(时间戳种子、设备序列号派生),熵远低于宣称值。对策是熵估计(对源跑最小熵检验)与多源汇聚(几个弱源异或聚合,熵近似相加——独立弱源的汇聚会变强)。

前向保密是熵消耗纪律的协议化:会话密钥从长期密钥经随机数派生,且每次会话销毁——过去的会话不因未来长期密钥泄露而解密。信息论读法:把"密钥熵不低于要保护消息的熵"这条铁律,拆到每条会话各自结清,而非整个通信生命期共用一个大密钥池。协议设计的这类安排,本质都是在给熵记账——密码学的工程史,一半是与算力赛跑,一半是与熵对账。

本节要点回顾

  • 完美保密 = 密文与明文互信息为零:最强形式的保密,代价是密钥熵不低于明文熵;
  • 一次一密满足定义但工程三困:分发(能传密钥就能传明文)、消耗(密钥量随流量线性涨)、重用致命(双密文异或即暴露两明文异或);
  • 唯一解距离 ≈ 密钥熵 / 语言冗余:密文只要几十上百字符就足以唯一锁定密钥——现代安全靠算力墙而非解的唯一性;
  • 计算安全换来工程性(短密钥、公钥体系、规模化),代价是暴露于算力与算法进步,后量子密码是堤坝加固工程;
  • 信息论安全在回潮:物理层保密容量、量子密钥分发、差分隐私——当算力假设动摇时,无条件保证重新值钱。

应用场四站走完。最后一章回到工程师的工作台:工具箱、守则与前沿——把整套天平交付使用。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U