Encryption
AES GCM 加密如何工作
以前,我使用 256 位密鑰和 128 位 IV 的 AES CBC 256。
但是它似乎很慢,所以我決定切換到 AES GCM 256 位密鑰,96 位 IV,其中有一些我不明白的部分,例如:
- Auth標籤:加密和解密時AES GCM的輸出需要它我可以將它添加到加密的密文中,以便在解密時立即可用嗎?還是需要對攻擊者隱藏?
- 重複使用的 IV 是否會導致 2 條消息的 2 條加密密文出現重複模式(2 條消息不同但某些字母可以相同)?
- 在 CBC 中重複使用 IV 是不好的,但在 GCM 中是災難性的。假設它只用於數據,1 個人的消息,而其他人有其唯一的 IV,而不是 nonce,它只用於一個人。是否適用?
- 什麼是 AuthenticatedData?https://developer.apple.com/documentation/cryptokit/aes/gcm/3243034-seal
(AES-256 CBC)似乎很慢
對於給定數量的加密數據,AES-256 GCM 加密使用與 AES-256 CBC 大約相同數量的 AES 操作(通常多 1 個)。AES-256 GCM 可能更快的原因僅限於:
- 如果實現使用並行化,或者以其他方式得到更好的優化
- 明文的相當大一部分被視為經過驗證的數據(如下所述)
- AES-256 GCM 與 AES-256 CBC + 一些身份驗證器進行比較(例如,帶有派生密鑰的 CBC-MAC)
身份驗證標籤:它是密文的一部分,明文。它通常在最後,並且必須用於所謂的“線上算法”,因為只有在處理完整個明文之後,發送方才知道該標籤。
重用IV:在AES-GCM中這是一場災難,因為不同明文中給定位置的字節/字母的異或匹配密文中該位置的字節異或。是的,這意味著(並且比問題中的“重複模式”更糟糕)。如果這是一個問題,請使用AES-GCM-SIV。
在 AES-CBC 中重用 IV 是不好的,但如果密文的前 16 個字節不同,則不太可能成為實際災難。
Authenticated Data:這是明文的可選部分,未加密,但仍由 AES-GCM 的 GCM 部分進行身份驗證。這很有用,因為
- 數據(例如路由資訊)仍然可以理解
- 不加密數據可以節省處理時間和電力。