Encryption

使用相同的 AES 密鑰和向量編碼多個欄位?

  • November 21, 2013

我想要一些關於密碼學最佳實踐的建議。我需要在我的網路應用程序中儲存使用者的第三方網站憑據(登錄名和密碼)。

我正在使用帶有隨機密鑰和初始化向量的 AES-256(由 Net 4.5 框架提供,如果相關的話),並將加密數據儲存在與密鑰和向量完全不同的系統中。

除了加密的數據記錄之外,還有另一個系統中的密鑰/向量記錄的 ID。我的問題是,是否可以使用相同的密鑰和向量來加密登錄名和密碼,分別加密和儲存?或者這是一個漏洞,我絕對需要每個特定的密鑰/向量?

不可以。 您不能將相同的密鑰和 IV 用於多個向量(使用大多數 AES 操作模式)。唯一(在某種程度上)抵抗 IV 重用的 AES 操作模式是SIV

對於 CBC、CTR、GCM 等通常的操作模式,重複使用 Key+IV 對是一個嚴重的錯誤。重要的是要承認在各種模式下選擇 IV 有進一步的要求。(注意:為了比較操作模式,您可能需要閱讀:http ://www.cs.ucdavis.edu/~rogaway/papers/modes.pdf 。)

您也許應該考慮使用隨機 IV 並將 IV 與您儲存的其他數據的向量一起儲存?然而,一些操作模式,包括 CTR 和 GCM,除了 IV 是唯一的之外幾乎沒有要求。因此,可以在這些模式之一中使用記錄 ID 作為 IV(初始計數器)的一部分。


順便說一句,總的來說,從安全形度來看,在 Web 應用程序中儲存其他網站的登錄名和密碼的整個想法並不一定是個好主意。難以儲存資料,使不同使用者的數據保持分離。

您可能需要考慮的事項:

  • 如何保護不同使用者的資料不受其他使用者的影響?
  • 請注意,沒有使用者可以例如指示其他使用者的記錄 ID
  • 執行此服務的人是否有權訪問此服務使用者的所有安全登錄名和密碼資訊?
  • 您想要經過身份驗證的加密(GCM、CCM、SIV)還是只需要機密性(CBC、CTR)
  • 不要使用 ECB 模式獲取密碼或登錄資訊
  • 加密密碼和登錄資訊:洩露登錄和/或密碼的長度可能是一件壞事。僅此一項就可能是重要的提示。也許將材料填充到恆定長度?

而且……還有很多。(我只是在這裡寫了一些項目作為要考慮的事情的例子。你正在設計的東西有點複雜,無法安全地執行。)

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