MD5 RFC'de de belirtildiği gibi şifreleme algoritmalarına yardımcı olmak
amacıyla kullanılabilecek bir HASHING / FINGERPRINTING algoritmasıdır ve
yalnızca 128-bit'lik (16-bayt) bir çıktı üretir. Bu nerede kullanılır? Öncelikle
bir verinin (dosyanın) doğru transfer edilip edilmediği veya değiştirilip
değiştirilmediğinin kontrol edilmesinde. Örneğin CD ISO dosyalarının çoğuz aman
MD5 hash'leri de yanında verilir ve 700MB'lık bir transferin ardından bu değerin
kendi hesapladığımızla aynı olmasını umarız Bir diğer kullanımı da public-key
şifrelemededir. Public-key şifreleme (asimetrik), simetrik şifrelemeye göre çok
çok (ve çok) daha fazla hesap gücü ve zaman gerektirdiğinden Public-key
sistemlerde bile aslında Simetrik standart şifreleme kullanılır (Asimetrik
public key ile). Daha sonra veri MD5 gibi bir hash'ten geçirilir ve bu kısa hash
değeri asıl olarak asimetrik şifreleme ile şifrelenir. Bu sayede performans ile
güvenlik arasında bir denge sağlanmış olur
bunlara ek olarak md5 i
daha detaylı anlatırsak
bir database management tekniğidir . yani eldeki
key kullanılarak şak die bulunur veri'nin konumu. hash fonksiyonu veri'nin bazı
matematiksel özellikler kullanılarak - mesela harflerinin ordinal değeri ve
kelimedeki yerleri - bir key üretir bu key sayesinde konum belli olur. bu
fonksiyon belirli miktarlarda veri için hash table'da verileri ne kadar homojen
dağıtabiliyosa o kadar iyidir. diğer önemli nokta collisionlardır. çakışma
olduğunda yani aynı key'e sahip iki veri olduunda lineer probing, quadratic
probing ya da double hashing olaylarından bir tanesi kullanılarak çakışan
verinin yeni lokasyonu bulunur. lineer probing de veri hash tableda hemen bir
sonraki lokasyona yerleştirilir, double probingde de lokasyonun nümerik karesi
alınarak koyulucak yeni lokasyon bulunur, double hashingde de iki hash functionı
içiçe kullanılarak keylerin daha da unique olması sağlanır. eğer belli
bölgelerde birikme olmuşsa bunlara da cluster denir, en birinci amaç bunu
önlemektir zaten probing olayında. ayrıca hash table'ın büyüklüğünün asal sayı
olması tercih edilmelidir, özellikle quadratic probingde, bu sayede homojen bir
probing sağlanır.
MD5'in kırılması olayına gelince. Söz konusu olan bir
HASH algoritması olduğuna göre 'kırmak' demek aynı HASH değerini üreten 'aynı'
ya da 'başka' bir veri dizisi bulmak demektir. Aynı 128-bitlik hash değerini
üreten binlerce (gerçekte sonsuz!) veri vardır. Örnekteki 17645312 parolası
98b011d88c9ae33766814dcc76ad7b5c HASH değerine eşitlenmekte. Ancak örneğin
(atıyorum) 9831332123 parolası da aynı HASH değerini verebilir, ve daha
binlercesi.... MD5 aynı HASH değerini veren iki ya da daha fazla girdinin makul
süreler içinde bulunamayacağı noktasından hareket ediyordu. Fakat günümüzde
özellikle girdi verisi kısa ise (örneğin parolalar gibi) bu süre son derece
kısaldığından MD5'in de güvenilirliği azalmıştır.
9 haneli sadece
rakamdan oluşan bir şifrenin kırılması ortalama 5 dakika almaktadır p4 2.4 gibi
bir sistemde o yüzden şifreniz uzun ve harf kombinasyonu içersin
5465siU4
gibi
md5 tek yönlü bir algoritmadır yani sizin şifreniz
abc olsun
bunun md5 li hali 32 karekterli bi yapı oluşturur
900150983CD24FB0D6963F7D28E17F72
eğer şifreniz ABc olsaydı bu yapı
4C36FA32C9D93A002C3E14CE038AA709 olurdu
md5 in geri dönüşümü yoktur
şifrenizi forumda unuttuysanız yönetici bu şifreyi hiç bir şekilde geri
dönüştüremez link i kullanarak yeni şifre üretebilirsiniz
MIT’de prof.
olan Ron RIVEST tarafından MD4’ün geliştirilmiş bir versiyonu olarak sunulan
md5(Message Digest),
basit anlamda bir hash fonksiyonudur. 1993 yılında Bert
DEN BOER ve Antoon BOSSELAERS md5’in iki farklı değeri
için aynı değeri
üreten örnekler bulmuşlardır. Bu yüzden md5’e olan güven oldukça sarsılmıştır.
2004 yılında
md5CRK adında dağınık bir proje ile md5’in zaafı ve zayıf
yönleri belgelenmiştir.
Md5 genelde ücretsiz olarak dağıtılan
yazılımlarda bilgilerinin doğruluğunu test etmek için kullanılır. Md5’in
bu
şekilde kullanıldığı durumlarda md5Sum olarak da adlandırılmaktadır. Örneğin,
İnternet üzerinden indirdiğiniz
bir dosyanın bozulmadan kullanıcıya
ulaştığını tesbit edebilmek için kullanılır.
Microsoft .NET Framework’te
md5, kendisi gibi soyut bir sınıf olan HashAlgoritm sınıfından türeyen md5
sınıfı ile
tanımlanmıştır. md5CryptoServiceProvider md5 algoritmasını
gerçekleyen sınıftır.
Microsoft .NET Framework’te, md5 algoritması için hash
boyutu 128 bittir.
Md5CryptoServiceProvider sınıfı md5 soyut sınıfından
türemektedir. Md5 soyut sınıfının erişilebilir özellikleri
şu şekilde
tanımlanır;
* CanReuseTransform, şu an ki dönüşüm tekrar kullanılıp
kullanılmayacağını belirtir,varsayılan değeri true’dur.
*
CanTransformMultipleBlocks, aynı anda bir çok veri bloğunun dönüştürülüp
dönüştürülemeyeceğini belirtir, varsayılan
değeri true’dur.
* Hash,
hesaplanan hash değerini verir.
* HashSize, hesaplanan hash değerinin bit
olarak büyüklüğünü gösterir. Varsayılan değeri 128 bittir.
* InputBlockSize,
kullanılan veri bloğunun bit olarak büyüklüğünü gösterir. Varsayılan değeri 1
bittir.
* OutputBlockSize, algoritma sonunda oluşacak veri bloğunun bit
olarak büyüklüğünü gösterir. Varsayılan değeri 1 bittir.
Bu sınıfın
erişilebilir metotları ise şunlardır;
* Clear, md5 algoritması tarafından
kullanılan kaynakları sisteme geri yükler.
* ComputeHash, kullanılan veri
bloğu için hash değerini hesaplar.
* Create, md5 algoritmasını
gerçekleştirecek bir nesne üretir.
* Equals, iki nesnenin birbirine eşit
olup olmadığını kontrol eder.
* GetHashCode, bellekteki o nesneye özgü bir
hash kodu üretir.
* GetType, bu nesnenin tipini verir.
* Initialize, md5
nesnesinin ilk değerlerini ayarlar.
* ToString, şu an ki nesneyi ifade eden
bir metin oluşturur.
* TransformBlock, belirtilen veri bloğundaki belirtilen
alan için hash değerini hesaplar ve belirtilen sonuç veri bloğunun
belirtilen alanına hesaplanan bu hash değerini kopyalar.
*
TransformFinalBlock, belirtilen byte dizisindeki belirtilen alan için hash
değerini hesaplar.
Md5CryptoServiceProvider, md5 sınıfından türer ve md5
algoritmasını gerçeklemektedir. md5CryptoServiceProvider mühürlü bir
sınıftır. Mühürlü sınıf, hiç bir sınıfın kendisinden türetilemeyeceğini
ifade eder.
Bu sınıfın erişebilir özellikleri
şunlardır;
*
CanReuseTransform, şu an ki dönüşüm tekrar kullanılıp kullanılmayacağını
belirtir,varsayılan değeri true’dur.
* CanTransformMultipleBlocks, aynı anda
bir çok veri bloğunun dönüştürülüp dönüştürülemeyeceğini belirtir, varsayılan
değeri
true’dur.
* Hash, hesaplanan hash değerini verir.
* HashSize,
hesaplanan hash değerinin bit olarak büyüklüğünü gösterir. Varsayılan değeri 128
bittir.
* InputBlockSize, kullanılan veri bloğunun bit olarak büyüklüğünü
gösterir. Varsayılan değeri 1 bittir.
* OutputBlockSize, algoritma sonunda
oluşacak veri bloğunun bit olarak büyüklüğünü gösterir. Varsayılan değeri 1
bittir.
Bu sınıfın erişilebilir metotları ise şunlardır:
* Clear, md5
algoritması tarafından kullanılan kaynakları sisteme geri verir.
*
ComputeHash, kullanılan veri bloğu için hash değerini hesaplar.
* Create,
md5 algoritmasını gerçekleştirecek bir nesne oluşturur.
* Equals, iki
nesnenin birbirine eşit olup olmadığını test eder.
* GetHashCode, bellekteki
o nesneye özgü bir hash kodu oluşturur.
* GetType, bu nesnenin tipini verir.
* Initialize, md5 nesnesinin ilk değerlerini ayarlar.
* ToString, şu an
ki nesneyi ifade eden bir metin oluşturur.
* TransformBlock, belirtilen veri
bloğundaki belirtilen alan için hash değerini hesaplar ve belirtilen sonuç veri
bloğunun
belirtilen alanına hesaplanan bu hash değerini kopyalar.
*
TransformFinalBlock, belirtilen byte dizisindeki belirtilen alan için hash
değerini hesaplar.
Örnek:
Bir vbulletin, phpbb, smf ve benzeri forumlara üye olduğunuzda şifrenizi yöneticiler göremez bunun sebebi şifreniz veritabanında md5 olarak saklanmasıdır örneğin sizin şifreniz t8rKi7E ise site sahibi bunu göremez onun gördüğü 40a703ab55ca65c406cf2cd40f20b253 budur, fakat bu md5 hash ını görebildiği için tabiki şifrenizi çok uzun sürsede kırabilir yada farklı yöntemlerle yine alır ama bu benim vermiş olduğum örnekti şifreyi kırmaları için uzun bir süre uğraşmaları gerekebilir ki büyük ihtimalle uğraşmaktan vazgeçerler fakat şifremiz a123456 gibi bir şifre olsaydı en fazla 1 saat içinde çözerlerdi şifreyi .
Kaynakça: Microsoft.com