有人可以解释这个算法是否安全?是否有攻击打破这个?该算法使用常见的XOR密码术,但有一些差异:
M(1)=关键XOR消息(1)
M(2)= h(密钥)XOR消息(2)
M(3)= h(h(密钥))XOR消息(3)
等等
注意:
答案 0 :(得分: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。
答案 1 :(得分: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是使用密钥的次数,以明文形式传递。)
这样坏人就无法提前计算你的按键顺序并在你可以之前解密你的消息。此外,通过使用密钥的盐渍哈希,攻击者将无法预测下次将使用的密钥序列。
我在某处读到:
人们有可能获得计算机科学和数学等博士学位。有很多东西需要学习和发现。这样的事情看起来很好,但毫无疑问它有一个巨大的漏洞,攻击者可以驾驶卡车。
玩得开心,不要让像我这样的不高兴的人让你失望。 / Bob Bryan