sgcCrypto, Delphi ve C++ Builder için yeni, genel amaçlı bir kriptografi kütüphanesidir: simetrik şifreleme, özetleme (hashing), dijital imzalar, PKI ve post-kuantum anahtar değişimini kapsayan 43 saf Object Pascal biriminden oluşur. Tasarım zamanı bileşen yoktur, Tsgc* sınıfı yoktur ve forma sürükleyip bırakılacak hiçbir şey yoktur. Bir birimi uses bloğunuza eklersiniz ve bir RTL rutini çağırır gibi bir fonksiyon çağırırsınız.
sgcCrypto, sgcWebSockets Standard, Professional ve Enterprise ile birlikte ücretsiz gelir; yani bu lisanslardan birine veya All-Access'e zaten sahipseniz, kütüphane elinizde demektir, ayrıca kurulacak veya sipariş edilecek bir şey yoktur. Sadece Core'a sahip olan veya hiç sgcWebSockets lisansı bulunmayan müşteriler için, sgcWebSockets Core çalışma zamanını da içeren bağımsız bir paket olarak da satılır.
Nasıl Çalışır
Her birim, girdi olarak TBytes alan ve çıktı olarak TBytes döndüren sade fonksiyonlar ve yordamlar (procedure) dışa aktarır. Ayrılması gereken bir bağlam (context) nesnesi, uygulanması gereken bir arayüz ve kayıt edilecek hiçbir şey olmadığı için bir sgcCrypto_Reg.pas da yoktur. Her lisansla birlikte eksiksiz Pascal kaynak kodu gelir, böylece bir ilkel (primitive) bir DLL'in veya OpenSSL bağlantısının içinde kaybolmak yerine kendi hata ayıklayıcınızda adım adım izlenebilir.
Kütüphanedeki hiçbir şey harici bir kütüphaneye bağımlı değildir. AES'ten post-kuantum imza şemalarına kadar her algoritma, onu dışa aktaran birimin içinde doğrudan uygulanmıştır ve aynı kaynak kodu, Delphi 7'den RAD Studio 13'e kadar, Win32, Win64, Linux64, macOS, iOS ve Android için değişiklik yapılmadan derlenir.
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;
Simetrik Şifreleme ve AEAD
sgcCrypto_AES, CBC, GCM ve CTR'yi kapsar. sgcCrypto_Modes, ECB, OFB, CFB, şifreli metin çalma (ciphertext-stealing) CTS ile AES Key Wrap ve Key Wrap with Padding'i (RFC 3394 ve RFC 5649) ekler; sgcCrypto_CMAC ise AES-CMAC'tir. sgcCrypto_ChaCha, ChaCha20, XChaCha20, Salsa20 ve XSalsa20'yi uygular; sgcCrypto_Poly1305 ise Poly1305'i bunlarla eşleştirerek RFC 8439'daki ChaCha20-Poly1305 ve XChaCha20-Poly1305 AEAD şifrelerini oluşturur. GCM olsun Poly1305 olsun her doğrulama etiketi sabit zamanda karşılaştırılır, böylece başarısız bir kontrol tahminin ne kadar yaklaştığını asla ele vermez.
Özetleme, Anahtar Türetme ve MAC'ler
sgcCrypto_SHA2 ve sgcCrypto_Keccak, SHA-1/2, SHA-3, SHAKE, cSHAKE ve KMAC'ı kapsar; sgcCrypto_Blake2b/Blake2s ise BLAKE2'yi ekler. sgcCrypto_HMAC, anahtarlı mesaj doğrulamasıdır. Bir parolayı anahtara dönüştürmek için sgcCrypto_KDF (PBKDF2), sgcCrypto_HKDF, sgcCrypto_Scrypt ve Password Hashing Competition'ın kazananı olan üç Argon2 varyantının (d, i ve id) tümünü uygulayan sgcCrypto_Argon2 bulunur. sgcCrypto_SipHash, hash tablosu anahtarları için hızlı anahtarlı bir özet sağlar; sgcCrypto_TLSH ise kriptografik bir özet yerine yakın-yinelenen (near-duplicate) tespiti için kullanışlı, bulanık bir benzerlik özetidir.
İmzalar, Anahtar Değişimi ve PKI
sgcCrypto_Ed25519 ve sgcCrypto_Ed448 imzalama ve doğrulama yapar; sgcCrypto_X25519 ve sgcCrypto_X448 ise bunlara karşılık gelen Diffie-Hellman anahtar değişimini gerçekleştirir. sgcCrypto_ECCurves, RFC 6979 deterministik nonce'ları ile secp256k1 ve üç Brainpool eğrisi üzerinde ECDSA ve ECDH ekler; sgcCrypto_RSA_Keys ise herhangi bir bit uzunluğunda RSA anahtar üretimini, OAEP şifrelemesini ve PSS imzalarını kapsar.
PKI tarafında, sgcCrypto_X509 bir sertifikayı ayrıştırır, belirli bir düzenleyici (issuer) tarafından imzalandığını doğrular, bir zinciri gezip doğrular ve iptal (revocation) için bir CRL kontrol eder. sgcCrypto_X509_Gen, tam da bu amaç için oluşturulmuş bir DER yazıcısı üzerinde, konu alternatif adları (subject alternative names), anahtar kullanımı (key usage) ve CA yol uzunluğu (path-length) kısıtlamaları dahil olmak üzere sıfırdan kendinden imzalı bir X.509 sertifikası veya bir PKCS#10 CSR üretir.
Post-Kuantum Kriptografi
sgcCrypto ayrıca üç NIST post-kuantum standardını da uygular. sgcCrypto_MLKEM, ML-KEM-512, 768 ve 1024 olmak üzere her üç parametre setinde de FIPS 203 anahtar kapsüllemesidir; bozuk bir şifreli metinde örtük reddetme (implicit rejection) uygular, böylece kötü bir girdi asla bilgi sızdırmaz. sgcCrypto_MLDSA, ML-DSA-44/65/87 olmak üzere FIPS 204 imzalamadır ve sgcCrypto_SLHDSA, altı SHAKE parametre setinin tümünde FIPS 205'tir. Kafes (lattice) varsayımı eliptik eğrilerden daha genç olduğu için sgcCrypto_MLKEM_Hybrid, bir X25519 gizli anahtarını bir ML-KEM gizli anahtarıyla tek bir paylaşılan anahtarda birleştirir; bu, sektörün yöneldiği hibrit geçiş modelidir.
Kullanılabilirlik
sgcCrypto, sgcWebSockets Standard, Professional ve Enterprise ile ve All-Access ile birlikte ücretsiz gelir. Bu lisanslardan birine zaten sahipseniz, 43 birim zaten kurulum dosyanızdadır, ayrı bir sipariş gerekmez. Yalnızca sgcWebSockets Core'a sahipseniz veya hiç sgcWebSockets lisansınız yoksa, sgcCrypto, Core çalışma zamanının da dahil olduğu bağımsız bir paket olarak da satılır. Dahil olsun bağımsız olsun her lisans, eksiksiz Pascal kaynak kodu ve bir yıllık güncelleme ile gelir.
Tam birim referansını okuyabilir ve sgcCrypto ürün sayfasında kendiniz deneyebilirsiniz.
Sorularınız veya geri bildiriminiz mi var? Bizimle iletişime geçin, kodu yazan kişilerden bir yanıt alacaksınız.
