9/03/2005

Database Uzerinde Guvenli Olarak Password Saklamak - Hashing Nedir?

Bu makalede veritabanımızda saklayacağımız kullanıcı adı ve password gibi hassas bilgileri nasıl daha güvenli şekilde saklayabileceğimizi anlatacağım.

Hash Nedir?
Hash, bir bilginin(örnek: password, kredi karti no'su) tanınamaz hale getirilmiş halidir. Bir bilginin hash edilmiş halinden orjinal haline dönüştürülmesi için hash algoritmaları .Net ile birlikte size verilmiş haldedir.

Herhangi bir kullanıcı bir password seçtiği zaman o password hash edilerek eşi olmayan bir hash değeri şeklinde(Ör: W6ph5Mm5Pz8GgiULbPgzG37mj9g=) saklanıyor ve o kullanıcı örneğin bir mail sistemine login olmak istediğinde girdiği orjinal password tekrar hash edilerek veritabanı üzerindeki hash edilmiş değer ile kıyaslanıyor. Bu şekilde veritabanındaki bilgiler birinin eline geçmiş olsa bile hash edilmiş olan değerler bir anlam ifade etmediğinden herhangi bir tehdit önlenmiş oluyor.

Hash edilmiş bir değer unhash edilemez. Bu yüzden orjinal passwordu hash edilmiş olan değerden geri getirmek mümkün değildir. Hotmail, Yahoo vs gibi sistemlerde passwordunuzu unuttuğunuz zaman sizden yeni bir password seçmenizi istemelerinin sebebi de budur. Bu yüzden hashing kullanıldığında son kullanıcı passwordunu unutursa tek çözüm o kullanıcıya yeni bir password atamaktır.

.Net Framework üzerindeki System.Security.Cryptography library'si içerisinde bir grup hashing ile ilgili class bulunuyor.

Konu çok uzun olduğundan bir kaç makaleye bölmeye karar verdim... Bir dahaki makalede SHA1 hashing algoritması ilenasıl bir passwordun hash edilebileceğini örnekle anlatacağım...