Orchard:目前最佳的密码存储方法是什么?

3
我目前正在为我们的客户之一开发 Orchard CMS 平台,这是一个约有400名成员的小俱乐部。最近另一个客户的网站被黑客攻击,并泄露了用户数据(记录在案:我们没有开发他们的网站),因此我们希望为我们现有和新客户提供最佳安全保障。这并不意味着最好的安全性,我们只想让网站足够安全,以至于无论攻击者为获取其数据而付出多大努力,得到的内容也不值得。考虑到我们只有一个较小的会员群体,我怀疑它本来就不具备吸引力,但考虑到最近的事件,我们不能太确定。
我们正在研究的一个主题是密码存储。我们不想在这方面节约,因为这是安全的重要组成部分。我已经阅读了 SHA512、BCrypt 和其他哈希算法的相关信息,但很难形成所有不同算法和方法的清晰概述。这些信息分散在不同的来源中,有些可以在 MSDN 上找到,但有些只能在博客文章和评论中找到。
目前哪些用于哈希和盐哈希密码和其他敏感数据的算法被视为最佳?哪些应该像瘟疫一样避免使用?

首先,您是否计划为Orchard编写自己的用户部分?我相信内置的成员资格使用SHA1来哈希密码。破解SHA1需要一段时间,并且在计算能力方面成本高昂。我认为您可以安全地假设没有人会费心去这么做。 - Hazza
我们想要的是以下内容:1)自定义用户字段(用于公司名称、职能、电话、地址等信息);2)活动计划和用户注册;3)以一种即使非程序员也能操作的方式添加新内容和活动。我不太担心哈希破解,但更关注反向破解:彩虹表和暴力破解。此外,根据我所读的文章,SHA-1正在被淘汰,转而使用SHA-2和SHA-3,因为硬件已经赶上了暴力破解的速度。 - Nzall
作为后续:SHA-1是专为像SSL连接这样的快速加密而设计的。 它仅进行一次加密。 由于这个原因,计算大量哈希非常快。 如果可能的话,我更喜欢使用专为密码保护而设计的算法。 - Nzall
哈希算法与哈希值一起保存在数据库中。如果您查看MembershipService.CreateUser,您会看到设置算法的代码。您可以使用修改后的该代码来创建具有不同算法的自己的用户。 - Bertrand Le Roy
谢谢您的解释。不过那并不是我的问题,我知道如何更改算法。我想知道应该使用哪个算法,因为SHA-1远非加密密码的最佳选择。 - Nzall
这是关于该主题的一个好答案:http://security.stackexchange.com/a/31846/20774 - 简而言之:使用bcrypt、scrypt或pbkdf2。 - 1615903
1个回答

1

PBKDF2/RFC2898/PKCS#5v2、BCrypt 和 SCrypt 是当前存储密码的“好”方式。截至2014年初,所有其他方式都不好。

查看 Orchard SetPassword,它似乎只是一次盐值 SHA-1 哈希。这太可悲了!请参阅 如何安全地哈希密码? 以获取一般性的论述。

在您的情况下,如果您想坚持使用纯.NET,我建议使用Rfc2898DeriveBytes类,它是一个PBKDF2-HMAC-SHA-1实现,将由RNGCryptoServiceProvider类(Orchard使用相同的类生成其盐)生成的每个用户的16字节随机salt输入其中,并使用尽可能多的迭代次数,以期望最大负载时仅略低于CPU限制的服务器 - 该数字应在数万个左右。
将密码哈希值、明文(二进制或十六进制字符串或Base64字符串)盐和迭代次数存储在数据库中。迭代次数应存储,以便稍后可以轻松增加安全性。如果可能,还应存储一个“版本”,以便稍后可以轻松升级到新算法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接