现在,我可以让RijndaelManaged算法在启用了FIPS的本地安全设置的计算机上工作的唯一方法是disable it。这是一台政府计算机,所以我不确定它会如何飞行。我在msdn blog sites上看过他们说他们正在开发AES FIPS兼容版本的帖子,但我似乎无法找到更多内容。有谁知道这可能发生的时间?
答案 0 :(得分:16)
我在这个问题之前从未意识到这一点,但你是对的。构造函数有:
public RijndaelManaged()
{
if (Utils.FipsAlgorithmPolicy == 1)
{
throw new InvalidOperationException(Environment.GetResourceString("Cryptography_NonCompliantFIPSAlgorithm"));
}
}
System.Security.Cryptography.AesManaged有类似之处:
public AesManaged()
{
if (CoreCryptoConfig.EnforceFipsAlgorithms)
{
throw new InvalidOperationException(SR.GetString("Cryptography_NonCompliantFIPSAlgorithm"));
}
this.m_rijndael = new RijndaelManaged();
this.m_rijndael.BlockSize = this.BlockSize;
this.m_rijndael.KeySize = this.KeySize;
}
你试过System.Security.Cryptography.AesCryptoServiceProvider吗?它应该工作,因为它使用Windows内置的基于CAPI的FIPS AES实现。
Microsoft的.NET基类库论坛上的This question讨论了哪些算法符合FIPS并且链接良好。
似乎Microsoft正在Vista之前的计算机上制作a consistent effort to obey the setting HKEY_LOCAL_MACHINE \ System \ CurrentControlSet \ Control \ Lsa \ FIPSAlgorithmPolicy,并在Vista之后使用BCryptGetFipsAlgorithmMode API。
我认为将实现认证为符合FIPS标准需要付出非常重要的努力,这就是为什么Microsoft可能不想重复该过程并且仅为绝对需要此要求的客户提供AesCryptoServiceProvider。
This MSDN blog post有一条评论更清晰:
找出一个简单的方法 算法是否符合要求 看一下后缀。没有任何一个 *托管类型通过FIPS认证。 * CryptoServiceProvider和* Cng 但是,类型很可能是FIPS 认证。如果他们实施了 FIPS允许的算法,并且是 使用默认的Microsoft提供程序, 然后他们会。
例如,SHA256Managed不是 (因为它是*管理的)。 SHA256CryptoServiceProvider和 SHA256Cng是。
MD5CryptoServiceProvider不是 (因为MD5不是FIPS算法)。
答案 1 :(得分:1)
如果操作系统本身已通过操作系统认证,则非托管AesCryptoServiceProvider经过认证。而且,这将是一个更加困难的网站,代价是跨平台兼容性。
答案 2 :(得分:1)
我的网站必须在.net中获得FIPS合规性的豁免。
答案 3 :(得分:0)
这个问题要比大多数回答理解的问题复杂得多。这就是为什么大多数人的答案都行不通的真正原因(我刚刚花了将近48小时的马拉松式课程试图理解并解决这个问题):
因此,如果您所处的环境如下:
然后,您的ONLY选项(或者至少是我经过广泛搜索后可以找到的唯一的选择,并且需要大量的嚎叫和咬牙切齿)是使用RijndaelManaged并使用Application.exe.config中的“<configuration> <runtime> <enforceFIPSPolicy enabled="false"/> <runtime> </configuration>
”来关闭FIPS强制遵守该特定应用程序。
真是个噩梦!我希望这个答案有助于下一个不幸的灵魂遇到这个问题。
关键字:Cisco IOS SNMPv3 FIPS AES 128 CFB 128 AesCryptoServiceProvider Rijndael