One-Time-Pad

OTP 同一消息加密兩次(使用不同的密鑰)

  • August 24, 2015

假設我們有一條消息 $ m $ 我們用兩個密鑰加密 $ k_1, k_2 $ 這樣 $ k_1 \ne k_2 $ . 這將產生兩個密文 $ c_1, c_2 $ 這樣 $ c_1 = m \oplus k_1, c_2 = m \oplus k_2 $ .

攻擊者設法獲得了這兩個密文,並且還知道這兩個密文 $ c_1, c_2 $ 代表相同的資訊。這些知識是否會以任何方式降低 OTP 安全性?

攻擊者最多能發現的是 $ c_1 \oplus c_2 = m \oplus k_1 \oplus m \oplus k_2 = k_1 \oplus k_2 $ . 但由於兩者 $ k_1 $ 和 $ k_2 $ 是完全隨機的並且沒有被重複使用它不會幫助攻擊者找到 $ k_1 $ 或者 $ k_2 $ . 基本上每個密鑰流仍然用另一個密鑰流加密。

請注意,對於 OTP $ k_1 \ne k_2 $ 是一個無效的約束;密鑰應完全相互獨立。例如,如果你有 $ k_1 = C | 0 $ 和 $ k_1 = C | 1 $ 在哪裡 $ C $ 那麼是一個常數 $ k_1 \ne k_2 $ . 然而,這些密鑰並不代表有效的 OTP 密鑰流;這些必須是完全隨機的。完全隨機也意味著 $ k_1 = k_2 $ 是一種可能。如果您知道消息總是相同的,那麼 $ k_1 \ne k_2 $ 意味著如果你得到 $ c_1 = c_2 $ 消息不同。

所以給定無效的約束 $ k_1 \ne k_2 $ 是真的,那麼問題的答案是肯定的 - 安全性降低了。如果密鑰真的是隨機的,那麼答案是否定的。

$ c_2 : = : m\oplus k_2 : = : m\oplus k_1 \oplus k_1 \oplus k_2 : = : c_1 \oplus k_1 \oplus k_2 $

$ k_1 \oplus k_1 : = : 00000…00000 $

由於固定任一參數會將 xor 變為雙射,因此 $ : k_1 \oplus k_2 $

在非零字元串上是均勻的。 $ ;;; $ 因此,知識 $ c_1 $ 足以從中取樣

$ c_2 $ 的分佈,因此知識不會“以任何方式降低 OTP 安全性”。

但是,如果攻擊者沒有“知道兩個密文 $ c_1,c_2 $ 表示

相同的消息”,然後強制 $ : k_1 \neq k_2 : $ 將是短密鑰的漏洞,因為

$ c_1 = c_2 : $ 會自動表示或建議(取決於消息長度是否

等於密鑰長度)消息不同。 $ ;;; $ (為避免這種情況, $ : k_2 = k_1 : $ 應該

與任何其他可能的值一樣可能 $ k_2 $ ,而不是保證不是這種情況。)

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