当Windows设置为强制使用FIPS兼容算法时,如果有一个正在运行非FIPS兼容算法的应用程序,该应用程序会抛出异常,说它不是Windows FIPS实现的一部分...我曾经看到有人通过在应用程序代码中注释掉这个检查来绕过FIPS检查。如果一个人可以做到这一点,那么这是否真正符合FIPS标准呢?
Windows如何检测应用程序是否正在使用FIPS兼容算法?
Windows如何检测应用程序是否正在使用FIPS兼容算法?
算法由Windows内置的库或Microsoft发布的产品提供,它们包含符合和不符合规范的算法。
当您的代码调用这些内置库时,这些库会包含对Windows设置的检查,并在设置了这些库时抛出异常。
以下是Sha256Managed
中检查的示例。
public SHA256Managed()
{
#if FEATURE_CRYPTO
if (CryptoConfig.AllowOnlyFipsAlgorithms)
throw new InvalidOperationException(Environment.GetResourceString("Cryptography_NonCompliantFIPSAlgorithm"));
Contract.EndContractBlock();
#endif // FEATURE_CRYPTO
_stateSHA256 = new UInt32[8];
_buffer = new byte[64];
_W = new UInt32[64];
InitializeState();
}