sgcCrypto, kütüphanede yalnızca FIPS onaylı algoritmaları bırakan SGC_CRYPTO_FIPS adlı isteğe bağlı bir derleme zamanı seçeneğine sahiptir. Bu seçenek, FIPS ve NIST SP yayınlarının dışındaki algoritmaları kullanmaması gereken projeler için tasarlanmıştır. Bu sayfa, seçeneğin ne yaptığını, nasıl etkinleştirileceğini, neyi koruduğunu, neyi kaldırdığını ve neyi kapsamadığını açıklar.
FIPS'in buradaki anlamı
FIPS 140-3, bir algoritmanın değil, bir kriptografik modülün sertifikasyonudur. Akredite bir laboratuvar, NIST'in Kriptografik Modül Doğrulama Programı (CMVP) kapsamında bir ürünün belirli bir derlemesini test eder ve NIST o derleme için bir sertifika yayınlar. AES gibi onaylı bir algoritma kullanmak, bir programı doğrulanmış yapmaz.
sgcCrypto, FIPS 140-3 doğrulanmış (validated) bir modül değildir ve bu seçeneği açmak bir doğrulama (validation) iddiası değildir. Seçeneğin yaptığı şey daha sınırlıdır:
Kalan algoritmalar, aşağıdaki tabloda listelenen FIPS ve NIST SP yayınlarına uyar.
Projenizin resmi bir FIPS 140-3 gereksinimi varsa, kriptografisi doğrulanmış bir modül üzerinden yürütülmelidir, örneğin sistem FIPS modunda çalışırken Windows CNG. Bu seçenek, onaylı olmayan algoritmaları kodunuzun dışında tutmaya yardımcı olur. Doğrulanmış bir modülün yerini tutmaz.
Seçeneği etkinleştirme
Seçenek varsayılan olarak kapalıdır. Kapalıyken hiçbir şey değişmez ve Cryptography sayfasında listelenen her algoritma kullanılabilir. Etkinleştirmek için aşağıdakilerden birini yapın:
{.$DEFINE SGC_CRYPTO_FIPS} { off, the default }
{$DEFINE SGC_CRYPTO_FIPS} { on }
Ardından yeniden derleyin. Seçenek yalnızca bu tanımla derlenen kodu etkiler, bu yüzden tanım olmadan oluşturulmuş önceden derlenmiş paketler etkilenmez.
Seçenek açıkken kaldırılan fonksiyonlar artık mevcut değildir. Bunlardan birini hâlâ çağıran kod, "Undeclared identifier" hatasıyla derlenemez. Bu kasıtlıdır: onaylı olmayan hiçbir şey yanlışlıkla ikili dosyaya giremez ve derleyici, farklı bir algoritma gerektiren her yeri gösterir.
Neler kalır
Sertifikalar, tek kullanımlık parolalar ve kodlama yardımcıları da kalır, çünkü yalnızca onaylı algoritmalar üzerine kuruludurlar veya hiç kriptografik algoritma değildirler.
| Aile | Korunan | Standart |
| AES | ECB, CBC, CFB, OFB, CTR, CTS, GCM ve CCM modunda AES-128/192/256, AES Key Wrap (KW ve KWP), AES-CMAC ve AES-GMAC | FIPS 197, SP 800-38A/B/C/D/F |
| Hash'leme | SHA-1 (yalnızca hâlâ izin verilen yerlerde, yeni imzalar için asla), SHA-224, SHA-256, SHA-384, SHA-512, SHA3-224/256/384/512, SHAKE128, SHAKE256, cSHAKE ve KMAC | FIPS 180-4, FIPS 202, SP 800-185 |
| Mesaj kimlik doğrulama | HMAC-SHA1, HMAC-SHA256, HMAC-SHA384 ve HMAC-SHA512 | FIPS 198-1 |
| Anahtar türetme | PBKDF2, HKDF ve ANSI X9.63 KDF | SP 800-132 (PBKDF2), SP 800-56C (HKDF), SP 800-135 (ANSI X9.63 KDF) |
| RSA | RSA anahtar üretimi, PKCS#1 v1.5 ve PSS imzaları, RSA-OAEP şifrelemesi | FIPS 186-5, SP 800-56B |
| ECDSA ve ECDH | NIST P-256, P-384 ve P-521 üzerinde imzalar ve anahtar anlaşması (P-224, sgcCrypto tarafından uygulanmaz) | FIPS 186-5, SP 800-56A |
| EdDSA | Ed25519 ve Ed448 imzaları | FIPS 186-5 |
| Kuantum sonrası kriptografi | ML-KEM, ML-DSA ve SLH-DSA | FIPS 203, FIPS 204, FIPS 205 |
| Sertifikalar & PKI | X.509 sertifika ayrıştırma, zincir doğrulama ve CRL kontrolleri ile yukarıdaki algoritmalarla imzalanmış sertifika veya CSR oluşturma | RFC 5280, RFC 2986 |
| Tek kullanımlık parolalar | HMAC üzerine kurulu HOTP ve TOTP | RFC 4226, RFC 6238 |
| Kodlama & yardımcı araçlar | Hex, Base32 ve Base64 kodlama, sabit zamanlı karşılaştırma, güvenli sıfırlama | RFC 4648 |
Neler kaldırılır
| Kaldırılan | Neden |
| ChaCha20, XChaCha20, Salsa20, XSalsa20, Poly1305, ChaCha20-Poly1305 ve XChaCha20-Poly1305 | NIST algoritmaları değildir. |
| X25519 ve X448 anahtar değişimi | SP 800-56A'da anahtar anlaşması için onaylı değildir. |
| X25519 + ML-KEM-768 hibrit yapısı ve ECIES | İkisi de X25519 üzerine kuruludur. |
| secp256k1 ve Brainpool eğrileri ile BIP-340 Schnorr imzaları | NIST tarafından önerilen eğriler değildir ve BIP-340 bir FIPS 186-5 imza şeması değildir. FIPS modu yalnızca NIST P eğrilerini korur. |
| Argon2 ve scrypt | NIST parola anahtar türetme fonksiyonları değildir. |
| BLAKE2b, BLAKE2s, SipHash ve TLSH | NIST algoritmaları değildir. |
| MD4, MD5, HMAC-MD5, RIPEMD-160 ve DES (sgcCrypto_Legacy birimi) | Eskimiştir veya NIST tarafından hiçbir zaman onaylanmamıştır. |
| KDF1 ve KDF2 | Bir NIST yayınında değil, ISO 18033-2'de tanımlanmıştır. ANSI X9.63 KDF kalır. |
| RSA PKCS#1 v1.5 şifrelemesi | SP 800-131A'ya göre izin verilmez. PKCS#1 v1.5 imzaları kalır. |
| WinZip AES (AE-1 ve AE-2) | Bir NIST biçimi değildir. |
Kaldırılan algoritmaların çoğu için ilk tabloda onaylı bir alternatif bulunur: ChaCha20-Poly1305 yerine AES-GCM, X25519 yerine P-256 veya P-384 üzerinde ECDH, Argon2 veya scrypt yerine PBKDF2, BLAKE2 yerine SHA-256 veya SHA-3 ve PKCS#1 v1.5 şifrelemesi yerine RSA-OAEP.
Çalışma zamanında kontrol edilen kurallar
Bazı kurallar bir fonksiyona geçirilen değerlere bağlıdır, bu yüzden derleyici bunları zorunlu kılamaz. Seçenek açıkken sgcCrypto bunları fonksiyon çalışırken kontrol eder ve her biri, mesajı sgcCrypto FIPS: ile başlayan bir istisna fırlatır:
Rastgele baytların kaynağı
Anahtarlar, nonce'lar ve tuzlar rastgele baytlara ihtiyaç duyar. sgcRandomBytes, her iki modda da bunları her zaman işletim sisteminden okur ve üzerine hiçbir zaman kendi üretecini çalıştırmaz. Seçenek yalnızca hangi sistem kaynağının kullanıldığını değiştirir:
| Platform | SGC_CRYPTO_FIPS ile | SGC_CRYPTO_FIPS olmadan |
| Windows | BCryptGenRandom (CNG, sistemin tercih ettiği RNG), yedek kaynak olmadan | BCryptGenRandom; BCryptGenRandom kullanılamadığında yedek olarak önce RtlGenRandom, ardından CryptGenRandom kullanılır |
| Linux ve Android | getrandom sistem çağrısı | /dev/urandom |
| macOS ve iOS | Security framework'ündeki SecRandomCopyBytes | /dev/urandom |
Her iki modda da hiçbir kaynak okunamazsa, zayıf baytlar döndürmek yerine bir istisna fırlatılır. İşletim sistemi üretecinin FIPS olarak kabul edilip edilmediği sgcCrypto'ya değil, işletim sistemine ve onun yapılandırmasına bağlıdır.
Seçeneğin kapsamadığı şeyler
Seçenek yalnızca sgcCrypto birimlerine uygulanır. sgcWebSockets'in diğer bölümleri, onaylı olmayan algoritmaları hâlâ kullanabilir:
Uygulamanın tamamının onaylı algoritmalarla sınırlı kalması gerekiyorsa, bu alanları da gözden geçirin.
Ayrıca Bakınız