sgcCrypto heeft een optionele compileerschakelaar, SGC_CRYPTO_FIPS, die alleen FIPS-goedgekeurde algoritmen in de bibliotheek overlaat. Deze is bedoeld voor projecten die geen algoritmen mogen gebruiken buiten de publicaties van FIPS en NIST SP. Deze pagina legt uit wat de schakelaar doet, hoe u hem inschakelt, wat hij behoudt, wat hij verwijdert en wat hij niet dekt.
Wat FIPS hier betekent
FIPS 140-3 is een certificering van een cryptografische module, niet van een algoritme. Een geaccrediteerd laboratorium test één specifieke build van een product in het kader van het Cryptographic Module Validation Program (CMVP) van NIST, en NIST publiceert een certificaat voor die build. Het gebruik van een goedgekeurd algoritme zoals AES maakt een programma niet gevalideerd.
sgcCrypto is geen FIPS 140-3-gevalideerde module, en het inschakelen van de schakelaar is geen validatieclaim. Wat de schakelaar doet, is beperkter:
De algoritmen die blijven, volgen de publicaties van FIPS en NIST SP die in de onderstaande tabel staan.
Als uw project een formele FIPS 140-3-eis heeft, moet de cryptografie ervan via een gevalideerde module lopen, bijvoorbeeld Windows CNG met het systeem in FIPS-modus. De schakelaar helpt algoritmen die niet zijn goedgekeurd uit uw code te houden. Hij vervangt geen gevalideerde module.
Inschakelen
De schakelaar staat standaard uit. Zonder de schakelaar verandert er niets, en is elk algoritme op de pagina Cryptografie beschikbaar. Doe een van de volgende dingen om hem in te schakelen:
{.$DEFINE SGC_CRYPTO_FIPS} { off, the default }
{$DEFINE SGC_CRYPTO_FIPS} { on }
Bouw daarna opnieuw. De schakelaar heeft alleen invloed op code die met de define is gecompileerd, dus vooraf gecompileerde pakketten die zonder de define zijn gebouwd, worden niet beïnvloed.
Met de schakelaar ingeschakeld bestaan de verwijderde functies niet meer. Code die er nog een van aanroept, compileert niet en geeft de fout "Undeclared identifier". Dit is bewust zo: niets wat niet is goedgekeurd kan per ongeluk in het binaire bestand terechtkomen, en de compiler wijst elke plek aan die een ander algoritme nodig heeft.
Wat blijft
Certificaten, eenmalige wachtwoorden en de encoderingshulpfuncties blijven ook behouden, omdat ze uitsluitend zijn opgebouwd uit de goedgekeurde algoritmen of helemaal geen cryptografische algoritmen zijn.
| Familie | Behouden | Standaard |
| AES | AES-128/192/256 in de modi ECB, CBC, CFB, OFB, CTR, CTS, GCM en CCM, AES Key Wrap (KW en KWP), AES-CMAC en AES-GMAC | FIPS 197, SP 800-38A/B/C/D/F |
| Hashing | SHA-1 (alleen waar het nog is toegestaan, nooit voor nieuwe handtekeningen), SHA-224, SHA-256, SHA-384, SHA-512, SHA3-224/256/384/512, SHAKE128, SHAKE256, cSHAKE en KMAC | FIPS 180-4, FIPS 202, SP 800-185 |
| Berichtauthenticatie | HMAC-SHA1, HMAC-SHA256, HMAC-SHA384 en HMAC-SHA512 | FIPS 198-1 |
| Sleutelafleiding | PBKDF2, HKDF en de ANSI X9.63 KDF | SP 800-132 (PBKDF2), SP 800-56C (HKDF), SP 800-135 (ANSI X9.63 KDF) |
| RSA | RSA-sleutelgeneratie, handtekeningen met PKCS#1 v1.5 en PSS, versleuteling met RSA-OAEP | FIPS 186-5, SP 800-56B |
| ECDSA en ECDH | Handtekeningen en sleutelovereenkomst op NIST P-256, P-384 en P-521 (P-224 is niet geïmplementeerd in sgcCrypto) | FIPS 186-5, SP 800-56A |
| EdDSA | Handtekeningen met Ed25519 en Ed448 | FIPS 186-5 |
| Post-quantumcryptografie | ML-KEM, ML-DSA en SLH-DSA | FIPS 203, FIPS 204, FIPS 205 |
| Certificaten & PKI | X.509-certificaten parseren, ketenverificatie en CRL-controles, en het genereren van certificaten of CSR's die zijn ondertekend met de bovenstaande algoritmen | RFC 5280, RFC 2986 |
| Eenmalige wachtwoorden | HOTP en TOTP, gebaseerd op HMAC | RFC 4226, RFC 6238 |
| Encodering & hulpprogramma's | Encodering naar Hex, Base32 en Base64, vergelijking in constante tijd, veilig overschrijven met nullen | RFC 4648 |
Wat wordt verwijderd
| Verwijderd | Waarom |
| ChaCha20, XChaCha20, Salsa20, XSalsa20, Poly1305, ChaCha20-Poly1305 en XChaCha20-Poly1305 | Geen NIST-algoritmen. |
| Sleuteluitwisseling met X25519 en X448 | Niet goedgekeurd voor sleutelovereenkomst in SP 800-56A. |
| De hybride constructie X25519 + ML-KEM-768, en ECIES | Beide zijn gebaseerd op X25519. |
| secp256k1 en de Brainpool-curven, en BIP-340 Schnorr-handtekeningen | Geen door NIST aanbevolen curven, en BIP-340 is geen handtekeningschema volgens FIPS 186-5. De FIPS-modus behoudt alleen de NIST P-curven. |
| Argon2 en scrypt | Geen NIST-functies voor sleutelafleiding uit wachtwoorden. |
| BLAKE2b, BLAKE2s, SipHash en TLSH | Geen NIST-algoritmen. |
| MD4, MD5, HMAC-MD5, RIPEMD-160 en DES (de unit sgcCrypto_Legacy) | Verouderd, of nooit door NIST goedgekeurd. |
| KDF1 en KDF2 | Gedefinieerd in ISO 18033-2, niet in een NIST-publicatie. De ANSI X9.63 KDF blijft behouden. |
| RSA PKCS#1 v1.5-versleuteling | Niet toegestaan volgens SP 800-131A. PKCS#1 v1.5-handtekeningen blijven behouden. |
| WinZip AES (AE-1 en AE-2) | Geen NIST-formaat. |
Voor de meeste verwijderde algoritmen staat een goedgekeurd alternatief in de eerste tabel: AES-GCM in plaats van ChaCha20-Poly1305, ECDH op P-256 of P-384 in plaats van X25519, PBKDF2 in plaats van Argon2 of scrypt, SHA-256 of SHA-3 in plaats van BLAKE2, en RSA-OAEP in plaats van PKCS#1 v1.5-versleuteling.
Regels die tijdens runtime worden gecontroleerd
Sommige regels hangen af van de waarden die aan een functie worden doorgegeven, zodat de compiler ze niet kan afdwingen. Met de schakelaar ingeschakeld controleert sgcCrypto ze wanneer de functie wordt uitgevoerd, en elke overtreding genereert een uitzondering waarvan het bericht begint met sgcCrypto FIPS:
Waar de willekeurige bytes vandaan komen
Sleutels, nonces en salts hebben willekeurige bytes nodig. sgcRandomBytes leest ze in beide modi altijd uit het besturingssysteem, en draait er nooit een eigen generator bovenop. De schakelaar bepaalt alleen welke systeembron wordt gebruikt:
| Platform | Met SGC_CRYPTO_FIPS | Zonder SGC_CRYPTO_FIPS |
| Windows | BCryptGenRandom (CNG, door het systeem geprefereerde RNG), zonder terugval | BCryptGenRandom, met terugval op RtlGenRandom en daarna CryptGenRandom wanneer BCryptGenRandom niet beschikbaar is |
| Linux en Android | De systeemaanroep getrandom | /dev/urandom |
| macOS en iOS | SecRandomCopyBytes uit het Security-framework | /dev/urandom |
In beide modi wordt een uitzondering gegenereerd als geen enkele bron kan worden gelezen, in plaats van zwakke bytes terug te geven. Of de generator van het besturingssysteem als FIPS geldt, hangt af van het besturingssysteem en de configuratie ervan, niet van sgcCrypto.
Wat de schakelaar niet dekt
De schakelaar geldt alleen voor de sgcCrypto-units. Andere delen van sgcWebSockets kunnen nog steeds algoritmen gebruiken die niet zijn goedgekeurd:
Als de hele toepassing binnen goedgekeurde algoritmen moet blijven, controleer dan ook deze onderdelen.
Zie ook