Hash

在 AES-GCM 中對經過身份驗證的數據使用數據雜湊而不是完整的原始數據

  • December 5, 2018

我正在序列化 JSON 對象,並且想加密一些值。我打算用 AES-GCM 來做這件事。

我還想確保整個對象的完整性。

這些要求是對整個對象的完整性、某些值的機密性以及對其他值的明文要求。

有少量已知的頂級鍵。

例如,如果我的“純文字”JSON 對像是

{
"id":"823623672",
“地址”: {
"line1": "2000 百老匯",
"line2": "紐約",
“郵編”:“12345”
},
“電話”:“+1 212 555 1234”,
“最後訪問”:1543946340
}

我希望“加密”對像類似於

{
"id":"823623672",
"地址": "URAVvDTOrovXBehz2ms8ej9BRCaKdx8LsmuA81IkESM=",
“電話”:“0gAtx7Hh/kPD7chfNGy90A==”,
“最後訪問”:1543946340
}

現在,我可以輕鬆地對 and 進行序列化addresstelephone加密,並提供 and 的值id作為last-accessed關聯數據。

但是,我將使用的實際對象將在“不加密”密鑰中包含更多數據。

因此,我不想直接使用和的值作為關聯數據,而是對這些值進行雜湊處理並將雜湊值用作關聯數據idlast-accessed(可能是 SHA-512/256,如果重要的話。)

要解密,我將從輸入數據重新創建相關數據(雜湊),然後解密每個加密密鑰;如果任何解密失敗,則整體解密失敗。

(並且使用​​散列意味著我可以使用散列“更新”與已知鍵的值一個接一個地創建關聯數據,而不必創建一個將所有值連接起來的單個連續數據項。在這種情況下,我會散列 823623672 然後 ‘\0’ 然後 1543946340 然後 ‘\0’;分隔符是為了確保攻擊者不能將id82362367 和last-accessed21543946340 更改為例如。)

(我不必擔心攻擊者添加額外的頂級密鑰;具有語義重要性的密鑰在關聯的數據/散列中。)

在我看來,使用雜湊不應該削弱加密的安全性,但我想檢查一下。

使用散列而不是完整數據會削弱加密的安全性嗎?

如果我對您的理解正確,您將對身份驗證所需的所有內容進行雜湊處理並將其包含在 AAD 中。只要散列是安全的抗衝突散列函式,這將是安全的。但是,我不明白你得到了什麼。您可以在 AAD 中計算所有這些數據,但只發送重建所需的數據。這樣,您不必儲存/發送超出需要的任何內容。另外,GCM 認證器其實比 SHA256/SHA512 快很多,所以效率也會更高。

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