什么是 Entropy?从热力学到资讯理论、密码学与机器学习

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 在不同领域具有不同的含义:

  1. 热力学

衡量系统的无序程度。

在孤立系统中,熵依热力学第二定律持续增加。

  1. 资讯理论(Shannon)

衡量资讯量与不确定性,

表示讯息平均需要多少位元才能表示。

  1. 密码学

衡量乱数品质,

用于评估金钥、密码、Seed 与 CSPRNG 的安全性。

  1. 机器学习

Cross-Entropy 用于衡量模型预测与真实标签之间的差异,

是现代分类模型最重要的损失函数之一。