我可以在 .net 应用程序中暂时启用 FIPS 吗?
Can I enable FIPS momentarily in a .net application?
Openssl 允许进入和退出 FIPS 模式。 windows crypto api 和 .net wrapper 类 是否有类似的功能?
我想启用FIPS模式,签署一份文件,然后return进入普通模式。
很遗憾没有;至少,并非没有一些架构上的变化。
您可以通过设置注册表值enable/disable FIPS 模式:
HKLM\System\CurrentControlSet\Control\Lsa\FIPSAlgorithmPolicy\Enabled (DWORD)
0 已禁用,1 已启用
但是,存在一些限制:一旦您将加密提供程序加载到您的进程中,它 "remembers" 在该进程的剩余生命周期内,该 FIPS 模式的状态。所以像这样的代码可以工作:
(注意:两种情况都假设 FIPS 模式在开始时处于关闭状态)
static void Main(string[] args)
{
using (RegistryKey fipsAlgorithmPolicy = Registry.LocalMachine.OpenSubKey(@"System\CurrentControlSet\Control\Lsa\FIPSAlgorithmPolicy", true))
{
fipsAlgorithmPolicy.SetValue("Enabled", 1, RegistryValueKind.DWord);
}
SHA1 sha = new SHA1Managed(); // throws, which is what you want
}
但这样的代码不会:
static void Main(string[] args)
{
SHA1 sha = new SHA1Managed(); // Does not throw, which is expected
using (RegistryKey fipsAlgorithmPolicy = Registry.LocalMachine.OpenSubKey(@"System\CurrentControlSet\Control\Lsa\FIPSAlgorithmPolicy", true))
{
fipsAlgorithmPolicy.SetValue("Enabled", 1, RegistryValueKind.DWord);
}
sha = new SHA1Managed(); // Also does not throw, which is a shame
}
为了让您的代码反映新状态,您必须重新启动进程。话虽如此,您 可以 做的是将执行加密例程的代码隔离到应用程序在设置 FIPS 模式后生成的 "helper" 进程中。实现起来会有点麻烦,但它允许您切换 FIPS 模式并让您的代码按预期运行。
您可以基于每个程序 - 在 .NET 运行时设置架构中将 enforceFIPSPolicy 设置为 true
将指定您要强制执行计算机配置要求,即加密算法必须符合联邦信息处理标准 (FIPS)。
Openssl 允许进入和退出 FIPS 模式。 windows crypto api 和 .net wrapper 类 是否有类似的功能?
我想启用FIPS模式,签署一份文件,然后return进入普通模式。
很遗憾没有;至少,并非没有一些架构上的变化。
您可以通过设置注册表值enable/disable FIPS 模式:
HKLM\System\CurrentControlSet\Control\Lsa\FIPSAlgorithmPolicy\Enabled (DWORD)
0 已禁用,1 已启用
但是,存在一些限制:一旦您将加密提供程序加载到您的进程中,它 "remembers" 在该进程的剩余生命周期内,该 FIPS 模式的状态。所以像这样的代码可以工作:
(注意:两种情况都假设 FIPS 模式在开始时处于关闭状态)
static void Main(string[] args)
{
using (RegistryKey fipsAlgorithmPolicy = Registry.LocalMachine.OpenSubKey(@"System\CurrentControlSet\Control\Lsa\FIPSAlgorithmPolicy", true))
{
fipsAlgorithmPolicy.SetValue("Enabled", 1, RegistryValueKind.DWord);
}
SHA1 sha = new SHA1Managed(); // throws, which is what you want
}
但这样的代码不会:
static void Main(string[] args)
{
SHA1 sha = new SHA1Managed(); // Does not throw, which is expected
using (RegistryKey fipsAlgorithmPolicy = Registry.LocalMachine.OpenSubKey(@"System\CurrentControlSet\Control\Lsa\FIPSAlgorithmPolicy", true))
{
fipsAlgorithmPolicy.SetValue("Enabled", 1, RegistryValueKind.DWord);
}
sha = new SHA1Managed(); // Also does not throw, which is a shame
}
为了让您的代码反映新状态,您必须重新启动进程。话虽如此,您 可以 做的是将执行加密例程的代码隔离到应用程序在设置 FIPS 模式后生成的 "helper" 进程中。实现起来会有点麻烦,但它允许您切换 FIPS 模式并让您的代码按预期运行。
您可以基于每个程序 - 在 .NET 运行时设置架构中将 enforceFIPSPolicy 设置为 true
将指定您要强制执行计算机配置要求,即加密算法必须符合联邦信息处理标准 (FIPS)。