Bu bölümde, parolaları güvenlik altına alma da kullanılan aşlama (hashing) işlevinin arka planı ve etkin şekilde nasıl uygulanabileceği ele alınacaktır.
Kullanıcıların girmiş olduğu parolalar neden aşlanmalı?
Parola aşlama, kullanıcıların parola girerek kullandıkları bir uygulamanın tasarımında, mutlaka göz önüne alınması gereken en temel güvenlik faktörlerinden birisidir. Parola aşlama tekniği kullanılmadığı takdirde, uygulamanızın veri tabanında saklanan her türlü parola veritabanınızı ele geçirenler tarafından çalınabilir ve ardından sadece uygulama değil, aynı parolayı başka hizmetler için kullanıyorlarsa uygulamayı kullanan kullanıcılar da risk altında kalır.
Kullanıcıların parolalarını veri tabanına kaydetmeden önce, uygulanan aşlama algoritması ile saldırganın özgün parolayı tahminini imkansız kılınırken, ilerleyen süreçte de özgün parolayı bulma çabaları da (kaba kuvvet saldırısı tekniğiyle) zorlaştırılmış olur.
Ancak, dikkat edilmesi gereken önemli nokta, parola aşlama sadece veri kaynağının ele geçirilmesine karşı koruma sağlarken, uygulamanın istem dışında yerleştirilmiş zararlı kodları aracılığıyla parolaların ele geçirilmesine karşı koruma sağlamaz.
MD5() ve SHA1() gibi genel aşlama işlevlerini parolalar için kullanmak neden uygun değildir?
MD5, SHA1 ve SHA256 gibi aşlama algoritmaları verimli ve çok hızlı olmaları için tasarlanmıştır. Modern teknikler ve bilgisayar ekipmanları ile, Kaba kuvvet (brute force) atak tekniği kullanarak özgün değere ulaşmak sıradan bir hale gelmiştir.
Çünkü, modern bir bilgisayar, oldukça hızlı olarak bu aşlama
tekniklerini tersine
çevirir, çoğu güvenlik uzmanı da
bunların parola aşlama da kullanımına karşı aleyhte tavsiye de bulunur.
Genel aşlama teknikleri kullanışlı olmadıklarına göre, parolalarımı nasıl aşlamalıyım?
Parolaları aşlamada, dikkate alınması gereken iki husus vardır; hesaplamanın maliyeti ve tuzlama. aşlama algoritmasında daha fazla hesaplama maliyeti demek kaba kuvvet ataklarının daha fazla zaman gerektirmesi demektir.
PHP, güvenli bir şekilde aşlama ve parola doğrulamayı birlikte güvenle sağlayan bir yerel parola aşlama arayüzü sağlamaktadır.
Parola aşlama da Blowfish algoritmasının kullanılması önerilir, parola aşlama APIsi tarafından da öntanımlı olarak kullanılan bu algoritma MD5 veya SHA1 den daha fazla hesaplama gerektirmesine rağmen hala ölçeklenebilir durumdadır.
Parola aşlama için crypt() işlevi de kullanılabilirse de, bunun yalnızca diğer işletim sistemleriyle bir arada çalışabilirlik adına yapılması önerilir. Bunun yerine mümkün olduğunca yerleşik parola aşlama arayüzünün kullanılması şiddetle önerilir.
Tuzlama nedir?
Bir şifreleme tuzu, gökkuşağı tablosu olarak bilinen, daha önceden hesaplanarak oluşturulmuş aşlama listesinden karşılaştırma yaparak eşleştirme ihtimalini ortadan kaldırmak için, aşlama işlemi esnasında uygulanan bir değerdir.
Basit anlamda tuz, haşlanmış değerinizi kırma teşebbüslerini zorlaştırmada kullanılan ek bir veridir. İnternet üzerinde, daha önceden hesaplanmış kapsamlı aşlama değerlerinin yanı sıra özgün değerleri de barındıran bir dizi liste hizmeti vardır. Tuz kullanmak bu listelerden aşlama değerini bulmayı mantıksız veya imkansız kılar.
Bir tane sağlanmamışsa password_hash() rasgele bir tuz oluşturacaktır ve bu genelde en kolay ve en güvenilir yaklaşımdır.
Tuzlar nasıl saklanmalı?
password_hash() veya crypt() işlevini kullanırken, dönen değer üretilen aşlanmış parola olup tuzu da içerir. Parolaları doğrularken password_verify() veya crypt() işlevine doğrudan verilebilecek şekilde aşlama bilgisini içeren bu değer veritabanında hiç değiştirilmeden harfi harfine saklanmalıdır.
Zamanlama saldırılarından kaçınmak için, yeniden aşlama işlemi yapıp sonucu depolanmış bir aş ile karşılaştırmak yerine her zaman password_verify() kullanılmalıdır.
Aşağıdaki şekil, crypt() veya password_hash() işlevinden dönen değerin biçimini gösterir. Görüleceği gibi, ileriki bir parola doğrulaması için gereken tuzu ve algoritma ile ilgili tüm bilgiyi içinde barındırmaktadır.