这是一个关于身份验证方案的问题。
假设我有一个共享密钥字符串S和两台计算机C1和C2
现在,我想知道的是,如果有人拦截了一大堆R值,并且有一大堆SR哈希值,他们可以将其用作“婴儿床”来计算出S是什么,从而允许他们伪造指令?
我已经意识到此处可能发生MITM攻击(攻击者拦截响应,更改指令并将其转发)。
老实说,我不知道我在这里处理的是什么,我只有一些关于加密的历史知识,但其中包括使用婴儿床打破它们。我不是一个理论家,所以你可以明确地告诉我特定的强烈哈希值很棒。
也欢迎使用备用身份验证方案,假设现有共享密钥字符串的约束,如本示例所示。将S作为AES的关键,我会更好吗?如果我这样做,我是否仍然可以在加密消息中使用它来防止重放攻击?
欢迎任何和所有建议,我最后偏离了我的问题,所以请随意偏离你的答案!
答案 0 :(得分:4)
您所谈论的内容称为消息身份验证代码 - MAC。如果秘密足够大(这样它不能在合理的时间内强行强制)并且MAC 正确实施,那么不知道明文对攻击者没有帮助。
然而,关键是必须正确实施。问题是加密很难。真的很难。除非您是专家或有专家在上下文中审查您的工作,否则很容易出错。更糟糕的是,人们很容易写出加密,因为他们不知道如何打破,但知情人可以很容易地将其打破。您在评论中得到的建议是正确的建议:使用经过验证的方案,如SSL或TLS,而不是创建自己的方案。
答案 1 :(得分:1)
回答你的问题:
不,打破哈希的唯一方法是蛮力,因为原点中的小差异意味着哈希算法的输出存在很大差异(假设该算法已经被证明是完整的)。你必须知道S在这里执行MITM。
但是,Byron Withlock是正确的:
当有太多更好的方案可用时,使用自制加密方案是疯狂的。将加密保留给专家。 - Byron Whitlock 4分钟前
我和拜伦在一起。只需使用现成的东西,并由具有线索的人进行测试。 SSL怎么样? - Steven Sudit 57秒前
答案 2 :(得分:0)
许多加密哈希函数容易受到延长扩展攻击。这意味着如果攻击者知道散列(S)但不知道S,那么他仍然可以为某些消息M计算散列(S || M)。例如,攻击者可能会尝试通过发送来获取散列(S)其中一方的挑战字符串。您的方案没有详细说明。所以目前尚不清楚这种长度扩展攻击是否可行。为了避免这种攻击,您可以考虑使用HMAC而不是您提出的更简单的哈希方案。
答案 3 :(得分:0)
此方案很弱,因为指令本身未经过身份验证。您希望发送R +指令的MAC - 并确保R是固定长度,以便攻击者无法在R和指令之间进行随机播放。
我认为随机值的目的是确保发送指令的“新鲜度”吗?
如果SSL无法满足您的需求,您还可以考虑使用gpg。这可能比本土密码更好。