什麼是 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 用於衡量模型預測與真實標籤之間的差異,

是現代分類模型最重要的損失函數之一。