İçeriğe atla

MD5

MD5 (Message-Digest algorithm 5), yaygın olarak kullanılan bir kriptografik özet fonksiyonudur. Girilen verinin boyutundan bağımsız olarak, 128-bit özet değeri üretir. MD5 ilk olarak kriptografik özet fonksiyonu olarak tasarlanmış olmasına rağmen geniş çaplı güvenlik açıkları tespit edilmiştir. Veri bütünlüğünün sağlandığını kontrol etmek için sağlama değeri (ing: checksum) üretmek amacıyla kullanılır. Ancak sadece kasıtsız yapılan değişiklere karşı kullanışlıdır.

Birçok özet (hash) fonksiyonu gibi MD5 da şifreleme algoritmaları içermez. Kaba kuvvet saldırısı ile kırılabilir. Aşağıdaki Güvenlik bölümünde ayrıntılı olarak açıklandığı gibi geniş çaplı güvenlik açıklarından muzdariptir.

MD5, Ron Rivest tarafından 1991 yılında, daha önceki versiyon olan MD4 yerine kullanılması amacıyla tasarlanmıştır.[1] RFC 1321'deki kaynak kodu RSA lisansı içerir. "MD" kısaltması "Mesaj Özeti (Message Digest)" anlamına gelmektedir.

MD5'ın güvenilirliği ciddi olarak sarsılmıştır. İçerdiği güvenlik zafiyetleri sahada da kullanılmıştır, bunlardan en önemlisi 2012'deki Flame kötücül yazılımıdır (Flame malware). CMU Yazılım Mühendisliği Enstitüsü MD5'ı için "kriptografik açıdan kırılabilir daha fazla kullanım için uygun değildir" açıklamasında bulunmuştur.[2]

Tarih ve Kriptanaliz

MD5, MIT Profesörü Ronald Rivest tarafından tasarlanan, bir kriptografik özet algoritmasıdır (Rivest, 1992). Analatik çalışmalar MD5'ın önceki versiyonu olan MD4'un yeterince güvenli olmadığını kanıtlayınca, Rivest güvenli bir yedek olarak MD5'ı tasarladı. (Hans Dobbertin MD4'te güvenlik açıkları bulmuştur.)

1993 yılında Den Boer ve Bosselaers iki farklı başlanlıç vektörünü (initialization vector) kullanarak aynı özet değerini üretip sınırlı bir sözde-çakışma (pseudo-collision) sonucu elde etmiş oldular.

1996 yılında Dobbertin MD5 sıkıştırma fonksiyonunda çakışmalar olduğunu belirtti (Dobbertin, 1996).Bu MD5'ın tamamında etkili bir atak olmadığı için kriptografiyle ilgilenen insanlar MD5'ın, SHA-1 veya RIPEMD-160 yerine geçebileceği taraftarıydılar.

Özet değerinin boyutu (128 bit) yeterince küçük olduğu için doğum günü saldırıları için uygundu. Mart 2004'te doğum günü saldırısı ile çakışma bularak MD5'ın pratikte güvenilir olmadığını göstermeyi amaçlayan MD5CRK isimli bir proje başladı.

Kısa süre sonra, Xiaoyun Wang, Dengguo Feng, Xuejia Lai ve Hongbo Yu tarafından MD5'ın tamamı için çakışmalar duyurulunca MD5CRK Ağustos 2004'te sona erdi.[3][4] Yaptıkları analitik saldırının IBM p690 clusterda yalnızca 1 saat sürdüğü raporlandı.[5]

1 Mart 2005'te, Arjen Lenstra, Xiaoyun Wang ve Benne de Weger tarafından farklı açık anahtarlardan aynı MD5 özet değerine sahip iki X.509 sertifikasının üretildiği pratik ve çarpıcı bir çakışma gösterildi.[6] Özet üretimi iki açık anahtarın da gizli anahtarlarını içeriyordu. Birkaç gün içinde Vlastimil Klima tarafından bu algoritmanın gelişmiş versiyonu yayınlandı.Yeni algoritmayla bir saat içinde tek bir notebook bilgisayar ile MD5 çakışmaları üretebiliyordu.[7] 18 Mart 2016'da Vlastimil Klima, tunneling adını verdiği bir algoritma yayınladı. BU algoritmayla yalnızca bir dakikada içinde tek bir notebook bilgisayar ile MD5 çakışmaları üretebiliyordu.[8]

MD5'la ilgili çeşitli RFC yazım hataları yayınlandı. 2009 yılında United States Cyber Command, misyonunu belirten cümlenin MD5 özet değerini, resmi ambleminin bir parçası olarak kullandı.[9]

24 Aralık 2010'da, Tao Xie ve Dengguo Feng,ilk kez tek blok (512-bit) MD5 çakışmasını yayınladılar.[10](Önceki çakışma bulguları çok bloklu saldırılar üzerindeydi) Güvenlik nedenleriyle, Xie ve Feng yani saldırının algoritmasını açıklamadılar.1 Ocak 2013'ten önce farklı 64 baytlık bir çarpışmayı ilk bulana 10.000 ABD doları ödül vereceklerini açıklayarak şifreleme topluluğuna meydan okudular. Marc Stevens, meydan okumaya yanıt verdi ve çakışan tek blokluk mesajların yanı sıra kendi algoritmasını ve kaynak kodunu yayınladı.[11]

2011 yılında, MD5[12] ve HMAC-MD5'daki[13] güvenlik hususlarını güncellemek için RFC 6151 [14] kabul edildi.

Güvenlik

MD5 özet fonksiyonunun güvenilirliği ciddi şekilde sarsılmıştır.2,6 GHz Pentium 4 işlemcili bir bilgisayarda birkaç saniye içinde çarpışmalara neden olabilecek bir çarpışma saldırısı mevcuttur.[15] Ayrıca  chosen-prefix collision attack ile belirli ön eklere sahip iki girdiden saatler içerisinde çakışma bulunabilir.[16] Çakışmaları bulmak, hazır GPU'ların kullanımı ile büyük ölçüde kolaylaşmıştır. NVIDIA GeForce 8400GS grafik işlemcisinde saniyede 16-18 milyon özet değeri hesaplanabilir. NVIDIA GeForce 8800 Ultra, saniyede 200 milyondan fazla özet değeri hesaplayabilir.[17]

Bu hash değeri çakışması saldırıları, dosyaların çakışması,[18][19] sayısal sertifikalar (digital certificates)'ın çakışması da dahil olmak üzere kamuoyuna duyuruldu.[20] 2015'ten itibaren, MD5'in oldukça yaygın olarak kullanıldığı, güvenlik araştırmaları ve antivirüs şirketleri tarafından gösterildi.[21]

Güvenlik konularına genel bakış

1996'da MD5'ın tasarımında bir hata bulundu. Bu hata dönemde çok önemli bir güvenlik açığı sayılmasa da, kriptografçılar, o zamanlar güvenlik açıkları olduğu tespit edilen SHA-1 için olduğu gibi MD5 için de başka algoritmaların kullanılmasını önermeye başladılar.[22] 2004 yılında MD5'in çakışmaya karşı güvenli olmadığı gösterildi.[23] Bu nedenle, MD5, SSL sertifikaları veya dijital imza gibi dijital güvenliğe dayalı uygulamalar için uygun değildir. Ayrıca 2004 yılında, algoritmayı güvenlik nedeniyle şaibeli hale getiren daha ciddi kusurlar keşfedildi; Özellikle bir grup araştırmacı, aynı MD5 sağlama değerini üreten bir çift dosya oluşturduklarını açıkladı.[3][24] 2005, 2006 ve 2007 yıllarında MD5'ı kırmak için daha fazla ilerleme kaydedildi.[25] Aralık 2008'de bir grup araştırmacı bu tekniği sahte SSL sertifikası üretmek için kullandı.[20][26]

2010 itibarıyla, CMU Yazılım Mühendisliği Enstitüsü MD5'ı için "kriptografik açıdan kırılabilir daha fazla kullanım için uygun değildir"[27] açıklamasında bulunmuştur ve ABD hükûmet uygulamalarının çoğunda SHA-2 ailesi özet fonksiyonlarının kullanılması gerekmektedir.[28] 2012'de, Flame kötücül yazılımı(Flame malware) ile MD5'daki güvenlik açıkları, sahte Microsoft dijital imzası üretmek için kullanıldı.

Çakışma Açıkları (Collision vulnerabilities)

1996 yılında, MD5 sıkıştırma fonksiyonunda çakışmalar bulundu. Hans Dobbertin RSA Laboratuvarları teknik haber bülteninde "Sunulan saldırı MD5'in pratik uygulamalarını henüz tehdit etmiyor ancak tehdit etmeye çok yakın ... gelecekte çakışmaya karşı dayanıklı özet fonksiyonun gerekli olduğu durumlarda ... daha fazla MD5 kullanılmamalı . "[29]

2005 yılında araştırmacılar, PostScript belgelerinin[30] ve X.509[31] sertifikalarının çiftlerini aynı özet değerinden oluşturabildiler. O yıl, MD5'in tasarımcısı Ron Rivest, "md5 ve sha1'in her ikisinin de (çakışma direnci bakımından) açıkça kırıldığını" yazdı.[32]

30 Aralık 2008'de bir grup araştırmacı, 25. Chaos Communication Kongresi'nde, MD5 özet değeri ile kontrol edildiğinde geçerli görünen, sahte bir ara sertifika yetkilisi sertifikası oluşturmak için MD5 çakışmlarının nasıl kullanılacağını açıkladı.[20] Araştırmacılar, İsviçre'deki  EPFL'de,Sony PlayStation 3 cluster kullanarak, RapidSSL tarafından yayınlanan normal bir SSL sertifikasını, RapidSSL tarafında geçerliliği imzalanmış sahte sertifikalar üretebilecekleri  CA sertifikasına dönüştürdüler.[33] RapidSSL sertifikalarının onaylayıcısı olan VeriSign, güvenlik açığı ilan edildiğinde, sağlama değeri hesaplamak için MD5 kullanarak oluşturulan yeni RapidSSL sertifikaları için onay vermeyi bıraktığını duyurdu.[34]VeriSign, MD5 kullanılarak imzalanmış mevcut sertifikaları iptal etmedi, bu karar atağı yaratıcısı olan araştırmacılar tarafından uygun görüldü. (Alexander Sotirov, Marc Stevens, Jacob Appelbaum, Arjen Lenstra, David Molnar, Dag Arne Osvik, and Benne de Weger).[20] Bruce Schneier, "MD5'in kırılmış bir özet fonksiyonu olduğunu zaten biliyorduk","artık hiç kimse MD5 kullanmamalı" açıklamalarında bulundu.[35] SSL araştırmacıları "Sertifika Yetkilileri, yeni sertifikalar verirken MD5'i kullanmayı bırakmalıdır. Ayrıca MD5'in diğer uygulamalarda kullanımının tekrar gözden geçirilmesini umuyoruz" ifadelerini içeren bir yazı yayınladılar.[20]

Microsoft'a göre, 2012 yılında, Flame zararlı yazılımının yaratıcıları, MD5 çakışmasını kullanarak bir Windows kod imzalama sertifikası hazırladılar.[36]

MD5, Merkle-Damgård yapısını kullanır; bu nedenle, iki ön-ekle aynı özet değeri oluşturulabiliyorsa, çakışmayı kullanan uygulama, geçerli olarak kabul edilme olasılığının artırmak için ortak bir sonek ekleyebilir. Ayrıca, mevcut çakışmaları bulma teknikleri rastgele bir ön-ek belirlemeye olanak tanır: bir saldırgan, aynı içerikle başlayan aynı özet değerine sahip iki dosya oluşturabilir. Aralarında 6 bitlik fark olan iki mesajın MD5 çakışma örneği:

d131dd02c5e6eec4 693d9a0698aff95c 2fcab58712467eab 4004583eb8fb7f89
55ad340609f4b302 83e488832571415a 085125e8f7cdc99f d91dbdf280373c5b
d8823e3156348f5b ae6dacd436c919c6 dd53e2b487da03fd 02396306d248cda0
e99f33420f577ee8 ce54b67080a80d1e c69821bcb6a88393 96f9652b6ff72a70
d131dd02c5e6eec4 693d9a0698aff95c 2fcab50712467eab 4004583eb8fb7f89
55ad340609f4b302 83e4888325f1415a 085125e8f7cdc99f d91dbd7280373c5b
d8823e3156348f5b ae6dacd436c919c6 dd53e23487da03fd 02396306d248cda0
e99f33420f577ee8 ce54b67080280d1e c69821bcb6a88393 96f965ab6ff72a70

İki mesaj da aynı MD5 özet değerine sahip:79054025255fb1a26e4bc422aef54eb4.[37]

İki örnek arasındaki fark, her bayt için en öndeki bitin flip edilmiş olmasıdır. Örneğin, ilk örneğin 20. baytı (offset 0x13), 0x87, ikilik tabanda 10000111'dir. Bu baytın ilk biti flip edildiğinde ikilik tabanda 00000111 elde edilmiş olur. Bu sayı da ikinci örnekteki 0x07'dir.

Daha sonra ayrı ayrı seçilen iki dosya arasında çakışma oluşturmanın mümkün olduğu bulundu. Bu teknik 2008 yılında, sahte CA sertifikası oluşturmak için kullanıldı.2014'te Anton Kuznetsov tarafından MPI kullanarak paralelleştirilmiş çakışma araştırmasının yeni bir varyasyonun, cluster kullanarak 11 saatte çakışma bulduğu açıklandı.[38]

Preimage Açıkları

Nisan 2009'da, MD5'ın preimage (ters görüntü kümesi) korumasını geçebilen bir preimage  saldırısı yayınlandı. Bu teorik saldırının ful preimage için hesaplama karmaşıklığı  2123.4 'dür.[39][40]

Uygulamalar

MD5 özetleri, yazılım dünyasında, aktarılan bir dosyanın bozulmadan geldiğine dair güvence sağlamak için yaygın şekilde kullanılır. Örneğin, dosya sunucuları dosyalar için önceden-hesaplanmış MD5 ( md5sum olarak bilinir) sağlama değeri (checksum) yayınlarlar, böylece bir kullanıcı indirdiği dosyanın sağlama değerini hesaplayıp onu dosya sunucusunun sağlama değeri ile karşılaştırabilir; Windows kullanıcıları  PowerShell üzerinden "Get-FileHash" komutunu kullanabilir, Microsoft programları yükleyebilir veya üçüncü parti yazılım uygulamalarını kullanabilir.[41][42] Android ROM'lar da bu şekilde sağlama değeri kullanırlar.

MD5 çakışmalarını üretmek kolay olduğu için, dosyayı oluşturan kişinin aynı sağlama değerine sahip ikinci bir dosya oluşturması mümkündür, bu nedenle yukarıda anlatılmış olan yöntem bazı kötü niyetli müdahalelere karşı koruma sağlayamaz. Bazı durumlarda, sağlama değeri güvenilir değildir (örneğin, indirilen dosya ile aynı kanal üzerinden elde edilmişse ve dosyaya bir müdahale varsa sağlama değerine de müdahale olmuş olabilir), bu durumda MD5 ile yalnızca,bozuk veya tamamlanmamış indirme; gibi hatalar denetlenebilir. Dosya boyutu büyüdükçe bu tarz hataların oluşma ihtimali artar.

Tarihsel olarak incelendiğinde MD5, genellikle anahtar uzatılması(key stretching) yöntemiyle, bir şifrenin, tek yönlü bir fonksiyonla özet değerini oluşturup o şekilde saklamak için kullanılmıştır.[43][44] Güvenlik bölümünde açıklanan zayıflıkları nedeniyle, NIST şifre saklamak için önerilen özet fonksiyonları listesinde MD5'ı içermemektedir.[45]

MD5, hukuksal araştırmalar sırasında değiştirilen her belge için benzersiz bir tanımlayıcı sağlamak amacıyla elektronik keşif alanında da kullanılır. Bu yöntem, kağıt belgeleri değişip değişmediğini anlamak için onlarca yıl boyunca kullanılan Bates damga numaralandırma sisteminin yerine kullanılabileceği düşünülmüştür. Ancak yukarıda da belirtildiği gibi, çakışma saldırılarının kolaylığı nedeniyle vazgeçilmiştir.

Algoritma

Figür 1.Bir MD5 fonksiyonudur.MD5 4 round içinde 16 kere olmak üzere bu işlemden 64 tane içerir.F lineer olmayan bir fonksiyondur. Mi 32 bitlik mesaj inputu, Ki her işlem için farklı bir constanttır. . left shifts s kadarlık sola kaydırma demektir. Addition mod 232'de toplama için kullanılmıştır

MD5 değişken uzunluktaki bir mesajı 128 bitlik bir sabit uzunlukta çıktı olarak işler. Giriş mesajı 512-bitlik blok parçalarına ayrılır (on altı tane 32-bitlik kelimeler halinde). İleti, uzunluğu 512 ile bölünebilecek şekilde doldurulur. Bu doldurma işlemi şu şekilde işler: İlk olarak mesajın sonuna bir bit 1 eklenir. Sonrasında mesajın uzunluğu 512'nin katından 64 bit eksik olacak şekilde 0'larla doldurulur. Geriye kalan 64 bite de orijinal mesajın uzunluğu mod 264 'de yazılır.

Ana MD5 algoritması, A, B, C ve D olarak adlandırılan dört  adet 32 bitlik kelimeye ayrılmış 128 bitlik parçalar üzerinde çalışır. Bunlar belirli sabit değerlerle başlatılır. Daha sonra ana algoritma, her 512-bit ileti bloğunu durumunu(128 bit) değiştirmek için kullanır. Bir mesaj bloğunun işlenmesi, tur denilen dört benzer aşamadan oluşur; Her tur, doğrusal olmayan bir fonksiyon , modüler toplama işlemi ve bit bazında sola kaydırma işlemlerinden oluşur. Toplamda 16 tur vardır. Figür 1'de her tur içinde yapılan işlemler gösterilmiştir.4 olası F  fonksiyonu vardır;  her turda farklı bir fonksiyon kullanılır:

sırasıyla XOR, AND, OR veNOToperasyonlarının yerine kullanılmıştır.

Sözde Kod

MD5 özet değeri aşağıdaki algoritma ile hesaplanır. Algoritmadaki tüm değerler little-endian'dır.

 //Not: Bütün değerler işaretsiz 32 bittir hesaplama yaparken 2^32 üzerinden mod alın
var int[64] s, K

//s her tur için kaydırma miktarlarını belirtir
s[ 0..15] := { 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22 }
s[16..31] := { 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20 }
s[32..47] := { 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23 }
s[48..63] := { 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21 }

for i from 0 to 63
    K[i] := floor(232 × abs(sin(i + 1)))
end for
K[ 0.. 3] := { 0xd76aa478, 0xe8c7b756, 0x242070db, 0xc1bdceee }
K[ 4.. 7] := { 0xf57c0faf, 0x4787c62a, 0xa8304613, 0xfd469501 }
K[ 8..11] := { 0x698098d8, 0x8b44f7af, 0xffff5bb1, 0x895cd7be }
K[12..15] := { 0x6b901122, 0xfd987193, 0xa679438e, 0x49b40821 }
K[16..19] := { 0xf61e2562, 0xc040b340, 0x265e5a51, 0xe9b6c7aa }
K[20..23] := { 0xd62f105d, 0x02441453, 0xd8a1e681, 0xe7d3fbc8 }
K[24..27] := { 0x21e1cde6, 0xc33707d6, 0xf4d50d87, 0x455a14ed }
K[28..31] := { 0xa9e3e905, 0xfcefa3f8, 0x676f02d9, 0x8d2a4c8a }
K[32..35] := { 0xfffa3942, 0x8771f681, 0x6d9d6122, 0xfde5380c }
K[36..39] := { 0xa4beea44, 0x4bdecfa9, 0xf6bb4b60, 0xbebfbc70 }
K[40..43] := { 0x289b7ec6, 0xeaa127fa, 0xd4ef3085, 0x04881d05 }
K[44..47] := { 0xd9d4d039, 0xe6db99e5, 0x1fa27cf8, 0xc4ac5665 }
K[48..51] := { 0xf4292244, 0x432aff97, 0xab9423a7, 0xfc93a039 }
K[52..55] := { 0x655b59c3, 0x8f0ccc92, 0xffeff47d, 0x85845dd1 }
K[56..59] := { 0x6fa87e4f, 0xfe2ce6e0, 0xa3014314, 0x4e0811a1 }
K[60..63] := { 0xf7537e82, 0xbd3af235, 0x2ad7d2bb, 0xeb86d391 }

//değişkenlere değer ata:
var int a0 := 0x67452301   //A
var int b0 := 0xefcdab89   //B
var int c0 := 0x98badcfe   //C
var int d0 := 0x10325476   //D

//Pre-processing: Tek bir 1 bit ekleme
append "1" bit to message    
// Notice: the input bytes are considered as bits strings,
//  where the first bit is the most significant bit of the byte.[46]
  

//Pre-processing: Sıfırlar ile dolgulama yap
append "0" bit until message length in bits ≡ 448 (mod 512)
append original length in bits mod (2 pow 64) to message

//İletiyi ardışık 512-bit parçalar halinde işleyin
for each 512-bit chunk of message
    break chunk into sixteen 32-bit words M[j], 0 ≤ j ≤ 15
//Bu parça için hash değşkenlerine değer ata:
    var int A := a0
    var int B := b0
    var int C := c0
    var int D := d0
//Ana Döngü:
    for i from 0 to 63
        if 0 ≤ i ≤ 15 then
            F := (B and C) or ((not B) and D)
            g := i
        else if 16 ≤ i ≤ 31
            F := (D and B) or ((not D) and C)
            g := (5×i + 1) mod 16
        else if 32 ≤ i ≤ 47
            F := B xor C xor D
            g := (3×i + 5) mod 16
        else if 48 ≤ i ≤ 63
            F := C xor (B or (not D))
            g := (7×i) mod 16
//a,b,c,d'nin tanımlarına dikkat edin
        dTemp := D
        D := C
        C := B
        B := B + leftrotate((A + F + K[i] + M[g]), s[i])
        A := dTemp
    end for
//Bu parçanın şimdiye kadarki hash değerini ekle:
    a0 := a0 + A
    b0 := b0 + B
    c0 := c0 + C
    d0 := d0 + D
end for

var char digest[16] := a0 append b0 append c0 append d0 //(Output is in little-endian)

//sola kaydırma fonksiyonu tanımı
leftrotate (x, c)
    return (x << c) binary or (x >> (32-c));

Not: Gösterilen orijinal RFC 1321'den gelen formülasyon yerine, aşağıdaki kodlar verimliliği arttırmak için kullanılabilir (assembly dili kullanılıyorsa yararlıdır aksi halde derleyici yukarıdaki kodu optimize eder. Bu formülasyonlarda her hesaplama başka bir hesaplamaya bağımlı olduğu için nand ve and'lerin paralelleştirilebildiği yukarıdaki yöntemden genellikle daha yavaştır):

(0 ≤ i ≤ 15): F := D xor (B and (C xor D))
(16 ≤ i ≤ 31): F := C xor (D and (B xor C))

MD5 Özetleri

128 bit (16 baytlık) MD5 hashleri (ileti özetleri olarak da adlandırılır) genellikle 32 hexadecimal sayı ile gösterilir. Aşağıda 43 baytlık bir ASCII girişi ve bu girişin MD5 özetleri gösterilmektedir:

MD5("The quick brown fox jumps over the lazy dog") =
9e107d9d372bb6826bd81d3542a419d6

Mesajdaki ufak bir değişiklik bile (çok büyük olasılıkla), avalanche effect(çığ etkisi) nedeniyle çok farklı bir özet oluşmasına sebep olacaktır. Örneğin, cümlenin sonuna bir nokta eklendiğinde:

MD5("The quick brown fox jumps over the lazy dog.") = 
e4d909c290d0fb1ca068ffaddf22cbd0

0 uzunluğundaki stringin özeti:

MD5("") = 
d41d8cd98f00b204e9800998ecf8427e

MD5 algoritmasında, mesaj herhangi bir sayıdaki bitten oluşabilir; Sekiz bit (octet, byte)) katları ile sınırlı değildir. md5sum gibi bazı MD5 uygulamaları oktetlerle sınırlı olabilir veya başlangıçta belirlenemeyen uzunlukta iletiler için desteklenmeyebilir.

Ayrıca bakınız

Kaynakça

  1. ^  Ciampa, Mark (2009). CompTIA Security+ 2008 in depth 28 Kasım 2016 tarihinde Wayback Machine sitesinde arşivlendi.
  2. ^  Chad R, Dougherty (31 Aralalık 2008). "Vulnerability Note VU#836068 MD5 vulnerable to collision attacks 26 Temmuz 2011 tarihinde Wayback Machine sitesinde arşivlendi.". Vulnerability notes database. CERT Carnegie Mellon University Software Engineering Institute. 3 Şubat 2017 tarihinde alıntılandı.
  3. ^ a b J. Black, M. Cochran, T. Highland: A Study of the MD5 Attacks: Insights and Improvements 1 Ocak 2015 tarihinde Wayback Machine sitesinde arşivlendi., 3 Mart 2006. 27 Temmuz 2008 tarihinde alıntılandı.
  4. ^ Philip Hawkes and Michael Paddon and Gregory G. Rose: Musings on the Wang et al. MD5 Collision 15 Eylül 2011 tarihinde Wayback Machine sitesinde arşivlendi., 13 Ekim 2004. - 27 Temmuz 2008 tarihinde alıntılandı.
  5. ^ Bishop Fox (26 Eylül 2013). "Fast MD5 and MD4 Collision Generators" 26 Nisan 2017 tarihinde Wayback Machine sitesinde arşivlendi.. 10 Şubat 2014 tarihinde alıntılandı.
  6. ^ Arjen Lenstra, Xiaoyun Wang, Benne de Weger: Colliding X.509 Certificates 23 Mayıs 2017[Tarih uyuşmuyor] tarihinde Wayback Machine sitesinde arşivlendi., Cryptology ePrint Archive Report 2005/067, 1 Mart 2005, 27 Temmuz 2008 tarihinde alıntılandı.
  7. ^ Vlastimil Klima: Finding MD5 Collisions – a Toy For a Notebook 17 Mayıs 2017[Tarih uyuşmuyor] tarihinde Wayback Machine sitesinde arşivlendi., Cryptology ePrint Archive Report 2005/075, 5 March 2005, revised 8 Mart 2005. 27 Temmuz 2008 tarihinde alıntılandı.
  8. ^ Vlastimil Klima: Tunnels in Hash Functions: MD5 Collisions Within a Minute 6 Ağustos 2011 tarihinde Wayback Machine sitesinde arşivlendi., Cryptology ePrint Archive Report 2006/105, 18 Mart 2006.27 Temmuz 2008 tarihinde alıntılandı.
  9. ^  "Code Cracked! Cyber Command Logo Mystery Solved 18 Şubat 2017 tarihinde Wayback Machine sitesinde arşivlendi.". USCYBERCOM. Wired News. 8 Temmuz 2010. 29 Temmuz 2011 tarihinde alıntılandı.
  10. ^  "Marc Stevens – Research – Single-block collision attack on MD5 14 Mayıs 2017[Tarih uyuşmuyor] tarihinde Wayback Machine sitesinde arşivlendi.". Marc-stevens.nl. 2012.10 Nisan 2014 tarihinde alıntılandı.
  11. ^ "Marc Stevens – Research – Single-block collision attack on MD5" 15 Mayıs 2017[Tarih uyuşmuyor] tarihinde Wayback Machine sitesinde arşivlendi.. Marc-stevens.nl. 2012
  12. ^ "RFC 1321 – The MD5 Message-Digest Algorithm". Internet Engineering Task Force. Nisan 1992. 
  13. ^   "RFC 2104 – HMAC: Keyed-Hashing for Message Authentication". Internet Engineering Task Force. Şubat1997. 
  14. ^ "RFC 6151 – Updated Security Considerations for the MD5 Message-Digest and the HMAC-MD5 Algorithms". Internet Engineering Task Force. Mart 2011.
  15. ^ M.M.J. Stevens (June 2007). "On Collisions for MD5" 17 Mayıs 2017[Tarih uyuşmuyor] tarihinde Wayback Machine sitesinde arşivlendi. (PDF). [...] we are able to find collisions for MD5 in about 224.1 compressions for recommended IHV's which takes approx. 6 seconds on a 2.6GHz Pentium 4
  16. ^ Marc Stevens; Arjen Lenstra; Benne de Weger (16 Haziran 2009). "Chosen-prefix Collisions for MD5 and Applications" 9 Kasım 2011 tarihinde Wayback Machine sitesinde arşivlendi. (PDF)
  17. ^ "New GPU MD5 cracker cracks more than 200 million hashes per second.." 11 Mayıs 2011[Tarih uyuşmuyor] tarihinde Wayback Machine sitesinde arşivlendi..
  18. ^ Magnus Daum, Stefan Lucks. "Hash Collisions (The Poisoned Message Attack)" 13 Temmuz 2016 tarihinde Wayback Machine sitesinde arşivlendi.. Eurocrypt 2005
  19. ^ Max Gebhardt; Georg Illies; Werner Schindler. "A Note on the Practical Value of Single Hash Collisions for Special File Formats" 5 Haziran 2011 tarihinde Wayback Machine sitesinde arşivlendi. (PDF).
  20. ^ a b c d e Sotirov, Alexander; Marc Stevens; Jacob Appelbaum; Arjen Lenstra; David Molnar; Dag Arne Osvik; Benne de Weger (30 Aralık 2008). "MD5 considered harmful today" 20 Eylül 2017 tarihinde Wayback Machine sitesinde arşivlendi.. 30 Aralık 2008 tarihinde alıntı yapıldı.
  21. ^  "Poisonous MD5 – Wolves Among the Sheep | Silent Signal Techblog" 6 Temmuz 2017 tarihinde Wayback Machine sitesinde arşivlendi..
  22. ^ Hans Dobbertin (Summer 1996). ["The[] Status of MD5 After a Recent Attack"] (PDF). CryptoBytes.
  23. ^ Xiaoyun Wang & Hongbo Yu (2005). "How to Break MD5 and Other Hash Functions" 21 Mayıs 2009[Tarih uyuşmuyor] tarihinde Wayback Machine sitesinde arşivlendi.(PDF). Advances in Cryptology – Lecture Notes in Computer Science. pp. 19–35.
  24. ^  Xiaoyun Wang, Dengguo ,k.,m.,m, HAVAL-128 and RIPEMD, Cryptology ePrint Archive Report 2004/199, 16 Ağustos 2004
  25. ^ Marc Stevens, Arjen Lenstra, Benne de Weger: Vulnerability of software integrity and code signing applications to chosen-prefix collisions for MD5 13 Aralık 2007 tarihinde Wayback Machine sitesinde arşivlendi., 30 Kasım 2007. 
  26. ^ Stray, Jonathan (30 December 2008). "Web browser flaw could put e-commerce security at risk" 28 Ağustos 2013 tarihinde Wayback Machine sitesinde arşivlendi.. CNET.com.
  27. ^ "CERT Vulnerability Note VU#836068" 21 Mart 2017 tarihinde Wayback Machine sitesinde arşivlendi.. Kb.cert.org
  28. ^  "NIST.gov — Computer Security Division — Computer Security Resource Cente 9 Haziran 2011 tarihinde Wayback Machine sitesinde arşivlendi. r". Csrc.nist.gov. 
  29. ^ Dobbertin, Hans (Summer 1996). ["The[] Status of MD5 After a Recent Attack"] (PDF). RSA Laboratories CryptoBytes2 (2): 1. Retrieved 10 August 2010. The presented attack does not yet threaten practical applications of MD5, but it comes rather close. .... [sic] in the future MD5 should no longer be implemented... [sic] where a collision-resistant hash function is required.
  30. ^  "Schneier on Security: More MD5 Collisions" 28 Mart 2017 tarihinde Wayback Machine sitesinde arşivlendi.. Schneier.com.
  31. ^ "Colliding X.509 Certificates" 15 Mayıs 2017[Tarih uyuşmuyor] tarihinde Wayback Machine sitesinde arşivlendi.. Win.tue.nl.
  32. ^   7 Temmuz 2017 tarihinde Wayback Machine sitesinde [https://web.archive.org/web/20170707115237/https://mail.python.org/pipermail/python-dev/2005-December/058850.html arşivlendi. "[Python-Dev] hashlib — faster md5/sha, adds sha256/512 support]". Mail.python.org. 
  33. ^ "Researchers Use PlayStation Cluster to Forge a Web Skeleton Key" 21 Nisan 2009 tarihinde Wayback Machine sitesinde arşivlendi..
  34. ^ Callan, Tim (31 Aralık 2008). "This morning's MD5 attack — resolved[]". Verisign.
  35. ^  Bruce Schneier (31 Aralık 2008). "Forging SSL Certificates" 18 Şubat 2017 tarihinde Wayback Machine sitesinde arşivlendi.. Schneier on Security.
  36. ^ ""Flame malware collision attack explained"". 30 Mart 2017 tarihinde kaynağından arşivlendi. Erişim tarihi: 29 Nisan 2017. 
  37. ^ Eric Rescorla (2004-08-17). "A real MD5 collision"Educated Guesswork (blog). Archived from the original
  38. ^ Anton A. Kuznetsov. "An algorithm for MD5 single-block collision attack using highperformance computing cluster" 4 Haziran 2016 tarihinde Wayback Machine sitesinde arşivlendi.
  39. ^ Yu Sasaki; Kazumaro Aoki (16 Nisan 2009). "Finding Preimages in Full MD5 Faster Than Exhaustive Search" 3 Ekim 2012 tarihinde Wayback Machine sitesinde arşivlendi.. Springer Berlin Heidelberg.
  40. ^  Ming Mao and Shaohui Chen and Jin Xu (2009). "Construction of the Initial Structure for Preimage Attack of MD5"International Conference on Computational Intelligence and Security. IEEE Computer Society. 1: 442–445. doi:10.1109/CIS.2009.214. ISBN 978-0-7695-3931-7.
  41. ^ "Availability and description of the File Checksum Integrity Verifier utility" 15 Şubat 2015 tarihinde Wayback Machine sitesinde arşivlendi.. Microsoft Support. 17 Haziran 2013.
  42. ^ "How to compute the MD5 or SHA-1 cryptographic hash values for a file" 9 Mart 2015 tarihinde Wayback Machine sitesinde arşivlendi.. Microsoft Support. 23 Ocak 2007.
  43. ^ "FreeBSD Handbook, Security – DES, Blowfish, MD5, and Crypt" 18 Şubat 2017 tarihinde Wayback Machine sitesinde arşivlendi..
  44. ^  "Synopsis – man pages section 4: File Formats" 4 Mart 2016 tarihinde Wayback Machine sitesinde arşivlendi.. Docs.oracle.com.
  45. ^  NIST SP 800-132 1 Aralık 2016 tarihinde Wayback Machine sitesinde arşivlendi. Section 5.1
  46. ^  RFC 1321, section 2, "Terminology and Notation", Page 2.

İlgili Araştırma Makaleleri

<span class="mw-page-title-main">AES</span> Şifreleme standartı

AES, elektronik verinin şifrelenmesi için sunulan bir standarttır. Amerikan hükûmeti tarafından kabul edilen AES, uluslararası alanda da defacto şifreleme (kripto) standardı olarak kullanılmaktadır. DES'in yerini almıştır. AES ile tanımlanan şifreleme algoritması, hem şifreleme hem de şifreli metni çözmede kullanılan anahtarların birbiriyle ilişkili olduğu, simetrik-anahtarlı bir algoritmadır. AES için şifreleme ve şifre çözme anahtarları aynıdır.

<span class="mw-page-title-main">Elektronik imza</span>

Elektronik imza ya da sayısal imza, başka bir elektronik veriye eklenen veya elektronik veriyle mantıksal bağlantısı bulunan ve kimlik doğrulama amacıyla kullanılan elektronik veridir. E-imza olarak da bilinir. Elektronik ortamlarda imza yerine kullanılabilen yasal kimlik doğrulama sistemidir. Elektronik imza, elektronik belge'ye girilen bir isim kadar basit olabilir. Dijital imzalar, elektronik imzaları kriptografik olarak korunan bir şekilde uygulamak için e-ticarette ve düzenleyici dosyalarda giderek daha fazla kullanılmaktadır. Özellikle e-ticaretin hızlı yükselişi nedeniyle daha fazla önem kazanmştır. Elektronik imza sayesinde imzalanmış verinin, kimin tarafından imzalandığı ve güvenilirliği kontrol edilmiş olur. Elektronik imza; iletilen bilginin bütünlüğünün bozulmadığını, bilginin tarafların kimlikleri doğrulanmak suretiyle iletildiğini garanti eder. Ulusal Standartlar ve Teknoloji Enstitüsü veya ETSI gibi standardizasyon ajansları, bunların uygulanması için standartlar sağlar.

<span class="mw-page-title-main">Transport Layer Security</span> Internet Şifreleme Protokolü

Taşıma Katmanı Güvenliği (TLS) ve onun öncülü/selefi olan Güvenli Soket Katmanı (SSL), bilgisayar ağı üzerinden güvenli haberleşmeyi sağlamak için tasarlanmış kriptolama protokolleridir. X.509 sertifikalarını kullanırlar ve bundan dolayı karşı tarafla iletişime geçeceklerin kimlik doğrulaması asimetrik şifreleme ile yapılır ve bir simetrik anahtar üzerinde anlaşılır. Bu oturum anahtarı daha sonra taraflar arasındaki veri akışını şifrelemek için kullanılır. Bu, mesaj/veri gizliliğine ve mesaj kimlik doğrulama kodları için mesaj bütünlüğüne izin verir. Protokollerin birçok versiyonu ağ tarama, elektronik mail, İnternet üzerinden faks, anlık mesajlaşma ve İnternet üzerinden sesli iletişim gibi uygulamalarda yaygın olarak kullanılmaktadır. Bu durumda/içerikte/bağlamda en önemli özellik iletme gizliliğidir. Bundan dolayı kısa süreli oturum anahtarı, uzun süreli gizli simetrik anahtardan türetilememelidir.

Kriptografide, SHA-1 NSA tarafından dizayn edilmiş ve NIST tarafından yayınlanmış bir Amerika Birleşik Devletleri Federal Bilgi İşleme Standartı 'nda bir kriptografik özet fonksiyonudur. SHA-1, mesaj özeti olarak da bilinen 160-bit özet değeri üretir. Bir SHA-1 özet değeri genellikle 40 basamaklı bir onaltılık sayı olarak üretilir.

<span class="mw-page-title-main">Aradaki adam saldırısı</span>

Man-in-the-middle saldırısı, saldırganın birbiri ile doğrudan iletişim kuran iki taraf arasındaki iletişimi gizlice ilettiği veya değiştirdiği saldırı türüdür. İletişim ağı üzerinde veri paketleri serbestçe dolaşır. Özellikle broadcast olarak salınan paketler, aynı ağa bağlı tüm cihazlar tarafından görülebilir. İlkesel olarak hedefinde kendi IP'si olmayan bir paketi alan makinelerin, bu paketlerle ilgili herhangi bir işlem yapmamaları gerekir. Ancak istenirse bu paketlere müdahale edebilir ya da içeriğini öğrenebilirler. Aradaki adam saldırısı ağ üzerindeki paketleri yakalayarak manipüle etmek olarak özetlenebilir.

ElGamal imza şeması Ayrık Logaritmanın hesaplanmasının zorluğuna dayanan bir dijital imzadır. Tahir el-Cemal tarafından 1984 yılında bulunmuştur. Açık anahtarlı kriptosistemi ve imza şeması ayrık logaritmaya dayanmaktadır.

<span class="mw-page-title-main">Kriptografik özet fonksiyonu</span>

Kriptografik özet fonksiyonu çeşitli güvenlik özelliklerini sağlayan bir özet fonksiyonudur. Veriyi belirli uzunlukta bir bit dizisine, (kriptografik) özet değerine, dönüştürür. Bu dönüşüm öyle olmalıdır ki verideki herhangi bir değişiklik özet değerini değiştirmelidir. Özetlenecek veri mesaj, özet değeri ise mesaj özeti veya kısaca özet olarak da adlandırılır.

Günlük kullanmış olduğumuz şifreler disk üzerinde özet olarak kayıt edilir. Bu özetler iki ayrı şekilde LM ve NTLM olarak tutulup birbiri ile entegre olarak işlem görür ve kimlik doğrulamasını gerçekleştirir. Windows işletim sisteminde ise kullanıcı hesapları ve parolaların şifrelemesinde kullanılan SYSKEY bilgisi SAM dosyasında tutulur. İşletim sistemi çalışır durumunda bu dosyayı kontrolünde tutar, Admin dahi olunsa işletim sistemi içerisinden herhangi bir müdahaleye izin vermez. Windows İşletim sistemleri versiyonu doğrultusunda, kullanıcı parolalarını NTLM veya LM özeti fonksiyonuna sokarlar. Sonuç olarak SYSTEM dosyası içerisinde bulunan SYSKEY ile şifreler ve bu şekilde SAM dosyasına kayıt eder. Örnek olarak SAM dosyasında tutulan kullanıcı hesap bilgileri aşağıdaki gibidir.

SHA-2, ABD Ulusal Güvenlik Ajansı (NSA) tarafından tasarlanmış kriptografik özet (hash) fonksiyonları kümesidir. Kriptografik özet fonksiyonları, hesaplanmış “özet” ile bilinen ve beklenen özet değerinin karşılaştırılmasıyla, dijital veri üzerinde yürüyen matematiksel operasyonlardır. Özet fonksiyonları ile bir kişi verinin bütünlüğüne karar verebilir. Örneğin, yüklenmiş bir dosyanın özet değerini hesaplamak ve sonucu önceden açıklanmış özet sonucu ile karşılaştırmak, yüklemenin değiştirilip değiştirilmediğini veya üzerinde oynama yapılıp yapılmadığını gösterebilir. Kriptografik Hash fonksiyonlarının kilit noktası çakışma dirençleridir: hiç kimse aynı özet çıktısı veren iki farklı girdi bulamamalıdır.

<span class="mw-page-title-main">Drown atağı</span>

DROWN atağı TLS protokol takımının, artık güvensiz olarak bilinen SSL v2 protokolünü desteklemesi sebebiyle yapılabilmektedir. DROWN, TLS ile hizmet veren bununla birlikte SSL v2 protokolünü destekleyen ve iki protokol arasında aynı açık anahtar bilgilerini paylaşan tüm sunucular üzerinde etkilidir. Ek olarak eğer açık anahtar sertifikası SSLv2 destekleyen farklı bir sunucu üzerinde kullanılıyor ise, TLS sunucusu yine bu zafiyetten etkilenerek bilgi sızıntısına maruz kalmaktadır.

<span class="mw-page-title-main">HMAC</span>

Kriptografide, HMAC, kriptografik özet fonksiyonu ve gizli bir kriptografik anahtar içeren bir mesaj doğrulama kodu türüdür. Diğer MAC türleri gibi, HMAC de hem veri bütünlüğünü kontrol etmek hem de mesaj içeriğini onaylamakta kullanılabilir. HMAC in hesaplanmasında herhangi bir kriptografik özet fonksiyonu kullanılabilir. Örneğin, HMAC in hesaplanmasında MD5 veya SHA-1 özet fonksiyonu kullanılması durumunda, ilgili MAC algoritması da buna uygun olarak HMAC-MD5 veya HMAC-SHA1 olarak isimlendirilebilir. HMAC'in kriptografik saldırılara karşı dayanıklılığı, kullanılan özet fonksiyonunun dayanıklılığına, elde edilen özetin boyutuna, kullanılan kriptografik anahtarın boyutuna ve kalitesine bağlıdır.

Bilgisayar güvenliğinde, meydan okuma – karşılık verme temelli kimlik doğrulama, bir tarafın soru sorduğu ve diğer tarafın da, kimlik doğrulama için, bu soruya geçerli bir cevap (karşılık) üretmek zorunda olduğu bir protokol ailesidir.

Kriptografi 'de bir 'Lamport imzası' veya 'Lamport bir defalık imza şeması' dijital imza oluşturmak için kullanılan bir yöntemdir. Lamport imzaları, kriptografik olarak güvenli herhangi bir tek yönlü fonksiyon ile oluşturulabilir; genellikle bir Kriptografik özet fonksiyonu kullanılır.

Kriptografide, X.509 açık anahtar sertifikalarının formatını tanımlayan bir standarttır. X.509 sertifikaları, internette gezinmek için güvenli protokol olan HTTPS'nin temeli olan TLS/SSL dahil olmak üzere birçok internet protokolünde kullanılmaktadır. Elektronik imzalar gibi çevrimdışı uygulamalarda da kullanılırlar. Bir X.509 sertifikası bir açık anahtar ve bir kimlik içerir ve bir sertifika yetkilisi tarafından imzalanır veya kendinden imzalı olarak imzalanır. Sertifika güvenilir bir sertifika yetkilisi tarafından imzalandığında veya başka yollarla doğrulandığında, bu sertifikayı tutan biri, başka bir tarafla güvenli iletişim kurmak için sertifikanın içerdiği açık anahtara güvenebilir veya ilgili özel anahtar ile dijital olarak imzalanmış belgeleri doğrulayabilir.

Merkle imzası, anahtarlama ağaçları ve sayısal imza şemalarını birleştiren bir veri doğrulama yapısıdır. Özet değeri tabanlı kriptografidir ve Merkle ağacı da denen özet değeri ağacını kullanmaktadır. Verileri Lampart imza algoritması gibi tek kullanımlık şekilde imzalar. Ralph Merkle tarafından 1970 sonu itibarıyla geliştirilmiştir ve RSA, Dijital İmza Algoritması gibi geleneksel dijital imzalara alternatif olmuştur.

Kriptografide Eliptik Eğri Dijital İmza Algoritması (ECDSA), eliptik eğri şifrelemesi kullanan birçok çeşit Dijital İmza Algoritması (DSA) sunar.

<span class="mw-page-title-main">Anahtar türetme fonksiyonu</span>

Kriptografide, anahtar türetme fonksiyonu (ATF), bir veya daha fazla gizli anahtarı, ana anahtar, parola veya geçit parolası gibi unsurlardan bir sözderastlantısal fonksiyon kullanarak türetir. ATF'ler, anahtarlar boyutlarını uzatmak veya belirli formatlarda anahtarlar elde etmek için kullanılabilirler. Diffie-Hellman anahtar değişimi sonucunda oluşacak bir grup unsurların, AES'in kullanılabileceği bir simetrik anahtara dönüştürülmesi bu kullanıma örnek olarak gösterilebilir. Anahtar kullanılan kriptografik özet fonksiyonları, anahtar türetme için kullanılan sözderastlantısal fonksiyonların popüler örneklerinden biridir.

Bcrypt, Niels Provos ve David Mazières tarafından Blowfish şifreleme yöntemi esas alınarak geliştirilmiş ve ilk kez USENIX’te, 1999 yılında sunulmuş bir parola özet fonksiyonudur. Rainbow table saldırılarına karşı salt kullanmasının yanı sıra adaptif bir fonksiyon olma özelliğine sahiptir. İterasyon sayacı arttırılarak yavaşlatılabilir ve bu sayede kaba kuvvet saldırılarına karşı dirençli kalabilmektedir.

Kriptografide, ilklendirme vektörü kısaca İV ya da ilklendirme değişkeni, tipik olarak rastgele veya sözde rassal olması gereken bir şifreleme temelinin sabit boyuta sahip olan girdisidir. Bu rastgelelik, şifreleme işlemlerinde anlamsal güvenliği sağlamak için çok önemlidir. Anlamsal güvenlik tek bir şifreleme yönteminin aynı anahtar ile tekrar tekrar kullanılmasının şifrelenmiş mesajın bölümleri arasındaki ilişkileri çıkarmasına izin vermediği bir özelliktir. Blok şifreleri için, İV kullanımı çalışma kipleri ile açıklanmaktadır. Ayrıca, evrensel hash fonksiyonları ve buna dayanan mesaj kimlik doğrulama kodları gibi diğer temel öğeler için de rastgeleleştirme gereklidir.

Kriptografide, bir kriptografik hash üzerindeki bir çarpışma saldırısı, aynı hash değerini üreten iki girdi bulmaya çalışır, yani bir hash çarpışması. Bu, belirli bir hedef karma değerinin belirtildiği bir ön görüntü saldırısı nın aksine bir saldırıdır. Kabaca iki tür çarpışma saldırısı vardır: