Encryption

為什麼大多數加密算法不使用完全保密?

  • August 8, 2020

如果您在不知道密碼的情況下嘗試破解它們,是否有可能製作出既計算複雜又具有許多可能答案的算法?

為什麼像AES這樣的流行算法不多?

為什麼大多數加密算法不使用完全保密?

完全保密只有在以下情況下才能實現 $ \text{key size} \geq \text{message size} $ 並且密鑰永遠不會重複使用。

它不適合現代使用,其中發送/接收大量消息,這是不切實際的,因為必須事先在安全通道中發送密鑰,而這不是加密。您必須信任運營商,否則您必須自己攜帶鑰匙。相反,我們採用另一種方​​式,使用具有良好分析算法的較短鍵。使用 DHKE 協議(主要使用橢圓曲線版本)交換密鑰,並使用 AES-GCM、AES-GCM-SIV 或 ChaCha20-Poly1305。

密鑰的重複使用具有破壞機密性的災難性結果。當密鑰流耗盡時你會怎麼做?您會等待新密鑰,還是重新使用密鑰流的某些部分?兩者都有關鍵的結果。您將不會在需要時進行通信,否則 OTP 將失敗,請參閱Crib-Dragging。取而代之的是,可以使用 DHKE 來創建一個新的密鑰,即使是每次加密,甚至可以實現前向保密

如果您在不知道密碼的情況下嘗試破解它們,是否有可能製作出既計算複雜又具有許多可能答案的算法?

加密應該很容易計算,這樣合法方就不會使用太多的權力來加密。這並不意味著它是易碎的,因為對手可以使用大量資源進行計算。如果算法、塊密碼或流密碼正確使用給定的密鑰,那麼人們可以調整密鑰大小,使暴力無法觸及任何人,即使對於量子電腦也是如此。

加密可以隨機化,實際上在現代密碼學中,我們更喜歡這個,否則,它是不安全的。請參閱語義安全性不可區分性。例如,我們至少更喜歡Ind-CPA security。CBC 和 CTR 模式可以做到這一點,但 ECB 做不到。其實我們想要的更多,IND-CCA2/NM-CCA2- 自適應選擇密文攻擊下密文不可區分性和不可延展性的標準。範例是 AES-GCM、AES-CCM 和 ChaCha20,它們是帶有關聯數據的經過身份驗證的加密 (AEAD),並提供機密性、完整性和身份驗證。

解密必須是唯一的,因為接收者無法在可能的答案中確定正確的消息。

密碼不是正確的術語。當上下文清楚時,我們使用加密密鑰或短*密鑰。*僅當使用基於密碼的密鑰派生函式(如 PBKDF2 或 Argon2id)生成密鑰時,該密碼才適用。

為什麼像AES這樣的流行算法不多?

大多數回答是,AES 是一種快速且安全的鍵控排列。是的,對於每個密鑰,AES 從所有可能的排列中選擇一個排列。我們期望它以一種無法區分的方式選擇它。


這裡也有 Q/A 和答案,討論了使用 AES 實現完美保密,並提供了一些非常好的答案;

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