一次性鍵盤相關攻擊
在一次性便箋本中,我們總是說不要兩次使用相同的密鑰來加密
ASCII
消息,但是如果我們對XOR
隨機二進制消息使用隨機密鑰,然後重新使用相同的密鑰來獲取XOR
新的隨機消息會破壞我們的密鑰嗎?或者攻擊隨機消息的重用密鑰是不可行的?
一旦你用相同的秘密值異或了兩條消息,最終結果就像你在根本不使用秘密的情況下對它們進行了異或一樣。
給定 $ plaintext_1 $ ⊕ $ key $ = $ cyphertext_1 $ 和 $ plaintext_2 $ ⊕ $ key $ = $ cyphertext_2 $ , 然後 $ cyphertext_1 $ ⊕ $ cyphertext_2 $ == $ plaintext_1 $ ⊕ $ plaintext_2 $ . 因為它用同一個密鑰進行了兩次異或運算,所以雙異或變成了恆等函式,密鑰被簡單地分解了。
如果攻擊者獲知任一消息的任何明文位,他們就可以從另一條密文消息中恢復相應的明文位,此外,他們還可以恢復密鑰的這些位。
所以由你來決定是否 $ cyphertext_1 $ 或者 $ cyphertext_2 $ 有任何已知的資訊。如果明文數據是 ASCII、二進製或 EBCDIC,則完全無關緊要。如果攻擊者可以發現或猜測任何數據是什麼,那麼它就很容易受到攻擊。
這是 Vernam 密碼的典型弱點,也是 Venona 能夠解密蘇聯機密的原因。這就是為什麼如果您多次使用明文或密鑰,它不再是一次性密碼。
當人們說永遠不要使用兩次相同的密鑰來加密兩個不同的消息時,他們的意思是永遠不要使用相同的密鑰流。在這裡,如果您的密鑰流生成是真正隨機的,那麼就可以了。如果您的消息很短,那麼您將產生相同的密鑰流的可能性很小,但這並不重要。
重要的是您不要以相同的方式兩次偽造密鑰流。如果您使用偽隨機生成器,則必須考慮這一點。為 PRNG 提供兩個不同消息的相同種子將導致安全漏洞。