Symmetric

OTP - 重用密鑰但添加 IV,是否足夠安全?

  • March 27, 2016

我已經問過一個類似的問題,現在我可以繼續這個關於添加“額外密鑰”= IV 的問題。

我的最後一個問題是關於在 OTP(One-Time-Pad)中重用密鑰。現在這個問題是關於重用相同的密鑰但添加“額外密鑰”= IV。

**問題:**下面的這個算法可以安全使用嗎?(重用密鑰但添加 IV)

發送第一條消息:

  • $ character_1 + key_1 + IV_1 = cipher_1 $
  • $ character_2 + key_2 + IV_1 = cipher_2 $

注意對像下的小數字,例如: $ IV_1 $ 它定義了它將使用指定組/對象的哪一個。

發送第二條消息:

  • $ character_3 + key_1 + IV_2 = cipher_3 $
  • $ character_4 + key_2 + IV_2 = cipher_4 $

在我發送的第一條消息中,我在所有字元中使用了不同的鍵,但 IV 相同。它會讓人不安全嗎?

在我發送的第二條消息中,我在所有字元中使用了不同的鍵,但鍵與消息相同,但這次我使用了不同的 IV。它會讓人不安全嗎?

我的目標是讓 OTP 不是“一次性的”,而不是生成一個完整的密鑰序列,你只需在每次發送消息時更改 IV。那麼,這不安全嗎?


編輯:重用密鑰是安全的!

我之前曾質疑過我自己的發明:重用相同的密鑰但更改 IV(額外密鑰)。你們中的許多人都反對它,你很難過它不安全,我失去了希望。

現在有一些數學證明,然後再問。這安全嗎?這是我證明為什麼這應該是安全的數學之旅:

這是具有從未使用過的密鑰的標準 OTP 算法(XOR 版本):

  • $ message_1 ⊕ key_1 = cipher_1 $ (消息一)
  • $ message_2 ⊕ key_2 = cipher_2 $ (消息二)

…如果你想分解它,它看起來像這樣:

  • $ c_1 ⊕ c_2 = m_1 ⊕ m_2 ⊕ k_1 ⊕ k_2 $

請注意,這是 OTP 的安全版本,因為密鑰不同,攻擊者在沒有密鑰的情況下無法訪問消息,但如果密鑰相同,攻擊者很容易獲得消息( $ m_1 ⊕ m_2 $ ) 因為當您對兩個完全相同的值進行異或運算時,結果將始終為 0(無),因此密鑰什麼也不做…


現在這是我的 OTP 版本,請注意對像下方的數字(例如: $ c_1 $ ).

我的目標是讓 OTP 不是“一次性的”,而不是生成一個完整的密鑰序列,你只需在每次發送消息時更改 IV。那麼,這不安全嗎?

所以這是算法的樣子:

發送第一條消息:

  • $ character_1 ⊕ key_1 ⊕ IV_1 = cipher_1 $
  • $ character_2 ⊕ key_2 ⊕ IV_1 = cipher_2 $ (請注意,IV 相同,但密鑰不同,因此密鑰用於保護消息。)

發送第二條消息:

  • $ character_3 ⊕ key_1 ⊕ IV_2 = cipher_3 $
  • $ character_4 ⊕ key_2 ⊕ IV_2 = cipher_4 $ (請注意,我重用了密鑰,但我使用了不同的 IV 來保護消息。)

在我發送的第一條消息中,我在所有字元中使用了不同的鍵,但 IV 相同。現在我將模擬自己成為攻擊者,並嘗試攻擊具有相同密鑰的兩條消息:

注意我使用的密文,查找與下面的密文號碼匹配的消息。

  • $ cipher_1 ⊕ cipher_3 = character_1 ⊕ character_3 ⊕ IV_1 ⊕ IV_2 $

(請注意,密碼都使用相同的密鑰,但由於兩個不同的 IV ,它們仍然是安全的)

那次攻擊是針對兩條具有共同密鑰的不同消息,現在我們將測試攻擊一條消息中具有共同 IV 的字元。

  • $ cipher_1 ⊕ cipher_2 = character_1 ⊕ character_2 ⊕ key_1 ⊕ key_2 $

請注意,現在 IV 是匹配的,因此無用,但密鑰仍然不同,並且消息是安全的。

所以我證明了這個算法(重用相同的密鑰但有一個額外的密鑰)是安全的。現在您無需更改密鑰,只需更改 IV。

現在,當我向您證明了為什麼這是安全的時,請分析一下並給我一些弱點。

簡單地說:不。首先回想一下,這是對“One Time Pad”一詞的誤用,因此我們將其稱為 Vigenère 密碼。您可以通過簡單的代數組合確定這是不安全的:

$ \text{attack} = cipher_1 + cipher_2 + cipher_3 + cipher_4 \ \text{Simplify: } \ \text{attack} = character_1 + key_1 + IV_1 + character_2 + key_2 + IV_1 + character_3 + key_1 + IV_2 + character_4 + key_2 + IV_2 \ \text{attack} = character_1 + character_2 + character_3 + character_4 $

如果我們重命名您的 $ IV_1, IV_2 $ 簡單地 $ Key_3, Key_4 $ 然後很明顯,正在發生的只是兩個具有奇怪重疊的 vigenere 密碼。

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