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 用於衡量模型預測與真實標籤之間的差異,
是現代分類模型最重要的損失函數之一。