-2

有人可以解释这个算法是否安全吗?有攻击可以打破吗?该算法使用常见的 XOR 加密,但有一些区别:

M(1) = key XOR Message(1)
M(2) = h(key) XOR Message(2)
M(3) = h(h(key)) XOR Message(3)
等等

笔记:

  1. M(i) 是密文
  2. Message(i) 是我们要加密的消息
  3. key 和 Message(i) 的长度相同**
  4. 攻击者只有密文并且知道密钥制作方案(继续散列)和 XOR 密码学
  5. 哈希算法是 SHA-512
4

2 回答 2

3

如果攻击者知道了明文-密文对,他就可以计算出相应的密钥。他可以从中计算出所有以后的密钥。即它很容易受到已知的纯文本攻击。

请注意,当我说攻击者猜测消息时,我并不是说他确定他的猜测是正确的。他可能会做出几万亿次猜测,如果其中一个是正确的,那么你的整个计划就被打破了。

当然,您绝不能重复使用密钥。


一个更安全(但慢一倍)的算法是:

Key(i+1) = h("A"+key)
M(i) = h("B"+key) XOR Message(i)

或者类似于 CTR 模式的构造:

M(i) =  h(i+key) XOR Message(i)

但我仍然不会使用任何一个。


但是没有理由使用这样的自制算法。有很多现有的算法运行良好。例如,如果您喜欢流密码设计,您可以在 CTR 模式下使用 AES。

于 2012-02-16T22:37:40.720 回答
2

学习加密算法非常有趣。只要记住你是在玩,而不是产生任何严重的东西。只要您只对您的个人日记(甚至可能是密码)进行加密,并且保证数据的安全,您可能会没事的。这种通过默默无闻算作安全。但是,我不建议对您真正需要保密的大量数据或任何可用且外界感兴趣的数据进行加密。


在这种情况下,如果您的消息比密钥大小和散列块大小短,并且密钥是一次性且随机的,那么您实际上是在使用一次性垫,因此一切都在膨胀。如果您的随机数密钥生成是完美的,那么您就有了牢不可破的加密机制。当您将每个块添加到消息中时,您实际上是在使用 SHA-512 计算新密钥,而不是添加任何特定值。如果攻击者可以假设消息由可打印的文本组成,并且消息的长度很长或者密钥被重复使用,那么找到原始密钥应该不会太难。

计算会更有效:

M(1)=h(N + key) XOR Message(1)
M(2)=h(M(1)) XOR Message(2)
M(3)=h(M(2)) XOR Message(3)

(其中 N 是以明文形式传递的密钥被使用的次数。)

这样,坏人就无法提前计算您的密钥序列并在您之前解密您的消息。此外,通过使用密钥的加盐哈希,攻击者将无法预测下一次将使用的密钥序列。


我在某处读到:

  • 密码学的第一条规则是“密码学应该留给专家”。
  • 第二条规则是“你不是专家”。</li>

人们获得计算机科学和数学等领域的博士学位是有原因的。有很多东西要学习和发现。像这样的东西对我来说看起来不错,但毫无疑问它有一个大洞,攻击者可以开着卡车穿过。

玩得开心,不要让像我这样脾气暴躁的人让你失望。/鲍勃·布莱恩

于 2012-08-04T01:18:18.617 回答