Aes

AES-CBC 然後 SHA 與 AES-GCM 用於加密和驗證 Web 令牌

  • March 7, 2019

我正在嘗試使用 JWT 之類的東西,但有點臨時和加密。令牌本身只是一個包含使用者 ID 和 Unix 時間戳的字元串化 JSON。

現在,我嘗試使用AES-128-GCM,但是我在解密之前對密文進行了一些簡單的修改,只是在密文中附加了一些字節,發現它解密成功,這是否意味著這些字節被計為填充和AES GCM 是認證然後加密算法?

我覺得加密然後驗證對我來說更安全。此外,AES GCM 身份驗證是否足夠安全,可以與 SHA256 進行比較,或者它是 CRC 層以實現快速完整性並且不能用於像 HMAC 這樣的安全身份驗證?

換句話說:AES-128-CBC 然後 SHA-256 比 AES-128-GCM 更安全嗎?

只是在密文中附加了一些字節,發現它解密成功

通常這不應該發生,因為附加的字節肯定不是先前“密文”的有效身份驗證標籤。我想(但不知道!)您正在使用的實現對密文的長度、相關數據和標籤進行編碼,並在解密時檢索這些值,忽略添加的值,從而產生正確的解密。

AES GCM 是先認證然後加密算法?因為我覺得加密然後驗證對我來說更安全

AES-GCM 是一種經過身份驗證的加密算法。Encrypt-then-Authenticate 是實現此一般定義的一種特定結構,並且確實比 Authenticate-then-Encrypt 更可取,這就是 GCM在內部執行 encrypt-then-authenticate 的原因,因此 AES-GCM 實現與 CBC-then 相同的安全定義-HMAC。

AES-128-CBC 然後 SHA-256 比 AES-128-GCM 更安全嗎?

當您說“AES-128-CBC 然後 SHA-256”時,我想您實際上是指在密文上帶有 HMAC-SHA256 身份驗證的 AES-128-CBC。

那麼是的,從技術上講,這更安全,因為 HMAC-SHA256 需要 $ 2^{128} $ 進行偽造的操作,而 AES-128-GCM 允許您對密鑰執行多目標搜尋,該密鑰的安全性略低於 $ 2^{128} $ . 因此,它也具有與 CRC 不同的嚴重安全級別。同樣由此我們可以推斷出兩者都是安全的,因為兩者都不是 $ 2^{128} $ 也不 $ 2^{100} $ 操作是可行的,使它們都“安全”(又名“meh,can’t break”),所以你不妨使用更容易使用和更快的 AES-GCM,假設你有可用的硬體支持,情況就是這樣在現代 x86 處理器上。

有關實際值的更詳細討論,請參閱下面 Squeamish 的評論。也可以在這裡查看他們的答案。

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