Encryption
蠻力攻擊 One Time Pads 可行嗎?
我有一個用 One Time Pad 編碼的密文。我不知道關鍵。我怎樣才能找到解碼後會產生有意義的純文字的可能鍵?
一次性填充的有趣特性是每個合理的明文(給定長度約束,即與密文長度相同,可能包括一些填充)都有一個相應的密鑰,該密鑰產生特定的密文。
正如 CodesInChaos 的評論中所提到的,可以通過簡單地對明文和密文進行異或運算來檢索此密鑰(如果您使用一次性鍵盤的異或變體……對於加法變體,您必須減去)。
此外,假設一個隨機密鑰,在給定密文的情況下,每個明文都具有相同的機率,因為它在不知道密文的情況下(除了長度)。
這被稱為完全保密——你不能從密文中獲得你以前不知道的明文資訊(除了長度,但這也可以通過填充在一定程度上隱藏)。
每個具有完美保密性的密碼系統都必須擁有與消息一樣長的密鑰,並且每個密鑰只能使用一次。這就是為什麼在實踐中不經常使用一次性密碼本或其他完美加密系統的原因。
您將需要多個使用相同密鑰加密的密文才能做到這一點。如果密鑰只使用一次,則一次性密碼本是完全保密的(這就是為什麼它被稱為一次性密碼本)。
您在沒有更多密文的情況下找到實際密鑰的唯一方法是嘗試所有可能的密鑰組合(即暴力破解),但如果您的密文也很長,這可能需要很長時間。
如果您設法獲得多個密文,則可以將兩個密文異或在一起,並使用嬰兒床拖動技術來確定明文的內容。這是可能的,因為兩個密文的異或與將兩個明文異或相同:
Let: c1 = p1 xor k c2 = p2 xor k Then: c1 xor c2 = (p1 xor k) xor (p2 xor k) c1 xor c2 = p1 xor k xor p2 xor k (associative property of xor) c1 xor c2 = p1 xor p2 xor k xor k c1 xor c2 = p1 xor p2 xor 0 (k xor k = 0) c1 xor c2 = p1 xor p2 (x xor 0 = x)
請參閱我發布的連結,了解如何使用這種關係來發現明文。
另外,請注意,如果我有兩個鍵 k1、k2 而不是只有 k,則上述屬性將不成立。