arrow_back回到田野筆記
CRYPTOGRAPHY 已發佈 9 Aug 2026

公開金鑰密碼學實際上如何運作

非對稱加密、金鑰對和數位簽章的實踐說明,不含虛晃一招的數學類比。

每當你用 SSH 連接到伺服器或載入 HTTPS 網站時,兩個在數學上相關聯的金鑰在背後做重活。其中一個是公開的,一個是私密的,它們之間的關係正是讓不可信網路上的安全通訊成為可能的基礎。

基本概念

對稱加密使用一個金鑰同時鎖定和解鎖資料。如果雙方已經共享一個祕密,這個方法就足夠了,但安全地分發該祕密才是難點。公開金鑰(非對稱)密碼學透過產生一對在數學上相關的金鑰來解決這個問題:一個公開金鑰可以分發給任何人,一個私密金鑰你永遠不會分享。

用公開金鑰加密的資料只能用對應的私密金鑰解密。用私密金鑰簽章的資料可以被任何持有公開金鑰的人驗證。這兩個特性涵蓋了我們使用它的幾乎所有用途:機密性和身分驗證。

RSA,經典範例

RSA 依賴的事實是,乘以兩個大質數很快速,但將乘積分解回那些質數在規模上計算上非常耗時。一個 2048 位元的 RSA 金鑰由兩個大約 1024 位元的質數組成。公開金鑰是 (n, e)——n 是質數的乘積,e 是固定的指數,例如 65537。私密金鑰是使用 n 的尤拉函數衍生而來,涉及知道原始的質數。

加密是模冪運算:c = m^e mod n。解密則用私密指數 d 反轉:m = c^d mod n。不過,實際上沒人直接用 RSA 加密大型酬載——它速度慢且有與金鑰長度相關的大小限制。反之,RSA 通常包裝一個對稱會話金鑰(例如 AES-256),對稱密碼運算則處理大部分資料。這就是 TLS 使用的混合方法。

橢圓曲線密碼學以及為什麼它在接管一切

ECC 用小得多的金鑰給你相當於 RSA 的安全性。一個 256 位元的 ECC 金鑰(例如 secp256r1 曲線或 Curve25519)強度大致相當於 3072 位元的 RSA 金鑰。更小的金鑰代表更快的握手和更少的頻寬,這是為什麼現代 TLS 組態、SSH 實作和 Signal 的協議都依靠 ECC 的原因。

數學不同——它基於橢圓曲線上的點上的離散對數問題,而不是整數因式分解——但公開/私密金鑰的關係和保證在概念上是相同的。

數位簽章:等式的另一半

加密保持資料機密。簽章證明真實性和完整性。要簽章一個訊息,你雜湊它(通常是 SHA-256),並用你的私密金鑰加密該雜湊。任何持有你公開金鑰的人都可以自己雜湊訊息、解密你的簽章,並檢查兩個雜湊是否吻合。

這正是當你用 GPG 金鑰執行 git commit -S 時發生的事,或當憑證授權單位簽章 TLS 憑證時。CA 的私密金鑰簽章你的憑證;瀏覽器預先內附 CA 的公開金鑰為受信任,所以他們可以驗證你的憑證的真實性,而無需直接與 CA 通話。

這在日常中出現的地方

SSH 金鑰驗證是一個直接應用:ssh-keygen -t ed25519 產生一個金鑰對,你把公開的一半放進伺服器上的 ~/.ssh/authorized_keys,驗證則透過使用私密金鑰的挑戰-回應進行,不會傳輸任何密碼。

TLS 握手使用非對稱密碼學簡要地,僅用於建立一個共享的對稱金鑰(透過現代設定中的 ECDHE 金鑰交換),然後進入快速對稱加密來進行實際會話。PGP/GPG 電子郵件加密也遵循混合模式——用隨機的 AES 金鑰加密訊息,然後用接收者的 RSA 或 ECC 公開金鑰加密該 AES 金鑰。

實際上什麼會在實踐中破裂

RSA 和 ECC 背後的數學還沒有透過經典運算被破解。出錯的幾乎總是實作:在建立金鑰時產生弱的隨機數(2008 年的 Debian OpenSSL 缺陷是教科書案例)、ECDSA 簽章中重複使用的 nonce 洩露私密金鑰,或針對實作不良的 RSA 的 padding oracle 攻擊(針對 PKCS#1 v1.5 padding 的 Bleichenbacher 攻擊)。量子運算是長期理論上的威脅——如果存在足夠大的量子電腦,Shor 演算法會破壞 RSA 和 ECC——這是為什麼 NIST 已經為未來遷移標準化了 ML-KEM(原稱 Kyber)等後量子演算法。

如果你想更深入,Korra Studio 的密碼學課程涵蓋金鑰交換協議和雜湊函數內部更深入的內容,網路課程則逐位元組地說明所有這些如何融入實際 TLS 握手。

本文由 AI 協助撰寫,經 Michal Pilch(CISSP)審核並發佈,Korra Studio。

準備好更進一步了嗎?

這是 Korra Studio 知識庫中的一篇筆記——該平台將每個主題與一對一的師資配對。

免費開始arrow_forward