sgcWebSockets, tamamen saf Pascal ile yazılmış genel amaçlı bir kriptografi kütüphanesi olan sgcCrypto'yu içerir. OpenSSL'e veya başka herhangi bir harici kütüphaneye bağımlılığı yoktur ve Delphi 7'den Delphi 13'e kadar, Win32, Win64, Linux64, macOS ve iOS üzerinde değişmeden derlenir.
Kütüphane; hash'leme ve mesaj kimlik doğrulamayı, parola hash'leme ve anahtar türetmeyi, simetrik şifrelemeyi, klasik açık anahtar kriptografisini, kuantum sonrası kriptografiyi, X.509 sertifikalarını, tek kullanımlık parolaları, arşiv şifrelemesini ve neredeyse aynı içerikleri tespit etmek için bulanık bir hash'i kapsar. Her algoritma ailesi için bir birim olacak şekilde düzenlenmiştir (sgcCrypto_AES, sgcCrypto_MLKEM, sgcCrypto_TLSH, ve benzeri), böylece bir uygulama yalnızca gerçekten çağırdığı kodu projeye dahil eder.
Her fonksiyon, TBytes alan ve döndüren sade bir çağrıdır: forma sürüklenecek bileşen yoktur ve tasarım zamanı yapılandırması yoktur. Aşağıda listelenen her algoritmanın uygulaması, yalnızca kendi çıktısına karşı değil, aynı standardın bağımsız bir uygulamasına karşı (OpenSSL, Python'un hashlib/cryptography'si veya standardın yazarları tarafından yayınlanan bir referans uygulaması) bayt bayt çapraz kontrol edilmiştir; bu, kendi içinde tutarlı ama yanlış olan bir hatayı yakalayan yöntemdir.
Kütüphaneyi etkinleştirme
Kriptografi birimleri, sgcVer.inc içindeki SGC_PACK_CRYPTO koşullu tanımıyla kontrol edilen Cryptography kurulum paketine aittir. Tanım kapalıyken, her sgcCrypto_* birimi boş bir taslağa derlenir, bu da bu pakete ihtiyaç duymayan bir derlemeyi paketten uzak tutar. Paketi yükleyiciden seçin veya kaynaktan derliyorsanız proje seçeneklerinizde SGC_PACK_CRYPTO'yu tanımlayın.
Bir projenin yalnızca FIPS onaylı algoritmaları kullanması gerekiyorsa, isteğe bağlı SGC_CRYPTO_FIPS tanımı, diğer tüm algoritmaları derleme zamanında sgcCrypto birimlerinden kaldırır. Varsayılan olarak kapalıdır. Neyi koruduğunu, neyi kaldırdığını ve neden bir FIPS 140-3 doğrulaması olmadığını öğrenmek için FIPS Modu sayfasına bakın.
sgcCrypto birimleri, kütüphanenin geri kalanının OpenSSL olmadan çalışmasını da sağlayan şeydir: sgcCryptoBackend çalışma zamanı anahtarı (veya isteğe bağlı SGC_NATIVE_CRYPTO tanımı) ve iohNativeTLS IOHandler'ı. Bkz. OpenSSL Olmadan Çalıştırma.
Bu sayfada neler var
Aşağıdaki tablo eksiksiz bir envanterdir: kütüphanenin uyguladığı her algoritma ve bunun hangi birimde bulunduğu. Sonraki sayfalar her aileyi tek tek, tam fonksiyon imzaları ve kısa bir Delphi örneğiyle açıklar.
| Kategori | Algoritmalar | Standart | Birim |
| Hash'leme | SHA-1, SHA-224, SHA-256, SHA-384, SHA-512 | FIPS 180-4 | sgcCrypto_SHA2 |
| Hash'leme | SHA3-224, SHA3-256, SHA3-384, SHA3-512, SHAKE128, SHAKE256, cSHAKE, KMAC | FIPS 202, SP 800-185 | sgcCrypto_Keccak |
| Hash'leme | BLAKE2b (keyed, up to 512 bit) | RFC 7693 | sgcCrypto_Blake2b |
| Hash'leme | BLAKE2s (keyed, up to 256 bit) | RFC 7693 | sgcCrypto_Blake2s |
| Hash'leme | SipHash-2-4 | — | sgcCrypto_SipHash |
| Hash'leme | RIPEMD-160, HMAC-RIPEMD160 | ISO/IEC 10118-3, RFC 2286 | sgcCrypto_Legacy |
| Hash'leme (eski) | MD4, MD5, DES-ECB, NTLM v1 hash | — | sgcCrypto_Legacy |
| Bulanık hash'leme | TLSH digest and distance | — | sgcCrypto_TLSH |
| Mesaj kimlik doğrulama | HMAC-SHA1/256/384/512, HMAC-MD5 | FIPS 198-1 | sgcCrypto_HMAC |
| Mesaj kimlik doğrulama | AES-CMAC | RFC 4493 | sgcCrypto_CMAC |
| Mesaj kimlik doğrulama | AES-GMAC | SP 800-38D | sgcCrypto_CMAC |
| Mesaj kimlik doğrulama | Poly1305 | RFC 8439 | sgcCrypto_Poly1305 |
| Parola hash'leme & KDF | PBKDF2 (SHA-1/256/384/512) | RFC 8018 | sgcCrypto_KDF |
| Parola hash'leme & KDF | KDF1, KDF2, ANSI X9.63 KDF | ISO 18033-2, ANSI X9.63 | sgcCrypto_KDF |
| Parola hash'leme & KDF | scrypt | RFC 7914 | sgcCrypto_Scrypt |
| Parola hash'leme & KDF | Argon2d, Argon2i, Argon2id | RFC 9106 | sgcCrypto_Argon2 |
| Parola hash'leme & KDF | HKDF (SHA-256/384) | RFC 5869 | sgcCrypto_HKDF |
| Simetrik şifreleme | AES-128/192/256: ECB, CBC, CFB, OFB, CTR, CBC ciphertext stealing, GCM | FIPS 197, SP 800-38A/D | sgcCrypto_AES, sgcCrypto_Modes |
| Simetrik şifreleme | 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 |
| Simetrik şifreleme | AES-CCM (AEAD) | RFC 3610, SP 800-38C | sgcCrypto_Modes |
| Simetrik şifreleme | AES Key Wrap, AES Key Wrap with Padding | RFC 3394, RFC 5649 | sgcCrypto_Modes |
| Simetrik şifreleme | ChaCha20, XChaCha20, Salsa20, XSalsa20 | RFC 8439 | sgcCrypto_ChaCha |
| Simetrik şifreleme | ChaCha20-Poly1305, XChaCha20-Poly1305 (AEAD) | RFC 8439 | sgcCrypto_Poly1305 |
| Açık anahtar kriptografisi | RSA key generation, RSA-OAEP, RSA-PSS, PKCS#1 v1.5 sign/verify | RFC 8017 | sgcCrypto_RSA_Keys, sgcCrypto_RSA |
| Açık anahtar kriptografisi | RSA PKCS#1 v1.5 encryption | RFC 8017 | sgcCrypto_RSA_Keys |
| Açık anahtar kriptografisi | Ed25519, Ed448 (signatures) | RFC 8032 | sgcCrypto_Ed25519, sgcCrypto_Ed448 |
| Açık anahtar kriptografisi | X25519, X448 (key agreement) | RFC 7748 | sgcCrypto_X25519, sgcCrypto_X448 |
| Açık anahtar kriptografisi | ECIES sealed box encryption | — | sgcCrypto_ECIES |
| Açık anahtar kriptografisi | ECDSA / ECDH on NIST P-256, P-384, P-521 | FIPS 186-5 | sgcCrypto_EC, sgcCrypto_ECCurves |
| Açık anahtar kriptografisi | ECDSA / ECDH on secp256k1, brainpoolP256r1, brainpoolP384r1, brainpoolP512r1 | SEC 2, RFC 5639 | sgcCrypto_ECCurves |
| Açık anahtar kriptografisi | ECDSA DER encoded signatures, raw and DER conversion | RFC 3279 | sgcCrypto_ECCurves, sgcCrypto_EC |
| Açık anahtar kriptografisi | Schnorr signatures on secp256k1 | BIP-340 | sgcCrypto_ECCurves |
| Açık anahtar kriptografisi | 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 |
| Kuantum sonrası kriptografi | 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 |
| Kuantum sonrası kriptografi | ML-DSA-44/65/87 | FIPS 204, RFC 9881, RFC 9964 | sgcCrypto_MLDSA |
| Kuantum sonrası kriptografi | SLH-DSA-SHAKE-128s/128f/192s/192f/256s/256f | FIPS 205, RFC 9909 | sgcCrypto_SLHDSA |
| Sertifikalar & PKI | X.509 parsing, chain and CRL verification | RFC 5280 | sgcCrypto_X509 |
| Sertifikalar & PKI | X.509 self-signed certificate and PKCS#10 CSR generation | RFC 5280, RFC 2986 | sgcCrypto_X509_Gen |
| Sertifikalar & PKI | EC signed X.509 certificates and CSRs, URI subject alternative names | RFC 5280, RFC 2986 | sgcCrypto_X509_Gen |
| Sertifikalar & PKI | PKCS#12 (.pfx, .p12) okuma: uç sertifika, zincir ve özel anahtar. AES ile PBES2, ve eski Triple DES ve RC2 şemaları | RFC 7292, RFC 9579 | sgcCrypto_PKCS12 |
| Sertifikalar & PKI | DER / ASN.1 reader and writer, PEM, Base64 | — | sgcCrypto_ASN1, sgcCrypto_DER |
| Tek kullanımlık parolalar | HOTP, TOTP | RFC 4226, RFC 6238 | sgcCrypto_OTP |
| Arşiv şifrelemesi | WinZip AE-1 / AE-2 | WinZip AE-2 | sgcCrypto_Zip_AE2 |
| Kodlama & yardımcı araçlar | Hex, Base32, Base64url, constant time compare, secure zero, random bytes | RFC 4648 | sgcCrypto_Encoding, sgcCrypto_Random |
Tek tek açıklamalar
1. Hash'leme ve Mesaj Kimlik Doğrulama: bu sayfadaki neredeyse tüm diğer algoritmaların üzerine inşa edildiği yapı taşları olan SHA-2, SHA-3, SHAKE, BLAKE2, SipHash, HMAC, AES-CMAC ve Poly1305.
2. Parola Hash'leme ve Anahtar Türetme: PBKDF2, scrypt, Argon2id ve HKDF. Bir parolayı saklamak ve mevcut bir gizli değerden anahtar türetmek farklı işlerdir; bu sayfa nedenini ve hangi fonksiyonun hangi işe uyduğunu açıklar.
3. Simetrik Şifreleme: kütüphanenin desteklediği her modda AES, AES anahtar sarmalama, ChaCha20/Salsa20 ve bunların Poly1305 AEAD yapıları, ve kimlik doğrulamalı bir modun neden varsayılan seçim olması gerektiği.
4. Açık Anahtar Kriptografisi: RSA, Ed25519/Ed448 imzaları, X25519/X448 anahtar anlaşması, ECIES, NIST, secp256k1 ve Brainpool eğrileri üzerinde ECDSA/ECDH, ve BIP-340 Schnorr imzaları.
5. Kuantum Sonrası Kriptografi: NIST tarafından FIPS 203-205'te standartlaştırılan üç şema olan ML-KEM, ML-DSA ve SLH-DSA, ve bugün devreye alınacak hibrit yapı.
6. Sertifikalar ve PKI: aldığınız X.509 sertifikalarını ayrıştırma ve doğrulama, ve bir RSA veya bir EC anahtarıyla imzalanmış kendi kendine imzalı sertifikalarınızı ve PKCS#10 isteklerinizi oluşturma.
7. Tek Kullanımlık Parolalar: bir kimlik doğrulayıcı uygulamanın ürettiği kodlar olan HOTP ve TOTP, tedarik (provisioning) URI'si dahil.
8. Bulanık Hash'leme (TLSH): neredeyse aynı içerikleri tespit etmek için konuma duyarlı bir hash; bu sayfadaki diğer her hash'in aksine, bütünlük veya güvenlik için tasarlanmamıştır.
9. WinZip AE-2 Arşiv Şifrelemesi: .zip arşivleri içinde kullanılan AES şifrelemesi, ve neyi koruyup neyi korumadığı.
10. FIPS Modu: kütüphanede yalnızca FIPS onaylı algoritmaları bırakan bir derleme zamanı seçeneği, neleri kaldırıp neleri kontrol ettiği ve neden bir FIPS 140-3 doğrulaması olmadığı.
Demolar
Demos\18.Cryptography klasöründe, yukarıdaki her alan için bir tane olmak üzere (hash'leme, simetrik şifreleme, parolalar, açık anahtar, kuantum sonrası, sertifikalar ve WinZip AE-2 ile tek kullanımlık parolalar) çalıştırılabilir yedi uygulama bulunur; her biri API'nin kullanımını gösterir ve önerilen seçimlerin arkasındaki mantığı açıklar.