1

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

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

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

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

4

7 回答 7

4

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

于 2009-08-19T13:24:17.753 回答
4

当然 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/~米希尔/论文/hmac-new.html

于 2011-05-13T23:17:54.033 回答
3

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

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

于 2009-08-19T14:27:34.847 回答
2

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

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

如果您不相信,这个 Google 技术讲座应该会有所帮助。

于 2009-08-19T13:29:27.403 回答
2

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

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

于 2009-08-19T13:32:10.320 回答
1

来自维基

协议弱点

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

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

于 2009-08-19T13:26:53.583 回答
0

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

但至于一个实际的答案,它被破坏得有多严重:

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

远离任何形式的 MD5。

- 编辑

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

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

于 2009-08-19T13:36:19.410 回答