【问题标题】:Does partial known plaintext weaken a hash?部分已知明文会削弱哈希吗?
【发布时间】:2010-11-30 11:32:12
【问题描述】:

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

假设我有一个共享的秘密字符串 S,以及两台计算机,C1 和 C2

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

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

我已经意识到这里存在 MITM 攻击的可能性(攻击者拦截响应、更改指令并转发它)。

老实说,我不知道我在这里处理的是什么,我只有一点关于加密的历史知识,但其中包括使用婴儿床来破解它们。我不是理论家,所以您可以明确告诉我有关特定强哈希的任何内容都会很棒。

也欢迎使用其他身份验证方案,假设现有共享密钥字符串的约束,如本例所示。仅使用 S 作为 AES 的密钥会更好吗?如果我这样做了,我还能在加密消息中使用它来防止重放攻击吗?

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

【问题讨论】:

  • 在有很多更好的方案可用时使用自制的加密方案是疯狂的。将加密留给专家。
  • 我和拜伦在一起。只需使用现成的东西并由有线索的人进行测试。 SSL 怎么样?
  • 我不明白 jmhobbs 怎么说他将实施自己的计划。这可能纯粹是一个假设性问题。
  • 我只是在思考,我不想在计算机科学水平上编写代码。我只是对带有哈希和身份验证的“婴儿床”的概念感到好奇。文章和论文的链接也欢迎:-)

标签: authentication encryption hash


【解决方案1】:

您所说的称为消息验证码 - MAC。如果秘密足够大(以至于不能在合理的时间内暴力破解)并且 MAC正确实施,那么不,知道明文对攻击者没有帮助。

然而,关键是必须正确实施。问题是加密很难。真的很难。除非您是专家或有专家在上下文中审查您的工作,否则很容易犯错误。更糟糕的是,人们很容易编写他们不知道如何破解的加密货币,但知道的人很容易破解它。

您在 cmets 中得到的建议是正确的建议:使用经过验证的方案,如 SSL 或 TLS,而不是创建自己的方案。

【讨论】:

  • 我刚刚重读了这篇,忘了提一下:您的原始方案似乎没有将指令作为 MAC 的一部分进行散列 - 这意味着中间的人将能够替换指令, 并发送 [instruction, HASH(secret,nonce)],从而执行他/她想要的任何东西(nonce 是你从 C1 发送到 C2 的随机数据)。字符串的随机性也将是一个严重的问题——如果随机数生成器恰好有一个短周期,那么攻击者可以重播之前的指令(如果它是可预测的,则可能会发生其他不好的事情)。加密错误很容易:)
【解决方案2】:

回答你的问题:

不,破解散列的唯一方法是蛮力,因为原点的小差异意味着散列算法的输出有很大的差异(假设该算法已被探测到是完整的)。您必须知道 S 才能在此处执行 MITM。

但是,Byron Withlock 是正确的:

当有太多更好的方案可用时使用自制的加密方案是疯狂的。将加密留给专家。 – Byron Whitlock 4 分钟前

我和拜伦在一起。只需使用现成的东西并由有线索的人进行测试。 SSL 怎么样? – Steven Sudit 57 秒前

【讨论】:

    【解决方案3】:

    许多加密哈希函数容易受到长度扩展攻击。这意味着如果攻击者知道散列(S)但不知道 S,那么他可能仍然能够为某些消息 M 计算散列(S || M)。例如,攻击者可能会尝试通过发送向其中一方的挑战字符串“”。您的方案没有详细说明。因此,尚不清楚这种长度扩展攻击是否可能。为避免此类攻击,您可能会考虑使用 HMAC,而不是您建议的更简单的散列方案。

    【讨论】:

    • ...这样您就可以在 nonce R 指令负载上生成带有密钥 S 的 HMAC,从而防止 MITM 和重放。
    【解决方案4】:

    这个方案很弱,因为指令本身没有经过身份验证。您想发送 R + 指令的 MAC - 并确保 R 是固定长度的,这样攻击者就无法在 R 和指令之间来回移动。

    我认为随机值的目的是为了保证发送指令的“新鲜度”?

    如果 SSL 不能满足您的需求,您也可以考虑使用 gpg。这可能比本土加密货币要好得多。

    【讨论】:

      猜你喜欢
      • 2016-03-21
      • 2013-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-13
      • 1970-01-01
      相关资源
      最近更新 更多