Cryptographie

sgcWebSockets inclut sgcCrypto, une bibliothèque de cryptographie généraliste écrite entièrement en Pascal pur. Elle ne dépend ni d'OpenSSL ni d'aucune autre bibliothèque externe, et elle compile sans modification de Delphi 7 à Delphi 13, sous Win32, Win64, Linux64, macOS et iOS.

La bibliothèque couvre le hachage et l'authentification des messages, le hachage de mots de passe et la dérivation de clé, le chiffrement symétrique, la cryptographie à clé publique classique, la cryptographie post-quantique, les certificats X.509, les mots de passe à usage unique, le chiffrement d'archives et un hachage flou pour la détection de quasi-doublons. Elle est organisée en une unité par famille d'algorithmes (sgcCrypto_AES, sgcCrypto_MLKEM, sgcCrypto_TLSH, etc.), de sorte qu'une application n'embarque que le code qu'elle appelle réellement.

Chaque fonction est un simple appel prenant et renvoyant des TBytes : il n'y a aucun composant à déposer sur une fiche ni de configuration en mode conception. L'implémentation de chaque algorithme listé ci-dessous a été vérifiée, octet par octet, par rapport à une implémentation indépendante de la même norme (OpenSSL, hashlib/cryptography de Python, ou une implémentation de référence publiée par les auteurs de la norme) plutôt que seulement par rapport à sa propre sortie, ce qui est ce qui permet de détecter un bug qui est cohérent en interne mais faux.

Activer la bibliothèque

Les unités de cryptographie appartiennent au package d'installation Cryptography, contrôlé par la directive de compilation conditionnelle SGC_PACK_CRYPTO dans sgcVer.inc. Lorsque la directive est désactivée, chaque unité sgcCrypto_* compile en un stub vide, ce qui permet d'exclure le package d'une compilation qui n'en a pas besoin. Sélectionnez le package depuis l'installeur, ou définissez SGC_PACK_CRYPTO dans les options de votre projet si vous compilez depuis les sources.

Si un projet ne doit utiliser que des algorithmes approuvés FIPS, la directive optionnelle SGC_CRYPTO_FIPS supprime tous les autres algorithmes des unités sgcCrypto au moment de la compilation. Elle est désactivée par défaut. Consultez la page Mode FIPS pour savoir ce qu'elle conserve, ce qu'elle supprime et pourquoi il ne s'agit pas d'une validation FIPS 140-3.

Les unités sgcCrypto sont aussi ce qui permet au reste de la bibliothèque de fonctionner sans OpenSSL : le commutateur d'exécution sgcCryptoBackend (ou la directive optionnelle SGC_NATIVE_CRYPTO) et l'IOHandler iohNativeTLS. Voir Fonctionner sans OpenSSL.

Contenu de cette page

Le tableau ci-dessous est l'inventaire complet : chaque algorithme implémenté par la bibliothèque, et l'unité dans laquelle il se trouve. Les pages qui suivent expliquent chaque famille une par une, avec les signatures exactes des fonctions et un court exemple Delphi.

Catégorie Algorithmes Norme Unité
Hachage SHA-1, SHA-224, SHA-256, SHA-384, SHA-512 FIPS 180-4 sgcCrypto_SHA2
Hachage SHA3-224, SHA3-256, SHA3-384, SHA3-512, SHAKE128, SHAKE256, cSHAKE, KMAC FIPS 202, SP 800-185 sgcCrypto_Keccak
Hachage BLAKE2b (avec clé, jusqu'à 512 bits) RFC 7693 sgcCrypto_Blake2b
Hachage BLAKE2s (avec clé, jusqu'à 256 bits) RFC 7693 sgcCrypto_Blake2s
Hachage SipHash-2-4 — sgcCrypto_SipHash
Hachage RIPEMD-160, HMAC-RIPEMD160 ISO/IEC 10118-3, RFC 2286 sgcCrypto_Legacy
Hachage (ancien) MD4, MD5, DES-ECB, hachage NTLM v1 — sgcCrypto_Legacy
Hachage flou Empreinte et distance TLSH — sgcCrypto_TLSH
Authentification des messages HMAC-SHA1/256/384/512, HMAC-MD5 FIPS 198-1 sgcCrypto_HMAC
Authentification des messages AES-CMAC RFC 4493 sgcCrypto_CMAC
Authentification des messages AES-GMAC SP 800-38D sgcCrypto_CMAC
Authentification des messages Poly1305 RFC 8439 sgcCrypto_Poly1305
Hachage de mot de passe & KDF PBKDF2 (SHA-1/256/384/512) RFC 8018 sgcCrypto_KDF
Hachage de mot de passe & KDF KDF1, KDF2, ANSI X9.63 KDF ISO 18033-2, ANSI X9.63 sgcCrypto_KDF
Hachage de mot de passe & KDF scrypt RFC 7914 sgcCrypto_Scrypt
Hachage de mot de passe & KDF Argon2d, Argon2i, Argon2id RFC 9106 sgcCrypto_Argon2
Hachage de mot de passe & KDF HKDF (SHA-256/384) RFC 5869 sgcCrypto_HKDF
Chiffrement symétrique AES-128/192/256 : ECB, CBC, CFB, OFB, CTR, vol de texte chiffré CBC, GCM FIPS 197, SP 800-38A/D sgcCrypto_AES, sgcCrypto_Modes
Chiffrement symétrique AES-CBC sans remplissage, et les schémas de remplissage PKCS#7, zéro, ANSI X9.23, ISO 7816-4, ISO 10126-2 et TBC SP 800-38A, ISO/IEC 9797-1 sgcCrypto_AES, sgcCrypto_Modes
Chiffrement symétrique AES-CCM (AEAD) RFC 3610, SP 800-38C sgcCrypto_Modes
Chiffrement symétrique AES Key Wrap, AES Key Wrap with Padding RFC 3394, RFC 5649 sgcCrypto_Modes
Chiffrement symétrique ChaCha20, XChaCha20, Salsa20, XSalsa20 RFC 8439 sgcCrypto_ChaCha
Chiffrement symétrique ChaCha20-Poly1305, XChaCha20-Poly1305 (AEAD) RFC 8439 sgcCrypto_Poly1305
Cryptographie à clé publique Génération de clés RSA, RSA-OAEP, RSA-PSS, signature/vérification PKCS#1 v1.5 RFC 8017 sgcCrypto_RSA_Keys, sgcCrypto_RSA
Cryptographie à clé publique Chiffrement RSA PKCS#1 v1.5 RFC 8017 sgcCrypto_RSA_Keys
Cryptographie à clé publique Ed25519, Ed448 (signatures) RFC 8032 sgcCrypto_Ed25519, sgcCrypto_Ed448
Cryptographie à clé publique X25519, X448 (accord de clé) RFC 7748 sgcCrypto_X25519, sgcCrypto_X448
Cryptographie à clé publique Chiffrement scellé ECIES — sgcCrypto_ECIES
Cryptographie à clé publique ECDSA / ECDH sur NIST P-256, P-384, P-521 FIPS 186-5 sgcCrypto_EC, sgcCrypto_ECCurves
Cryptographie à clé publique ECDSA / ECDH sur secp256k1, brainpoolP256r1, brainpoolP384r1, brainpoolP512r1 SEC 2, RFC 5639 sgcCrypto_ECCurves
Cryptographie à clé publique Signatures ECDSA encodées en DER, conversion entre forme brute et DER RFC 3279 sgcCrypto_ECCurves, sgcCrypto_EC
Cryptographie à clé publique Signatures Schnorr sur secp256k1 BIP-340 sgcCrypto_ECCurves
Cryptographie à clé publique Export et import de clés RSA et EC : PKCS#1, PKCS#8, SEC1, SubjectPublicKeyInfo, DER et PEM RFC 8017, RFC 5958, RFC 5280 sgcCrypto_RSA_Keys, sgcCrypto_ECCurves
Cryptographie post-quantique ML-KEM-512/768/1024, hybride X25519 + ML-KEM-768, X-Wing, X25519MLKEM768, SecP256r1MLKEM768, SecP384r1MLKEM1024 FIPS 203, RFC 9935, RFC 10024, draft-connolly-cfrg-xwing-kem sgcCrypto_MLKEM, sgcCrypto_MLKEM_Hybrid
Cryptographie post-quantique ML-DSA-44/65/87 FIPS 204, RFC 9881, RFC 9964 sgcCrypto_MLDSA
Cryptographie post-quantique SLH-DSA-SHAKE-128s/128f/192s/192f/256s/256f FIPS 205, RFC 9909 sgcCrypto_SLHDSA
Certificats & PKI Analyse X.509, vérification de chaîne et de CRL RFC 5280 sgcCrypto_X509
Certificats & PKI Génération de certificat auto-signé X.509 et de CSR PKCS#10 RFC 5280, RFC 2986 sgcCrypto_X509_Gen
Certificats & PKI Certificats X.509 et CSR signés EC, noms alternatifs du sujet de type URI RFC 5280, RFC 2986 sgcCrypto_X509_Gen
Certificats & PKI Lecture PKCS#12 (.pfx, .p12) : certificat feuille, chaîne et clé privée. PBES2 avec AES, et les schémas historiques Triple DES et RC2 RFC 7292, RFC 9579 sgcCrypto_PKCS12
Certificats & PKI Lecteur et écrivain DER / ASN.1, PEM, Base64 — sgcCrypto_ASN1, sgcCrypto_DER
Mots de passe à usage unique HOTP, TOTP RFC 4226, RFC 6238 sgcCrypto_OTP
Chiffrement d'archives WinZip AE-1 / AE-2 WinZip AE-2 sgcCrypto_Zip_AE2
Encodage & utilitaires Hex, Base32, Base64url, comparaison en temps constant, effacement sécurisé, octets aléatoires RFC 4648 sgcCrypto_Encoding, sgcCrypto_Random

Explication famille par famille

1. Hachage & authentification des messages : SHA-2, SHA-3, SHAKE, BLAKE2, SipHash, HMAC, AES-CMAC et Poly1305, les briques de base sur lesquelles repose presque tout autre algorithme de cette page.

2. Hachage de mots de passe & dérivation de clé : PBKDF2, scrypt, Argon2id et HKDF. Stocker un mot de passe et dériver une clé à partir d'un secret existant sont deux tâches différentes ; cette page explique pourquoi et quelle fonction convient à laquelle.

3. Chiffrement symétrique : AES dans tous les modes pris en charge par la bibliothèque, l'encapsulation de clé AES, ChaCha20/Salsa20 et leurs constructions AEAD Poly1305, et pourquoi un mode authentifié devrait être le choix par défaut.

4. Cryptographie à clé publique : RSA, signatures Ed25519/Ed448, accord de clé X25519/X448, ECIES, ECDSA/ECDH sur les courbes NIST, secp256k1 et Brainpool, et signatures Schnorr BIP-340.

5. Cryptographie post-quantique : ML-KEM, ML-DSA et SLH-DSA, les trois schémas normalisés par le NIST dans les FIPS 203-205, et la construction hybride à déployer dès aujourd'hui.

6. Certificats & PKI : analyse et vérification des certificats X.509 que vous recevez, et génération de vos propres certificats auto-signés et de requêtes PKCS#10, signées avec une clé RSA ou une clé EC.

7. Mots de passe à usage unique : HOTP et TOTP, les codes que produit une application d'authentification, y compris l'URI de provisionnement.

8. Hachage flou (TLSH) : un hachage sensible à la localité pour la détection de quasi-doublons, contrairement à tout autre hachage de cette page il n'est pas destiné à l'intégrité ou à la sécurité.

9. Chiffrement d'archive WinZip AE-2 : le chiffrement AES utilisé à l'intérieur des archives .zip, et ce qu'il protège ou non.

10. Mode FIPS : un commutateur de compilation qui ne laisse dans la bibliothèque que les algorithmes approuvés FIPS, ce qu'il supprime et ce qu'il vérifie, et pourquoi il ne s'agit pas d'une validation FIPS 140-3.

Démos

Le dossier Demos\18.Cryptography contient sept applications exécutables, une par domaine ci-dessus (hachage, chiffrement symétrique, mots de passe, clé publique, post-quantique, certificats, et mots de passe à usage unique avec WinZip AE-2), chacune illustrant l'API en cours d'utilisation et expliquant le raisonnement derrière les choix recommandés.