【问题标题】:Can One-Time-Pad key be reused if encrypted plaintext is random?如果加密的明文是随机的,可以重复使用 One-Time-Pad 密钥吗?
【发布时间】:2014-05-06 09:51:38
【问题描述】:

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

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

例如数据长度为 1024 位,并且是随机的。密钥长度为 128 位(也是随机的)。通过使用相同密钥对 8 个连续的 128 位块进行异或运算来加密数据是否安全?

【问题讨论】:

  • “安全”到底是什么意思?我想答案将取决于此。

标签: security encryption cryptography encryption-symmetric


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    例如数据长度为 1024 位,并且是随机的。密钥长度为 128 位(随机 也)。通过异或 8 个连续的 128 位块来加密数据是否安全 用同一个钥匙?

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

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

    【讨论】:

      【解决方案3】:

      如果数据本身是随机的,那么它与文本空间的可能性相同,因此任何转换都会带来安全性。 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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-01-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-01
        • 2015-10-08
        • 1970-01-01
        • 2011-01-18
        相关资源
        最近更新 更多