我有一个ASP.Net Web应用程序,我想在其中实现密码安全加密。我没有使用SSL。
为此,我研究并选择CRAM-MD5算法进行密码验证。我在http://pajhome.org.uk/crypt/md5/
实现了javascript cram-md5 algorthim在这里我想知道是否有人使用它并且面临CRAM-MD5身份验证被黑客解码?
解码CRAM-MD5身份验证有哪些可能性?
答案 0 :(得分:4)
MD5不再被视为安全,请参阅MD5 vulnerabilities。为了更安全的实现,请选择其他哈希算法(例如SHA-256或更好)。
答案 1 :(得分:4)
确定MD5不再被认为是安全的,但影响他的密码分析漏洞不会影响HMAC-MD5。这是一个完全不同的野兽。
我同意CRAM-MD5不是最佳推荐,但它确实与MD5的不安全性无关。
了解有什么不同。
请参阅http://www.openauthentication.org/pdfs/Attacks%20on%20SHA-1.pdf,http://tools.ietf.org/html/rfc6151和http://cseweb.ucsd.edu/~mihir/papers/hmac-new.html
答案 2 :(得分:2)
实施自己的加密通常被视为一个坏主意。
加密算法有很多非常具体的要求,即使其中一个没有得到满足(这通常发生在人们自己做的时候),它通常不会比没有加密更加安全。所有
如果你不相信,this Google Tech Talk应该有所帮助。
答案 3 :(得分:2)
不要自行实现哈希算法。 System.Security中有经过充分测试的实现。如上所述,请勿使用MD5。
另外你应该为你的哈希加盐。例如,如果您有一个带有密码字段的用户表,您可以添加一个只是整数的盐字段,或者一个guid,甚至一个时间戳,但这是唯一的。 salt确保您不会在数据库中发生哈希冲突。 Here是关于腌制的讨论。
答案 4 :(得分:2)
与其他人的说法相反,CRAM-MD5是标准且安全的。它在SASL中广泛用于IMAP / SMTP身份验证。您可能正在使用CRAM-MD5阅读您的电子邮件。其他标准哈希算法是PPP摘要身份验证和PPP中使用的CHAP,但由于历史原因,它们都使用MD5。您可以选择更安全的基于SHA1的哈希,但您必须推出自己的挑战方案。
因为它使用挑战/响应方案,所以它不太容易受到MD5哈希的弱点的影响。除非您有特殊的安全要求,否则请使用其中一种标准算法。
答案 5 :(得分:1)
来自Wiki:
Protocol Weaknesses - No mutual authentication; client does not verify server. - Offline dictionary attack to recover password feasible after capturing a successful CRAM-MD5 protocol exchange. - Use of MD5 insufficient. - Carries server requirement for storage of reversibly encrypted passwords.
我害怕使用md5哈希算法,因为从哈希中取回原始密码可以在几秒钟内完成,如果密码不够长(实际上,你可以google for md5 rainbow table,有网站这将在几秒钟内解码这样的哈希并返回结果;))。
答案 6 :(得分:0)
正如其他人所建议的那样;永远不要使用MD5。
但至于实际的答案,它有多么糟糕:
嗯,对于任何一个哈希,它是单向的,所以你不能在这个意义上“解码”它。但是,你可以做的是比可接受的更快地产生碰撞。这允许攻击者强制匹配不匹配的东西。它对类型'md5(this)= md5(那)的推断进行了任何验证,所以这='错'。这打破了数字签名和各种其他事情。
以任何形式远离MD5。
- 编辑
哦,只是一个注释,哈希密码是没有替代SSL。 SSL用于向客户端确保他们正在浏览的网站是您的网站,并保护数据的一般发送。
散列是为了保护您的数据库免受可能的危害。 (而且你总是需要用盐哈希;你将盐存储在数据库中的用户名旁边。)