加密學的兩大基石——Substitution Cipher(替換密碼)與 Transposition Cipher(換位密碼)——分別對應 Shannon 所定義的「混淆」與「擴散」原則,幾乎所有現代對稱加密演算法都建立在兩者的組合之上。
Substitution Cipher:以替換實現混淆(Confusion)
替換密碼的核心操作是以新符號取代原始符號,使密文與明文之間的對應關係趨於複雜。最經典的範例是 Caesar Cipher,每個字母固定位移 3 位(A → D、B → E)。更進階的 Vigenère Cipher 引入多組金鑰,使相同明文字母在不同位置產生不同密文,大幅增加頻率分析的難度。在現代演算法中,AES 的 SubBytes 步驟即是替換操作的直接體現——透過 S-Box 非線性映射,徹底模糊金鑰與密文之間的統計關聯,達成 Shannon 所定義的混淆目標。
Transposition Cipher:以重排實現擴散(Diffusion)
換位密碼不改變字母本身,而是重新排列其位置,使明文的統計特性均勻擴散至整段密文。典型範例為 Rail Fence Cipher,明文字母依鋸齒型路徑排列後再逐行讀出。另一個常見形式是 Columnar Transposition,將明文填入矩陣後依金鑰指定的列順序讀取輸出。現代演算法中,AES 的 ShiftRows 與 MixColumns 步驟即屬換位與擴散機制——單一明文位元的變動將影響整個區塊的輸出,此即雪崩效應(Avalanche Effect)的來源。
# Substitution: Caesar Cipher (位移 3)
sub = lambda text: ''.join(chr((ord(c) - 65 + 3) % 26 + 65) for c in text)
# Transposition: Columnar (依索引重排)
trans = lambda text, key: ''.join(text[i] for i in sorted(range(len(text)), key=lambda x: key[x % len(key)]))
print(sub("HELLO")) # KHOOR
print(trans("HELLO", "321")) # LHELO
💡 重點整理
- Substitution 改變字母內容,實現混淆,對抗頻率分析攻擊。
- Transposition 改變字母位置,實現擴散,放大明文變動的影響範圍。
- AES 完整結合兩者:SubBytes(替換)+ ShiftRows/MixColumns(換位與擴散)。
- 單獨使用任一方法均存在弱點,組合使用才能抵禦現代密碼分析。
理解 substitution cipher vs transposition cipher 的本質差異,就是理解現代加密設計的思維起點。混淆模糊關聯、擴散放大影響,兩者缺一不可,共同構築堅實的加密防線。
📚 參考文獻
- NIST FIPS 197 — Advanced Encryption Standard (AES):AES 官方規範,完整定義 SubBytes、ShiftRows、MixColumns 操作。
https://csrc.nist.gov/publications/detail/fips/197/final - Claude E. Shannon, Communication Theory of Secrecy Systems (1949):混淆與擴散原則的原始理論來源。
https://ieeexplore.ieee.org/document/6769090 - Christof Paar & Jan Pelzl, Understanding Cryptography:涵蓋古典密碼到現代對
留言
張貼留言