sgcCrypto ist eine neue Universal-Kryptografie-Bibliothek für Delphi und C++ Builder: 43 reine Object-Pascal-Units für symmetrische Verschlüsselung, Hashing, digitale Signaturen, PKI und Post-Quanten-Schlüsselaustausch. Es gibt keine Design-Time-Komponenten, keine Tsgc*-Klassen und nichts, das sich auf ein Formular ziehen ließe. Sie fügen eine Unit in Ihre uses-Klausel ein und rufen eine Funktion auf, genauso wie Sie eine RTL-Routine aufrufen würden.
sgcCrypto wird kostenlos mit sgcWebSockets Standard, Professional und Enterprise ausgeliefert. Wenn Sie bereits eine dieser Lizenzen oder All-Access besitzen, haben Sie es also bereits, ohne etwas Neues installieren oder bestellen zu müssen. Es wird außerdem als eigenständiges Paket verkauft, das die sgcWebSockets Core-Runtime enthält, für Kunden, die nur Core oder gar keine sgcWebSockets-Lizenz besitzen.
Funktionsweise
Jede Unit exportiert einfache Funktionen und Prozeduren, die TBytes entgegennehmen und TBytes zurückgeben. Es gibt kein Kontextobjekt, das angelegt werden müsste, kein Interface, das implementiert werden müsste, und keine sgcCrypto_Reg.pas, da es nichts zu registrieren gibt. Jede Lizenz enthält den vollständigen Pascal-Quellcode, sodass Sie ein Primitiv in Ihrem eigenen Debugger Schritt für Schritt verfolgen können, statt dass es in einer DLL oder einer OpenSSL-Anbindung verschwindet.
Nichts in der Bibliothek hängt von einer externen Bibliothek ab. Jeder Algorithmus, von AES bis zu den Post-Quanten-Signaturverfahren, ist direkt in der Unit implementiert, die ihn bereitstellt, und derselbe Quellcode kompiliert unverändert von Delphi 7 bis RAD Studio 13, für Win32, Win64, Linux64, macOS, iOS und Android.
uses
sgcCrypto_Random, sgcCrypto_AES, sgcCrypto_Keccak, sgcCrypto_Ed25519,
sgcCrypto_MLKEM;
var
vKey, vIV, vPlain, vAAD, vTag, vCipher: TBytes;
vDigest, vSeed, vSignature, vMessage: TBytes;
vPublicKey, vPrivateKey, vSharedSecret, vCiphertext: TBytes;
begin
// AES-256-GCM: authenticated encryption in one call
vKey := sgcRandomBytes(32);
vIV := sgcRandomBytes(12);
vPlain := TEncoding.UTF8.GetBytes('confidential payload');
vCipher := sgcAES_GCM_Encrypt(vKey, vIV, vPlain, vAAD, vTag);
// SHA-3-256, one call, no context object to manage
vDigest := sgcSHA3_256(vPlain);
// Ed25519: sign a message
vSeed := sgcRandomBytes(32);
vMessage := TEncoding.UTF8.GetBytes('sign me');
vSignature := sgcEd25519_Sign(vSeed, vMessage);
// ML-KEM-768: post-quantum key encapsulation (FIPS 203)
sgcMLKEM_GenerateKeyPair(mlkem768, vPublicKey, vPrivateKey);
sgcMLKEM_Encapsulate(mlkem768, vPublicKey, vCiphertext, vSharedSecret);
end;
Symmetrische Verschlüsselung und AEAD
sgcCrypto_AES deckt CBC, GCM und CTR ab. sgcCrypto_Modes ergänzt ECB, OFB, CFB, das Ciphertext-Stealing-Verfahren CTS sowie AES Key Wrap und Key Wrap with Padding (RFC 3394 und RFC 5649), und sgcCrypto_CMAC ist AES-CMAC. sgcCrypto_ChaCha implementiert ChaCha20, XChaCha20, Salsa20 und XSalsa20, und sgcCrypto_Poly1305 kombiniert Poly1305 damit zu den AEAD-Chiffren ChaCha20-Poly1305 und XChaCha20-Poly1305 aus RFC 8439. Jedes Authentifizierungs-Tag, ob GCM oder Poly1305, wird in konstanter Zeit verglichen, sodass eine fehlgeschlagene Prüfung niemals verrät, wie nah der Versuch war.
Hashing, Schlüsselableitung und MACs
sgcCrypto_SHA2 und sgcCrypto_Keccak decken SHA-1/2, SHA-3, SHAKE, cSHAKE und KMAC ab, und sgcCrypto_Blake2b/Blake2s ergänzen BLAKE2. sgcCrypto_HMAC ist die schlüsselbasierte Nachrichtenauthentifizierung. Um aus einem Passwort einen Schlüssel abzuleiten, gibt es sgcCrypto_KDF (PBKDF2), sgcCrypto_HKDF, sgcCrypto_Scrypt und sgcCrypto_Argon2, das alle drei Argon2-Varianten implementiert, d, i und id, den Gewinner der Password Hashing Competition. sgcCrypto_SipHash liefert einen schnellen schlüsselbasierten Hash für Hashtabellen-Schlüssel, und sgcCrypto_TLSH ist ein Fuzzy-Ähnlichkeitshash, der eher für die Erkennung von Fast-Duplikaten nützlich ist als als kryptografischer Digest.
Signaturen, Schlüsselaustausch und PKI
sgcCrypto_Ed25519 und sgcCrypto_Ed448 signieren und verifizieren, und sgcCrypto_X25519 und sgcCrypto_X448 übernehmen den passenden Diffie-Hellman-Schlüsselaustausch. sgcCrypto_ECCurves ergänzt ECDSA und ECDH über secp256k1 und die drei Brainpool-Kurven mit deterministischen Nonces nach RFC 6979, und sgcCrypto_RSA_Keys deckt RSA-Schlüsselerzeugung in beliebiger Bitlänge, OAEP-Verschlüsselung und PSS-Signaturen ab.
Auf der PKI-Seite parst sgcCrypto_X509 ein Zertifikat, prüft, ob es von einem bestimmten Aussteller signiert wurde, durchläuft und verifiziert eine Kette und prüft eine CRL auf Widerruf. sgcCrypto_X509_Gen erzeugt von Grund auf ein selbstsigniertes X.509-Zertifikat oder einen PKCS#10-CSR, einschließlich Subject Alternative Names, Key Usage und CA-Pfadlängenbeschränkungen, aufbauend auf einem eigens dafür gebauten DER-Writer.
Post-Quanten-Kryptografie
sgcCrypto implementiert außerdem die drei Post-Quanten-Standards des NIST. sgcCrypto_MLKEM ist die Schlüsselkapselung nach FIPS 203 über alle drei Parametersätze, ML-KEM-512, 768 und 1024, mit impliziter Zurückweisung bei einem fehlerhaften Chiffretext, sodass eine ungültige Eingabe niemals Informationen preisgibt. sgcCrypto_MLDSA ist die Signatur nach FIPS 204, ML-DSA-44/65/87, und sgcCrypto_SLHDSA ist FIPS 205 über alle sechs SHAKE-Parametersätze. Da eine Gitter-Annahme jünger ist als elliptische Kurven, kombiniert sgcCrypto_MLKEM_Hybrid ein X25519-Geheimnis mit einem ML-KEM-Geheimnis zu einem gemeinsamen Schlüssel, das Hybrid-Migrationsmuster, auf das sich die Branche zubewegt.
Verfügbarkeit
sgcCrypto wird kostenlos mit sgcWebSockets Standard, Professional und Enterprise sowie mit All-Access ausgeliefert. Wenn Sie bereits eine dieser Lizenzen besitzen, sind die 43 Units bereits in Ihrem Installer enthalten, keine separate Bestellung nötig. Wenn Sie nur sgcWebSockets Core besitzen, oder gar keine sgcWebSockets-Lizenz, können Sie sgcCrypto auch als eigenständiges Paket mit gebündelter Core-Runtime erwerben. Jede Lizenz, ob enthalten oder eigenständig, umfasst den vollständigen Pascal-Quellcode und ein Jahr Updates.
Die vollständige Unit-Referenz können Sie auf der sgcCrypto-Produktseite lesen und selbst ausprobieren.
Fragen oder Feedback? Nehmen Sie Kontakt auf, Sie erhalten eine Antwort von den Leuten, die den Code geschrieben haben.
