如何检查Asp.NET应用程序是否支持FIPS

Ara*_*sir 5 c# asp.net cryptography fips

我正在使用.net 3.5,我正在尝试使我的应用程序符合FIPS.我不使用任何非FIPS算法,但是当我在生产服务器上运行它时仍然会出现此错误.

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

这是我检查过的算法列表,我确信我没有使用它们.

  • HMACMD5
  • HMACRIPEMD160
  • HMACSHA256
  • HMACSHA384
  • HMACSHA512
  • MD5CryptoServiceProvider
  • RC2CryptoServiceProvider
  • RijndaelManaged的
  • RIPEMD160Managed
  • SHA1Managed

我怎样才能找到问题的确切位置或其他想法?

akt*_*ton 5

当您说“符合 FIPS”时,我假设您希望通过更改本地安全策略设置来在 Windows 和 .Net 加密库模式中强制执行 FIPS 140 合规性。

正如您所发现的,使用此机制实现 FIPS 140 合规性(通常是最新版本标准FIPS 140-2的第 1 级)面临的挑战是,它会阻止非 FIPS 140 合规算法的实例化,即使它们是不用于与安全相关的目的。

想必您已经使用ildasmReflector等工具检查了代码中是否有任何对不合规算法的引用。否则,请调试代码并查看抛出的堆栈跟踪InvalidOperationException以查看问题所在。

实现此目的的一种简单方法是使用泛型类并避免直接调用构造函数。例如,如果您想使用高级加密标准 (AES),而不是:

// Use the faster .Net implementation of AES. Not FIPS 140 compliant.
using (AesManaged aesManaged = new AesManaged())
{
    // Do something
}
Run Code Online (Sandbox Code Playgroud)

使用:

// Let .Net workout which implementation of AES to use. Will use
// a FIPS compliant implementation if FIPS is turned on.
using (Aes aes = Aes.Create())
{
    // Do something
}
Run Code Online (Sandbox Code Playgroud)

除了您的代码之外,请检查您使用的第三方库。您可以使用与上述类似的工具来检查其代码中的任何引用。如果您彻底检查了代码,这可能就是问题所在。请注意,反汇编第三方代码可能会违反版权或许可协议。

另请检查您的 SSL 配置。例如,用于SSL的数字证书不能使用MD5。您还必须使用 TLS 1.0 或更高版本。

然而,强制 Windows FIPS 140 合规性却很困难。大多数客户(包括美国政府)不仅需要使用符合 FIPS 的算法(或从技术上讲,这些算法的实现)。例如,他们非常乐意您使用MD5创建字符串的哈希键。

相反,客户希望您的产品使用加密技术保护的任何内容都受到已批准算法的 FIPS 140 投诉实施的保护。换句话说:

  1. 确定您的产品应保护的每一项内容
  2. 使用符合 FIPS 140 的库保护它们
  3. 使用工具(例如静态分析)、代码审查和/或第三方审核来证明执行情况。

另请注意,打开 FIPS 140 模式并不一定会使 Windows 或您的产品更安全。安全性比选择一种加密算法而不是另一种加密算法(或者,具体来说,选择一种算法的特定实现而不是另一种实现)要复杂得多。Microsoft 不再建议默认启用此功能