在加密期間更改算法
受“防範密碼分析突破:組合多個雜湊函式”的啟發,我很好奇在加密過程中是否有密碼原因只使用一種算法。
例如,從 Blowfish 開始,轉移到 AES,切換到 DES 等,以一種已定義但半不可預測的方式(可能基於最近加密塊的原始 plantext 的最後 4 位接下來選擇哪一個) .
更改算法(但為了爭論而保持密鑰相同)是否具有任何加密價值?這樣的方案能否對密碼分析更具彈性?
正如許多其他答案所說,上述建議的方法僅與使用的最弱密碼一樣強大(如果所有密碼都使用相同的密鑰,這尤其危險)。
此外,如果任何密碼彼此更快或更慢,則基於明文的密碼轉換為一系列定時側通道攻擊打開了大門。
防止密碼分析突破的一種方法是使用秘密共享來拆分消息 $ m $ 進入 $ n $ 明文( $ p_i $ ) 必須組合起來才能恢復原始消息。
$$ m = p_0 \oplus p1 … \oplus p_n $$ 這些 $ n $ 然後明文可以被加密 $ n $ 密碼。 $$ ciphertext = cipher_0(key_0, p_0)|cipher_1(key_1, p_1) … |cipher_n(key_n, p_n) $$ 密文的大小隨著密碼數量的增加而增加(消息的大小 $ \times n $ ),但您可以確保即使 $ n-1 $ 密碼被破解,消息將保持秘密。這也需要 $ n $ 鍵。
可以嘗試某種鍵擴展器來擴展 $ key $ 為每個密碼分配一個不同的密鑰:
$$ key_0 = cipher_0(cipher_1( … cipher_n(key, key)), cipher_1( … cipher_n(key, key))) $$ $$ key_1 = cipher_n(cipher_0( … cipher_{n-1}(key, key)), cipher_0( … cipher_{n-1}(key, key))) $$ 但我不太相信它的安全性(理論上它可能和最弱的密碼一樣弱),當一個人如此關注密碼分析突破時,引入“受信任”密鑰擴展器將是愚蠢的(為什麼不引入受信任的加密並使用它)。我已將密鑰擴展器問題作為一個單獨的問題提出(Designing a key expander out of ciphers)。