我有一个 ASP.Net Web 应用程序,我想在其中实施密码学以确保密码安全。我没有使用 SSL。
为此,我研究并选择了 CRAM-MD5 算法进行密码验证。我已经在http://pajhome.org.uk/crypt/md5/上实现了 javascript cram-md5 算法
在这里我想知道有没有人使用它并面对CRAM-MD5身份验证被黑客解码?
解码 CRAM-MD5 身份验证的可能性有哪些?
我有一个 ASP.Net Web 应用程序,我想在其中实施密码学以确保密码安全。我没有使用 SSL。
为此,我研究并选择了 CRAM-MD5 算法进行密码验证。我已经在http://pajhome.org.uk/crypt/md5/上实现了 javascript cram-md5 算法
在这里我想知道有没有人使用它并面对CRAM-MD5身份验证被黑客解码?
解码 CRAM-MD5 身份验证的可能性有哪些?
当然 MD5 不再被认为是安全的,但影响他的密码分析漏洞不会影响 HMAC-MD5。这是一个完全不同的野兽。
我同意 CRAM-MD5 不是最好的推荐,但它确实与 MD5 的不安全性无关。
了解有什么不同。
见http://www.openauthentication.org/pdfs/Attacks%20on%20SHA-1.pdf、https://www.rfc-editor.org/rfc/rfc6151和http://cseweb.ucsd.edu/~米希尔/论文/hmac-new.html
与其他人所说的相反,CRAM-MD5 是标准且使用安全的。它在 SASL 中广泛用于 IMAP/SMTP 身份验证。您可能正在使用 CRAM-MD5 阅读您的电子邮件。其他标准散列算法是 HTTP Digest Authentication 和 PPP 中使用的 CHAP,但由于历史原因,它们都使用 MD5。您可以选择更安全的基于 SHA1 的哈希,但您必须推出自己的挑战方案。
因为它使用挑战/响应方案,所以它不太容易受到 MD5 哈希的弱点的影响。除非您有特殊的安全要求,否则请使用其中一种标准算法。
实施自己的密码学通常被视为一个坏主意。
加密算法有很多非常具体的要求,即使其中一个没有得到满足(这通常发生在人们自己做的时候),它通常不会比没有加密更安全。
如果您不相信,这个 Google 技术讲座应该会有所帮助。
不要自行实现散列算法。System.Security 中有经过良好测试的实现。如前所述,不要使用 MD5。
此外,你应该给你的哈希加盐。例如,如果您有一个带有密码字段的用户表,您可以添加一个盐字段,它只是一个整数、一个 guid,甚至是一个时间戳,但它是独一无二的。salt 确保您不会在数据库中发生哈希冲突。这是关于盐渍的讨论。
来自维基:
协议弱点 - 没有相互认证;客户端不验证服务器。 - 在捕获成功的 CRAM-MD5 协议交换后,可以进行离线字典攻击以恢复密码。 - MD5 的使用不足。 - 承载服务器存储可逆加密密码的要求。
我害怕使用 md5 哈希算法,因为从哈希中取回原始密码可以在几秒钟内完成,如果密码不够长(实际上,你可以谷歌搜索 md5 彩虹表,有些网站会解码这样的散列在几秒钟内并返回结果;))。
正如其他人所建议的那样;永远不要将 MD5 用于任何事情。
但至于一个实际的答案,它被破坏得有多严重:
好吧,任何一个哈希都是单向的,所以你不能从这个意义上“解码”它。但是,您可以做的是生成碰撞的速度比可接受的快得多。这允许攻击者强制匹配原本不会匹配的事物。它对“md5(this) = md5(that) so this = that”类型的推理进行任何验证。这会破坏数字签名和其他各种东西。
远离任何形式的 MD5。
- 编辑
哦,请注意,散列密码不能替代SSL。SSL 用于向客户端确保他们正在浏览的站点是您的,并保护数据的一般发送。
散列是关于保护您的数据库免受可能的损害。(而且你总是需要用盐进行散列;你将盐存储在数据库中的用户名旁边)。