我正在使用.net 3.5,我正在努力使我的应用程序符合FIPS。我不使用任何非FIPS算法,但是当我在生产服务器上运行它时仍然会出现此错误。
此实现不是Windows平台FIPS验证的加密算法的一部分。
以下是我检查过的算法列表,我确信我没有使用它们。
如何找到问题的确切位置或其他想法?
答案 0 :(得分:2)
当您说" FIPS兼容"时,我假设您希望通过更改Local Security Policy settings来强制执行Windows和.Net加密库模式中的FIPS 140合规性。
正如您所发现的那样,使用此机制的FIPS 140合规性(通常是标准的最新版本{1}}的第1级)的挑战是,它阻止了非FIPS 140兼容算法的实例化,即使它们不用于与安全相关的目的。
据推测,您已使用FIPS 140-2或ildasm等工具检查了代码是否存在对不合规算法的引用。否则,调试代码并查看抛出的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投诉实施的批准算法的保护。换句话说:
另请注意,打开FIPS 140模式并不一定会使Windows或您的产品更安全。安全性比选择一种加密算法而不是另一种加密算法复杂得多(或者,具体地说,算法的特定实现相对于另一种实现)。 MD5