İletişim

Parola Özetleme (Password Hashing) Nedir?

Kısa tanım

Parola özetleme (password hashing), kullanıcı parolalarının veritabanında düz metin ya da geri çözülebilir biçimde değil, Argon2id, scrypt veya bcrypt gibi bilerek yavaş çalışan ve her parola için rastgele bir tuz (salt) kullanan tek yönlü algoritmalarla saklanmasıdır. Giriş sırasında girilen parola aynı yöntemle özetlenip kayıtlı özetle karşılaştırılır. Amaç, veritabanı sızsa bile parolaların tahmin edilmesini olabildiğince pahalı hale getirmektir.

Diğer adları: Password Hashing, parola hash'leme, şifre hash'leme, şifre özetleme, parola tuzlama (salt)

Parolaların düz metin veya hızlı özetle saklanması ile tuzlu ve maliyetli Argon2id ya da bcrypt özetiyle saklanmasını karşılaştıran şema

Parolayı neden saklamıyoruz?

Bir giriş sisteminin parolayı bilmesine gerek yoktur; yalnızca kullanıcının girdiği parolanın doğru olup olmadığını anlaması gerekir. Bu yüzden parolalar düz metin olarak tutulmaz, şifrelenerek de tutulmaz: şifreleme geri çözülebilir ve anahtar da sunucuda durduğu için sızıntıda parolalar anahtarla birlikte açığa çıkabilir. Doğru yaklaşım tek yönlü bir özet saklamaktır. Giriş anında aynı algoritma çalıştırılır ve sonuç kayıtlı özetle karşılaştırılır.

Ancak her hash fonksiyonu bu iş için uygun değildir. OWASP'nin parola saklama rehberi bunu açıkça söyler: SHA-256 gibi hızlı algoritmalar, saldırganın çok kısa sürede çok sayıda tahmin denemesine izin verdiği için parola saklamaya uygun değildir. Parola özetleme algoritmaları bu yüzden bilerek yavaştır.

Tuz (salt): aynı parolaya farklı özet

Tuz, her parola için rastgele üretilen ve özetle birlikte saklanan bir değerdir. İki kullanıcı aynı parolayı seçse bile tuzları farklı olduğu için özetleri farklı çıkar. Bunun iki önemli sonucu vardır: önceden hesaplanmış dev özet tablolarıyla (rainbow table) toplu eşleştirme işe yaramaz ve saldırgan her hesabı ayrı ayrı kırmak zorunda kalır. Tuz gizli değildir; görevi benzersizlik sağlamaktır. Modern kütüphaneler tuzu kendileri üretip özetin içine yazdığı için geliştiricinin bunu elle yönetmesine genellikle gerek yoktur.

Yavaşlık bir özelliktir: iş faktörü

Parola algoritmalarında ayarlanabilir bir maliyet parametresi bulunur. Meşru bir giriş için birkaç yüz milisaniye fark edilmez, ama milyarlarca tahmin yapmak isteyen saldırgan için aynı maliyet işi pratikte imkânsız kılar. Argon2id ve scrypt, işlem süresinin yanında bellek de tükettiği için GPU ve özel donanımla yapılan paralel saldırıları ayrıca zorlaştırır. OWASP'nin bugünkü önerileri öncelik sırasıyla şöyledir:

AlgoritmaOWASP'nin önerdiği asgari yapılandırma
Argon2id19 MiB bellek, 2 iterasyon, 1 paralellik derecesi
scryptN = 2^17, r = 8, p = 1
bcryptİş faktörü 10 veya üzeri; parola uzunluğu 72 bayt ile sınırlı
PBKDF2HMAC-SHA-256 ile 600.000 veya üzeri iterasyon (FIPS uyumluluğu gerekiyorsa)

Bu değerler alt sınırdır; sunucunuzun kaldırabildiği ölçüde artırılabilir. Argon2id ile üretilmiş bir özet, algoritmayı, parametreleri, tuzu ve sonucu tek bir metinde taşır:

$argon2id$v=19$m=19456,t=2,p=1$<tuz (base64)>$<özet (base64)>

Parametreler kayıtta durduğu için ileride maliyeti artırdığınızda eski özetler de doğrulanmaya devam eder. Kullanıcı bir sonraki girişinde doğru parolayı girdiğinde, özet yeni parametrelerle yeniden hesaplanıp güncellenebilir.

Pepper ve eski sistemlerden geçiş

Pepper, tüm parolalar için ortak olan ve veritabanında değil, ayrı bir gizli bilgi yönetimi sisteminde veya donanım güvenlik modülünde tutulan ek bir sırdır. Saldırgan yalnızca veritabanını ele geçirirse pepper olmadan özetler üzerinde tahmin yapamaz. Zorunlu değildir ama derinlemesine savunma için değerli bir katmandır.

MD5 veya tuzsuz SHA-1 ile saklanmış parolaları devralan ekipler için iki yol vardır: kullanıcı giriş yaptıkça parolayı modern algoritmayla yeniden özetlemek ya da tüm eski özetleri hemen modern algoritmayla “sarmalayıp” kullanıcı ilk girişinde düz özete geçmek. İkinci yol, uzun süre giriş yapmayan hesapları da hemen korur.

Özetleme tek başına bir giriş güvenliği stratejisi değildir

İyi özetleme, sızıntı sonrasındaki zararı sınırlar; canlı sisteme yapılan kaba kuvvet saldırılarını ise engellemez. Bunun için giriş uç noktasında hız sınırlama, sızdırılmış parola listelerine karşı kontrol ve çok faktörlü kimlik doğrulama gerekir. Parolaların loglara, hata mesajlarına veya analitik araçlarına hiçbir zaman düşmemesi de en az algoritma seçimi kadar önemlidir.

İlgili terimler

← Sözlüğe dön