Cryptography

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.