完美前向保密詳解
完美前向保密(Perfect Forward Secrecy,PFS)透過為每個連線生成獨一無二的會話密鑰提升SSL/TLS安全性,即使用戶的密鑰外洩,攻擊者也無法解密過去或未來的通訊數據。本文將介紹PFS的運作原理、支援該特性的加密算法,以及它對網絡安全至關重要的原因。
甚麼是完美前向保密?
完美前向保密(Perfect Forward Secrecy,PFS)也稱為前向保密,是一種支援客戶端與伺服器之間進行短期密鑰交換的加密機制。PFS應用於傳輸層安全(SSL/TLS)協定中,即使某次會話使用的密鑰在某一時刻被盜取,也能阻止黑客解密其他過去或未來會話的數據。
PFS的實現方式是在每次建立連線時自動生成獨一無二的會話密鑰。這類密鑰的生成不依賴之前的密鑰資訊,因此無需長期儲存密鑰,同時可避免攻擊者利用已外洩的現有密鑰存取敏感數據。
因此,黑客如果不深入介入密鑰協商與交換這一基礎機制,就無法透過解密獲取會話密鑰,而這類攻擊相比其他攻擊手段需要投入多得多的成本。
目前所有主流互聯網瀏覽器都支援PFS,且通常將其列為一項安全特性。大多數現代操作系統早已支援PFS,舉例來說,最後一個不支援PFS的Windows版本是Windows XP。
隨着更多科技巨頭強制要求用戶啟用該特性,PFS的普及度預計將持續提升。谷歌多年來已在Gmail及其他產品中使用PFS;蘋果在2017年要求App Store中的iOS應用必須支援完美前向保密。在TLS 1.3推出時,互聯網工程任務組(IETF)強制要求實現完美前向保密,僅允許使用支援該特性的密碼套件。PFS是密碼學未來發展的重要組成部分,這一點有着充分的依據。
PFS的運作原理
由於PFS使用獨一無二的會話密鑰,攻擊者只有獲取到某次特定數據交換對應的密鑰,才能查看該次交換的具體數據。這種SSL/TLS會話隔離機制大幅降低了透過該攻擊向量引發嚴重數據外洩的風險。
因此,惡意攻擊者通常不會優先選擇使用PFS的伺服器作為目標,因為他們付出攻擊成本後能獲取的數據量非常有限,而且在用盜取的密鑰完成解密前,他們無法確認獲取到的數據是否是原本的攻擊目標。
在實際應用中,PFS的運行方式是:企業在每次使用服務時切換會話密鑰——例如,每當訪客存取加密頁面(可能涉及金融業務或身份驗證場景)時就更換密鑰。PFS也被應用於即時通訊場景,可以為每一條發送的訊息生成一套新的會話密鑰,實現所有傳輸資訊的完全隔離。
解密PFS會話的首選方案是在伺服器上安裝代理程式。雖然存在其他解密方法,但這些方法都存在缺陷,必須先解決缺陷問題才能安全使用。
在伺服器上安裝代理,相當於集成了第三方軟件,它可以收集加密密鑰、提供流量可見性,同時不會中斷SSL/TLS會話。
哪些加密算法支援PFS?
SSL/TLS透過約定的密碼流程(稱為密碼套件)完成密鑰交換,而協商建立這些連線參數的過程稱為握手。
要實現完美前向保密,必須使用符合要求的加密類型。目前有兩種密鑰交換算法可滿足要求:
- 臨時迪菲-赫爾曼(Ephemeral Diffie-Hellman,DHE)
- 臨時橢圓曲線迪菲-赫爾曼(Ephemeral Elliptic Curve Diffie-Hellman,ECDHE)
隨着更優方案的出現,實際使用的具體算法很可能會發生變化,但PFS最重要的原則之一是密鑰交換必須是臨時的,即會話密鑰僅可一次性使用,這類密鑰也稱為臨時密鑰。臨時密鑰基於每次密鑰交換時生成的隨機值,因此僅對應該次交換,在交換結束後立即失效。會話結束後所有加密相關資訊都會被刪除,下一次會話將生成全新的參數。
除了在密鑰外洩時縮小數據暴露範圍之外,迪菲-赫爾曼密鑰交換的設計還能保證會話密鑰無法透過暴力破解獲取。由於會話密鑰透過獨立、非共享的密碼學方式生成,伺服器的密鑰幾乎沒有用處,密鑰對中對應的公鑰實際上從不會被用於加密任何數據。
完全前向保密(PFS)的主要作用
PFS 可防止風險在多個 SSL/TLS 會話之間擴散。
過去,針對客戶端與伺服器之間常用連線的惡意攻擊者可以長期記錄加密流量,等待獲取密鑰的時機。一旦取得密鑰,他們就能回溯解密所有已記錄的流量。PFS 可大幅限制此類風險。
在 PFS 普及之前,該漏洞十分常見,且可能造成毀滅性後果。2012年被發現、2014年公開披露的 OpenSSL Heartbleed 漏洞就是典型案例。
利用 Heartbleed 漏洞時,攻擊者告知伺服器將發送64KB的心跳請求報文,但實際發送的報文遠小於該長度。伺服器會返回收到的短報文,但由於預期要回覆更長的報文,會用記憶體中任意存在的數據填充報文剩餘部分。該漏洞危害極大,因為攻擊者可以反覆執行攻擊,收集大量數據。這些數據可能包含伺服器內的任意內容:密碼、個人資料、會話數據,甚至伺服器密鑰,都可能被黑客獲取。
由於心跳請求是常規事件,系統不會對其產生日誌。這不僅對入侵的取證調查造成阻礙,還導致如果不專門排查,根本無法察覺此類攻擊。
如果伺服器密鑰在此次入侵中外洩,攻擊者還可以攔截並解密所有曾發生的 SSL/TLS 會話,而通訊參與方對此毫無察覺。
PFS 的使用者不僅需要防範惡意攻擊者,還要應對其他類型的監聽行為。在愛德華·斯諾登曝光美國國家安全局(NSA)的監聽項目後,許多機構將 PFS 視為限制政府監聽和監控的必要措施。
面向未來的解決方案
如果當前的算力發展遵循摩爾定律,或是量子計算實現大規模落地,許多加密算法和安全最佳實務都將被攻破、淘汰。屆時所有受加密保護的內容都會暴露,歷史數據也可能面臨風險。許多專家已提出警示:目前全球範圍內的個人和國家層面主體都在收集數據,待未來算力發展到可以輕松解密密時,再對這些數據進行解密。
PFS 從根本上杜絕了這種攻擊路徑。它不會通過網絡傳輸任何會話密鑰,而是採用對稱加密機制,由通訊雙方通過複雜的認證運算獨立生成會話密鑰。
另一個有助於防範該問題的方案是使用量子密碼學——這是一個仍在發展中的領域。
如何實現完全前向保密
在伺服器上啟用 PFS 支援十分簡單,大多數現代伺服器預設已完成相關配置。如果尚未配置,通常可透過四個簡單步驟完成:
- 進入 SSL 協議配置界面
- 添加對應的 SSL 協議
- 配置兼容 PFS 的 SSL 密碼套件
- 重啟伺服器
包括 Apache、Nginx、RSA 在內的絕大多數Web伺服器都可以實現完全前向保密。