Home
Explore Uedu
Student Console
Register as Member/Login
(2) In future presentations of the research findings, in addition to the course project website and public presentations, your real name and personal information will not appear in this research report. If you are interested in the research results, we can provide you with an executive summary after the study is completed.
問卷中心
Teacher Console
Course Setup
Support & Messages
Uptime Data

UeduGPTs

--

Jupyters

0

Local AI

--

CISOSE26 本地 AI UG26
政治大學 AQI 18 29°C

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

加密與雜湊

加密與雜湊

從咖啡廳 Wi-Fi 刷卡談起,理解對稱/非對稱加密、雜湊函數、數位簽章與 HTTPS 如何協同守護你的祕密

為什麼你能放心在咖啡廳刷卡買咖啡?

想像你在一間咖啡廳,連上免費的公開 Wi-Fi,準備用網路銀行轉帳給朋友。這個無線網路是「共享」的——同一間店裡,任何一台筆電原則上都能側錄空氣中飛來飛去的封包。可是當你按下「確認轉帳」,輸入了帳號、密碼、金額,這些極度敏感的資訊卻能安全抵達銀行伺服器,旁邊那位戴著耳機、螢幕對著你的陌生人即使全程側錄,也只會看到一串毫無意義的亂碼。

這件「在不安全的通道上安全傳遞祕密」的魔法,背後就是密碼學(cryptography)。它不是把資料藏起來不讓人看見(那叫隱寫術),而是讓資料即使被看見,也讀不懂、改不了、冒充不了。本文會帶你理解現代資安的四根支柱:對稱加密、非對稱加密、雜湊(hash)函數與數位簽章(digital signature),並看它們如何在你每天用的 HTTPS 裡協同運作。

加密的基本詞彙:明文、密文、金鑰

我們先建立共同語言。

  • 明文(plaintext):原始可讀的訊息,例如「轉帳 1000 元」。
  • 密文(ciphertext):加密後的亂碼。
  • 金鑰(key):加解密時用的祕密參數,類似一把鑰匙。
  • 加密(encryption) 是「明文 + 金鑰 → 密文」,解密(decryption) 是反向操作。

現代密碼學有一條黃金原則叫 Kerckhoffs 原則:系統的安全性只能依賴金鑰的祕密,演算法本身可以完全公開。換句話說,攻擊者就算拿到整套加密程式碼,只要沒有金鑰,依然破解不了。這也是為什麼專業的加密演算法(如 AES)都是公開、經過全世界密碼學家檢驗多年的——「靠隱藏演算法來保密」反而是危險的迷思。

資訊安全與計算理論概念示意圖

對稱加密:同一把鑰匙鎖門也開門

對稱加密(symmetric encryption) 是最直覺的形式:加密與解密用「同一把」金鑰。就像家裡大門的鑰匙,鎖門開門都是它。

代表演算法是 AES(Advanced Encryption Standard),目前 AES-256(256 位元金鑰)被視為極為安全。對稱加密的最大優點是——它本質上是位元的代換與位移運算,硬體甚至有專用指令集(AES-NI)加速,可以每秒處理數 GB 資料,所以你看 Netflix 串流、下載大檔,背後加密用的幾乎都是對稱式。

但它有一個致命的雞生蛋問題:金鑰怎麼安全地交給對方? 你想跟銀行用同一把 AES 金鑰通訊,可是你和銀行素未謀面,要怎麼在「還沒有安全通道」的情況下,先把這把鑰匙傳過去而不被竊聽?如果你直接把鑰匙透過網路明文傳出去,那竊聽者一樣會拿到,整套加密就形同虛設。這就是著名的金鑰分發(key distribution)問題

非對稱加密:公開的鎖、私藏的鑰

解法是 1970 年代的革命性發明——非對稱加密(asymmetric encryption),又稱公開金鑰密碼學(public-key cryptography)。

它的核心是一對「數學上配對」的金鑰:

  • 公鑰(public key):可以大方公開,貼在網路上給任何人。
  • 私鑰(private key):自己嚴密保管,絕不外洩。

關鍵性質是:用公鑰加密的東西,只有對應的私鑰能解密;反之亦然。 兩把鑰匙在數學上相關,但從公鑰無法在合理時間內反推出私鑰。

一個很好的比喻是「附鎖的信箱」:我把一個開著的掛鎖(公鑰)寄給全世界,任何人想傳祕密給我,就把訊息放進箱子、用我的掛鎖鎖上。鎖一旦扣上,只有握有鑰匙(私鑰)的我能打開——連那個鎖上箱子的人自己也打不開了。

代表演算法是 RSA 與基於橢圓曲線的 ECC(Elliptic Curve Cryptography)。RSA 的安全性建立在「大整數分解很難」:把兩個大質數相乘很容易,但要把乘積反過來分解回原本的質因數,目前沒有已知的高效演算法。

非對稱加密漂亮地解決了金鑰分發問題,但它有個缺點:,比對稱加密慢上百倍甚至千倍,不適合加密大量資料。

動手看一個例子:混合加密

實務上沒人用 RSA 直接加密整部影片。真正的做法是混合加密(hybrid encryption)——用非對稱加密來安全傳遞一把對稱金鑰,之後改用快速的對稱加密傳資料。下面用文字流程示範:

情境:Alice 想安全傳一份大檔案給 Bob

1. Bob 公開他的公鑰 PUB_Bob(私鑰 PRI_Bob 自己保管)
2. Alice 隨機產生一把對稱金鑰 K(AES-256)
3. Alice 用 K 對大檔案做 AES 加密  → 密文 C(快)
4. Alice 用 Bob 的公鑰 PUB_Bob 加密 K → 加密後的金鑰 EK(慢,但 K 很短)
5. Alice 把 (C, EK) 一起送出

Bob 收到後:
6. 用自己的私鑰 PRI_Bob 解開 EK → 還原對稱金鑰 K
7. 用 K 對 C 做 AES 解密 → 還原大檔案

竊聽者就算攔下 (C, EK),沒有 Bob 的私鑰就解不出 K,也就解不出 C。這正是 HTTPS 的核心思路。

雜湊函數:資料的「數位指紋」

接下來談一個和加密完全不同的工具——雜湊函數(hash function)

雜湊函數把任意長度的輸入,壓縮成一段固定長度的輸出(稱為雜湊值、摘要 digest 或指紋)。例如 SHA-256 不論你餵進一個字、一本書還是一部電影,輸出永遠是 256 位元(64 個十六進位字元)。它有三個關鍵性質:

  1. 確定性:同樣輸入永遠得到同樣輸出。
  2. 單向性(one-way):給定雜湊值,無法反推回原始輸入。
  3. 雪崩效應(avalanche effect):輸入只要改 1 個位元,輸出會面目全非。
SHA-256("apple")  = 3a7bd3e2360a3d29eea436fcfb7e44c735d117c42d1c1835420b6b9942dd4f1b
SHA-256("Apple")  = f223faa96f22916294922b171a2696d868fd1f9129302eb41a45b2a2ea2ebbfd

只是把 a 改成 A,整串指紋就完全不同——這讓任何竄改都無所遁形。

雜湊和加密的根本差別:加密是可逆的(有金鑰就能還原明文),目的是保密;雜湊是不可逆的(刻意設計成無法還原),目的是驗證完整性比對。雜湊沒有金鑰,也不該被用來「藏資料」。

常見用途包括:驗證下載檔案沒被竄改(比對官方公布的 SHA-256)、密碼儲存(資料庫不存明文密碼,只存加鹽 salt 後的雜湊)、以及區塊鏈與 Git 的版本識別。

提醒:MD5 與 SHA-1 已被證明不安全(可被製造碰撞),現代應使用 SHA-256 或 SHA-3。密碼儲存則應用 bcrypt、Argon2 等「刻意放慢」的演算法。

數位簽章:證明「真的是你說的」

加密解決了「保密」,但還有兩個問題沒解決:訊息來源是不是真的?訊息有沒有被篡改? 這就是數位簽章的工作。

數位簽章巧妙地反過來用非對稱金鑰:

簽章(發送方 Alice):
1. 對訊息 M 算雜湊 → h = SHA-256(M)
2. 用 Alice 的「私鑰」加密 h → 簽章 S
3. 送出 (M, S)

驗證(接收方 Bob):
4. 自己對收到的 M 算雜湊 → h' = SHA-256(M)
5. 用 Alice 的「公鑰」解開 S → h
6. 若 h == h',代表:
   - 確實是 Alice 簽的(只有她的私鑰能產生這個 S)→ 不可否認性
   - 訊息沒被竄改(任何改動都會讓 h' != h)→ 完整性

注意這裡用私鑰簽、公鑰驗,和加密的方向相反。因為全世界都有 Alice 的公鑰,任何人都能驗證;但只有 Alice 有私鑰,只有她能簽。這同時提供了完整性身分認證不可否認性

HTTPS:所有零件如何在你按下 Enter 時組裝起來

現在回到開頭咖啡廳的場景。當你連上 https:// 網站,瀏覽器和伺服器會進行一次 TLS 交握(handshake),把上述所有工具串起來:

  1. 驗證身分:伺服器出示數位憑證(certificate),裡面有它的公鑰,並由可信的憑證機構(CA)用 CA 的私鑰數位簽章背書。瀏覽器內建了 CA 的公鑰,能驗證這張憑證是真的——確保你連到的真的是銀行,而不是釣魚網站。
  2. 交換對稱金鑰:雙方透過非對稱密碼學(或下一節的金鑰交換)協商出一把只有彼此知道的對稱金鑰
  3. 高速通訊:之後所有資料都用這把對稱金鑰做 AES 加密傳輸,兼顧安全與速度。完整性則由帶雜湊的 MAC 機制保障。

所以那位側錄的陌生人,看到的全是 AES 密文;他無法假冒銀行(過不了憑證簽章驗證);也無法竄改封包(雜湊驗證會抓出來)。這就是你能安心刷卡的原因。

重點回顧

  • 對稱加密用同一把金鑰加解密,速度快但有金鑰分發難題;代表是 AES。
  • 非對稱加密用公鑰/私鑰一對,公鑰加密私鑰解,解決了金鑰分發,但速度慢;代表是 RSA、ECC。實務用混合加密取兩者之長。
  • 雜湊函數是單向、固定長度的「數位指紋」,用於驗證完整性與比對,與加密本質不同(不可逆、無金鑰)。
  • 數位簽章用私鑰簽、公鑰驗,提供完整性、身分認證與不可否認性。
  • HTTPS 把憑證簽章(驗身分)、非對稱(換金鑰)、對稱(傳資料)、雜湊(驗完整)四者組合起來。

深入探討(研究所視角)

Diffie-Hellman 金鑰交換的直覺

前面說非對稱加密能傳遞對稱金鑰,但更精巧的是 Diffie-Hellman(DH) 金鑰交換——它讓雙方在完全公開的通道上,各自只送出公開資訊,卻能算出一把相同的、第三者算不出來的共享祕密。神奇之處在於:這把祕密從來沒有在網路上傳輸過。

最常用的「油漆混色」比喻能抓住直覺:

公開:一桶共同的黃色油漆(任何人都看得到)
Alice 私藏:紅色            Bob 私藏:藍色

1. Alice 把 黃+紅 混成橘色,公開送給 Bob
2. Bob   把 黃+藍 混成綠色,公開送給 Alice
3. Alice 收到綠色,加進自己的紅 → 黃+藍+紅
4. Bob   收到橘色,加進自己的藍 → 黃+紅+藍
   → 雙方得到「相同的混色」!

竊聽者看到:黃、橘、綠。但要從混好的顏色「反推回」原本各加了多少,極其困難。

數學上,這個「混色容易、分離極難」的單向性,建立在離散對數問題(discrete logarithm problem) 上。選定大質數 $p$ 與生成元 $g$(公開):

$$ A = g^a \bmod p, \qquad B = g^b \bmod p $$

其中 $a$ 是 Alice 的私密指數、$b$ 是 Bob 的。雙方交換 $A$、$B$ 後,各自計算:

$$ \text{Alice: } B^a \bmod p = g^{ba} \bmod p, \qquad \text{Bob: } A^b \bmod p = g^{ab} \bmod p $$

由於 $g^{ab} = g^{ba}$,雙方得到相同的共享金鑰。而竊聽者即使握有 $g$、$p$、$A$、$B$,想反推 $a$ 或 $b$,等於要解離散對數——目前沒有已知的多項式時間演算法。

DH 還帶來一個極重要的安全性質:前向保密(forward secrecy)。每次連線用臨時(ephemeral)的 $a$、$b$,連線結束就丟棄。這意味著即使未來某天伺服器的長期私鑰外洩,攻擊者也無法解密過去側錄下來的歷史流量,因為當時的共享金鑰早已不復存在。這是現代 TLS 1.3 強制採用 ECDHE(橢圓曲線版 DH)的關鍵原因。

雜湊的抗碰撞性

雜湊函數的安全性遠不只「單向」,更核心的是三層抗性,由強到弱:

  1. 原像抗性(preimage resistance):給定雜湊值 $h$,難以找到任何 $m$ 使 $H(m) = h$。(這就是單向性。)
  2. 第二原像抗性(second-preimage resistance):給定特定 $m_1$,難以找到不同的 $m_2$ 使 $H(m_1) = H(m_2)$。
  3. 抗碰撞性(collision resistance):難以找到任意一對不同的 $m_1 \neq m_2$ 使 $H(m_1) = H(m_2)$。

第三項最強,也最難達成。為什麼數位簽章一定要先雜湊再簽?正因為若雜湊函數沒有抗碰撞性,攻擊者就能找到兩份內容不同卻雜湊相同的文件——一份善意(讓你簽)、一份惡意。你簽了善意那份,攻擊者卻能把簽章「移植」到惡意那份上,因為兩者雜湊值相同,驗證一樣會通過。歷史上 MD5 與 SHA-1 正是因為被找到實際碰撞而退場(2017 年 Google 的 SHAttered 攻擊製造出兩個雜湊相同的不同 PDF)。

抗碰撞性的理論上限由生日攻擊(birthday attack) 決定。直覺上你可能以為要找到 $n$ 位元輸出的碰撞需要嘗試約 $2^n$ 次,但其實只需約 $2^{n/2}$ 次——這源自「生日悖論」:一個房間只要 23 人,就有過半機率有兩人同生日。因此 SHA-256 雖有 256 位元,抗碰撞的實際安全強度只有約 $2^{128}$:

$$ \text{找碰撞的期望嘗試次數} \approx 2^{n/2} = 2^{128} $$

這仍是天文數字(超過宇宙原子總數量級),所以 SHA-256 目前安全。這也解釋了一個設計取捨:抗碰撞需要的輸出長度是抗原像的兩倍。若你只需要抗原像(如密碼雜湊),$n$ 位元就夠;若需要抗碰撞(如簽章、區塊鏈),輸出長度必須加倍以抵抗生日攻擊。

與其他主題的連結

密碼學是計算理論的「實用反面」:它把「某些問題很難算」(離散對數、大整數分解、找碰撞)從缺點變成優勢——我們刻意建立在這些計算困難假設上。而這也埋下隱憂:Shor 演算法證明,足夠強大的量子電腦能在多項式時間內分解大整數與解離散對數,屆時 RSA 與 ECC 都會崩潰。這正是當前後量子密碼學(post-quantum cryptography) 興起的原因,NIST 已在標準化基於格(lattice)等量子難題的新演算法。值得注意的是,對稱加密與雜湊受量子衝擊較小(Grover 演算法只把安全強度減半,把金鑰加倍即可應對),所以未來世界的非對稱部分會被換掉,對稱與雜湊則大致存續。理解這條「計算困難性 ↔ 安全性」的對偶關係,是看懂整個密碼學版圖的鑰匙。

AI 共讀助教正在陪你讀:加密與雜湊
嗨!我是這篇文章的共讀助教,只根據〈加密與雜湊〉的內容回答。可以問我「解釋某段」「舉個例子」「出題考我」,或反白文中段落後點下方「解釋選取段落」。