如果加密明文是随机的,可以重复使用One-Time-Pad密钥吗?

时间:2014-05-06 09:51:39

标签: security encryption cryptography encryption-symmetric

我想用一个短于明文的单个密钥加密纯随机数据。

我应该使用AES还是其他强大的加密算法,还是可以使用OTP,即只使用唯一密钥逐行(纯随机)明文?

E.g。数据长度为1024位,是随机的。密钥长度为128位(随机也是如此)。通过使用相同的密钥对8个连续的128位块进行编码来加密数据是否安全?

3 个答案:

答案 0 :(得分:1)

您的问题是“通过使用相同的密钥对8个连续的128位块进行编码来加密数据是否安全?”

这不是一次性垫。 One-Time-Pad使用一次,仅使用一次。对部分未加密数据的任何妥协都将允许恢复全部或部分密钥,从而恢复更多未加密数据。

安全加密方案可以防止攻击者知道部分或全部明文:“已知的明文攻击”。你的计划不安全;它容易受到已知的明文攻击。

答案 1 :(得分:0)

  

E.g。数据长度为1024位,是随机的。密钥是128位长(随机   太)。通过xored 8个连续的128位块加密数据是否安全   用同样的钥匙?

如果您的数据是随机的,那么答案是肯定的。

您可以在此处将实际数据视为OTP密钥。它纯粹是随机的,只使用一次,因此无法恢复密钥或数据。

答案 2 :(得分:0)

如果数据本身是随机的,则它与文本空间同样可能,因此任何转换都将导致安全。 XOR或流密码保持块在密文中的关系如下所示。

from Crypto.Cipher import ARC4
key = '1234567812345678'
obj1 = ARC4.new(key)
obj2 = ARC4.new(key)
d1= obj1.encrypt('\x01\x82\x83\x04\x05\x06\x10\x81\x23\x32\x33\x34')
d2= obj2.encrypt('\x81\x02\x83\x84\x85\x86\x90\x01\xa3\xb2\x33\xb4')
print repr(d1)
print repr(d2)


p1='';p2=''
for i in d1:
    if ord(i)>=128: p1+=chr(ord(i)-128)    
    else: p1+=chr(ord(i))

print; print
for i in d2:
    if ord(i)>=128: p2+= chr(ord(i)-128)    
    else: p2+=chr(ord(i))
print p1==p2`    

输出:

'\xbaq\xba\xd0\x0c\xb7\xce&\xd3\x019\xfb'
':\xf1\xbaP\x8c7N\xa6S\x819{'


True