Merhaba,
Asp.net MVC çalışıyorum ve kayıt yaptığım kullanıcının şifresi şifrelenmiş olarak sistemde tutuluyor. Bu şifrenin çözümlenmesi için nasıl bir fonksiyon kullanmalıyım. İnternette biraz araştırdım ingilizcemin de yeterli seviyede olmamasından dolayı çözüm bulamadım. Yardımcı olabilirseniz sevinirim.
Login işlemi için e-posta ve şifre ile giriş yaptırmak istiyorum. Şu şekilde yapıyorum;
Usermanager. Findbyemail(model. Email); ile giriş yapacak kullanıcının bilgilerini çekip passwordhashte tutulan şifre ile formdan gelecek olan şifre kontrolü sağlamak istiyorum.
Passwordhash'i bir işleme sokmadan formdan gelen şifre ile karşılaştırınca eşleyemiyor. O yüzden çözümleme gibi bir durum var mı diye merak ettim yoksa tabloda ekstra bir password daha bulundurmam gerekiyor galiba.
Hayır. Hashli hali tabloda tutulur. Login işleminde de şifre hashlenir ve tablodan kontrol edilir. Hashlerin aynı olması lazım. Hash yöntemi de aynı olmalı. SHA256 ile kaydedip SHA512 ile login yapılmaz yani.
Şifre tabloda hashli tutulur. Hiçbir zaman çözme gibi bir girişimde bulunulmaz. Daima hashlenmiş hali ile işlem yapılır. Etik.
Login işlemi için e-posta ve şifre ile giriş yaptırmak istiyorum. Şu şekilde yapıyorum;
Usermanager. Findbyemail(model. Email); ile giriş yapacak kullanıcının bilgilerini çekip passwordhashte tutulan şifre ile formdan gelecek olan şifre kontrolü sağlamak istiyorum.
Passwordhash'i bir işleme sokmadan formdan gelen şifre ile karşılaştırınca eşleyemiyor. O yüzden çözümleme gibi bir durum var mı diye merak ettim yoksa tabloda ekstra bir password daha bulundurmam gerekiyor galiba.
Şifrelerken kullandığın yöntemi, giriş yaparken de kullanacaksın.
Kullanıcının verilerini alınca, tablodaki hash'li parola ile, inputa girilmiş hash'siz parolayı back-end'de kontrol edeceksin.
Kullanıcının girdiği parolanın şifrelenmiş haliyle, tablodaki şifrelenmiş parolayı eşleştirip aynıysa login yaptıracaksın, değilse hata verdireceksin.
Hashing "one-way" calismalidir. Bi-directional hashing algoritmalari olsa da bunlar da fixed size hash uretemezler 1-1 ve orten matematiksel fonksiyonlarin guzelligi sebebiyle.
O yuzden password'u hashleyeyim sonra "geri" cevireyim diye bir sey yok.
Simetrik encryption ile zaten pw saklanmaz.
Bu bir aradan ciksin.
---
Piyasada kullanilan ve bu konuda da ornegi gecen cogu hash fonksiyonu guvenli degildir. Kimisi cok hizlidir ( brute force yatkinligi ) , kimisi collision'a cok aciktir vs vs. Dogru hash fonksiyonunu secmek onemli. SHA1/2 sifrelerin bulundugu veritabanindaki sifrelerin plaintext halini 1 haftada bulursunuz brute-force ile. ( bkz yemeksepeti )
Ek olarak "salt" kullanarak randomizasyon saglamazsan en guclu/uygun hashing algoritmasini kullansan dahi risk altinda kalirsin. Ayni parola, ayni islemden sonra ayni sonucu vermemeli, belirli bir varyant uretmelidir.
---
Sonuc olarak olmasi gereken hash _ salt kombinasyonunu bir ya da iki farkli yerde saklayarak login islemi sirasinda girilen sifre ile benzer kombinasyonun yakalanip yakalanamayacagini hesaplamaktir. Salt round'u guvenlik + hiz oranini optimize edecek sekilde belirlersin.