【问题标题】:Cryptography: Decode CRAM-MD5 algorithm密码学:解码 CRAM-MD5 算法
【发布时间】:2009-08-19 13:18:52
【问题描述】:

我有一个 ASP.Net Web 应用程序,我想在其中实施密码学以确保密码安全。我没有使用 SSL。

为此,我研究并选择了 CRAM-MD5 算法进行密码验证。我已经实现了 http://pajhome.org.uk/crypt/md5/ 上提供的 javascript cram-md5 算法

这里我想知道有没有人使用它并面对CRAM-MD5认证被黑客解码?

解码 CRAM-MD5 身份验证的可能性有哪些?

【问题讨论】:

    标签: asp.net encryption cryptography md5


    【解决方案1】:

    MD5 不再被认为是安全的,请参阅MD5 vulnerabilities。要获得更安全的实施,请选择不同的哈希算法(例如 SHA-256 或更好的算法)。

    【讨论】:

    • 不幸的是,当谈到基于散列的身份验证标准时,MD5 是唯一的游戏。尽管 MD5 的弱点众所周知,但没有人宣布 CRAM-MD5、HTTP Digest 或 CHAP 不安全。我认为使用这些仍然比实现自己的身份验证方案更安全。
    • ZZ 编码器:你又完全错了。 MD5 并不是“唯一的游戏”。拜托,你的建议真的很糟糕,没有人会遵循它,并且你自己 zz 编码器:接受 MD5 已死,并做一些研究。
    • 简单地用 SHA-256 替换 MD5 并没有多大帮助。 CRAM-MD5 还有其他严重的弱点。例如,可以进行离线字典攻击。存在更好的身份验证协议,例如建议零售价。
    【解决方案2】:

    当然 MD5 不再被认为是安全的,但影响他的密码分析漏洞不会影响 HMAC-MD5。这是一个完全不同的野兽。

    我同意 CRAM-MD5 不是最好的推荐,但它确实与 MD5 的不安全性无关。

    了解有什么区别。

    http://www.openauthentication.org/pdfs/Attacks%20on%20SHA-1.pdfhttps://www.rfc-editor.org/rfc/rfc6151http://cseweb.ucsd.edu/~mihir/papers/hmac-new.html

    【讨论】:

      【解决方案3】:

      与其他人所说的相反,CRAM-MD5 是标准且使用安全。它在 SASL 中广泛用于 IMAP/SMTP 身份验证。您可能正在使用 CRAM-MD5 阅读您的电子邮件。其他标准散列算法是 HTTP Digest Authentication 和 PPP 中使用的 CHAP,但由于历史原因,它们都使用 MD5。您可以选择更安全的基于 SHA1 的哈希,但您必须推出自己的挑战方案。

      因为它使用挑战/响应方案,它不太容易受到 MD5 哈希的弱点的影响。除非您有特殊的安全要求,否则请使用其中一种标准算法。

      【讨论】:

      • SHA1 也死了。没有任何带有“MD5”的内容可以安全使用。
      • 感谢您的大力参与并提供有用的帮助。据我所知,我认为我应该使用 SSL,因为使用我们自己的使用 CRAM-MD5 的算法实现对解码有一点疑问。我认为怀疑是不好的。谁能帮我找到好的 SSL 证书,因为我发现了更大的列表,其中一些是威瑞信、Thawte 等......
      • 目前还没有针对 HMAC-MD5 的实际攻击。然而,MD5 的弱点非常严重,因此建议为新的实现推荐任何基于 MD5 的算法。使用 HMAC-MD5 或类似产品的人不必惊慌,但仍应尽快更换。
      【解决方案4】:

      不要自行实现散列算法。 System.Security 中有经过良好测试的实现。如前所述,不要使用 MD5。

      此外,您应该对哈希值加盐。例如,如果您有一个带有密码字段的用户表,您可以添加一个盐字段,它只是一个整数、一个 guid,甚至是一个时间戳,但它是唯一的。 salt 确保您不会在数据库中发生哈希冲突。 Here 是关于加盐的讨论。

      【讨论】:

      • 谢谢,散列的好例子
      【解决方案5】:

      实施您自己的密码学通常被视为一个坏主意。

      加密算法有很多非常具体的要求,即使其中一个没有得到满足(这通常发生在人们自己做的时候),它通常不会比没有加密更安全全部。

      如果您不相信,this Google Tech Talk 应该会有所帮助。

      【讨论】:

        【解决方案6】:

        来自Wiki

        协议弱点 - 没有相互认证;客户端不验证服务器。 - 在捕获成功的 CRAM-MD5 协议交换后,可以进行离线字典攻击以恢复密码。 - MD5 的使用不足。 - 承载服务器存储可逆加密密码的要求。

        我害怕使用 md5 散列算法,因为从散列中取回原始密码可以在几秒钟内完成,如果密码不够长(实际上,你可以谷歌搜索 md5 彩虹表,有网站这将在几秒钟内解码此类哈希并返回结果;))。

        【讨论】:

          【解决方案7】:

          正如其他人所建议的那样;永远不要将 MD5 用于任何事情。

          但是对于一个实际的答案,它有多糟糕:

          嗯,任何一个哈希都是单向的,所以你不能从这个意义上“解码”它。但是,您可以做的是生成碰撞的速度比可接受的快得多。这允许攻击者强制匹配原本不会匹配的事物。它对“md5(this) = md5(that) so this = that”类型的推理进行任何验证。这会破坏数字签名和其他各种东西。

          远离任何形式的 MD5。

          -- 编辑

          哦,请注意,散列密码不能替代 SSL。 SSL 用于向客户端确保他们正在浏览的网站是您的,并保护一般的数据发送。

          散列是为了保护您的数据库免受可能的危害。 (而且您总是需要使用盐进行散列;您将盐存储在数据库中的用户名旁边)。

          【讨论】:

          • CRAM-MD5 是一种身份验证协议。这不是在数据库中保存密码。您不能在 CRAM-MD5 中使用散列密码。
          • 我很高兴因为恶意而被否决;但人们阅读此:信息是正确的。见en.wikipedia.org/wiki/CRAM-MD5;它证实了不安全性,您也可以在 wikipedia 上找到 MD5 问题的详细信息。非常重要的是不再使用这个算法。
          • 最后一段“哈希是关于保护您的数据库免受可能的危害”的反对票。这完全脱离了上下文并且令人困惑。 CRAM-MD5 在质询中需要时间戳,因此不能用于保护数据库。实际上,它会阻止您在数据库中使用任何散列密码。请阅读ietf.org/rfc/rfc2195.txt
          • 嘿,我认为你们俩在你的上下文中都是对的。 CRAM-MD5 是一种单向身份验证协议,因此与其他可用协议相比,解码的机会很高。如果我们想传输安全数据,那么我们应该始终使用 SSL。在这里我想知道受信任的证书颁发机构?
          • Hemant:他说的不对。 MD5 没有什么是安全的。一个值得信赖的权威?堆。 Thwate、VeriSign 等都在您的浏览器中列出。
          猜你喜欢
          • 1970-01-01
          • 2020-09-16
          • 1970-01-01
          • 2016-11-03
          • 2011-10-09
          • 2011-07-14
          • 1970-01-01
          • 1970-01-01
          • 2015-06-29
          相关资源
          最近更新 更多