Encryption

具有已知參數的密鑰派生是否增加了任何安全性?

  • February 13, 2015

首先:這是一個關於我試圖繞開的概念的問題;這與具體的實施無關。反正…

我有以下場景(簡化以顯示我對這個概念的問題):

  1. 我有一個對稱主密鑰,讓我們假設您閱讀本文時最強大的算法: $ KM $ .
  2. 我有一堆必須加密的 PDF 文件 $ KM $ .
  3. 作為一項安全功能,它定義為,對於每個 PDF, $ KM $ 和 $ filename $ 被推到一個眾所周知的功能中 $ derive(KM, filename) $ 獲取特定於文件的密鑰 $ KF $ .
  4. 我現在繼續使用這些密鑰加密所有文件。

這會增加安全性還是只會帶來危險的風險?

我聽到的一個專業論點:

並非所有文件都使用相同的密鑰加密 - 猜測密鑰更難。

  1. 所以我需要解決 $ derive(KM, filename) $ .
  2. 我有 $ filename $ 並且知道 $ derive $ . 這給我留下了一個帶有一個變數的方程——可解 $ KM $ .

我看到的唯一問題是:暴力破解一個鍵需要更長的時間,因為我必須為我嘗試的每個鍵求解方程。如果我強制離線,這似乎更像是一個小不便,但不是問題——不過我只需要解決一個 PDF,因為我可以獲得知識 $ KM $ . 因此,與前向保密相反,破解一個 PDF 將全部破解。

我看到的大問題:

失去了 $ filename $ ,失去文件。如果所有鏈都中斷,則所有備份都會失敗,並且 $ filename $ 已更改,我無法終生解密文件。我將不得不暴力破解萬能鑰匙,優雅地我只需要處理上一段中描述的一個文件。

補充:

正如 Maarten Bodewes 在 Stack Overflow 問題的評論中指出的那樣(在這個問題 被移到這里之前):

如果使用基於密碼的 KDF,則可以調整為推導的負載因子。此外,**如果你會使用 $ {KM} $ 直接你還需要派生或儲存一個初始化向量。**如果文件的大小不是問題,那麼您可以通過使用公鑰/私鑰對和可能的 MAC 的混合加密來使該方案更安全。在這種情況下,您可能不需要 KDF(但您需要一個安全的隨機生成器)。

(強調我的)

仍然會生成 IV 並將其儲存在加密文件的前 X 個字節中。然而,這並不影響我認為的整體概念,因為他寫道:

如果文件的大小不是問題,您可以通過使用公鑰/私鑰對的混合加密來使此方案更安全

整個加密發生在 HSM 中,為了這個問題,它 100% 保護主密鑰 - 除了暴力破解之外,您無法以任何方式獲取主密鑰。但這些言論並不是我想要得到的答案。


過程如下:

  1. 使用者發送一個用 ephemeralKey 加密的文件,用一個 publicKey 包裝,只有 HSM 知道它的 privateKey。
  2. HSM 解密文件,生成 $ KD $ 使用 $ filename $ 和 $ KM $ 只有 HSM 知道,加密文件並將文件儲存在硬碟上。
  3. 當使用者請求文件時,HSM 會生成一個 ephemeralKey,生成 $ KD $ 從文件名和 $ KM $ ,解密文件,使用臨時密鑰對其進行加密,為使用者打包密鑰並將打包的密鑰和文件發送給使用者。- $ KD $ 除 HSM 外,其他人從未使用過。

作為管理員,確實可以直接訪問儲存文件的硬碟驅動器 - 如果我離線暴力破解文件並且使用它,派生是否會顯著減慢我的速度 $ KD $ 求解導函式 $ KM $ ?

所以:

  • **PRO:**暴力破解將花費稍長的時間。
  • **CON:**沒有像前向保密這樣的真正收益,額外的風險。

把它包起來……

我通過為每個文件生成一個派生密鑰 $ KD = KDF * KM * filename $ 在哪裡 $ KDF $ 和 $ filename $ 為公眾所知。如果我暴力破解文件並獲得正確的 $ KD $ ,我知道 4 個變數中的 3 個,因此知道 $ KM $ . 結果,我能夠推導出每個 $ KD $ .

這讓我問:整個方案是否真的增加了任何安全性?

是的,具有已知參數的密鑰派生可以增加安全性。

首先,在問題的場景中(理解為真實場景,在步驟 4 中使用 PDF 加密),當使用密鑰派生時,您可以將一個加密的 PDF 文件及其派生密鑰交給一個人,並且這不會使她能夠破譯其他加密文件;這種排除通常是可取的。另外,請注意,即使該人更改了文件名,她仍然能夠讀取該文件。

與問題中假設的相反,知識 $ derive(KM,filename) $ 和 $ filename $ ,即使對於幾個不同的 $ filename $ , 不應啟用恢復 $ KM $ 或以其他方式計算 $ derive(KM,filename) $ 對於任意 $ filename $ . 對於一個好的推導函式(也就是說,對於每個 $ KM $ , 變換 $ filename\to KF $ 似乎是一個任意隨機函式),只有當 $ KM $ 很弱(可以猜測)。即使是這樣, $ derive $ 可能/應該是一個故意緩慢的函式(密鑰拉伸,又名基於密碼的密鑰派生函式),這將使暴力破解 $ KM $ 具有挑戰性的。

具有已知參數的密鑰派生的另一種常見用途是當製造許多嵌入秘密和標識符/序列號的設備時。從安全的主密鑰和標識符中導出秘密是標準且合理的做法。這種做法(在智能卡行業中稱為多樣化)確保不能通過從其他設備中提取秘密來推斷出一個設備的秘密。


我們現在被告知“ $ KD $ 僅用於將文件儲存在伺服器上”。在這種情況下,密鑰派生沒有幫助,假設使用了安全加密方案並且 $ KM $ 很強大(足夠寬/足夠隨機)。理由:因為“沒有使用者會得到 $ KD $ “,派生密鑰僅存在於 HSM 中;由於加密方案是安全的,因此使用該方案與 $ KM $ 或者 $ KD $ 同樣安全,不會導緻密鑰洩露;沒有理由擔心加密文件的密鑰洩漏,而不是洩漏 $ KM $ ,有或沒有推導,因此沒有密鑰推導的動機。事實上,推導的複雜性增加了實現錯誤導致漏洞的風險。

另一方面,密鑰派生可能有助於保持在加密方案安全的限制範圍內。例如,如果文件加密方案是帶有隨機 IV 的 CBC 模式的 TDES,那麼在使用相同的密鑰加密大約 30GB 之後,由於可能發生密文塊衝突,這將變得(甚至是稍微)不安全;如果每個 1GB 的 100 個文件被加密,密鑰派生將有助於確保不會發生這種情況。作為另一個例子,也許 HSM 對 DPA 是安全的,使用給定密鑰加密 1GB,但在 100GB 之後不安全。


總而言之,當以下任何一種情況適用時,正確的密鑰派生會有所幫助:

  • 派生密鑰可能會洩漏(密鑰派生限制了密鑰洩露對文件的損壞);
  • 主密鑰弱,推導函式故意變慢(推導顯著增加了暴力搜尋的成本);
  • 加密方案或其實現在加密大量數據時存在弱點(多個派生密鑰將通過減少使用相同密鑰加密的數據量來幫助保持在安全範圍內)。

引用自:https://crypto.stackexchange.com/questions/22896