====== 4.3 Validazione Modalità FIPS ====== Questa pagina mostra come validare la modalità FIPS della vostra installazione OpenSSL. ---- ===== Verifica Provider FIPS ===== $openssl = "D:\Projects\openssl-3.6.0\bin\bin\openssl.exe" # Impostare environment $env:OPENSSL_CONF = "D:\Projects\openssl-3.6.0\bin\ssl\openssl.cnf" # Elencare i provider & $openssl list -providers **Con FIPS attivo:** Providers: base name: OpenSSL Base Provider version: 3.6.0 status: active fips name: OpenSSL FIPS Provider version: 3.6.0 status: active **Senza FIPS:** Providers: default name: OpenSSL Default Provider version: 3.6.0 status: active ---- ===== Verifica Algoritmi FIPS ===== In modalità FIPS sono disponibili solo algoritmi certificati. ==== Algoritmi Hash Consentiti ==== & $openssl list -digest-algorithms **Consentiti FIPS:** * SHA-256, SHA-384, SHA-512 * SHA3-256, SHA3-384, SHA3-512 * SHAKE128, SHAKE256 **Non consentiti FIPS:** * ~~MD5~~ * ~~SHA1~~ (solo per compatibilità) * ~~MD4~~ ==== Algoritmi di Firma Consentiti ==== & $openssl list -signature-algorithms **Consentiti FIPS:** * RSA (≥2048 bit) * ECDSA (P-256, P-384, P-521) * ML-DSA-44, ML-DSA-65, ML-DSA-87 ---- ===== Auto-Test FIPS ===== Il provider FIPS esegue auto-test durante il caricamento: # Modalità verbose per output auto-test $env:OPENSSL_FIPS_TEST = "1" & $openssl list -providers In caso di auto-test falliti, il provider FIPS non viene attivato! ---- ===== Verifica Integrità Modulo FIPS ===== I moduli FIPS hanno un hash integrato per la verifica dell'integrità: # Generare/verificare hash modulo FIPS & $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" Output atteso: VERIFY PASSED In caso di errore: VERIFY FAILED Se VERIFY FAILED: La DLL potrebbe essere stata modificata. Ricompilare! ---- ===== Test: Algoritmo Non-FIPS Bloccato ===== In modalità FIPS, MD5 dovrebbe essere bloccato: # MD5 dovrebbe fallire & $openssl dgst -md5 test.txt 2>&1 Output atteso (con FIPS): Error setting digest xxxx:error:0308010C:digital envelope routines:inner_evp_generic_fetch:unsupported Se MD5 funziona, FIPS non è attivo! ---- ===== Verifica Proprietà FIPS nel Codice ===== In C o .NET potete verificare FIPS programmaticamente: // Esempio C# P/Invoke [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; } ---- ===== Checklist per Conformità FIPS ===== | # | Punto di Verifica | Stato | |---|-------------------|-------| | 1 | ''enable-fips'' usato durante il build | ☐ | | 2 | ''fips.dll'' presente in ''ossl-modules/'' | ☐ | | 3 | ''fipsmodule.cnf'' generato | ☐ | | 4 | ''openssl.cnf'' con provider FIPS attivato | ☐ | | 5 | ''openssl list -providers'' mostra FIPS attivo | ☐ | | 6 | ''fipsinstall -verify'' PASSED | ☐ | | 7 | MD5 bloccato (test) | ☐ | ---- ===== Risoluzione Problemi ===== ==== "FIPS provider not available" ==== - È stato compilato con ''enable-fips''? - ''fips.dll'' è presente? - ''openssl.cnf'' è configurato correttamente? ==== "Self test failed" ==== - Reinstallare i moduli: ''nmake install_fips'' - Rigenerare l'hash: ''openssl fipsinstall ...'' ==== MD5 funziona (dovrebbe essere bloccato) ==== - ''default_properties = fips=yes'' manca in openssl.cnf - Environment ''OPENSSL_CONF'' non impostato ---- ===== Continua con ===== * [[.:build:windows-fips|Build FIPS]] * [[.:integration:start|5. Integrazione]] ---- //Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional//