Kryptografie

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.