MD5 Algoritmas? Nedir?
MD5 (Message-Digest algorithm 5) asl?nda bir ?ifreleme yöntemi de?il, bir hash function‘d?r. Yani herhangi bir uzunlukta verilen mesaj? (veya dosyay?) al?p fazla uzun olmayan bir harf ve say? dizisine çevirir. Siz 700mb büyüklü?ünde bir Linux da??t?m?n?n .iso dosyas?n? indirseniz de, “merhaba, Nas?ls?n?” mesaj? yazsan?z da, hepsinin MD5 sonucu 128bit uzunlu?undad?r. 128bit ise 128/4 = 32 hexadecimal say?yla ifade edilebilir.
Hemen bir örnek verelim: warezturkiye ismini md5 ile gizled?imizde bize böyle bir de?er veriyor
4bf3798b8bdff43d5bb93d5b7856a98c
Buradaki 32 tane hexadecimal say? (0-f aras? karakterler) warezturkiye yaz?s?n?n MD5 sonucunu gösteriyor. Wikipedia örne?inde cümlede tek harf de?i?ince MD5 sonucu da alakas?z biçimde de?i?iyor:
MD5(”The quick brown fox jumps over the lazy dog“)
= 4bf3798b8bdff43d5bb93d5b7856a98c
MD5(”The quick brown fox jumps over the lazy cog“)
= 4bf3798b8bdff43d5bb93d5b7856a98c
Tek Yönlü ?ifreleme Algoritmalar?Bir algoritman?n tek yönlü ?ifreleme algoritmas? olarak kabul edilebilmesi için tabii ki ?ifrelenmemi? veriye kolayca ula?mamam?z gerekli. ü?ift yönlü ?ifreleme algoritmalar? encrypt ve decrypt fonksiyonlar? yard?m?yla bir mesaj? ?ifreler ve ?ifresini çözerler. Ancak, örnek olarak MD5 için bir decryption function yazmak mümkün de?ildir.
128 bit’lik 4bf3798b8bdff43d5bb93d5b7856a98c MD5 hash’ini kullanarak warezturkiye yaz?s?n? olu?turmam?z mümkün de?ildir. Ancak MD5 kullan?larak kaydedilmi? ?ifreleri bulmak için uygulanabilecek baz? yöntemler mevcut.
MD5′e Brute Force Sald?r?larBrute Force sald?r?lar kabaca, tüm olas?l?klar? deneyerek ?ifreyi çözmek olarak anlat?labilir. ÜRÜNek olarak elinizde c84f093c22580a70813dff7d0e9c85bf MD5 sonucu var, ve siz bunun 6 basamakl? bir say?n?n MD5 sonucu oldu?unu tahmin ediyorsunuz. Yap?lacak i?lem basit: 6 basamakl? tüm say?lar?n MD5 sonucuyla elimizdeki sonucu kar??la?t?rmak! Basit bir kodla bu i?lem halledilebilir
for( int i=100000; i!=1000000; i++ )
if( MD5(i) == “c84f093c22580a70813dff7d0e9c85bf” )
print( “?ifre bulundu: ” + i);
Yukar?daki döngü milisaniyeler içinde tamamlan?p, e?er varsa, sonucu listeleyecektir. Ancak tabii ki ?ifre 6 basamakl? bir say? olacak varsay?m?n? her zaman yapmam?z mümkün de?ildir. ?ifrelerde büyük harfler [A-Z], küçük harfler [a-z], rakamlar [0-9], özel karakterler [!@#$%^&*()-_+=], veya dile özel karakterler [?ç?ü?ü¢ü®] bulunabilir. Uzunluklar? ve karakter tipleri belli olmayan bir ?ifre için brute force sald?r? uygulamak tahmin etti?inizden de uzun sürebilir (milyarlarca y?l mesela). Bu yüzden baz? karakter setleri için MD5 ?ifreleri tablolar? haz?rlan?r.
MD5 Tablolar? ve RainbowCrack Projesi
Biraz önce dedi?imiz gibi; MD5 ?ifrelerini kolayca e?le?tirmek için tan?mlayaca??m?z karakter setindeki belli uzunluklarda tüm olas?l?klar?n MD5 sonucunu bir tabloya atmak, bu e?le?tirmeyi birkaç saniye içinde tamamlamak anl............... geliyor. Yaln?z bu tablolar? olu?turmak için güçlü bir bilgisayara (veya paralel bilgisayarlara), geni? bir disk alan?na ve gerekiyorsa uzun zamana ihtiyac?n?z olacakt?r. Bir kez tabloyu olu?turdu?unuzda verece?iniz herhangi bir MD5 sonucunu e?le?tirmek gayet h?zl? olacakt?r. RainbowCrack projesinden birkaç örnekle konuyu aç?klayal?m:
ÜRÜNek #1karakter seti [ABCDEFGHIJKLMNOPQRSTUVWXYZ]
?ifre uzunlu?u 1-14
olas?l?k 8353082582
tablo boyutu 610 MB
ÜRÜNek #2karakter seti [ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789]
?ifre uzunlu?u 1-14
olas?l?k 80603140212
tablo boyutu 3 GB
ÜRÜNek #3karakter seti [ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()-_+= ]
?ifre uzunlu?u 1-14
olas?l?k 915358891407 (2^39.7)
tablo boyutu 24 GB
Bu tablolar içinden bir windows ?ifresi saniyeler içinde bulunabiliyor. Windows ?ifrelemesi için büyük harflerden olu?an karakter setleri küçük harfleri de k?rabildi?i için Ayr?ca küçük harfler eklenmemi?.
ÜRÜNek #4karakter seti [abcdefghijklmnopqrstuvwxyz0123456789]
?ifre uzunlu?u 1-8
olas?l?k 2901713047668
tablo boyutu 36 GB
Yukar?daki örnekte ise tablo MD5 için haz?rlanm?? ve karakter seti küçük harflerden ve rakamlardan olu?maktad?r. Verilen MD5 sonucu birkaç dakika içinde e?le?tirilip %99.9 ihtimalle bulunabiliyor.
Bu MD5 tablosunda karakter setine büyük harfler ve özel karakterler eklendi?inde tablo boyutu terabaytlar düzeyine ç?kacak; 9 ve 10 karakter uzunlu?undaki ?ifreleri de kapsamas?n? istersek hem tablonun olu?turulmas? aylar belki y?llar sürecek, hem de boyutu dü?ünemeyece?imiz kadar büyük olacakt?r.
?nternette MD5 ?ifrelerinin ne oldu?unu sorabilece?iniz birkaç veritaban? mevcut. Ne kadar yasal bir uygulamad?r tart???l?r tabii ki ama vermek için bir sak?nca görmüyorum
* MD5 Reverse Lookup
* MD5();
Buradan daha fazla sonuca ulasabilirsiniz
?nternet Uygulamalar?nda MD5 Kullanarak Daha Güvenli ?ifre Saklama
S?kl?kla takip etti?imiz fazlamesai.net sitesinde temmuz ay? sonunda bir aç?k bulunmu? ve tüm veritaban?na eri?ilmi?ti. Veritaban?nda ?ifreler tabii ki aç?kça yazm?yor, veya geri dönü?ümü olan bir ?ifre algoritmas?ndan geçirilmiyordu. kullan?lan algoritma MD5 olmas?na ra?men tabii ki kimsenin içi rahat de?ildi; çünkü art?k MD5 ?ifreleri internetteki MD5 lookup table‘lar sayesinde kolayca e?le?tirilebiliyordu. Bir sald?r?n?n anatomisi: Fazlamesai yaz?s?n? ve yorumlar?n? okuyacak olursan?z güvenlikle ilgili faydal? bilgiler edinebilirsiniz.
Uygulama
Gelin, isterseniz bir uygulama yapal?m. Diyelim ki elimizdeki ?ifre 1234 (san?r?m insanlar?n %10′u filan bu ?ifreyi kullan?r). ?sterseniz bu ?ifreyi MD5 sonucundan Nas?l rahat bulabildi?imize bakal?m:
md5(1234) = 81dc9bdb52d04dc20036dbd8313ed055
?ifremiz 4 basamakl? bir say?, demek ki 1′den 4 basama?a kadar olan say?lar?n MD5 hash’lerini bulup kar??la?t?rsak ?ifreyi bulabilecekmi?iz. Olas?l?k say?s? (9^1)+(9^2)+(9^3)+(9^4) = 7380. ??lemcinin yoruldu?una bile de?mez… Zaten bu ?ifrenin Nas?l kolayca e?le?ti?ini buradan kontrol edebilirsiniz.
?imdi ise ?ifremizi MD5 fonksiyonuna sokmadan önce birkaç i?lem uygulayal?m:
* ü?ncelikle ?ifreyi ters çevirin: 4321
* Ba??na birkaç say? ve karakter ekleyin (mesela 0a4b): 0a4b4321
* Son iki karakterini al?p ba?a ekleyin: 210a4b4321
* Ba??na ve sonuna büyük-küçük harfler ve özel karakterler ekleyin
(mesela ba??na 2%t}W, sonuna da a(H_5$ gibi…) : 2%t}W210a4b4321a(H_5$
* ?imdi ise bu karakter dizisini MD5 fonksiyonundan geçirin:
md5(2%t}W210a4b4321a(H_5$) = f56ae31a4ebd33c0fee2054f9567d201
Bu hash de?erini internetteki veritabanlar?n?n bulmas?n?n imkan? yok! Hem 20 karakterli, hem de co?u karakter setinden harfler içeriyor. Ho?, biri bulsa bile 2%t}W210a4b4321a(H_5$ diye bir ?ifre hiçbir i?ine yaramayacakt?r. Burada önemli olan,
* Ald???n?z ?ifreyi her zaman Ayn? basamaklardan geçirerek kontrol etmek,
* Bu basamaklar? gizli tutmak.
Böylece kullan?c?lar?n?z?n ?ifrelerini daha güvenli saklayabilirsiniz.