使用ceasar加密进行OTP加密

时间:2017-09-26 19:44:36

标签: encryption

为什么不使用OTP加密多条消息,但是XOR之后的每次加密都会在CT上执行类似于subitution / ceasar密码的操作?

1 个答案:

答案 0 :(得分: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

因此,您可以立即了解有关消息的信息,但如果您碰巧知道有关输入的信息,您还可以了解有关密钥的信息。

像Caesar cipher这样的东西你可能意味着

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`的重要信息;描述如何做到这一点超出了这个问题的范围。 (而且我实际上并没有那种技能)。