Authenticated-Encryption
是否可以部分解密 aes-gcm 密文?
假設我使用 aes-gcm 加密了一個大文件並將其上傳到某個地方。然後我可以只下載前幾個塊(以及 IV 和標籤)並解密它們嗎?
如果沒有,是否有另一種經過身份驗證的加密允許這樣做?
是的,您可以部分解密單個 AES-GCM。AES-GCM 使用計數器模式加密,並且您可以從任何特定的異地解密計數器模式,假設您知道計算計數器值的隨機數和方法。這是一個 Java 實現,它採用 GCM 加密並在不驗證標籤的情況下解密密文,這是一種從任何偏移量執行 CTR 模式加密的方法 - 剩下的技巧是將兩者結合起來。
但是,為了保持真實性,您仍然需要通過 GMAC 構造傳遞所有數據。由於大多數實現將同時執行 GMAC 和解密傳遞,因此您可能需要使用單獨的 GMAC 和計數器模式實現。對於 Java,如果我沒記錯的話,GCM 是使用 Bouncy Castle 輕量級 API(由
org.bouncycastle
包樹中的類指定)中相對容易拆分的原語實現的。如果您可以設計自己的協議,您確實可以將您的消息分成多個塊並分別對它們進行身份驗證。但是,您應該確保攻擊者無法複製、刪除或打亂這些塊。Kelalaka 已經指出瞭如何做到這一點的一個方案。