Leider nicht; zumindest nicht ohne architektonische Veränderungen.
Sie können/deaktivieren FIPS-Modus aktivieren, indem Sie einen Registrierungswert festlegen:
HKLM\System\CurrentControlSet\Control\Lsa\FIPSAlgorithmPolicy\Enabled (DWORD)
0 ist deaktiviert, 1
jedoch aktiviert ist, gibt es einige Einschränkungen: wenn Sie die Kryptografieanbieter laden in Ihr Prozess "erinnert" sich der Zustand dieses FIPS-Modus für die restliche Lebensdauer des Prozesses. So Code wie dies funktionieren würde:
(Anmerkung: in beiden Fällen davon ausgehen, dass FIPS-Modus zu Beginn ausgeschaltet ist)
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
}
Aber Code wie dies würde nicht:
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
}
Damit Wenn Ihr Code den neuen Status widerspiegelt, müssen Sie Ihren Prozess neu starten. Wenn Sie das sagen, was Sie könnte tun ist Sequester der Code, der die kryptografischen Routinen in einem "Helfer" -Prozess, dass Ihre Anwendung nach der Festlegung FIPS-Modus spawns führt. Es wäre ein bisschen mühsam zu implementieren, aber es würde Ihnen erlauben, den FIPS-Modus umzuschalten, und Ihr Code würde sich wie erwartet verhalten.
Relevante https://blogs.technet.microsoft.com/secguide/2014/04/07/why-were-not-recommending-fips-mode-anymore/ nicht Ihre Antwort, aber es kann Ihre Suche führen. – Will