====== 4.3 FIPS-Modus validieren ====== Diese Seite zeigt, wie Sie den FIPS-Modus Ihrer OpenSSL-Installation validieren. ---- ===== FIPS-Provider prüfen ===== $openssl = "D:\Projects\openssl-3.6.0\bin\bin\openssl.exe" # Environment setzen $env:OPENSSL_CONF = "D:\Projects\openssl-3.6.0\bin\ssl\openssl.cnf" # Provider auflisten & $openssl list -providers **Mit FIPS aktiv:** Providers: base name: OpenSSL Base Provider version: 3.6.0 status: active fips name: OpenSSL FIPS Provider version: 3.6.0 status: active **Ohne FIPS:** Providers: default name: OpenSSL Default Provider version: 3.6.0 status: active ---- ===== FIPS-Algorithmen verifizieren ===== Im FIPS-Modus sind nur zertifizierte Algorithmen verfügbar. ==== Erlaubte Hash-Algorithmen ==== & $openssl list -digest-algorithms **FIPS-erlaubt:** * SHA-256, SHA-384, SHA-512 * SHA3-256, SHA3-384, SHA3-512 * SHAKE128, SHAKE256 **Nicht FIPS-erlaubt:** * ~~MD5~~ * ~~SHA1~~ (nur für Kompatibilität) * ~~MD4~~ ==== Erlaubte Signatur-Algorithmen ==== & $openssl list -signature-algorithms **FIPS-erlaubt:** * RSA (≥2048 bit) * ECDSA (P-256, P-384, P-521) * ML-DSA-44, ML-DSA-65, ML-DSA-87 ---- ===== FIPS-Self-Tests ===== Der FIPS-Provider führt beim Laden Selbsttests durch: # Verbose-Modus für Selbsttest-Output $env:OPENSSL_FIPS_TEST = "1" & $openssl list -providers Bei fehlgeschlagenen Selbsttests wird der FIPS-Provider nicht aktiviert! ---- ===== FIPS-Modul-Integrität prüfen ===== Die FIPS-Module haben einen eingebetteten Hash zur Integritätsprüfung: # FIPS-Modul Hash generieren/prüfen & $openssl fipsinstall -verify -module "D:\Projects\openssl-3.6.0\bin\lib\ossl-modules\fips.dll" -in "D:\Projects\openssl-3.6.0\bin\ssl\fipsmodule.cnf" Erwartete Ausgabe: VERIFY PASSED Bei Fehler: VERIFY FAILED Wenn VERIFY FAILED: Die DLL wurde möglicherweise modifiziert. Neu bauen! ---- ===== Test: Nicht-FIPS-Algorithmus blockiert ===== Im FIPS-Modus sollte MD5 blockiert sein: # MD5 sollte fehlschlagen & $openssl dgst -md5 test.txt 2>&1 Erwartete Ausgabe (mit FIPS): Error setting digest xxxx:error:0308010C:digital envelope routines:inner_evp_generic_fetch:unsupported Wenn MD5 funktioniert, ist FIPS nicht aktiv! ---- ===== FIPS-Properties in Code prüfen ===== In C oder .NET können Sie FIPS programmatisch prüfen: // C# P/Invoke Beispiel [DllImport("libcrypto-3-x64.dll")] private static extern int OSSL_PROVIDER_available(IntPtr libctx, string name); public static bool IsFipsAvailable() { return OSSL_PROVIDER_available(IntPtr.Zero, "fips") == 1; } ---- ===== Checkliste für FIPS-Compliance ===== | # | Prüfpunkt | Status | |---|-----------|--------| | 1 | ''enable-fips'' beim Build verwendet | ☐ | | 2 | ''fips.dll'' in ''ossl-modules/'' vorhanden | ☐ | | 3 | ''fipsmodule.cnf'' generiert | ☐ | | 4 | ''openssl.cnf'' FIPS-Provider aktiviert | ☐ | | 5 | ''openssl list -providers'' zeigt FIPS aktiv | ☐ | | 6 | ''fipsinstall -verify'' PASSED | ☐ | | 7 | MD5 blockiert (Test) | ☐ | ---- ===== Probleme beheben ===== ==== "FIPS provider not available" ==== - Wurde mit ''enable-fips'' gebaut? - Ist ''fips.dll'' vorhanden? - Ist ''openssl.cnf'' korrekt konfiguriert? ==== "Self test failed" ==== - Module neu installieren: ''nmake install_fips'' - Hash neu generieren: ''openssl fipsinstall ...'' ==== MD5 funktioniert (sollte blockiert sein) ==== - ''default_properties = fips=yes'' in openssl.cnf fehlt - ''OPENSSL_CONF'' Environment nicht gesetzt ---- ===== Weiter zu ===== * [[.:build:windows-fips|FIPS Build]] * [[.:integration:start|5. Integration]] ---- //Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional//