sgcWebSockets enthält sgcCrypto, eine universelle Kryptografiebibliothek, die vollständig in reinem Pascal geschrieben ist. Sie hat keine Abhängigkeit von OpenSSL oder einer anderen externen Bibliothek und kompiliert unverändert von Delphi 7 bis Delphi 13, unter Win32, Win64, Linux64, macOS und iOS.
Die Bibliothek deckt Hashing und Nachrichtenauthentifizierung, Passwort-Hashing und Schlüsselableitung, symmetrische Verschlüsselung, klassische Public-Key-Kryptografie, Post-Quanten-Kryptografie, X.509-Zertifikate, Einmalpasswörter, Archivverschlüsselung und einen Fuzzy-Hash zur Erkennung nahezu identischer Duplikate ab. Sie ist als eine Unit pro Algorithmenfamilie organisiert (sgcCrypto_AES, sgcCrypto_MLKEM, sgcCrypto_TLSH, und so weiter), sodass eine Anwendung nur den Code einbindet, den sie tatsächlich aufruft.
Jede Funktion ist ein einfacher Aufruf, der TBytes entgegennimmt und zurückgibt: Es gibt keine Komponenten, die auf ein Formular gezogen werden, und keine Konfiguration zur Entwurfszeit. Die Implementierung jedes unten aufgeführten Algorithmus wurde Byte für Byte gegen eine unabhängige Implementierung desselben Standards geprüft (OpenSSL, Pythons hashlib/cryptography, oder eine von den Autoren des Standards veröffentlichte Referenzimplementierung), statt nur gegen ihre eigene Ausgabe, denn genau das deckt einen Fehler auf, der intern konsistent, aber dennoch falsch ist.
Die Bibliothek aktivieren
Die Kryptografie-Units gehören zum Installationspaket Cryptography, gesteuert durch die bedingte Definition SGC_PACK_CRYPTO in sgcVer.inc. Ist die Definition ausgeschaltet, kompiliert jede sgcCrypto_*-Unit zu einem leeren Stub, wodurch das Paket aus einem Build herausgehalten wird, der es nicht benötigt. Wählen Sie das Paket im Installationsprogramm aus, oder definieren Sie SGC_PACK_CRYPTO in Ihren Projektoptionen, wenn Sie aus dem Quellcode kompilieren.
Wenn ein Projekt ausschließlich FIPS-zugelassene Algorithmen verwenden darf, entfernt die optionale Definition SGC_CRYPTO_FIPS zur Kompilierzeit jeden anderen Algorithmus aus den sgcCrypto-Units. Sie ist standardmäßig ausgeschaltet. Unter FIPS-Modus erfahren Sie, was sie beibehält, was sie entfernt und warum sie keine Validierung nach FIPS 140-3 darstellt.
Die sgcCrypto-Units sind auch das, was den Rest der Bibliothek ohne OpenSSL laufen lässt: der Laufzeitschalter sgcCryptoBackend (oder optional die Definition SGC_NATIVE_CRYPTO) und der iohNativeTLS-IOHandler. Siehe Betrieb ohne OpenSSL.
Was auf dieser Seite behandelt wird
Die folgende Tabelle ist die vollständige Übersicht: jeder von der Bibliothek implementierte Algorithmus und die Unit, in der er sich befindet. Die nachfolgenden Seiten erklären jede Familie einzeln, mit den genauen Funktionssignaturen und einem kurzen Delphi-Beispiel.
| Kategorie | Algorithmen | Standard | Unit |
| Hashing | SHA-1, SHA-224, SHA-256, SHA-384, SHA-512 | FIPS 180-4 | sgcCrypto_SHA2 |
| Hashing | SHA3-224, SHA3-256, SHA3-384, SHA3-512, SHAKE128, SHAKE256, cSHAKE, KMAC | FIPS 202, SP 800-185 | sgcCrypto_Keccak |
| Hashing | BLAKE2b (keyed, up to 512 bit) | RFC 7693 | sgcCrypto_Blake2b |
| Hashing | BLAKE2s (keyed, up to 256 bit) | RFC 7693 | sgcCrypto_Blake2s |
| Hashing | SipHash-2-4 | — | sgcCrypto_SipHash |
| Hashing | RIPEMD-160, HMAC-RIPEMD160 | ISO/IEC 10118-3, RFC 2286 | sgcCrypto_Legacy |
| Hashing (Legacy) | MD4, MD5, DES-ECB, NTLM v1 hash | — | sgcCrypto_Legacy |
| Fuzzy Hashing | TLSH digest and distance | — | sgcCrypto_TLSH |
| Nachrichtenauthentifizierung | HMAC-SHA1/256/384/512, HMAC-MD5 | FIPS 198-1 | sgcCrypto_HMAC |
| Nachrichtenauthentifizierung | AES-CMAC | RFC 4493 | sgcCrypto_CMAC |
| Nachrichtenauthentifizierung | AES-GMAC | SP 800-38D | sgcCrypto_CMAC |
| Nachrichtenauthentifizierung | Poly1305 | RFC 8439 | sgcCrypto_Poly1305 |
| Passwort-Hashing & KDF | PBKDF2 (SHA-1/256/384/512) | RFC 8018 | sgcCrypto_KDF |
| Passwort-Hashing & KDF | KDF1, KDF2, ANSI X9.63 KDF | ISO 18033-2, ANSI X9.63 | sgcCrypto_KDF |
| Passwort-Hashing & KDF | scrypt | RFC 7914 | sgcCrypto_Scrypt |
| Passwort-Hashing & KDF | Argon2d, Argon2i, Argon2id | RFC 9106 | sgcCrypto_Argon2 |
| Passwort-Hashing & KDF | HKDF (SHA-256/384) | RFC 5869 | sgcCrypto_HKDF |
| Symmetrische Verschlüsselung | AES-128/192/256: ECB, CBC, CFB, OFB, CTR, CBC ciphertext stealing, GCM | FIPS 197, SP 800-38A/D | sgcCrypto_AES, sgcCrypto_Modes |
| Symmetrische Verschlüsselung | AES-CBC with no padding, and the PKCS#7, zero, ANSI X9.23, ISO 7816-4, ISO 10126-2 and TBC padding schemes | SP 800-38A, ISO/IEC 9797-1 | sgcCrypto_AES, sgcCrypto_Modes |
| Symmetrische Verschlüsselung | AES-CCM (AEAD) | RFC 3610, SP 800-38C | sgcCrypto_Modes |
| Symmetrische Verschlüsselung | AES Key Wrap, AES Key Wrap with Padding | RFC 3394, RFC 5649 | sgcCrypto_Modes |
| Symmetrische Verschlüsselung | ChaCha20, XChaCha20, Salsa20, XSalsa20 | RFC 8439 | sgcCrypto_ChaCha |
| Symmetrische Verschlüsselung | ChaCha20-Poly1305, XChaCha20-Poly1305 (AEAD) | RFC 8439 | sgcCrypto_Poly1305 |
| Public-Key-Kryptografie | RSA key generation, RSA-OAEP, RSA-PSS, PKCS#1 v1.5 sign/verify | RFC 8017 | sgcCrypto_RSA_Keys, sgcCrypto_RSA |
| Public-Key-Kryptografie | RSA PKCS#1 v1.5 encryption | RFC 8017 | sgcCrypto_RSA_Keys |
| Public-Key-Kryptografie | Ed25519, Ed448 (signatures) | RFC 8032 | sgcCrypto_Ed25519, sgcCrypto_Ed448 |
| Public-Key-Kryptografie | X25519, X448 (key agreement) | RFC 7748 | sgcCrypto_X25519, sgcCrypto_X448 |
| Public-Key-Kryptografie | ECIES sealed box encryption | — | sgcCrypto_ECIES |
| Public-Key-Kryptografie | ECDSA / ECDH on NIST P-256, P-384, P-521 | FIPS 186-5 | sgcCrypto_EC, sgcCrypto_ECCurves |
| Public-Key-Kryptografie | ECDSA / ECDH on secp256k1, brainpoolP256r1, brainpoolP384r1, brainpoolP512r1 | SEC 2, RFC 5639 | sgcCrypto_ECCurves |
| Public-Key-Kryptografie | ECDSA DER encoded signatures, raw and DER conversion | RFC 3279 | sgcCrypto_ECCurves, sgcCrypto_EC |
| Public-Key-Kryptografie | Schnorr signatures on secp256k1 | BIP-340 | sgcCrypto_ECCurves |
| Public-Key-Kryptografie | RSA and EC key export and import: PKCS#1, PKCS#8, SEC1, SubjectPublicKeyInfo, DER and PEM | RFC 8017, RFC 5958, RFC 5280 | sgcCrypto_RSA_Keys, sgcCrypto_ECCurves |
| Post-Quanten-Kryptografie | ML-KEM-512/768/1024, hybrid 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 |
| Post-Quanten-Kryptografie | ML-DSA-44/65/87 | FIPS 204, RFC 9881, RFC 9964 | sgcCrypto_MLDSA |
| Post-Quanten-Kryptografie | SLH-DSA-SHAKE-128s/128f/192s/192f/256s/256f | FIPS 205, RFC 9909 | sgcCrypto_SLHDSA |
| Zertifikate & PKI | X.509 parsing, chain and CRL verification | RFC 5280 | sgcCrypto_X509 |
| Zertifikate & PKI | X.509 self-signed certificate and PKCS#10 CSR generation | RFC 5280, RFC 2986 | sgcCrypto_X509_Gen |
| Zertifikate & PKI | EC signed X.509 certificates and CSRs, URI subject alternative names | RFC 5280, RFC 2986 | sgcCrypto_X509_Gen |
| Zertifikate & PKI | PKCS#12 (.pfx, .p12) reading: leaf certificate, chain and private key. PBES2 with AES, and the legacy Triple DES and RC2 schemes | RFC 7292, RFC 9579 | sgcCrypto_PKCS12 |
| Zertifikate & PKI | DER / ASN.1 reader and writer, PEM, Base64 | — | sgcCrypto_ASN1, sgcCrypto_DER |
| Einmalpasswörter | HOTP, TOTP | RFC 4226, RFC 6238 | sgcCrypto_OTP |
| Archivverschlüsselung | WinZip AE-1 / AE-2 | WinZip AE-2 | sgcCrypto_Zip_AE2 |
| Kodierung & Hilfsfunktionen | Hex, Base32, Base64url, constant time compare, secure zero, random bytes | RFC 4648 | sgcCrypto_Encoding, sgcCrypto_Random |
Einzeln erklärt
1. Hashing & Nachrichtenauthentifizierung: SHA-2, SHA-3, SHAKE, BLAKE2, SipHash, HMAC, AES-CMAC und Poly1305, die Bausteine, aus denen fast jeder andere Algorithmus auf dieser Seite aufgebaut ist.
2. Passwort-Hashing & Schlüsselableitung: PBKDF2, scrypt, Argon2id und HKDF. Das Speichern eines Passworts und das Ableiten eines Schlüssels aus einem bestehenden Geheimnis sind zwei verschiedene Aufgaben; diese Seite erklärt warum und welche Funktion zu welcher davon passt.
3. Symmetrische Verschlüsselung: AES in jedem von der Bibliothek unterstützten Modus, AES Key Wrapping, ChaCha20/Salsa20 und ihre Poly1305-AEAD-Konstruktionen, und warum ein authentifizierter Modus die Standardwahl sein sollte.
4. Public-Key-Kryptografie: RSA, Ed25519/Ed448-Signaturen, X25519/X448 Key Agreement, ECIES, ECDSA/ECDH auf den NIST-, secp256k1- und Brainpool-Kurven, sowie BIP-340-Schnorr-Signaturen.
5. Post-Quanten-Kryptografie: ML-KEM, ML-DSA und SLH-DSA, die drei von NIST in FIPS 203-205 standardisierten Verfahren, sowie die hybride Konstruktion, die heute einzusetzen ist.
6. Zertifikate & PKI: Parsen und Verifizieren von X.509-Zertifikaten, die Sie empfangen, sowie das Erzeugen eigener selbstsignierter Zertifikate und PKCS#10-Requests, signiert entweder mit einem RSA- oder einem EC-Schlüssel.
7. Einmalpasswörter: HOTP und TOTP, die Codes, die eine Authenticator-App erzeugt, einschließlich der Provisioning-URI.
8. Fuzzy Hashing (TLSH): ein Locality-Sensitive-Hash zur Erkennung nahezu identischer Duplikate, der im Gegensatz zu jedem anderen Hash auf dieser Seite nicht für Integrität oder Sicherheit gedacht ist.
9. WinZip AE-2 Archivverschlüsselung: die innerhalb von .zip-Archiven verwendete AES-Verschlüsselung, und was sie schützt und was nicht.
10. FIPS-Modus: ein Schalter zur Kompilierzeit, der nur FIPS-zugelassene Algorithmen in der Bibliothek belässt, was er entfernt und prüft, und warum er keine Validierung nach FIPS 140-3 darstellt.
Demos
Der Ordner Demos\18.Cryptography enthält sieben lauffähige Anwendungen, eine pro obigem Bereich (Hashing, symmetrische Verschlüsselung, Passwörter, Public Key, Post-Quanten, Zertifikate und Einmalpasswörter mit WinZip AE-2), die jeweils die API im Einsatz zeigen und die Überlegungen hinter den empfohlenen Entscheidungen erläutern.