SwD*_*n81 17 c# security fips rijndael rijndaelmanaged
现在,我可以让RijndaelManaged算法在打开FIPS的本地安全设置的计算机上工作的唯一方法就是禁用它.这是一台政府计算机,所以我不确定它会如何飞行.我在msdn博客网站上看过他们说他们正在开发AES FIPS兼容版本的帖子,但我似乎无法找到更多.有谁知道这可能发生的时间?
Jef*_*ser 16
我在这个问题之前从未意识到这一点,但你是对的.构造函数有:
public RijndaelManaged()
{
if (Utils.FipsAlgorithmPolicy == 1)
{
throw new InvalidOperationException(Environment.GetResourceString("Cryptography_NonCompliantFIPSAlgorithm"));
}
}
Run Code Online (Sandbox Code Playgroud)
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;
}
Run Code Online (Sandbox Code Playgroud)
你试过System.Security.Cryptography.AesCryptoServiceProvider吗?它应该工作,因为它使用Windows内置的基于CAPI的FIPS AES实现.
微软.NET基类库论坛上的这个问题讨论了哪些算法符合FIPS并且具有良好的链接.
似乎Microsoft正在努力遵守 Vista之前的机器上HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa\FIPSAlgorithmPolicy 的设置以及在Vista之后使用BCryptGetFipsAlgorithmMode API.
我认为将实现认证为符合FIPS标准需要付出非常重要的努力,这就是微软可能不想重复该过程并且仅为绝对需要此要求的客户提供AesCryptoServiceProvider的原因.
这篇MSDN博客文章的评论更加清晰:
判断算法是否合规的简单方法是查看后缀.*托管类型均未通过FIPS认证.但是,*CryptoServiceProvider和*Cng类型可能已通过FIPS认证.如果他们实现了FIPS允许的算法,并且正在使用默认的Microsoft提供程序,那么它们将是.
例如,SHA256Managed不是(因为它是*Managed).SHA256CryptoServiceProvider和SHA256Cng是.
MD5CryptoServiceProvider不是(因为MD5不是FIPS算法).
这个问题比大多数响应者所理解的要复杂得多。这是大多数人的答案不起作用的真正原因(我刚刚花了近 48 小时的马拉松会议试图理解和解决这个问题):
因此,如果您处于以下情况的环境中:
然后,你唯一的选择(或者至少我在广泛搜索和大量哀号和咬牙切齿之后唯一能找到的)是使用 RijndaelManaged 并使用<configuration> <runtime> <enforceFIPSPolicy enabled="false"/> <runtime> </configuration>
Application.exe.config 中的“ ”来关闭 FIPS 强制合规性特殊应用。
什么样的恶梦!我希望这个答案可以帮助下一个不幸的灵魂遇到这个问题。
关键词:Cisco IOS SNMPv3 FIPS AES 128 CFB 128 AesCryptoServiceProvider Rijndael
归档时间: |
|
查看次数: |
11090 次 |
最近记录: |