6 Aralık 2020 Pazar

Güvenli Deploma için Şifre Karıştırma

 


    Şifreleme ve Hashing arasında önemli fark hashing ile çıktının tersine çevrilememesidir. Şifrelenmiş verilerin şifresi aynı anahtar kullanılarak çözülür. Simetrik şifreleme veya asimetril şifreleme durumlarında farklı anahtar kullanılır. Hashing uygulanmış veriler sonsuz kadar karma kalır. 

Bir algoritma kullanarak 123456 için "dünya barışı" karıştırırsak ve karma veriyi depolama alanımızda saklarsak buna gerek kalmıyor. Kötü niyetli birinin 123456 dan saklanmış veri olan "dünya barışı" çıkarabilmesi için endişelenebiliriz.  Algoritma aracılıyla "dünya barışı" dan çevirdiğinizde 123456 verilecek. Hashing kullanımını burada devreye almayı amaçlıyoruz. Kullanıcı sistemimize giriş yaptığında giriş için kullandığı şifre hassas bilgi içerdiği için  girilen parolayı hashlemek, hash için daha önceden kaydettiğimiz sonuçla karşılaştırma işlemini yapmak. Karma oluşturma şifre gibi beklemedeki hassas verileri korumak için ideal bir teknik.

Not: Hashinh güvenlik gereksinimleri için tüm verileri üzerinde kullanılabilecek bir yöntem maalesef değildir. Kredi kartlarına hashing uygulayamayız, Kredi kartları hash den kurtarılamaz.


Hashing için birden fazla algoritma mevcuttur. MD5 mesaj özeti algoritması yaygın olarak kullanılan 128 bitlik (16 baytılı) karma değer üreten algoritmadır. Kriptografi dünyasında öncülük eden birkaç zayıflığı olan Güvenlik Karma Algoritması (SHA-1) güvenlik açıkları tespit edildi. Şu anda önerilen SHA-2,SHA-3 algoritmaları.


.NET Frameworde kullanılan System.Security.Crytography alanındaki sınıflarada karşılık gelen MD5,SHA1,SHA256, SHA384, SHA512 algoritma ailesi, 256,384,512 bitlik aile ise SHA-2 ailesine aittir.


"Supercalifragilisticexpialidocious" datayı Sha256 da oluşturma için küçük  bir kod.


string data = "Supercalifragilisticexpialidocious";
SHA256 hasher = SHA256.Create();
byte[] hash = hasher.ComputeHash(Encoding.UTF8.GetBytes(data));
string hashString = BitConverter.ToString(hash).Replace("-", "").ToLower();
  

Hash kod oluşturmak son derece basittir. ComputeHash yöntemiyle yapılan bir çağrım  sonucu verecektir. BitConverter sınıfı ile bayt dizisini 16 lık dize gösterimine yardımcı olacaktır.

Hash Output:

94730f57d7e41018d963d92fbf11618dce8274ca2c1bf72274e0285a6013c17b
2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
 
 


Hash kaba kuvvet kullanarak saldırabiliriz. Anında a değerini hesaplayabiliriz. Eşleme yoksa b ile devam edebiliriz. Z ye geldiğimizde aa ile başlarız ve bu şekilde devam edebiliriz. Bunun gerçekleşmesi biraz zaman ve CPU gücü alacaktır.

Bir sözcükteki sözcükler gibi karmayı önceden hesaplamak mümkündür. Karma girildiğinde sadece arama meselesine dönüşür. Hashing orjinal şifre saklama için iyi br seçim gibi görünür.  Kötü niyetli bir kişi string türünden şifreyi çevrim için araçlarla kolay biçimde elde edebilir.

Bir sonraki makalede hash ek Tuzlama işlemine yer vereceğiz.



Hiç yorum yok:

Yorum Gönder