如何理解前向安全性?和完美前向保密(perfect forward secrecy)區別?


題主所說的「前向安全性」應當是叫做「forward security」。該定義最早是由Mihir Bellare和Sara K. Miner在 CRYPTO』99上提出的關於數字簽名的性質[1]。

而「perfect forward secrecy」則是由Christoph G. Günther在EUROCRYPT 』89提出的,其最初用於定義會話密鑰交換協議的一種安全性[2]。

(Perfect)Forward secrecy的大致意思是:用來產生會話密鑰(session key)的長期密鑰(long-term key)泄露出去,不會造成之前通訊時使用的會話密鑰(session key)的泄露,也就不會暴漏以前的通訊內容。簡單的說,當你丟了這個long-term key之後,你以後的行為的安全性無法保證,但是你之前的行為是保證安全的。

之所以Perfect加上括弧,是因為這個詞蘊含了無條件安全的性質,大部分的forward secrecy方案是無法達到Perfect的。

而forward security的保證的是:敵手獲取到了你當前的密鑰,但是也無法成功偽造一個過去的簽名。

簡單的說,這兩個概念是用在不同的環境中,但是其意圖是一樣的:保證密鑰丟失之前的消息安全性或簽名的不可偽造性。

一般而言,滿足Forward secrecy或者forward security的公鑰環境下的(簽名、密鑰交換或加密)方案,其公鑰是固定的,而密鑰則隨著時間進行更新。這個更新過程是單向的,因此也就保證了拿到當前的密鑰,是無法恢復出以前的密鑰,從而保證了「前向安全」。

與之相對應的還有「後向安全( backward secrecy或security)」的概念,不過這個概念研究的比較少,題主有興趣可以自行查找該概念。

參考文獻:

[1] Bellare, Mihir, and Sara K. Miner. "A forward-secure digital signature scheme." Advances in Cryptology—Crypto』99. Springer Berlin Heidelberg, 1999.

[2] Günther, Christoph G. "An identity-based key-exchange protocol." Advances in Cryptology—Eurocrypt』89. Springer Berlin Heidelberg, 1989.


前言: 伺服器啟用ssl功能需要生成一對RSA 私鑰/公鑰對(Apub/Apriv), 然後生成包含自己域名和公鑰的證書,把證書提交給CA請求籤名。以後每次收到連接請求都會發送證書給客戶。 該用於身份認證的RSA 公鑰/私鑰對長期使用。

如果採用Perfect Forward Secrecy, 針對每個session客戶端和伺服器都分別生成臨時的(Ephemeral)隨機DH/ECDH私鑰EPk (DH/ECDH也是一種非對稱演算法), 根據此隨機的私鑰EPk和對方傳過來的DH/ECDH公鑰計算出共享的preMaster key, 再用哈系函數處理preMaster key計算出AES的加密/解密密鑰。 由於DH/ECDH私鑰不經過網路傳輸,每次會話結束就被刪除,和RAS 私鑰Apriv無關,因此即使長期使用的Apriv被非法獲取,以往監聽到的加密數據也無法被解密(除非有能力拿到每個sessionDH私鑰,這是不可能的)。 可見密碼學安全的隨機數生成演算法有多重要。

當然除了長期使用的用於身份認證的公鑰私鑰對Apub/Apriv, 伺服器也可以為每次(多次)會話都生成一對新的RSA 公鑰/私鑰 Tpub/Tpriv用於AES密鑰交換。 伺服器用證書私鑰Apriv簽名Tpubhash並傳輸TpubTpubhash簽名給客戶端。 客戶端用收到的Tpub加密隨機生成的AES密鑰K並傳給伺服器,伺服器用Tpriv解密K,雙方就可以用K加密解密實際的消息了。 雙RSA雖然也能實現PFS,但是效率太差,沒有公司會採用, 基本都是RSA+ECDHE


對完美前向保密(perfect forward secrecy)的了解可參考Forward secrecy - Wikipedia,中文翻譯參考TLS完美前向保密(perfect forward secrecy)翻譯


推薦閱讀:

經典分組密碼-DES演算法
解密NSA真正的竊聽技術
Ubuntu Linux下通過TPM保護SSH私鑰的安全

TAG:信息安全 | 安全 | 密碼學 | 信息安全和密碼學 |