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"

  1. È stato compilato con enable-fips?
  2. fips.dll è presente?
  3. openssl.cnf è configurato correttamente?

"Self test failed"

  1. Reinstallare i moduli: nmake install_fips
  2. Rigenerare l'hash: openssl fipsinstall …

MD5 funziona (dovrebbe essere bloccato)

  1. default_properties = fips=yes manca in openssl.cnf
  2. Environment OPENSSL_CONF non impostato

Continua con


Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional

Zuletzt geändert: il 29/01/2026 alle 21:38