Md5
Yazan: Uzay Kaya
Kaynakça :
- http://www.iusmentis.com/technology/hashfunctions/md5/
- http://bilgisayarkavramlari.sadievrenseker.com/2008/04/30/md5-message-digest-mesaj-ozet/
- http://bidb.itu.edu.tr/eskiler/seyirdefteri/blog/2013/09/08/md5-algoritmas%C4%B1
MD5 Algoritmasındaki Genel Yapı ve Encryption(Şifreleme) :
-
Fotoğraftaki sembollerin anlamları :
- K : Mesajımızın bit olarak uzunluğu.
- L : Mesajımızın uzunluğunun (K) 512’ye bölümünden oluşan blok sayısı.
- N : Mesajımızın uzunluğunun (K) 32’ye bölümünden gelen bölüm.
- IV : MD5 algoritmasının içinde hazır olan bir ilk değer (128 bitlik).
- Y : Blokların numaralarını ifade etmek için kullanılan sembol.
-
CV : Girdilerin yazının devamında bahsedeceğim algoritmadan geçtikten sonraki değerlerini ifade etmek için kullanılan sembol.
-
Algoritma Basamakları :
-
a) Mesajın hazırlanması ( Padding işlemi ) :
- Padding eğer mesajın 512 bitlik bloklara bölünmesinden sonra sonda kalan bloğun 512 bitten az bir bit değerine sahip olması durumunda bloğu yeterli bit sayısına tamamlama işlemine denir.
- MD5 fonksiyonu padding işlemini başa birtane “1” ve kalan kısmı “0” yaparak gerçekleştirir.
Mesajın uzunluğunu tespit etme :
- Yukarıdaki fotoğrafın padding kısmının sağında gördüğümüz kare “Message Length = ( K mod 2^64)” MD5’in mesajın uzunluğunu tespit etmesinde kullanılır.
- Padding işleminden önce sonda 64 bitlik bir kısım bırakılır ve K mod 2^64 ifadesinin sonucu burada depolanır.
Yardımcı Fonksiyonlar :
- 1 - Ilk girdi (IV) :
- A = 01 23 45 67
- B = 89 ab cd ef
- C = fe dc ba 98
- D = 76 54 32 10
- 2 - Ki değeri:
- Ki = abs(sin(i + 1)) * 232
- 3 - Mi değeri:
- Mi = M[q*16 + k]
- q’ inci 512 bitlik blok içindeki k’inci 32 bit mesaj
- 4 - Shift ve XOR Operatörleri
- 5 - Dört yardımcı fonksiyon
- F(X,Y,Z) = (X and Y) or (not(X) and Z)
- G(X,Y,Z) = (X and Z) or (Y and not(Z))
- H(X,Y,Z) = X xor Y xor Z
- I(X,Y,Z) = Y xor (X or not(Z))
- NOT : Yardımcı fonksiyon 16 işlemde bir değiştiği ve toplamda 64 işlem mevcut olduğu için 4 farklı yardımcı fonksiyon mevcut. Yazının ilerleyen kısmında detaylı olarak bahsedeceğim.
-
b) Blokların işlenmesi :
- Şimdi gerekli olan bütün sembolleri,operatörleri ve fonksyionları açıkladığımıza göre asıl işlemin döndüğü yere geçebiliriz.
-
Algoritma şemamız :
NOT : İçinde “+” bulunan kutular “XOR” operatörünü temsil ediyor.
- Burada ilk olarak IV yani MD5 içinde gömülü olarak duran işleme girecek ilk 128 bitlik bölüm. Bu bölüm 4 tane 32 bitlik parçaya ayrılıyor ve her kısım yukarıdaki şemada gösterilen işlemlerden geçiyor.
- B kısmı C’ye ; C kısmı D’ye ve D kısmı A’ya yazılıyor.
- A kısmı ilk olarak B,C ve D bölümlerinin fonksiyondan dönen değeri ile XOR işlemine sokuluyor.
- Daha sonra gelen sonuç “Mi” değeri ile XOR işlemine sokuluyor.
- Oradan gelen sonuçta “Ki” değeri ile XOR’lanıyor.
- Gelen sonuç shift operatöründen geçiyor.
- Son olarakta shift operatöründen çıkan sonuç B bölümü ile XOR’lanıp B’ye yazılıyor.
- Bu işlem 64 kere tekrarlanıyor sebebi ise çakışma ( collusion ) ihtimalini en aza indirgemek.
-
64 işlemin sonucunda elde edeceğimiz 128 bitlik sonuç sonraki blok için yeni girdimiz oluyor ve blok sayısınca bu işlem devam ediyor. Son blok içinde işlemleri yaptıktan sonra elde edeceğimiz 128 bitlik sonuç bizim mesajımızın özetlenmiş hali oluyor.