Md5 (x) == x olan bir MD5 Sabit Noktası var mı?


114

MD5 dönüşümünde sabit bir nokta var mı, yani öyle bir x var md5(x) == xmı?


8
Hangi md5 dönüşümü? Matematiksel olan (herhangi bir bit dizisinden 128 bit'e kadar) veya herhangi bir bytestring'den 32 karakterlik bir hexstring'e (pratik olan)?
İkisinin

4
Eh, onlar olan aynı cevabı doğru? 128 bit uzunluğunda md5(x) == xolduğu md5(x) için 128 bit uzunluğunda olmayan x'in olmadığını biliyoruz . Bu nedenle, md5'te rastgele boyutlandırılmış giriş için sabit bir nokta vardır, ancak ve ancak 128-bit etki alanında md5'te sabit bir nokta varsa .
paul

1
Bunların aynı cevap olduğunu sanmıyorum çünkü pratik 32 karakterlik hexstring için, hex rakamları büyük harfle [AF] veya küçük harfle [af] göstermeniz keyfi bir seçimdir. Her iki gösterim de aynı 128 bitlik sayıya karşılık gelir, ancak MD5'e giriş olarak sağlandığında farklı karmalar verirler. Dolayısıyla, her iki temsilde de sabit bir nokta olma olasılığı aslında1-(1/e)*(1/e) ≈ 86.47%
Dušan

Yanıtlar:


138

Bir MD5 toplamı 128 bit uzunluğunda olduğundan, herhangi bir sabit noktanın da 128 bit uzunluğunda olması gerekir. Herhangi bir dize MD5 toplamı eşit herhangi bir 128-bit dizisi sabit bir nokta, olasılık, mümkün olan tüm miktarlarda dağılır varsayılarak olan 1 / 2 128 .

Dolayısı ile de, 128-bit dizisi sabit bir nokta olasılığı (1 - olan 1 / 2 128 ) 2 128 , sabit bir nokta olduğunu olasılığı 1 olacak şekilde - (1 - 1 / 2 128 ) 2 128 .

N sonsuza gider sınır yana (1 - 1 / n ) n olduğu 1 / E ve 2 128 - kesinlikle çok büyük bir sayıdır, bu olasılık neredeyse tam olarak 1 1 / E ≈ 63.21%.

Elbette, gerçekte hiçbir rastgelelik yoktur - ya sabit bir nokta vardır ya da yoktur. Ancak sabit bir nokta olduğundan% 63.21 emin olabiliriz. (Ayrıca, bu sayının ana alanın boyutuna bağlı olmadığına dikkat edin - MD5 toplamları 32 bit veya 1024 bit olsaydı, yanıt yaklaşık 4 veya 5 bitten büyük olduğu sürece aynı olurdu).


11
Aslında herhangi bir dizgenin MD5 toplamının tüm olası toplamlara eşit olarak dağıtıldığını varsayabilir misiniz?
Ori Pessach

13
Evet. Büyük sayılar ve ölçülü, kabaca rastgele bir dağılım oluşturur. Olmasaydı, sürekli çarpışmalarınız olurdu. MD5'in doğası, çıktısının rastgele dağıtılmasına zorlar.
Stefan Kendall

2
Cevabınızı bu cevap için temel olarak kullandım: security.stackexchange.com/questions/3851/…
CesarB

1
İşte altın rozetiniz olsun.
Dennis

Bunun dışında md5'in belirleyici olması, rastgele olmaması.
PyRulez

13

Kaba kuvvet girişimim 12 önek ve 12 sonek eşleşmesi buldu.

önek 12: 54db1011d76dc70a0a9df3ff3e0b390f -> 54db1011d76d137956603122ad86d762

son ek 12: df12c1434cec7850a7900ce027af4b78 -> b2f6053087022898fe920ce027af4b78

Blog yayını: https://plus.google.com/103541237243849171137/posts/SRxXrTMdrFN


Bağlantı çalışmıyor. Google plus Nisan'da kapandı
Typewar

Maalesef blog yayınını kaydetmedim ve google + yedekleme benim için çalışmıyor. Ama işte benim github projem: github.com/thomasegense/MD5FixPointSearch
Thomas Egense

Bundan emin misiniz: önek 12: 54db1011d76dc70a0a9df3ff3e0b390f -> 54db1011d76d137956603122ad86d762 md5sumlinux komutunu kullandım , farklı sonuç aldım
ThunderPhoenix

Md5sum'u doğru kullandığınızdan emin değilim. Ayrıca buradan çevrimiçi olarak da onaylayabilirsiniz: onlinemd5.com
Thomas Egense

11

Hash geri döndürülemez olduğundan, bunu anlamak çok zor olacaktır. Bunu çözmenin tek yolu, hash'in olası her çıktısında hash'i hesaplamak ve bir eşleşme bulup bulmadığınızı görmek olacaktır.

Ayrıntılı olarak açıklamak gerekirse, bir MD5 karmasında 16 bayt vardır. Bu, 2 ^ (16 * 8) = 3.4 * 10 ^ 38 kombinasyon olduğu anlamına gelir. 16 baytlık bir değerde bir karmanın hesaplanması 1 milisaniye sürdüyse, tüm bu karmaları hesaplamak 10790283070806014188970529154,99 yıl sürecektir.


2
Doğru, eğer hepsini denemek zorunda olsaydın . Ancak, sabit bir nokta olmadığını doğrulamak için yalnızca olası her girişi denemeniz gerekir. Eğer sabit bir nokta varsa (ve Adam Rosenfield'ın cevabı olabileceğini öne sürüyorsa) o zaman gereken tek şey şanslı bir tahmindir.
Naaff

İşlev, matematiksel tersi olmaması anlamında geri çevrilemez, ancak bu yalnızca belirli bir çıktı için birden fazla girdi olabileceği anlamına gelir. Genel olarak, belirli bir çıktı için girdi alanı sonsuz olacaktır, ancak bunun 128 bitlik bir değer olarak başladığını biliyorsanız, olasılıkları daraltabilirsiniz. İşlevi bir kara kutu olarak görmüyorsanız, bunun yerine özellikleri okuyup matematiksel düşünme uyguluyorsanız "geriye doğru çalışma" şansı vardır.
rndmcnlly

2
@Naaff: "sadece mümkün olan her girdiyi denemek zorundasın" - ve bu her hashi denemekten daha kolay, nasıl? Tam tersi, çünkü birkaç olası girdi aynı çıktıya karıştırılabilir.
Piskvor

1
@Piskvor: Naaff'ın ne demek istediğini yanlış anladınız (benim de bir dakikamı aldı). Bunu söylemenin daha net bir yolu "Yalnızca sabit bir nokta yoksa, her olası girişi denemelisiniz (2 ^ 128 alanından)". Başka bir deyişle, daha önce hiçbiri işe yaramazsa, her olasılığı denemelisiniz. Yani 1.08-28 yıl ya da şanslı bir tahmin!
P Baba

"Bir hash'i hesaplamak 1 milisaniye sürdüyse". Modern GPU'lar milyarlarca hash'i saniyede bundan çok daha hızlı hesaplayabilir. Ama yine de çok uzun zaman alacaktı.
markasoftware

0

Bir evet / hayır cevabım olmasa da, benim tahminim "evet" ve dahası bu türden 2 ^ 32 sabit nokta (karakter dizisi yorumu için değil, bit dizgisi yorumlaması için). Bunun üzerinde aktif olarak çalışıyorum çünkü çok fazla yaratıcılık gerektiren harika, özlü bir bulmaca gibi görünüyor (eğer hemen kaba kuvvet aramasına razı olmazsanız).

Benim yaklaşımım şudur: bir matematik problemi olarak ele alın. 128 boole değişkenimiz ve çıktıları girdiler (eşleşmeleri beklenen) açısından tanımlayan 128 denklemimiz var. Algoritmadaki tablolardaki tüm sabitleri ve doldurma bitlerini ekleyerek, umuyorum ki denklemler 128-bit giriş durumuna optimize edilmiş bir algoritma verecek şekilde büyük ölçüde basitleştirilebilir. Bu basitleştirilmiş denklemler daha sonra verimli arama için güzel bir dilde programlanabilir veya tekrar soyut olarak işlenebilir, her seferinde tekli bitler atanarak, çelişkilere dikkat edilebilir. Girişle eşleşmediğini bilmek için çıktının yalnızca birkaç bitini görmeniz gerekir!


Bu gerçekten ilginç, bu yolda ilerlerken lütfen ilerlemenizi paylaşın.
user230910

-1

Muhtemelen, ama bulmamız sahip olduğumuzdan daha uzun sürer veya MD5'ten ödün vermeyi içerir.


6
Kırılmamış. Yapabildikleri tek şey, makul bir süre içinde aynı hash'i eşitleyen 2 dizi üretmektir. Belirli bir hash'e eşit olacak bir dizi üretmek hala çok zordur.
Kibbee

9
MD5 ("Hızlı kahverengi tilki tembel köpeğin üzerinden atlar") = 9e107d9d372bb6826bd81d3542a419d6
Kip

5
Sabit bir nokta, muhtemelen matematikte daha kapsamlı bir MD5 ihlaline yol açabilecek bir avantaj sağlayacaktır. Glomek'in gerçekten 'muhtemelen' haklı çıkarabileceğine ikna olmadım; "Muhtemelen" kelimesini hiçbir şey ifade etmeden kabul ederdim.
Jonathan Leffler

-9

İki yorum vardır ve birinin seçmesine izin verilirse, sabit bir nokta bulma olasılığı% 81,5'e yükselir.

  • Yorum 1: İkilik sistemdeki MD5 çıkışının MD5'i girişiyle eşleşiyor mu?
  • Yorum 2: Onaltılık bir MD5 çıktısının MD5'i girişiyle eşleşiyor mu?

13
MD5 algoritması hakkında hex anlamına gelen hiçbir şey yoktur - baytlar üzerinde çalışır ve bayt üretir - bu yüzden ikinci yorumun geçersiz olduğunu düşünüyorum.
Nick Johnson

Yorum 1'in altında sabit bir nokta olsun ya da olmasın, yorumlama altında hala bir nokta olabilir (ya da olmayabilir) 2. Ancak, problemi keşfetmekle ilgileniyorsanız, yorum 1 çok daha iyi bir başlangıç ​​noktası gibi görünüyor çünkü kazandınız Büyük / küçük harf ve karakter kodlaması hakkında her türlü keyfi karar vermek zorunda değilsiniz. Üstelik ikili durumda daha az bit var!
rndmcnlly

4
Büyünün gerçekte ne olduğunu yanlış yorumluyorsunuz. İkili, ondalık veya sekizlik veya 3 tabanında temsil edebileceğiniz gibi onaltılık olarak da temsil edebilirsiniz. Bu bir sayıdır ve farklı temsilleri vardır. Dolayısıyla, yorum 1 ve 2 aynı şeydir. Düşündüğünüz şey, aynı onaltılık olmayan, ancak tamamen farklı bir ikili değer olan karakter dizisi temsilidir. Aslında, farklı karakter kümelerinde birçok farklı onaltılık diziye sahip olabilirsiniz. 128 bitlik karma değer bir "onaltılık" dize olarak gösterilebilir, ancak dizeye eşit değildir. Dize aynı ikili veri değil.
tanımlar

Dustin, yorum 2 gerçekten gösterim dizisinin MD5'i anlamına geliyor.
Joshua

4
Yine de bu fikirle ilgili büyük bir sorun var, çünkü doğrudan karakter kodlamanıza bağlı. Farklı kodlama şemaları tamamen farklı sonuç kümeleriyle sonuçlanacaktır. MD5'in acodingfool.typepad.com/blog/2009/05/the-kembler-identity.html
tanımlayan

-23

Kesin konuşursak, MD5'in girişi 512 bit uzunluğunda ve çıktı 128 bit olduğundan, bunun tanım gereği imkansız olduğunu söyleyebilirim.


4
Hayır, 1 baytlık dizelerin MD5'i mevcuttur.
Joshua

7
Giriş herhangi bir boyutta olabilir. Giriş 512 bayttan daha azsa, doldurulur, ancak küçük girişler yine de kabul edilebilir. Wikipedia'dan: "MD5, değişken uzunluklu bir mesajı 128 bitlik sabit uzunlukta bir çıktıya dönüştürür. Giriş mesajı 512 bitlik bloklara (on altı adet 32 ​​bitlik küçük endian tamsayı) bölünür; mesaj doldurulur, böylece uzunluğu 512'ye bölünebilir. "
Naaff

Diyelim ki, 0000000001 = 1 mi? O zaman sorunun en iyi ihtimalle zayıf bir şekilde belirtildiğini iddia ediyorum.
Ori Pessach

11
Giriş MD5 128 bit olabilir. MD5 bu girişi doldurmak istiyorsa, açıkçası bu MD5'in işi. Girdi hala iyi tanımlanmıştır. Benzer şekilde, çıktı iyi tanımlanmış 128 bittir. (İyi tanımlanmış) giriş ve (iyi tanımlanmış) çıkışın her ikisi de aynıysa, MD5 (x) = x.
Naaff

2
@Joshua, boş bir dizenin (yani 0 bayt) MD5'i bile mevcut
Kip
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.