İçeriğe geç

PBKDF2-SHA256 Anahtar Türetme

NIST onaylı, SHA-256 HMAC tabanlı anahtar türetme fonksiyonu.

RFC 8018

Parametreler: 600 000 iterasyon, 16 bayt rastgele salt, 32 bayt çıktı.

Her çalıştırmada yeni bir salt kullanılır; aynı parola farklı hash üretir. Doğrulama için çıktının tamamını saklayın.

Araç hakkında

PBKDF2-HMAC-SHA-256 nasıl çalışır?

PBKDF2, parolayı anahtar olarak kullanan HMAC-SHA-256 fonksiyonunu salt ile başlayarak art arda çalıştırır ve sonuçları XOR’lar. Maliyet yalnız iterasyon sayısıyla ayarlanır; bellek gerektirmediği için GPU üzerinde Argon2 ve scrypt’e göre çok daha ucuz paralelleştirilir.

Araç 600 000 iterasyon, 16 bayt rastgele salt ve 32 bayt çıktı kullanır. Bu değer OWASP’ın PBKDF2-HMAC-SHA-256 için önerdiği alt sınırın üzerindedir.

$pbkdf2-sha256$i=600000$<salt>$<hash>
Bu sitenin encoded biçimi. passlib gibi kütüphanelerin PBKDF2 biçimleri farklı ayırıcı ve Base64 alfabesi kullanır; doğrudan taşınabilir değildir.

Ne zaman PBKDF2 seçilmeli?

  • FIPS 140 doğrulaması gereken ortamlarda (PBKDF2 NIST SP 800-132’de tanımlıdır, Argon2 değildir).
  • Platformun yalnız PBKDF2 sunduğu durumlarda (ör. Web Crypto API, birçok donanım güvenlik modülü).
  • Bu kısıtlar yoksa yeni sistemlerde Argon2id tercih edin.

Aynı değeri Web Crypto ile üretmek

PBKDF2-SHA256 tarayıcıların ve Node.js’in Web Crypto API’sinde yerleşik olarak bulunur; ek kütüphane gerekmez. Django’nun varsayılan parola hasher’ı da PBKDF2-SHA256’dır ve iterasyon sayısını her sürümde artırır.

const key = await crypto.subtle.importKey('raw', new TextEncoder().encode(parola), 'PBKDF2', false, ['deriveBits']);
const bits = await crypto.subtle.deriveBits(
  { name: 'PBKDF2', hash: 'SHA-256', salt, iterations: 600000 },
  key, 256,
);
salt, encoded dizedeki Base64 değerin çözülmüş 16 baytıdır.

Kaynaklar