【问题标题】:FIPS validated algorithm to store passwords in a database?FIPS 验证算法将密码存储在数据库中?
【发布时间】:2011-09-21 19:08:21
【问题描述】:

我正在寻找一种经过 FIPS 验证的哈希算法来将密码存储在数据库中。 我确实使用了以下代码,但仍然收到错误

此实现不是 Windows 平台 FIPS 验证的加密算法的一部分。

SHA1CryptoServiceProvider Testsha1 = new SHA1CryptoServiceProvider();
byte[] hashedBytes;
UTF8Encoding encoder = new UTF8Encoding();
hashed = Testsha1.ComputeHash(encoder.GetBytes(strPassword));
StringBuilder sb = new StringBuilder();
for (int i = 0; i < hashed.Length; i++)
{
    sbuilder.Append(hashed[i].ToString("x2"));
}
string Password = sb.ToString();

【问题讨论】:

  • 您在哪里看到该错误消息?
  • @n8wrl 在执行 EnableFIPS 安全策略时,某些安全类(如 SHA1Managed)会引发异常。
  • 我在尝试运行我的 Web 应用程序时确实看到了错误。
  • @Macnique - 发布的代码不应导致该异常 - SHA1CryptoServiceProvider 将使用 Window 的 CSP。请在堆栈跟踪中验证这一点,并将其发布到您的问题中。
  • @vcsjones 我正在使用 SHA1,因为我读到它符合 FIPS。它与 IIS 有关系吗?

标签: c# asp.net fips


【解决方案1】:

不应使用普通 SHA-1 存储密码。 PBKDF2 是一个不错的选择。在 .net 中,您可以将其与 Rfc2898DeriveBytes 类一起使用。见https://security.stackexchange.com/questions/2131/reference-implementation-of-c-password-hashing-and-verification/2136#2136

您可能需要将底层哈希函数更改为 SHA-256。据我所知,SHA-1 未经 NIST 批准。

【讨论】:

  • SHA1 可以被 NIST(FIPS Pub 180 的一部分)接受——如果微软能够控制 HMAC 算法来使用 SHA256,那就太好了。微软在 CSP 中的实现是140-2 approved
  • 它看起来像在 web.config 的 system.web 部分下添加以下内容 解决了我的问题
【解决方案2】:

在 system.web 部分下的 web.config 中添加以下行

&lt;machineKey validationKey="AutoGenerate,IsolateApps" ecryptionKey="AutoGenerate,IsolateApps" validation="3DES" decryption="3DES"/&gt;

解决了我的问题

【讨论】:

    【解决方案3】:

    我正在寻找一种经过 FIPS 验证的哈希算法来将密码存储在数据库中。

    使用 SHA-2 系列的哈希值之一。例如,SHA256。

    不要使用托管类 - 它们未经 FIPS 验证。相反,请使用SHA256CryptoServiceProvider 和朋友。

    【讨论】:

      猜你喜欢
      • 2012-01-04
      • 1970-01-01
      • 1970-01-01
      • 2016-01-15
      • 1970-01-01
      • 2011-04-26
      • 1970-01-01
      • 2012-09-25
      • 2011-02-27
      相关资源
      最近更新 更多