C# 如何在编译时检查FIPS合规性?

C# 如何在编译时检查FIPS合规性?,c#,visual-studio,fips,C#,Visual Studio,Fips,我有一个大型C#.NET项目,我必须将其转化为一个项目,因此我需要找到并更改调用任何不兼容API的每一段代码 如果我在注册表中启用FipsAlgorithmPolicy,我会收到运行时异常,如“此实现不是Windows平台FIPS验证的加密算法的一部分。”这很好,但通过测试验证整个代码库既耗时又不可靠 有没有办法让Visual Studio 2017/2019在编译时为每个非投诉API调用发出错误或警告?有针对所有弱加密和随机类的规则。这将有助于您前进:)。也支持这些类型的检查 如果需要,可以编

我有一个大型C#.NET项目,我必须将其转化为一个项目,因此我需要找到并更改调用任何不兼容API的每一段代码

如果我在注册表中启用FipsAlgorithmPolicy,我会收到运行时异常,如
“此实现不是Windows平台FIPS验证的加密算法的一部分。”
这很好,但通过测试验证整个代码库既耗时又不可靠

有没有办法让Visual Studio 2017/2019在编译时为每个非投诉API调用发出错误或警告?

有针对所有弱加密和随机类的规则。这将有助于您前进:)。也支持这些类型的检查

如果需要,可以编辑规则集文件以使这些规则出错

或者,您可以将它们添加为NuGet包引用,以便即使在构建服务器上也能触发它们

  <ItemGroup>
    <PackageReference Include="Microsoft.CodeAnalysis.FxCopAnalyzers" Version="2.9.8"/>
    <PackageReference Include="SecurityCodeScan" Version="3.5.0"/>
  </ItemGroup>


请记住,如果以不同的方式使用散列算法(如git中的提交散列),它可能不符合FIPS的数据存储、加密和验证要求,但它仍然是有效的代码。

FIPS并不是为了防止使用弱加密。它要求您使用已批准的算法列表,这些算法可能已经被破坏。这就是为什么不再推荐FIPS的原因。当然,当时的列表排除了当时的旧东西。如果法律与意图相反,FIPS合规部试图排除当时的弱者。