====== 4.3 Validacija FIPS načina ====== Ta stran prikazuje, kako validirate FIPS način vaše namestitve OpenSSL. ---- ===== Preverjanje FIPS Provider ===== $openssl = "D:\Projects\openssl-3.6.0\bin\bin\openssl.exe" # Nastavitev okoljske spremenljivke $env:OPENSSL_CONF = "D:\Projects\openssl-3.6.0\bin\ssl\openssl.cnf" # Izpis ponudnikov & $openssl list -providers **S FIPS aktivnim:** Providers: base name: OpenSSL Base Provider version: 3.6.0 status: active fips name: OpenSSL FIPS Provider version: 3.6.0 status: active **Brez FIPS:** Providers: default name: OpenSSL Default Provider version: 3.6.0 status: active ---- ===== Preverjanje FIPS algoritmov ===== V FIPS načinu so na voljo samo certificirani algoritmi. ==== Dovoljeni algoritmi zgoščevanja ==== & $openssl list -digest-algorithms **FIPS-dovoljeno:** * SHA-256, SHA-384, SHA-512 * SHA3-256, SHA3-384, SHA3-512 * SHAKE128, SHAKE256 **Ni FIPS-dovoljeno:** * ~~MD5~~ * ~~SHA1~~ (samo za združljivost) * ~~MD4~~ ==== Dovoljeni podpisni algoritmi ==== & $openssl list -signature-algorithms **FIPS-dovoljeno:** * RSA (≥2048 bit) * ECDSA (P-256, P-384, P-521) * ML-DSA-44, ML-DSA-65, ML-DSA-87 ---- ===== FIPS samotesti ===== FIPS Provider ob nalaganju izvede samoteste: # Verbose način za izpis samotestov $env:OPENSSL_FIPS_TEST = "1" & $openssl list -providers Ob neuspelih samotestih se FIPS Provider ne aktivira! ---- ===== Preverjanje integritete FIPS modula ===== FIPS moduli imajo vgrajeno zgoščeno vrednost za preverjanje integritete: # Generiranje/preverjanje zgoščene vrednosti FIPS modula & $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" Pričakovani izpis: VERIFY PASSED Ob napaki: VERIFY FAILED Če VERIFY FAILED: DLL je bila morda spremenjena. Ponovno zgradite! ---- ===== Test: Ne-FIPS algoritem blokiran ===== V FIPS načinu bi moral biti MD5 blokiran: # MD5 bi moral spodleteti & $openssl dgst -md5 test.txt 2>&1 Pričakovani izpis (s FIPS): Error setting digest xxxx:error:0308010C:digital envelope routines:inner_evp_generic_fetch:unsupported Če MD5 deluje, FIPS ni aktiven! ---- ===== Preverjanje FIPS lastnosti v kodi ===== V C ali .NET lahko programsko preverite FIPS: // C# P/Invoke primer [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; } ---- ===== Kontrolni seznam za FIPS skladnost ===== | # | Kontrolna točka | Status | |---|-----------------|--------| | 1 | ''enable-fips'' uporabljen pri gradnji | ☐ | | 2 | ''fips.dll'' prisoten v ''ossl-modules/'' | ☐ | | 3 | ''fipsmodule.cnf'' generiran | ☐ | | 4 | ''openssl.cnf'' FIPS Provider aktiviran | ☐ | | 5 | ''openssl list -providers'' prikazuje FIPS aktiven | ☐ | | 6 | ''fipsinstall -verify'' PASSED | ☐ | | 7 | MD5 blokiran (test) | ☐ | ---- ===== Odprava težav ===== ==== "FIPS provider not available" ==== - Ali je bilo grajeno z ''enable-fips''? - Ali je ''fips.dll'' prisoten? - Ali je ''openssl.cnf'' pravilno konfiguriran? ==== "Self test failed" ==== - Ponovno namestite module: ''nmake install_fips'' - Ponovno generirajte zgoščeno vrednost: ''openssl fipsinstall ...'' ==== MD5 deluje (bi moral biti blokiran) ==== - ''default_properties = fips=yes'' manjka v openssl.cnf - Okoljska spremenljivka ''OPENSSL_CONF'' ni nastavljena ---- ===== Naprej na ===== * [[wvds:sl:openssl:build:windows-fips|FIPS gradnja]] * [[wvds:sl:openssl:integration:start|5. Integracija]] ---- //Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional//