====== 3.2 Windows FIPS Build ======
Diese Anleitung erklärt, wie Sie OpenSSL mit FIPS 140-3 Unterstützung kompilieren.
----
===== Was ist FIPS 140-3? =====
**FIPS 140-3** (Federal Information Processing Standard) ist ein US-amerikanischer Standard für kryptographische Module. Er definiert:
* Welche Algorithmen erlaubt sind
* Wie Schlüssel generiert werden müssen
* Selbsttests beim Start
* Tamper-Detection
**Wer braucht FIPS?**
| Branche | FIPS erforderlich? |
|---------|-------------------|
| US-Behörden | **Ja** |
| EU-Behörden | Oft (BSI empfiehlt) |
| Banken | **Meist ja** |
| Gesundheitswesen | **Oft ja** |
| Interne Apps | Selten |
----
===== Voraussetzungen =====
Zusätzlich zu den [[.:vorbereitung:windows-tools|Standard-Voraussetzungen]]:
* ☑ NASM ist **Pflicht** (nicht optional!)
* ☑ Sauberes Build-Verzeichnis
----
===== Build-Schritte =====
==== Schritt 1: Umgebung vorbereiten ====
REM Pfad anpassen: Community, Professional oder Enterprise
call "%ProgramFiles%\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvars64.bat"
set PATH=%STRAWBERRY_PERL%\bin;%LOCALAPPDATA%\bin\NASM;%PATH%
cd /d %OPENSSL_SRC%
==== Schritt 2: Mit FIPS konfigurieren ====
perl Configure VC-WIN64A enable-fips --prefix=D:\Projects\openssl-3.6.0\bin --openssldir=D:\Projects\openssl-3.6.0\bin\ssl
**Wichtig:** Der Parameter ''enable-fips'' aktiviert den FIPS-Provider.
==== Schritt 3: Kompilieren ====
nmake
==== Schritt 4: Installieren (inkl. FIPS) ====
nmake install_sw install_fips
''install_fips'' installiert den FIPS-Provider und generiert die Modul-Konfiguration!
----
===== Ergebnis =====
Zusätzlich zu den Standard-Dateien:
bin\
├── bin\
│ ├── openssl.exe
│ ├── libcrypto-3-x64.dll
│ └── libssl-3-x64.dll
├── lib\
│ └── ossl-modules\
│ ├── fips.dll # FIPS Provider Modul
│ └── legacy.dll
└── ssl\
├── openssl.cnf
└── fipsmodule.cnf # FIPS Modul-Konfiguration
----
===== FIPS aktivieren =====
==== openssl.cnf anpassen ====
Öffnen Sie ''D:\Projects\openssl-3.6.0\bin\ssl\openssl.cnf'' und fügen Sie hinzu:
# Am Anfang der Datei
openssl_conf = openssl_init
[openssl_init]
providers = provider_sect
alg_section = algorithm_sect
[provider_sect]
fips = fips_sect
base = base_sect
[fips_sect]
activate = 1
[base_sect]
activate = 1
[algorithm_sect]
default_properties = fips=yes
==== FIPS-Modul-Hash generieren ====
Beim ersten Start muss der FIPS-Modul-Hash berechnet werden:
cd D:\Projects\openssl-3.6.0\bin
bin\openssl.exe fipsinstall -out ssl\fipsmodule.cnf -module lib\ossl-modules\fips.dll
----
===== FIPS-Modus prüfen =====
set OPENSSL_CONF=D:\Projects\openssl-3.6.0\bin\ssl\openssl.cnf
# Provider auflisten
openssl list -providers
Erwartete Ausgabe:
Providers:
base
name: OpenSSL Base Provider
version: 3.6.0
status: active
fips
name: OpenSSL FIPS Provider
version: 3.6.0
status: active
----
===== FIPS-Algorithmen testen =====
Im FIPS-Modus sind nur bestimmte Algorithmen erlaubt:
# Erlaubte Hash-Algorithmen
openssl list -digest-algorithms
# Sollte zeigen: SHA256, SHA384, SHA512, SHA3-*
# NICHT: MD5, SHA1 (im FIPS-Modus deaktiviert)
# Erlaubte Signatur-Algorithmen
openssl list -signature-algorithms
# Sollte zeigen: RSA-PSS, ECDSA, ML-DSA
----
===== Wichtige Hinweise =====
**FIPS-Compliance ist mehr als nur der Build!**
Für echte FIPS-Zertifizierung benötigen Sie:
- OpenSSL FIPS-validierte Version (prüfen Sie die CMVP-Liste)
- Korrekte Konfiguration ohne nicht-FIPS-Algorithmen
- Dokumentierte Key Ceremony
- Security Policy
**Nicht-FIPS-Algorithmen im FIPS-Modus:**
| Algorithmus | FIPS-Status |
|-------------|-------------|
| MD5 | ❌ Nicht erlaubt |
| SHA1 | ⚠️ Nur für Kompatibilität |
| DES | ❌ Nicht erlaubt |
| 3DES | ⚠️ Auslaufend |
| AES-GCM | ✅ Erlaubt |
| RSA ≥2048 | ✅ Erlaubt |
| ECDSA | ✅ Erlaubt |
| ML-DSA | ✅ Erlaubt |
| ML-KEM | ✅ Erlaubt |
----
===== Weiter zu =====
* [[.:testen:fips-validieren|FIPS-Modus validieren]]
* [[.:testen:start|4. Testen]]
* [[.:build:start|Zurück zur Build-Übersicht]]
----
//Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional//