FIPS Modu

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