Parola Hashleme Derinlemesine: bcrypt, scrypt ve Argon2
Şifrelerin neden hızlı hash algoritmalarıyla değil, kasıtlı olarak yavaşlatılmış özel fonksiyonlarla saklanması gerektiği.
Kullanıcı şifrelerinin doğru saklanması, kriptografi biliminin en yaygın yanlış uygulanan alanlarından biridir. Bu makale, neden genel amaçlı hash fonksiyonlarının (SHA-256 gibi) şifre saklamak için YETERSİZ olduğuna ve modern parola hashleme fonksiyonlarının bu sorunu nasıl çözdüğüne odaklanır.
Neden SHA-256 Şifre Saklamak İçin Yetersiz?
SHA-256 gibi genel amaçlı kriptografik hash fonksiyonları, KASITLI OLARAK HIZLI çalışacak şekilde tasarlanmıştır — bu, dosya bütünlüğü kontrolü gibi kullanım alanları için bir avantajdır ama şifre saklamak için ciddi bir dezavantaja dönüşür. Modern bir GPU, saniyede MİLYARLARCA SHA-256 hesaplaması yapabilir; bu da bir saldırganın, çalınan bir hash veritabanına karşı milyarlarca farklı şifre denemesini (brute-force veya rainbow table saldırısı) saatler, hatta dakikalar içinde gerçekleştirebilmesi anlamına gelir.
Salt: Rainbow Table Saldırılarına Karşı Temel Savunma
Bir salt, her kullanıcı için benzersiz, rastgele üretilen ve şifreyle birlikte hash'lenen ek bir veridir: hash(şifre + salt). Salt olmadan, bir saldırgan önceden hesaplanmış devasa bir "hash → şifre" tablosu (rainbow table) kullanarak birçok yaygın şifreyi anında çözebilir. Salt eklendiğinde, her kullanıcının hash'i farklı olduğu için (aynı şifreyi kullanan iki kullanıcı bile FARKLI hash değerlerine sahip olur), saldırganın her kullanıcı için AYRI bir rainbow table hazırlaması gerekir — bu, saldırıyı pratikte anlamsız hâle getirir. Ancak salt tek başına, hızlı hash fonksiyonlarının brute-force'a karşı zayıflığını çözmez — bunun için "yavaş" fonksiyonlara ihtiyaç vardır.
bcrypt: Cost Factor ile Kasıtlı Yavaşlatma
bcrypt, Blowfish şifreleme algoritmasının anahtar zamanlama (key scheduling) sürecini tekrar tekrar uygulayarak KASITLI OLARAK yavaş çalışacak şekilde tasarlanmıştır. Bir "cost factor" (iş faktörü) parametresi, kaç kez tekrarlanacağını belirler:
bcrypt(şifre, cost=12) // 2^12 = 4096 tekrar
Cost factor'ü bir artırmak, hesaplama süresini İKİYE KATLAR — bu, donanım hızlandıkça (Moore Yasası) cost factor'ü artırarak bcrypt'in her zaman "yeterince yavaş" kalmasını sağlayan esnek bir tasarımdır.
scrypt: Bellek-Yoğun Yaklaşım
bcrypt'in bir zayıflığı, sadece CPU zamanını zorlaştırmasıdır — bu, özel donanımla (ASIC, FPGA) paralel olarak çok sayıda hesaplamanın ucuza yapılabilmesine imkân tanır. scrypt, hesaplamayı sadece yavaş değil, aynı zamanda ÇOK FAZLA BELLEK gerektirecek şekilde tasarlar. Bu, "bellek-zor" (memory-hard) bir yaklaşımdır — özel donanım üretmek CPU hızlandırmaktan çok daha pahalı ve karmaşıktır, bu yüzden scrypt, ASIC tabanlı saldırılara karşı bcrypt'ten daha dirençlidir.
Argon2: 2015 Password Hashing Competition Kazananı
Argon2, 2015'teki uluslararası "Password Hashing Competition" yarışmasını kazanan ve günümüzde en modern, en çok tavsiye edilen parola hashleme fonksiyonudur. Üç ayarlanabilir parametre sunar:
- Zaman maliyeti (time cost): Kaç iterasyon yapılacağı.
- Bellek maliyeti (memory cost): Ne kadar RAM kullanılacağı.
- Paralellik derecesi (parallelism): Kaç paralel iş parçacığı (thread) kullanılacağı.
Bu üç boyutlu esneklik, Argon2'nin hem GPU tabanlı hem ASIC tabanlı saldırılara karşı bcrypt ve scrypt'ten daha dengeli bir direnç sunmasını sağlar. Argon2'nin iki varyantı vardır: Argon2i (yan kanal saldırılarına karşı optimize, şifre hashleme için önerilir) ve Argon2d (daha hızlı ama yan kanal saldırılarına karşı daha az dirençli, genelde kriptopara madenciliği gibi farklı bağlamlarda kullanılır).
Pratik Senaryo
Bir startup, kullanıcı kayıt sistemini geliştirirken hız kaygısıyla şifreleri SHA256(şifre + sabit_bir_salt) şeklinde hash'liyor — hem salt her kullanıcı için benzersiz değil hem de SHA-256 çok hızlı. Bir veri ihlali yaşandığında, saldırgan çalınan hash veritabanına karşı modern bir GPU çiftliğiyle saatler içinde yaygın şifrelerin büyük bir kısmını (özellikle zayıf/tahmin edilebilir şifreleri) çözüyor. Olay sonrası şirket, tüm şifreleri Argon2id (Argon2i ile Argon2d'nin dengeli bir hibriti) ile yeniden hash'liyor ve her kullanıcı için ayrı, kriptografik olarak güvenli rastgele salt üretiyor — aynı veri tabanı tekrar çalınsa bile, artık bir saldırganın aynı GPU gücüyle anlamlı sayıda şifreyi makul bir sürede çözmesi pratik olarak imkânsız hâle geliyor.
Bu makale, parola hashleme fonksiyonlarının orta-ileri seviye teknik bir özetidir; SiberCrew ekibi tarafından hazırlanmış özgün içeriktir.