2017-09-26 64 views

回答

0

重複使用一次性鍵盤很不好,因爲它提供了有關鍵的信息。

p: a plaintext message to be encrypted: p_1 p_2 ... p_n 
e_i: encryption of p_i with key k_i 
otp: e_i = p_i^k_i for ii in 1..n 

如果您加密多條消息,你異或在一起你喜歡的東西

e1_1^e2_1 = p1_1^k_1^k_1^p2_1 

,自k_1^k_1取消變成

e1_1^e2_1 = p1_1^p2_1 

讓你即刻了解消息的信息,但如果你碰巧知道關於輸入的一些信息,你還可以學習一些關於密鑰的知識。

通過像愷撒密碼,你可能意味着

e2_1 = p2_1^(k_1+13) 

這是假設你的鑰匙和信息空間的26字母表。 不幸的是,在2封郵件之後,你的鑰匙再次包裝,你又回到了以前的同樣的問題。 (還有其他很大的問題)

更一般地說,無論你做了什麼簡單的事情,你都會放棄關於消息的信息,而且通常是關鍵信息。攻擊者通常可以建立一個大矩陣的方程,並使用線性代數來解決密鑰,一旦你給他們足夠的信息。

但是,如果你把你正在做簡單的事情,並使其越來越複雜,最終得到一個點,

kn: the key for the nth message 
kn = f(k,n) for some function k 

使得攻擊者不能學顯著有關f(k,n) given F(K, m)for n!= m , you've invented a stream cipher. People do use stream ciphers all the time; they are not as secure as OTP, but they are a core of internet security. The trick of course is figuring out a good function f`;描述如何做到這一點超出了這個問題的範圍。 (而且我實際上並沒有這個技能)。

+0

而這樣的事情:cipher = m ^鍵,然後洗牌的人物?如果攻擊者不知道我們的洗牌功能,攻擊者將無法獲得關於我們的密鑰或純文本的任何信息。 –

+0

如果攻擊者確實無法獲得任何信息,那麼確定。它不會是通過此外,請注意,洗牌功能不能超過一次。通常還認爲攻擊者知道你的所有功能,只是不知道他們的密鑰。 –