1. 热力学中的 Entropy
Entropy(熵)一词由 Rudolf Clausius 于 1865 年提出,源自希腊文:
- ἐν(en):内部、其中
- τροπή(tropē):变化、转变
在热力学中,
熵(Entropy,S)用来描述:
系统的无序程度(Disorder)或可能状态的数量。
热力学第二定律指出:
孤立系统的熵只会随时间增加。
例如:
- 冰块放入温水后会融化,熵增加。
- 水不会自行重新结冰,熵不会自发降低。
Boltzmann 著名公式(亦刻于其墓碑):
S = k_B × ln(Ω)
其中:
- S:Entropy(熵)
- k_B:Boltzmann 常数(1.380649 × 10⁻²³ J/K)
- Ω:可能的微观状态数(Microstates)
- ln:自然对数
2. 资讯理论中的 Shannon Entropy
1948 年,
Claude Shannon 在《A Mathematical Theory of Communication》中,
借用了热力学中的「Entropy」概念,
用来衡量讯息的不确定性与资讯量。
Shannon Entropy 定义为:
H = −Σ p × log₂ p
依照对数底数不同,
单位可以是:
- bit(使用 log₂)
- nat(使用自然对数)
Python 范例
import math
def shannon_entropy:
return -sum(
p * math.log2(p)
for p in probabilities
if p > 0
)
fair_coin = [0.5, 0.5]
print
biased = [0.9, 0.1]
print
dice = [1/6] * 6
print
uniform_byte = [1/256] * 256
print
直观理解
- H = 0 bit
完全没有不确定性。
结果早已确定。
- H = 1 bit
相当于一次公平掷硬币。
只需回答一次「是/否」。
- H = 8 bits
完全随机的一个 Byte。
约需 8 次二元问题才能唯一确定。
- H = 128 bits
约等于 UUID v4 的有效随机熵(实际约 122 bits)。
- H = 256 bits
Bitcoin、Ethereum 私钥等级。
即使使用暴力破解,
在宇宙热寂之前也几乎不可能完成。
3. 密码学中的 Entropy
在密码学中,
Entropy 表示:
乱数来源的不可预测程度。
所有 CSPRNG 都必须先收集足够的 Entropy,
才能安全产生乱数。
3.1 作业系统的 Entropy 来源
常见来源包括:
/dev/random(Linux)
- Entropy Pool 不足时会阻塞(Linux 5.6 以前)。
/dev/urandom
- 使用 CSPRNG,不会阻塞,适合大多数应用。
getrandom()
- Linux 3.17 起提供,现代 Linux 最推荐的 API。
CryptGenRandom
- Windows 安全乱数 API。
getentropy()
- macOS、OpenBSD 提供。
3.2 实体 Entropy 来源
作业系统通常会收集:
- Hardware RNG(Intel RDRAND、RDSEED)
- 滑鼠移动时间
- 键盘输入时间
- 磁碟 I/O 抖动(Jitter)
- 网路封包到达时间
- Quantum RNG(量子乱数)
共同建立 Entropy Pool。
Linux Entropy Pool
查看目前 Entropy:
cat /proc/sys/kernel/random/entropy_avail
查看 Pool 大小:
cat /proc/sys/kernel/random/poolsize
使用硬体 RNG:
rngd -r /dev/hwrng
4. 密码的 Entropy
密码强度通常以 Entropy(bit)衡量。
Python 范例:
import math
def password_entropy:
return length * math.log2
例如:
| 密码类型 | Entropy | |----------|---------:| | 8 个小写字母 | 约 37.6 bits | | 8 个大小写字母 | 约 45.6 bits | | 8 个英数混合 | 约 47.6 bits | | 8 个所有可列印字元 | 约 52.6 bits | | 12 个英数混合 | 约 71.5 bits | | Diceware 四个单字 | 约 51.7 bits | | Diceware 六个单字 | 约 77.5 bits |
一般建议:
- 一般使用者:约 80 bits。
- 系统金钥:约 128 bits 以上。
5. 资讯理论中的应用
Shannon Entropy 在资讯科学中有许多重要用途。
资料压缩(Data Compression)
Entropy 决定理论上的压缩下限。
ZIP、GZIP、Brotli 等演算法,
都希望逼近 Shannon Limit。
最佳化编码
例如:
- Huffman Coding
- Arithmetic Coding
高频符号使用较短位元,
低频符号使用较长位元。
Cross-Entropy(机器学习)
Cross-Entropy 是分类模型最常使用的 Loss Function。
它衡量:
模型预测分布与真实分布之间的差距。
KL Divergence
公式:
D_KL(P || Q)
=
Σ P log(P(x)/Q(x))
用来衡量:
两个机率分布之间的差异。
6. Entropy 的四种主要意义
Entropy 在不同领域具有不同的含义:
- 热力学
衡量系统的无序程度。
在孤立系统中,熵依热力学第二定律持续增加。
- 资讯理论(Shannon)
衡量资讯量与不确定性,
表示讯息平均需要多少位元才能表示。
- 密码学
衡量乱数品质,
用于评估金钥、密码、Seed 与 CSPRNG 的安全性。
- 机器学习
Cross-Entropy 用于衡量模型预测与真实标签之间的差异,
是现代分类模型最重要的损失函数之一。