3

我目前正在为我们的一个客户开发一个 Orchard CMS 平台,这是一个大约 400 名成员的小俱乐部。在另一位客户最近的网站遭到黑客入侵并且用户数据被泄露(记录在案:我们没有开发他们的网站)之后,我们希望为我们现有的和新的客户提供最佳的安全性。这并不意味着最好的安全性,我们只是想让网站足够安全,以至于网站中可以找到的任何数据都不值得攻击者为获取它而付出的努力。由于我们这个网站的会员池很小,我怀疑它是否具有吸引力,但考虑到最近发生的事件,我们不能太确定。

我们正在研究的主题之一是密码存储。我们不想忽略这一点,因为这是安全的重要组成部分。我已经阅读了 SHA512、BCrypt 和其他散列算法,但很难对在线找到的所有不同算法和方法形成清晰的概述。这些信息分布在不同的来源,其中一些可以在 MSDN 上找到,但有些只能隐藏在博客文章和评论中。

目前,哪些算法对密码和其他敏感数据进行散列和加盐散列处理被认为是最好的?哪些是像瘟疫一样要避免的?

4

1 回答 1

1

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

查看Orchard SetPassword,它似乎是单轮加盐 SHA-1。这太可怜了!请参阅如何安全地散列密码?对于一般论文。

在您的情况下,如果您想坚持使用纯 .NET,我会说使用Rfc2898DeriveBytes Class ,这是一个 PBKDF2-HMAC-SHA-1 实现,为它提供由RNGCryptoServiceProvider 类生成的随机每用户 16 字节盐( Orchard 用于生成其 salt 的同一类),以及您可以使用的尽可能多的迭代,期望在最大预期负载下略低于 CPU 绑定服务器 - 这个数字应该是数万。

在数据库中存储密码哈希、明文(二进制或十六进制字符串或 Base64 字符串)盐和迭代次数。应存储迭代次数,以便以后轻松提高安全性。如果可能,还存储一个“版本”,以便您以后可以轻松升级到新算法。

于 2014-02-25T05:57:18.483 回答