C# MD5 Şifreleme ile Güvenli Şifreler Oluşturma

C

MD5 Nedir ?

Özet geçmek gerekirse;
128bit şifreleme yapılır.
– MD5 ile güvenli şifreler oluşturabiliriz.
– MD5 şifreler geri çevrilemez, tek taraflı convert işlemi yapmaktadır.
– Bazı md5 veritabanlarında şifrelenmiş ve şifrelenmeden önceki halleri saklandığından şifreniz kırılabilir. (Nasıl daha güvenli yaparız anlatacağım.)
– Farklı metinleri md5’e çevirdiğinizde aynı md5 sonucunu verebilir.

Yazılımımızda kullanacağımızı düşünürsek ve şifreleri geri çevirme şansımız olmadığından sistem şöyle işleyecek; kullanıcın şifresini md5’e çevirdikten sonra bu şifreyi veritabanında tutacağız ve kullanıcı giriş yapmaya çalıştığında kullanıcıdan aldığımız şifreyi md5’e çevirip veritabanındaki ile aynı olup olmadığını kontrol edeceğiz. Aynı ise şifreyi doğru girmiştir.

Gelelim güvenliğe… Yukarıda dediğim gibi bazı md5 veritabanlarında md5 lerin şifreli-şifresiz halleri tutulduğundan pek güvenli olmuyor. Bizde bunu aynı metni bir çok kez md5′ e çevirerek aşıyoruz :) Mükemmel olmasada kırılması çok zor şifreler oluşuyor.

Aşağıdaki method sizden şifrelenecek metni ve şifrelenme işleminin kaç kez yapılacağını soruyor. Bu sayıyı ne kadar yüksek tutarsanız şifreniz o kadar kuvvetli olacaktır. Sunucunuzu yormamak adına kesinlikle 1000-2000 gibi değerler vermeyin :) 3 ile 7 arası gayet ideal.

İpucu: Daha da kuvvetli şifreler oluşturmak istiyorsanız araya base64’te katabilirsiniz.

[csharp]public static string ConvertToMd5(string text, int repeat)
{
if (repeat <= 0)
return null;
else
{
for (int i = 0; i < repeat; i++)
{
byte[] ByteData = Encoding.ASCII.GetBytes(text);
MD5 oMd5 = MD5.Create();
byte[] HashData = oMd5.ComputeHash(ByteData);
StringBuilder sb = new StringBuilder();
for (int x = 0; x < HashData.Length; x++)
{
sb.Append(HashData[x].ToString("x2"));
}
text = sb.ToString();
}

return text;

}
}[/csharp]

3 comments

  • Siteni yeni gordum Sinan kardesim. Guzel olmus eline saglik. Bu konu basligini okuyunca ufak bir katkida bulunayim istedim: guvenlik zaafiyetinin asıl sebebi kanımca sifreli dedigin (hashed) ve sifresiz (plaintext) stringlerin veritabaninda tutulmasindan kaynakli degildir. sifreyi MD5 gibi bir hash algoritmasiyla tutanlarin plaintext olarak kaydettigi yok gibi bir seydir diye dusunuyorum. buradaki gercek zaafiyet MD5 her ne kadar tek yonlu bir algoritma olsa da kaba kuvvet (brute force attack) yontemiyle 6-7 karaktere kadar, hatta donanim iyiyse belki birkac karakter fazlasina kadar sifrelerin MD5 ten geri dondurulebilmesidir. bunun icin de tuzlama (salting) denilen yontemlerle islem zorlastirilmaktadir. uzerine ek olarak dedigin gibi 2-3 pass daha gecilerek geri donusu imkansiza yakin hale getirilir. bu arada farkli metinleri MD5 e donusturdugumuzde ayni sonucu vermesi 2 uzeri 128’de bir ihtimaldir, ama imkansiz degil tabi. (bunun da algoritmayi tersten isleterek olusturulmus birkac ornegini nette bulabiliriz ancak zorlama ile olusturulmus metinlerdir).

    eline saglik. makalelerini takip edecegim. kolay gelsin. :)

  • Flame ve Stuxnet konularını incelemenizi tavsiye ederim.

    MD5 ve Sha1 gibi zayıf ve kırılmış özet fonksiyonların kullanılması büyük risk. Bunun yerine Sha256 veya Sha512 gibi algoritmaların salted(tuzlanarak) ve 10 bin defa döngüsel olarak özetinin alınması gerekiyor güvenlik için. 10 bin sayısı çok görünebilir ama bu bir çok kriptoloğun ortak fikridir, aksi halde rainbow table denilen hazır tablolarla şifrelerin geri döndürülmesi bir kaç dk’da gerçekleşebilir.

    Çalışmalarınızın devamını dilerim.

    • Yazdıklarınıza aynen katılıyorum. Burada sadece basit bir şekilde md5 şifre nasıl oluşturulur ve basit bir md5 şifresi nasıl daha güvenli hale getirilir anlatmaya çalıştım. Birden fazla md5leme işlemi tek bir md5’e göre ciddi bir güvenlik sağlıyor.

      Yorumunuz için teşekkür ederim.

By Sinan BOZKUŞ

Sinan BOZKUŞ

Get in touch

Quickly communicate covalent niche markets for maintainable sources. Collaboratively harness resource sucking experiences whereas cost effective meta-services.