One-Time-Pad

Vernam Cipher 的小問題

  • November 23, 2018

我們有一個任務,內容如下:

給定的是一種有 3 個字母的語言:A、B、C。

二進製表達式為:

A = 000, B = 1111 and C = 0011 

在這種語言中使用相同的密鑰對兩個單詞進行了加密:

W1 = 0101001110111010101100100 
W2 = 1011001010000000000101011 

確定可能的消息對。

我怎麼能做到這一點?

我認為猜測關鍵位並檢查明文在兩個單詞中是否有效是要走的路(很像二進制謎題)。

例如,很明顯至少有一個單詞以 an 開頭,A因為如果你取前 4 位,除了最後一個之外,它們都是不同的。這排除BB, BC,CBCC作為第一個字母的組合,因為它們在最後一位為 1 的情況下不會相差 3 位。同樣,您應該能夠排除其他兩種組合,只留下一個組合 - 不幸的是,您沒有還不知道是AX還是XA。類似地,您希望在最後一位上使用 AA 和 B 組合,因為這些位必須相互補碼。

我將使用從左到右猜測帶有回溯的關鍵位來實現這一點,以防 W1 或 W2 的模式變得不可能。你甚至可以從每一端開始,但我認為沒有必要。您應該能夠手動完成此操作,但程式也可能很有趣。

最後我看到 13 位設置為 0 和 13 位設置為 1,我不得不回溯 18 次才能找到解決方案(假設在可能回溯之前將位設置為 0,只需從左到右工作),這完全是對一個普通人來說是可行的。當然給出密鑰,W1 或 W2 的模式給出了整個結果,所以我不會這樣做。

在這種特殊情況下,找到的密鑰的補碼也是一種解決方案。


高級設計:

  • 為密鑰創建一棵樹;

  • 創建程式碼以執行關鍵位的呼吸優先搜尋;

  • 創建一個方法來檢查給定的(部分密鑰)是否有效;

    • 創建一個創建模式樹的方法;
    • 檢查 W1 和 W2 - 直到密鑰大小 - 如果密鑰產生直到葉節點的樹;
    • 為此,您可以使用深度優先搜尋來搜尋​​樹;
  • 創建檢查以查看:

    • 如果密鑰完整;
    • 最後是否有部分匹配;

請注意正確檢查結束條件,否則您可能需要在最後進行一些手動重組。

這不是一個容易程式的任務。基本上,您需要為密鑰和生成的明文創建一棵樹來執行模式匹配。

之後,Maarten 評論,這裡是通過兩次墊解決的介紹;

我們有;

A = 000
B = 1111
C = 0011

0101001110111010101100100 
1011001010000000000101011
-------------------------
1110000100111010101001111  x-ored ciphertext gives us x-ored plaintext
1111                       only this possible.
000
-------------------------
1110000100111010101001111  
1111                       
0001111                    only this possible.
-------------------------
1110000100111010101001111  
11111111                       
0001111                    only this possible.
-------------------------
1110000100111010101001111  
11111111                       
0001111                    Now here we have a branching 000 and 0011 
                          but one causes an immediate contradiction.

其餘的留給OP。

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