2016-06-08 11 views
0

Openssl ermöglicht den Ein- und Ausstieg aus dem FIPS-Modus. Erlauben die Fenster crypto api und .net Wrapper-Klassen eine ähnliche Funktion?Kann ich FIPS momentan in einer .net-Anwendung aktivieren?

Ich möchte den FIPS-Modus aktivieren, ein Dokument signieren und dann zum normalen Modus zurückkehren.

+0

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

Antwort

1

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.

+0

Danke für die tolle Antwort. Beendet mit OpenSSL mit OpenSSL-Net stattdessen. – GenuineRex