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

时间:2015-09-29 05:48:34

标签: c# asp.net cryptography fips

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

  

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

以下是我检查过的算法列表,我确信我没有使用它们。

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

如何找到问题的确切位置或其他想法?

1 个答案:

答案 0 :(得分:2)

当您说" FIPS兼容"时,我假设您希望通过更改Local Security Policy settings来强制执行Windows和.Net加密库模式中的FIPS 140合规性。

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

据推测,您已使用FIPS 140-2ildasm等工具检查了代码是否存在对不合规算法的引用。否则,调试代码并查看抛出的InvalidOperationException的堆栈跟踪以查看问题所在。

实现此目的的一种简单方法是使用泛型类并避免直接调用构造函数。例如,如果您想使用Reflector,而不是:

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

使用:

// 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
}

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

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

然而,迫使Windows FIPS 140合规正在努力实现。大多数客户(包括美国政府)不仅要求使用符合FIPS的算法(或技术上,这些算法的实现)。例如,他们非常高兴您使用Advanced Encryption Standard (AES)来创建字符串的哈希键。

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

  1. 确定产品应保护的每件事
  2. 使用符合FIPS 140标准的库保护它们
  3. 使用工具(例如静态分析),代码审查和/或第三方审核来证明执行。
  4. 另请注意,打开FIPS 140模式并不一定会使Windows或您的产品更安全。安全性比选择一种加密算法而不是另一种加密算法复杂得多(或者,具体地说,算法的特定实现相对于另一种实现)。 MD5