- engindeniz.net - http://www.engindeniz.net/v3.0 -

MD5 ve Şifre Güvenliği

MD5 ‘ler birçok web programcısının bildiği bir hash fonksiyonudur.

MD5 ile ilgili google’da birçok tanım ve kaynak bulabilirsiniz.
Benimde kısaca ifade etmem gerekirse herhangi bir uzunlukta bir veriyi MD5, 128 bit’lik 16 bayt’lık eşsiz bir çıktı ile geri döndürür.

Bu gibi ifadeleri genelde internetten çekilen iso kalıp dosyaların linklerinin yanında  görebiliriz.
linux iso dağıtımlarında böyle ifadeler vardır. Aynı zamanda çeşitli P2P sunucularda da görülebilir.

örneğin:c84f093c22580a70813dff7d0e9c85bf

siz dosyayı çekerken X bir nedenden ötürü bir bit bile hata olursa yukarıdaki ifade ile
çektiğiniz dosyanın MD5’i uyuşmadığından çekilen dosyanın aynı olmadığı hemen anlaşılır.

MD5 algoritmasına ne kadar uzunlukta bir veri verirseniz verin, sonucu yukarıdaki gibi 16 bayt uzunluğunda unique bir değer olarak geri döndürür. iki farklı verinin md5 hash’i aynı değer olarak geri dönemez.
Böyle bir algoritmik yapıya sahip olduğundan web programcıları genelde bu fonksiyonu kullanıcı şifrelerini database’e kaydetmede kullanırlar.
Böylece database bir şekilde ele geçirilse bile şifreler okunamayacak durumda olur.

Sizin için önemli bir sitede hesabınız varsa, bu sayfada şifremi unuttum tuşuna
basıp şifrenizi isteyin. Siteniz, şifrenizi mailinize açık olarak gönderiyorsa o sitenin
database’i güvenli değildir.
Çünkü MD5 gibi bir algoritma kullanmıyor ve şifreler açık olarak database’e kaydediliyor.
Sonuç olarak database kötü niyetli kişilerin eline geçerse  şifreniz de ele geçirilecek demektir.

MD5 değerleri tek yönlüdür. yani yazdığınız değeri geri döndürmek girdiğiniz
değere göre imkansızdır. Ancak bazı kısa ve tek düze ibareler örneğin 123456 gibi
verilerin MD5 karşılıkları saniyeler içinde geri döndürülebilir.

Bu brute force dediğimiz , deneme yanılma fonksiyonları ile yapılmaktadır.
Çok geniş bir database düşünün GB’larca büyüklüğünde…
20-30 GB içinde A’dan Z ‘ye tüm büyük harf kombinasyonları var bunlara ek
olarak tüm rakamsal kombinasyonlarda yer alıyor.
brute force, sizin girdiğiniz MD5’i bu databasedeki verileri tek tek MD5’e çevirerek
karşılaştırıyor. Aynı MD5’leri bulduğunda sonucu size bildiriyor.
Aslında algoritmik olarak birşeyi terse çevirip çözmüyor. birçok olasılığı MD5’e çevirip ,
eldeki MD5 ile sadece karşılaştırıyor.

Böyle büyük bir database, intermediate seviyedeki herhangi bir programlama dilini bilen biri tarafından rahatlıkla oluşturabilir.
Elbette kullanılmak istenen kombinasyon çeşitliliği arttıkça, (örneğin özel semboller, küçük harfler gibi)  bu program aylarca çalışabilir. Çünkü kombinasyon sayısı arttıkça database büyüklüğü artacak, bunu işleyecek işlemci gücü yeterli gelmeyecektir.
Aaraştırmadım ama eminim internettede böyle database’ler hazır vardır.

Daha da fenası, böyle search siteleri var. MD5’, giriyorsunuz sizin için günlerce MD5 algoritmasını çözmeye çalışıyor.
Database’i her search ‘te genişliyor. Çünkü bu sitelerden direkt MD5’e çevirimde yapılabiliyor. Site bu sorguları her seferinde database’ine kaydediyor.

Yukarıda saydığım nedenlerden ötürü bir kullanıcının şifresi database’e MD5 ile çevirilip kaydedilecekse,
ek olarak birkaç şey daha yapıldığında daha da güvenli olabilir.
Bunlar;

  1. iç içe MD5 döngüleri : MD5’e çevrilmiş bir değeri yine MD5’e çevirmek (iki den fazlada olabilir…)
  2. MD5’e çevrilen datanın başına default bir karakter seti eklemek.
  3. şifreyi önce base64’e çevirmek
  4. kullandığınız programlama dilinde MD5 gibi başka hashing fonksiyonundan geçirmek
  5. yukarıdaki dört önlemi bir arada yapmak :)

bu saydıklarım programcılar içindi, kullanıcılarında yapması gereken birşey var.

Şifrelerinizi basit,kısa ve tek tür tanımlamayın.
Eğer o sitedeki hesabınız önemli ise sadece rakamlardan sadece harflerden oluşmasın.
Aynı zamanda #,$,’ gibi özel semboller şifreye eklenmeli, rakamların yanında büyük ve küçük harfler birlikte kullanılmalı.
Büyük harf+küçük harf+rakam+özel sembol = böyle bir yapıdaki şifre uzunluğu birde 8
karakterden fazla ise bu şifrenin bulunma ihtimali %0.00001 ‘dir.
Bir şifre yukarıdaki özelliklere sahip olunup karmaşık birşey olmasına gerek yok.
Unutmamak için bir cümle şifreniz olabilir. (a yerine @ işareti, i harfi yerine ! işareti kullanabilirsiniz)
Bunların ilk harfleri ve son harfleri büyük olabilir. kurduğunuz cümleyi bir sayı kümesi ile anlamlaştırabilirsiniz.
Ssize böyle bir şifre örneği veriyorum = 21Kırmızıt@vş@nGeld!2102

:)

Sevgiler,


Be Sociable, Share!
  • [1]
  • [2]
  • [3]
  • [4]