Yapay zekânın hızla geliştiği, kuantum bilgisayarların artık ciddi şekilde konuşulduğu bu dönemde veri güvenliği her zamankinden daha kritik bir hale geldi. Özellikle kullanıcı bilgileri hem bireyler hem de kurumlar için hayati bir sorumluluğa evrilmiştir.
Bu yazıda veri güvenliğinin temel yapı taşlarından biri olan hash salting ve hash pepper kavramlarını ele alacağım.
Hash Nedir?
Hash, herhangi bir boyuttaki veriyi sabit uzunlukta ve geri döndürülemez bir çıktıya dönüştüren, veri bütünlüğünü ve güvenliğini sağlamak amacıyla kullanılan bir fonksiyondur. Aynı girdi her zaman aynı çıktıyı üretirken, girdide yapılacak en küçük bir değişiklik bile tamamen farklı bir hash sonucu oluşturur. Bu sayede veriler düz metin (clear text) olarak saklanmaz; ancak bu yöntem tek başına tam güvenlik sağlamak için yeterli değildir.
Rainbow Table Saldırıları
Parolaları saklamak ve güvende tutmak kullanıcı bilgilerini hashlemek tek başına yetersiz kalmaktadır. Hashleri çözmek için kullanılan bir yöntem rainbow table attack.
Rainbow atak nedir?
Saldırganlar yaygın kullanılan şifrelerin hash’lerini önceden hesaplamış ve bu hashleri büyük tablolar halinde saklarlar ele geçirdiği hashleri daha önce elde ettikleri bu tablolar ile karşılaştırarak tüm verilerimizi clear text haline getirir.
Rainbow atak ile yapılan veri sızıntıları nelerdir?
- Linkedin: 2012 yılında şifrelenmiş veriler sızdırıldı ve saldırganlar rainbow tablolarını kullanarak 6.5 milyon şifreye erişim sağlandı
- Sony PlayStation:; 2011 yılında olan bu sızıntı 77 milyon hesap etkilendi ve yine zayıf şifreleme mevcuttu
- RockYou: 2009 yılında yaşanan bu olayda 32 milyon plaintext olarak sızdı ve sızan veriler rainbow tablo oluşturmak için kullanıldı ve daha sonra yaşanan saldırılarda temel olarak anıldı
- Adobe: 2013 yılında 150 milyon kullanıcı verisi sızdı ve şifreleme zayıftı.
Rainbow atak saldırısına karşı peki ne yapabiliriz?
Bu yaşanmış veri sızıntılarını incelediğimizde ortak noktanın zayıf şifreleme olduğunu söyleyebiliriz. Parolaları sadece clear text olarak tutmayıp şifrelemek gerekir ama zayıf şifreleme de çözüm olmamaktadır. Kuantum bilgisayarların geliştirildiği bu dönemde güçlü şifreleme de yeterli olmayacaktır
Şifrelerimizi Daha Güvenli Hale Nasıl Getirebiliriz?
İnternet üzerinde kullanılan her sistem, kullanıcı şifrelerini güvenli bir şekilde saklamak zorundadır. Şifrelerin düz metin (plaintext) olarak tutulması, olası bir veri sızıntısında felakete yol açar ve bu nedenle şifreler genellikle hashlenerek saklanır. Ancak yalnızca hash kullanmak da tek başına yeterli değildir; burada devreye “salt” kavramı girer.
Öncelikle hash fonksiyonlarının ne yaptığını anlamak önemlidir. Hash fonksiyonları, girdi olarak aldıkları veriyi sabit uzunlukta, geri döndürülemez bir çıktıya dönüştürür. Örneğin, “123456” ve “parola” gibi şifreler, hash fonksiyonundan geçirildiğinde bambaşka, rastgele görünümlü dizelere dönüşür. Teorik olarak, saldırgan eline yalnızca hash çıktısını geçirse bile orjinal şifreyi bulamamalıdır. Ancak pratikte durum bu kadar basit değildir.
Saldırganlar, sık kullanılan şifrelerin hashlerini önceden hesaplayıp devasa sözlükler (dictionary) veya rainbow table denilen yapılar oluştururlar. Örneğin “123456”, “password”, “qwerty” gibi milyonlarca yaygın şifrenin hash değeri önceden bilinir. Bir veri tabanına sızdıklarında, kullanıcıların şifre hash’lerini bu tablolarla karşılaştırarak (Örneğin; https://crackstation.net/) saniyeler içinde pek çok hesabın şifresini çözebilirler. İşte hash salting tam olarak bu zayıflığı hedef alır.
Salt, hash işlemine eklenen rastgele, genellikle her kullanıcı için farklı bir değerdir. Kullanıcının şifresi doğrudan hashlenmek yerine, önce salt ile birleştirilir, sonra hash fonksiyonuna verilir. Örneğin, şifre “Orhan123” salt ise “7fA8c9b!!” ise hash fonksiyonu “Orhan1237fA8c9b!” üzerinde çalışır. Böylece aynı şifreyi kullanan iki kullanıcı bile, farklı salt değerlerine sahip oldukları için tamamen farklı hash çıktıları üretirler.

Bu sayede hash tablolarının işe yaramaz hâle getirmiş oluruz. Çünkü saldırgan, elindeki rainbow tabloları yalnızca salt kullanılmayan düz hashler için kullanabilir. Salt devreye girdiğinde, her kullanıcı için hashi yeniden ve salta özel olarak hesaplamak zorunda kalır. Bu ise saldırganın işini hem çok daha pahalı hem de zaman alıcı hâle getirir. Özellikle uzun, rastgele üretilmiş salt değerleri kullanıldığında, pratikte rainbow table saldırıları neredeyse imkânsız hâle gelir.
Salt kullanımında dikkat edilmesi gereken birkaç önemli nokta vardır.
- Salt değeri mutlaka rastgele ve yeterince uzun olmalıdır. Kısa veya tahmin edilebilir salt değerleri, saldırganın yapacağı brute-force (kaba kuvvet) saldırılarını fazla yavaşlatmaz.
- Salt her kullanıcı için benzersiz olmalıdır; tüm kullanıcılar için aynı saltı kullanmak güvenliği önemli ölçüde düşürür.
- Salt genellikle gizli tutulmak zorunda değildir, veri tabanında hash değeriyle birlikte saklanabilir. Amacı, hash fonksiyonuna giren veriyi çeşitlendirmek ve önceden hesaplanmış tabloları anlamsız kılmaktır.
Burada karıştırılmaması gereken bir kavram da “pepper”dır. Peki pepper nedir? Pepper, salt gibi ek bir değer olarak şifrelere hash değerine eklenir lakin salt gibi her kullanıcı için farklı bir değer değil aynı değeri ekler. Pepper da salt gibi hashlerin güvenliğini arttırıp “brute force”ları engelleyip şifre kırmayı zorlaştırmak amacında olsa bile sabit değeri salt gibi zorlaştırmıyor.
Yani salt her kullanıcıya özgü ve açıkça saklanırken; pepper tekil, sistem bazında ve mümkünse uygulama kodundan ya da ayrı bir güvenli ortamlarda (HSM, secret manager vb.) saklanır.
Güvenliği Arttırmak İçin Ne Yapabiliriz ?
- Salt ve pepper birlikte kullanılabilir.
- Salt, çoğunlukla güçlü şifreleme amaçlı tasarlanmış hash fonksiyonlarıyla birlikte kullanılması bu aşamada hızlı hash fonksiyonlar yerine parola tabanlı anahtar türetme fonksiyonları tercih edilir: bcrypt, scrypt, Argon2 gibi algoritmalar hem salt kullanımı hem de iterasyon (çok kez hashing) ve bellek tüketimi gibi ek güvenlik katmanları sağlar. Böylece saldırganın her bir şifreyi tahmin edip denemesi oldukça maliyetli hâle gelir.
- Hash saltingin gerçek dünyadaki etkisini görmek için büyük veri sızıntılarını düşünmek yeterlidir. Geçmişte pek çok platform, salt kullanmadan veya zayıf bir şema ile şifre sakladığı için milyonlarca kullanıcının parolasının çok kısa sürede açığa çıkmasına neden olmuştur. Buna karşılık, güçlü salt ve uygun algoritmalarla korunmuş hashlerin kırılması çoğu zaman pratikte mümkün olmamakta ya da yıllar alacak hesaplama gücü gerektirmektedir. Bu fark, hem kullanıcı gizliliği hem de kurumların itibarı açısından yaşamsal önem taşır.
Hash salting şifreleri daha güvenli kılmak için kullanılan kritik bir tekniktir. Salt, her kullanıcı için rastgele ve benzersiz bir değer olarak şifreyle birleştirilir ve hash fonksiyonuna verilir. Böylece aynı şifreler için bile farklı hash çıktıları elde edilir, önceden hesaplanmış hash tabloları etkisiz hâle gelir ve saldırganın işi katlanarak zorlaşır. Elbette salt tek başına mucize yaratmaz; güçlü, yavaş parola hash algoritmaları, iyi uygulama mimarisi, güncel güvenlik pratikleri ve kullanıcıların güçlü şifreler seçmesiyle birlikte kullanıldığında en etkili hâline ulaşır.
