National Central University
Uedu Main Site
Explore Uedu
Student Console
Register as Member/Login
Research Informed Consent Center
Survey Center
Educational Big Data Challenge
Claim or create a course
Try an AI Scenario Task
Support & Messages
Uptime Data

UeduGPTs

--

Jupyters

3

Local AI

--

Uedu Code

--

中央大學 AQI 78 24°C PM2.5 18
AI Reply Desktop Notifications

Show a desktop notification when the AI TA finishes replying

Chat Message Notifications

Notify me when classmates post messages in the forum

Sound notification

Play an alert sound whenever there is a new notification

Unit 03

對稱與非對稱加密

金鑰交換、數位簽章與中間人攻擊
Interaction 35 minute(s)

Learning Objectives

  • 說明對稱加密的用途,以及金鑰分發的困難
  • 由程式實際計算的結果,說明 ECB 模式會洩漏明文的結構
  • 說明公鑰加密與數位簽章的差別
  • 以小數字完成 Diffie-Hellman 金鑰交換,並說明中間人攻擊為什麼需要憑證才能防範

對稱加密與金鑰分發

學校要把成績檔傳給各系辦公室,路途中經過的網路設備都可能看到內容。第 2 課的雜湊無法解決這個問題,因為收件人需要還原原文,這時需要加密。

對稱加密以同一把金鑰加密與解密,速度快,適合大量資料。目前的主流標準是 AES(FIPS 197),區塊長度 128 位元,金鑰長度 128、192 或 256 位元。本課不討論 AES 的內部運算,實務上使用經過驗證的函式庫即可。

對稱加密的難題在於金鑰分發:雙方必須先共有同一把金鑰,而傳送金鑰本身就需要安全的通道。規模也是問題:若 100 個人兩兩都要有獨立的金鑰,共需要 100 × 99 ÷ 2 = 4,950 把。

AES 一次只處理一個區塊,處理長資料的方式稱為工作模式。最直接的作法是把資料切塊後各自加密,稱為 ECB。下方的練習以瀏覽器提供的 AES 真正加密一張圖,比較 ECB 與 CBC。

互動練習:ECB 與 CBC 的密文

每個像素一個位元組,每 16 個像素是一個 AES 區塊。密文的位元組直接以灰階畫出。crypto.subtle 沒有提供 ECB,因此這裡以全 0 初始向量的 CBC 逐區塊計算,第一個輸出區塊與 ECB 的結果相同。

公鑰加密與數位簽章

OWASP 不建議使用 ECB,並建議優先採用同時提供完整性保護的已驗證模式,例如 GCM 與 CCM。CBC 能隱藏重複結構,但本身不能偵測竄改。

非對稱加密使用一對金鑰:公鑰可以公開,私鑰由持有者保管。兩把金鑰的用途依方向而不同:

用途 使用的金鑰 達成的效果
公鑰加密 以收件人的公鑰加密,收件人以私鑰解密 只有收件人能讀取
數位簽章 以寄件人的私鑰簽章,任何人以公鑰驗證 確認訊息來自私鑰持有者,且未被更動

數位簽章不提供機密性:訊息本身仍然可以被任何人讀取。實務上會先對訊息計算雜湊值,再對雜湊值簽章。

非對稱運算遠比對稱運算慢,所以常見的作法是混合式:以非對稱技術建立對稱金鑰,再以對稱加密傳輸資料。RSA 金鑰的長度至少應有 2048 位元;下方練習的小數字只用於說明流程。

互動練習:數位簽章

左側是寄件端,右側是收件端。收件端一律以 Alice 憑證上的公鑰驗證。數字由程式以 BigInt 計算。

Diffie-Hellman 金鑰交換

Diffie-Hellman 金鑰交換讓雙方在公開的通道上算出一把共同的金鑰,而金鑰本身從未經過通道傳送:

  1. 雙方公開約定大質數 p 與底數 g
  2. Alice 選祕密值 a,送出 A = g^a mod p;Bob 選祕密值 b,送出 B = g^b mod p
  3. Alice 計算 B^a mod p,Bob 計算 A^b mod p;兩者都等於 g^(ab) mod p
p, g = 23, 5
a, b = 4, 3               # 雙方各自的祕密值,不傳送
A = pow(g, a, p)          # 4
B = pow(g, b, p)          # 10
print(pow(B, a, p), pow(A, b, p))   # 雙方算出相同的金鑰(18 18)

觀察者看得到 p、g、A、B。要算出金鑰,目前已知最有效的途徑是由 A 反推 a(或由 B 反推 b),這稱為離散對數問題。當 p 夠大時,以現有的電腦沒有有效率的解法。下方練習先以小數字親手計算,再比較不同大小的 p。實際系統使用的有限體群組至少 2048 位元(RFC 7919),或是橢圓曲線群組(如 X25519)。

互動練習:小數字 Diffie-Hellman

這是教學用的小數字,實際系統不可使用。先完成計算,結果才會顯示在下方三個欄位中。

中間人攻擊與憑證的作用

Diffie-Hellman 能抵抗只會監聽的觀察者,但它沒有驗證對方的身分。能夠修改通訊內容的攻擊者 Mallory,可以分別與兩端進行金鑰交換:她對 Alice 假裝成 Bob,對 Bob 假裝成 Alice,雙方都以為金鑰交換已經成功。這稱為中間人攻擊(man-in-the-middle)。

防範方式是讓公開值帶有可驗證的簽章。Bob 以私鑰對公開值簽章,Alice 以 Bob 的公鑰驗證。問題接著變成:Alice 如何確認手上的公鑰確實屬於 Bob。憑證由受信任的機構簽署,把名稱與公鑰綁在一起,下一課討論這條信任鏈。TLS 1.3 的 CertificateVerify 訊息以私鑰對交握內容簽章,證明伺服器擁有憑證對應的私鑰。

本課的模擬環境。 下方的中間人情境完全在瀏覽器內計算,人物與資料都是虛構的,不會攔截任何真實的通訊。對未獲授權的網路進行攔截可能觸犯法律(第 1 課)。

互動練習:中間人與簽章驗證

p = 1019、g = 2。簽章使用小數字 RSA(Bob 的 n = 3233、e = 17),所有值都由程式計算。下方的加密以金鑰的低 8 位元做 XOR,只用於觀察誰解得開,不是可用的加密方式。

重點整理

  • 對稱加密(AES)快速,但雙方要先有相同的金鑰
  • 工作模式影響安全性:ECB 會洩漏重複結構;優先使用同時保護完整性的已驗證模式(GCM、CCM)
  • 公鑰加密由公鑰加密、私鑰解密;數位簽章由私鑰簽章、公鑰驗證,提供來源與完整性,不提供機密性
  • Diffie-Hellman 讓雙方在公開通道上算出共同金鑰,能抵抗監聽,但本身不驗證身分
  • 中間人攻擊要靠簽章與憑證防範:驗證公鑰確實屬於對方
  • 不要自製加密演算法或組合方式。 OWASP 對自製演算法的建議只有一句:不要這樣做。應使用維護中的函式庫與標準參數

下一課將這些元件組合起來,說明 TLS 與憑證。

小測驗

1.

同時有對稱與非對稱技術可用時,常見的作法是什麼?

2.

資料庫以 AES-ECB 加密一個只有「已繳費」「未繳費」兩種值的欄位。外洩後,取得資料的人能得知什麼?

3.

數位簽章能提供下列哪一項?

4.

Diffie-Hellman 金鑰交換中,下列何者需要保密?

5.

只使用未經驗證的 Diffie-Hellman,能防範下列何者?

第 1 次作答
這一課完成了!
Next lesson:TLS 與憑證
你目前沒有登入,學習進度只存在這個瀏覽器。 Login 後,進度會跟著帳號,換電腦也看得到。