部分已知的明文会削弱哈希吗?

时间:2009-09-22 16:50:26

标签: authentication encryption hash

这是一个关于身份验证方案的问题。

假设我有一个共享密钥字符串S和两台计算机C1和C2

  • 计算机一(C1)将随机字符串(R)发送到计算机二(C2)
  • C2哈希(比如SHA256)S和R(SR)的连接
  • C2将SR的哈希值与一些指令
  • 一起发送给C1
  • C1将接收到的SR散列与其自己的SR散列进行比较,并在匹配
  • 时执行指令
  • 洗涤,漂洗,重复使用不同的R

现在,我想知道的是,如果有人拦截了一大堆R值,并且有一大堆SR哈希值,他们可以将其用作“婴儿床”来计算出S是什么,从而允许他们伪造指令?

我已经意识到此处可能发生MITM攻击(攻击者拦截响应,更改指令并将其转发)。

老实说,我不知道我在这里处理的是什么,我只有一些关于加密的历史知识,但其中包括使用婴儿床打破它们。我不是一个理论家,所以你可以明确地告诉我特定的强烈哈希值很棒。

也欢迎使用备用身份验证方案,假设现有共享密钥字符串的约束,如本示例所示。将S作为AES的关键,我会更好吗?如果我这样做,我是否仍然可以在加密消息中使用它来防止重放攻击?

欢迎任何和所有建议,我最后偏离了我的问题,所以请随意偏离你的答案!

4 个答案:

答案 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。这可能比本土密码更好。