iT邦幫忙

2026 iThome 鐵人賽

DAY 11
0
Software Development

我是Java工程師,關於密碼學我想懂的不多系列 第 11 篇

Day10 - 對稱金鑰加密系統:串流密碼(Stream Cipher)

  • 分享至 

  • xImage
  •  

一、 什麼是串流密碼? (Stream Cipher)

串流密碼的核心概念是:逐位元 (Bit) 或逐位元組 (Byte) 進行即時加密。

它利用主金鑰 (Key) 與初始向量 (IV / Nonce),透過金鑰流產生器(Keystream Generator)產生與明文等長的「金鑰流 (Keystream,K)」,最後將金鑰流與明文進行 XOR 運算:

 [明文 Plaintext P] ─────┐
                         ├─► (⊕ XOR) ──► [密文 Ciphertext C]
 [金鑰流 Keystream K] ───┘

因為底層運算只有簡單的 XOR,串流密碼的加密速度極快、延遲極低,特別適合處理串流媒體(Voice/Video Call)、即時通訊或硬體資源有限的嵌入式裝置。

二、 同步與自同步串流密碼

根據「金鑰流產生的機制」,串流密碼可分為以下兩類:

1. 同步串流密碼 (Synchronous Stream Cipher)

  • 機制:金鑰流K只依賴密鑰與 IV/nonce(初始化向量 IV,nonce 是「只使用一次的數值」(number used once))。
  • 優點:沒有錯誤傳播問題(Error Propagation)。如果網路傳輸中密文掉了 1 個 bit,只會影響該 bit 解密失敗,不會破壞後續資料的解密。

2. 非同步串流密碼 (Asynchronous Stream Cipher)

  • 機制:金鑰流除了取決於金鑰 $K$,還會 受到先前已產生的密文位元影響 (即引入了反饋機制)。
  • 特性:若傳輸過程遺失位元,解密會暫時出錯,但經過 N 個位元後會自動恢復同步。

三、 金鑰流重用攻擊 (Two-Time Pad Attack)

若在相同密鑰 key 下重複使用相同 IV/nonce,將產生相同金鑰流 S。此時對兩段密文 C1 與 C2 互斥或:
C1 ⊕ C2 = (P1 ⊕ S) ⊕ (P2 ⊕ S) = P1 ⊕ P2
攻擊者就能消去金鑰流,進而推導出明文間的關係(兩次一時性密碼 two-time pad 問題)。
https://ithelp.ithome.com.tw/upload/images/20260925/20128084mczvUZ4F0x.png

四、 常見串流加密演算法:RC4 vs. ChaCha20

1. RC4 (Rivest Cipher 4) —— 歷史演算法(已廢棄)

  • 背景:由 Ron Rivest 於 1987 年設計,曾廣泛應用於 WEP (Wi-Fi)、SSL/TLS 等協定。
  • 破綻:RC4 產生的金鑰流開頭幾個 Bytes 存在微小的統計偏誤 (Statistical Bias)。攻擊者收集大量密文後,能推算出 key 的資訊。
  • 現狀:RFC 7465 已於 2015 年明確宣布禁止在 TLS 中使用 RC4,目前已被各大資安標準淘汰。

2. ChaCha20 —— 現代業界標準

  • 背景:由密碼學家 Daniel J. Bernstein (DJB) 於 2008 年設計(改善自 Salsa20)。
  • 優勢:
  • 純軟體極速:不需要依賴特定 CPU 的硬體加速指令(如 Intel AES-NI),在智慧型手機(ARM 架構)上運算速度遠超 AES。
  • 極高安全性:內部採用 20 輪(Rounds)的 ARX 結構(Addition, Rotation, XOR),目前無任何有效破譯手段。
  • 應用:TLS 1.3、SSH、WireGuard VPN、Android 系統預設加密協定。

Reference

  • 密碼學導論課程 - 陳君明教授

上一篇
Day09 - Java 的密碼學地圖:JCA / JCE / Provider
下一篇
Day11 - 對稱金鑰加密系統:串流密碼ChaCha20的Java實戰
系列文
我是Java工程師,關於密碼學我想懂的不多 共 17 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言