Im Moment ist der einzige Weg, den Algorithmus RijndaelManaged auf einem Computer mit den lokalen Sicherheitseinstellungen für FIPS aktiviert zu bekommen, ist disable it. Es ist ein Regierungscomputer, also bin ich mir nicht sicher, wie das fliegen wird. Ich habe Posts auf der msdn blog sites gesehen, die sagen, dass sie an einer AES FIPS-konformen Version arbeiten, aber ich kann anscheinend nichts mehr herausfinden. Weiß jemand, wann das passieren könnte?Wann wird der C# AES-Algorithmus FIPS-kompatibel sein?
Antwort
Ich habe das nie vor dieser Frage erkannt, aber du hast Recht. Der Konstruktor hat dies:
public RijndaelManaged()
{
if (Utils.FipsAlgorithmPolicy == 1)
{
throw new InvalidOperationException(Environment.GetResourceString("Cryptography_NonCompliantFIPSAlgorithm"));
}
}
System.Security.Cryptography.AesManaged hat etwas Ähnliches:
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;
}
Haben Sie versucht System.Security.Cryptography.AesCryptoServiceProvider? Es sollte funktionieren, da es die in Windows integrierte FIPS AES-Implementierung CAPI verwendet.
This question auf Microsoft .NET Base Class Library Forum diskutiert welche Algorithmen FIPS-kompatibel sind und gute Links hat.
Es scheint, dass Microsoft a consistent effort to obey the setting von HKEY_LOCAL_MACHINE \ System macht \ CurrentControlSet \ Control \ Lsa \ FipsAlgorithmPolicy auf Pre-Vista-Maschinen und die Verwendung des BCryptGetFipsAlgorithmMode API für die Post-Vista.
Ich gehe davon aus, dass die Zertifizierung einer Implementierung als FIPS-konform nicht unerheblich ist. Aus diesem Grund möchte Microsoft den Prozess wahrscheinlich nicht wiederholen und bietet nur den AesCryptoServiceProvider für Kunden an, die diese Anforderung unbedingt benötigen.
This MSDN blog post hat einen Kommentar, es deutlicher macht:
Der einfache Weg, um herauszufinden, ob ein Algorithmus-konform ist oder nicht, ist zu Blick auf das Suffix. Keiner der * Managed-Typen ist FIPS-zertifiziert. Die Typen * CryptoServiceProvider und * Cng können jedoch FIPS zertifiziert sein. Wenn sie einen Algorithmus implementieren, der FIPS erlaubt, und die Standard-Microsoft-Provider verwenden, dann werden sie sein. B. SHA256Managed ist nicht (weil es * verwaltet wird). SHA256CryptoServiceProvider und SHA256Cng sind.
MD5CryptoServiceProvider ist nicht (weil MD5 kein FIPS-Algorithmus ist).
Wir haben zuerst den AesCryptoServiceProvider getestet, aber wir konnten nicht die gewünschten Encryption/Dechiffrierungsergebnisse erhalten und ich denke nicht, dass es im kompakten Framework unterstützt wird. Alles mit dem RijndealManaged schien in Ordnung zu sein, bis wir auf dieses Problem stießen – SwDevMan81
Mit "Ergebnisse" meinst du Leistung? Es sieht so aus, als ob Microsoft für die aktuelle Zeit nicht einen Prozess zur Überprüfung der Implementierung für etwas jenseits ihrer CAPI durchlaufen möchte. Microsoft hat eindeutig alles getan, um (wahrscheinlich) Kunden von Federal zu erfüllen, die ein einziges Richtlinien-Bit wollten, das sie einsetzen konnten, um Nicht-FIPS-Lösungen zu verbieten. Sie könnten eine Bibliothek wie BouncyCastle (http://www.bouncycastle.org/csharp/index.html) verwenden, die dieses Bit ignoriert, wenn Sie einfach eine verwaltete FIPS-Implementierung verwenden möchten. –
(aktualisierte Antwort mit zusätzlichen Informationen) –
Der nicht verwaltete AesCryptoServiceProvider ist zertifiziert, wenn das Betriebssystem selbst so zertifiziert ist, wie es das Betriebssystem aufruft. Und es wird schneller eine verdammte Seite sein, auf Kosten der plattformübergreifenden Kompatibilität.
Meine Website musste einen Wackler für FIPS-Kompatibilität in .net bekommen.
Woher hat der Verzicht? – SwDevMan81
NETWARCOM? Dies ist das Navy-Kommando, das die Sicherheitsvorschriften verabschiedet. –
Verwandte Frage: http: // Stackoverflow.com/questions/371534/asp-net-2-0-rijndaelmanaged-Verschlüsselung-Algorithmus-vs-fips –
Ich habe gelesen, dass Sie etwas wie diese in eine Konfigurationsdatei einfügen können: configuration> Aber das schien nicht zu funktionieren, die Anwendung wurde noch geschlossen. –
SwDevMan81
Ok, ich habe die EnforceFIPSPolicy-Flag zu arbeiten, stellt sich heraus, dass ich es unter den Tags im Konfigurationsbereich der Datei exe.config hinzufügen wollte, scheint nicht zu der oberen über den ConfigSections und userSettings arbeiten. Hoffnung, die anderen hilft. – SwDevMan81