C# 发布站点上的加密类

C# 发布站点上的加密类,c#,security,hash,C#,Security,Hash,最近我遇到了System.Web.Helpers.Crypto类 使用Crypto.HashPassword函数似乎是一个非常简单的解决方案。但我不确定这句话(来自msdn): 密码散列是使用RFC2898算法使用 128位salt、256位子键和1000次迭代。文件的格式 生成的hash bytestream为{0x00,salt,subkey},即base-64 在返回之前对其进行编码 所以我的问题是: 1) 在生产/发布站点上使用此类可以吗 2) 1000次迭代的限制是否揭示了网站的安全问

最近我遇到了System.Web.Helpers.Crypto

使用Crypto.HashPassword函数似乎是一个非常简单的解决方案。但我不确定这句话(来自msdn):

密码散列是使用RFC2898算法使用 128位salt、256位子键和1000次迭代。文件的格式 生成的hash bytestream为{0x00,salt,subkey},即base-64 在返回之前对其进行编码

所以我的问题是:

1) 在生产/发布站点上使用此类可以吗

2) 1000次迭代的限制是否揭示了网站的安全问题

3) 如果是的话,有没有一个简单的方法来克服这个限制

我知道调用
Crypto.HashPassword(MyPlainText)
将自动生成salt并将它们散列在一起,但是如果我还将随机salt与我的纯文本连接起来,如下面的代码:

var myAdditionSalt=Crypto.GenerateSalt()
Crypto.HashPassword(MyPlainText+myAdditionSalt)

并将myAdditionSalt存储在数据库中。 它会增加安全性吗

1) 在生产/发布站点上使用此类可以吗

与任何系统一样,安全控制的有效性取决于对手为破坏控制而投入的资源。如果折衷的结果是最小的,那么即使在生产环境中,也可以减少迭代次数

应该补充的是,密码存储库对攻击者具有内在价值,因为用户可以跨多个服务重用密码。在某些情况下,密码本身需要比凭据保护的资源更大的保护

2) 1000次迭代的限制是否揭示了网站的安全问题

我建议审查问题和回答。1000次迭代是RFC2898(2000年出版)中建议的最小迭代次数。在A中,DurMuthet等人得出结论:“我们认为在一个应用程序或系统的生命周期中,一个安全系统在一个恒定的(最小)量的1000哈希迭代中运行是不够的,如PBKDF2的RFC 2898所定义的,”而是推荐一个由可用的计算资源限制的动态迭代计数。 3) 有没有一个简单的方法来克服这个限制

虽然稍微复杂一些,但您可以直接在
System.Cryptography
命名空间中使用该类。此类提供了一个接受密码、哈希和迭代次数作为参数的函数。(有关功能实现示例,请参见。)

4) [将额外的salt与密码连接]会提高安全性吗

在这种特殊情况下,额外的salt将有效地向用户密码引入熵(复杂性),就好像用户输入了更复杂的密码一样。由于需要存储额外的salt以进行密码验证,因此如果攻击者有权访问第二个salt,则增加的安全增益可能会被否定


这就是说,密码规范对算法变化高度敏感,偏离规范会引入可通过密码分析利用的漏洞。加强安全性的最佳实践是增加迭代次数(RFC 299支持),而不是引入非标准增强。

1000相当低。我更喜欢使用.net内置实现的20000次,如果使用一个像样的实现,则更喜欢使用更大的值。这就是为什么我不理解1000次迭代的限制。他们的意思是在发布网站上使用还是只用于开发?顺便问一下,为什么投票否决?