为什么不使用OTP加密多条消息,但是XOR之后的每次加密都会在CT上执行类似于subitution / ceasar密码的操作?
答案 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`的重要信息;描述如何做到这一点超出了这个问题的范围。 (而且我实际上并没有那种技能)。