====== 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//