One-Time-Pad
這是實施一次性墊的正確方法嗎?
我想知道這是否是使用基於此表的一次性墊的正確方法
現在,如果消息較長,我的想法是再次使用相同的 Ascii #2,我知道這是不好的做法,我發現如果密鑰很短,這是唯一的解決方案。另外,如果我對 (#1 + #2) 進行異或運算,我會讀得更好,但我認為它沒用,你有更好的方法來增強它嗎?
不,這不是執行 One Time Pad 的正確方法,即使只有 5 個字母(假設 pad 和 message 必然是范圍內的字母
$$ 65..90 $$). 問題是,當我們看到第一個加密字元是 139 時,因為我們知道填充在範圍內
$$ 65..90 $$,我們知道第一個明文字元在範圍內$$ 65..74 $$, 不在範圍內$$ 75..90 $$. 這是一個巨大的資訊洩露。當密文字元為 130 (resp. 180) 時,我們確切地知道明文字母:它是 65/A (resp. 90/Z)。 這個問題的解決方案是將密文計算為 $ c=((p+m)\bmod 26)+65 $ , 並破譯為 $ m=((c-p)\bmod 26)+65 $ (可
(c-p+26)%26 + 65
在 C 中實現)。作為獎勵,密文由字母組成。如果消息較長,我的想法是再次使用相同的 Ascii #2
這是一個久經考驗的壞主意。這不再是 One Time Pad,也不再是無條件安全的。參見例如如何攻擊兩個時間墊?.