Forum
MD Nedir?
MD en basit şekilde herhangi uzunluktaki bir veriyi
işleyip sonuç olarak sabit uzunlukta bir veri elde eden işlev olarak
tanımlanabilir. Matematiksel olarak tanımlayacak olursak:
M: değişken uzunlukta veri, h: sabit uzunlukta veri, H: işlev
h = H(M)
Sabit
uzunkta çıktı elde etmenin yanında, MD işlevinin sağlaması gereken bazı
özellikler vardır. Bu özellikler söyle sıralanabilir:
• M verildiği zaman, h’yı hesaplamak kolay olmalı
•
h verildiği zaman M’yi hesaplamak çok zor olmalı (hatta imkansız
olmalı). Bu yönüyle MD işlevi tek yönlü işlev (one-way function) olarak
adlandırılır.
• M veridiğinde H(M) = H(M’) eşitliğini sağlayan M’ çok zor bulunmalı (hatta imkansız olmalı)
Nerelerde Kullanılabilir?
MD
işlevinin taşıması gereken özelliklerinden bahsettikten sonra,
nerelerde kullanılabilir sorusu daha kolay anlaşılabilir. MD, verilerin
bütünlük denetimi yani verinin değişikliğe uğrayıp uğramadığının
denetlenmesi için kullanılmaktadır şeklinde özetlenebilir.
Örneğin
internete indirilmek üzere yerleştirdiğiniz bir dosyaya ek olarak bu
dosyanın MD sonucunuda dağıtırsanız, bu dosyayı sizin sitenizden
indiren kullanıcılar, kendi bilgisayalarında bu dosyanın MD’sini
hesaplayıp sizin hesapladığınız MD değeri ile kontrol ederler ve
böylece indirdikleri dosyanın değiştirilip değiştirilmediğini, yani
güvenilir olup olmadığını anlayabilirler (Bu noktada sizin güvenlir
olduğunuz farzedilmektedir).
İleti Özümleme Algoritmaları
Bugüne
kadar MD işlevi için bir çok algoritma tasarlanmıştır, fakat bunlardan
sadece bir kısmı yukarıda sıralanan özellikleri birarada
barındırdığından genel kabul görmüşlerdir. Bu algoritmaların başta
gelenleri md5 (message digest 5) ve sha’dır (secure hash algorithm).
MD5 (Message Digest 5)
MD5,
Ron Rivest tarafıdan 1992 yılında tasarlanmış bir MD algoritmasıdır.
Ron Rivest, yine kendi tasarladığı MD4 algoritmasındaki bir takım
zayıflıkları gidermiş ve günümüzde sıkça kuallanılan MD5 algoritması
ortaya çıkmıştır. MD5, sonsuz uzunlukta veriyi girdi olarak kabul
edebilir ve sonuçta 128 bit uzunluğunda bir çıktı üretir. Kısaca
algoritmanın nasıl işlediğine bakacak olursak:
• MD5, veriyi 512 bitlik bloklara ayırır ve her bir blok üzerinde aynı işlem uygulanır.
•
Üzerinde işlem yapılacak verinin 512 bitin katları olması
gerekmektedir, fakat gerçek verimiz bu özelliği sağlamayabilir. Bu
sorunu çözmek için ekleme (padding) işlemi uygulanır (gerçek verimiz
512 in katı olsa dahi ekleme yapılır!).
Ekleme işleminde şu kural
gözetilir: Verinin uzunluğu 512 bitin en yakın katından 64 eksik olacak
şekilde, verinin sonuna bir adet 1 ve geri kalanlar için ise 0 eklenir.
Bu 64 bitlik fark verinin uzunluğunu belirtmekte kullanılır.
Bir
örnekle açıklayacak olursak; diyelim verimiz 300 bit uzunlukta olsun.
Bunu 448 bite (512-64) tamamlamız gerekmektedir. Dolayısı ile 301. bit
olarak 1 ve geri kalan 147 tane bit için ise 0 ataması yaparız.
Elimizde şu anda 448 bit var. Gerçek verimizin uzunluğu 300 bit idi ve
bunuda ikilik tabanda 64 bit ile ifade edip 448 bitlik verimize
ekleriz. Böylece 512-bitlik yeni oluşturduğumuz veri üzerinde MD5
algoritmasını uygulayabiliriz.
• Ekleme işleminden sonra, MD5 veriyi işlemeye başlar.
MD5 Ana Döngüsü
Döngünün başlangıcında 32 bitlik dört tane (A,B,C,D) değişken bulunur.
Başlangıçta bunların değeri sabittir ve her 512 bitlik bloğu işleme
soktukça bu değişkenlerin değerleri değişir ve en sondaki bloğuda
işledikten sonra elde ettiğimiz A,B,C ve D değişkenlerinin değerlerini
yanyana dizdiğimizde (A-B-C-D) 128 bitlik MD sonucumuzu elde etmiş
oluruz.
Burada 4 adım (F-G-H-I) göze çarpmaktadır. Her adımın
önceden tanımlı ve kendisine özgü birer işlevi bulunmaktadır ve bu
işlevler her adımda 16 kez çağırılarak elde edilen sonuç bir sonraki
adıma iletilir. Yani her bir 512 bitlik blok için MD5 algoritması 4
adım * 16 işlem = 64 adet işlem yapmaktadır. Bu kadar fazla adımın
amacı simetrikliği engelleyip farklı girdiler için farklı sonuçlar
üretebilme özelliğini sağlayabimektir. Aşağıda her adımda kullanılan
işlevler gösterilmiştir.
Her adımda 16 kez FF işlevi hesaplanır:
from (j = 0 to 15)
FF (a, b, c, d, Mj, s, ti)
Burada:
i: adım numarası
FF (a, b, c, d, Mj, s, ti) => a = b + ((a + F(b, c, d) + Mj + ti) <<< s)
1. adım için F(X, Y, Z) = (X and Y) or ((not X) and Z)
2. adım için F(X, Y, Z) = (X and Z) or (Y and (not Z))
3. adım için F(X, Y, Z) = X xor Y xor Z
3. adım için F(X, Y, Z) = Y xor (X or (not Z))
SHA (Secure Hash Algorithm)
NİST
(National Institute of Standards and Technology) ve NSA (National
Security Agency) kuruluşlarının ortak çalışmaları sonucunda 1994
yılında Sayısal İmza Standardında (DSA-Digital Signature Standard)
kullanılmak üzere tasarlanmış bir algoritmadır. MD5’le benzerlik
göstermektedir. MD5 ile karşılaştıracak olursak;
MD5 - SHA Karşılaştırması
•
MD5’in çıktısı 128 bit iken, SHA’nın çıktısı 160 bittir. Yani MD5’te 4
adet 32 bitlik değişken kullanılırken, SHA’da 5 adet 32 bitlik değişken
kullanılır.
• Her ikiside 512 bitlik bloklar üzerinde işlem yaparlar.
• SHA’da ekleme (padding) işlemi, MD5’teki ile aynı şekilde yapılır.
•
SHA’da da her 512 bitlik blok için 4 adımda işlemler yapılır, fakat bir
farkla: MD5’de her adımda önceden tanımlı işlevlerin kullanımı 16 kez
tekrarlanırken, bu sayı SHA’da 20 kezdir.
• SHA girdi olarak maksimum 264-1 uzunluğunda veriyi kabul eder. Bunu yanında MD5 için böyle bir kısıtlama yoktur.
•
SHA ürettiği 160 bitlik sonuç ile brute-force (bütün olası sonuçların
denenmesi ile gerçekleştirilir) ataklara karşı daha dayanıklıdır.
Diğerleri
MD5
ve SHA’nın yanında daha birçok MD algoritması tasarlanmıştır. Bunlardan
bazıları MD2, MD4, Haval, Ripe-MD, Snefru, N-Hash’dır.
Uygulamalar
Çok çeşitli MD algoritmalarını gerçekleyen uygulamaları farklı platformlar için bulmak mümkündür.
Unix/Linux Uygulamaları
Unix/Linux
platformlarında MD5 ve SHA algoritmaların gerçekleyen en bilindik
uygulamalar sırasıyla md5sum ve sha1sum’dır. Uygulamaların
çalıştırılmasına ilişkin örnekler:
~$ md5sum deneme
d39100ac38f7bde184d48d1ad0af0318 deneme
~$ sha1sum deneme
394916cffc20a1e087ede73a8b66ce1063ea4b9f deneme
~$
Kaynak:Cybergüvenlik