İki dosya için aynı şifreleme karması veya sağlama toplamı aynı oldukları anlamına mı geliyor?


57

2 excel belgesine sahibim ve dosya adının yanı sıra tamamen aynı olup olmadıklarını kontrol etmek istiyorum.

Örneğin, dosyalar denir fileone.xlsve filetwo.xls. Dosya adlarından başka, içeriklerinin de aynı olduğu varsayılıyor ancak kontrol etmek istediğim de bu.

Bunu gözden geçirmenin ve bir sürü eklenti kurmanın yollarını aramıştım. Dümdüz bir yol görünmüyor.

Her iki dosya için de MD5 karma oluşturmayı denedim. Karma değerler aynı olduğunda, dosya içeriğinin 1: 1 aynı olduğu anlamına mı gelir?


8
kriptohashes ve bazen normal hash bile farklı sistemlerdeki dosyaları karşılaştırmak veya çok sayıda dosya arasında arama yapmak için faydalı olabilir, fakat eğer iki dosya aynı sistemdeyse, bunları cmpUnix veya fcWindows'ta (dosya karşılaştırması) ile kolayca karşılaştırabilirsiniz .
dave_thompson_085

10
shattered.io - SHA1, md5'ten daha güçlü bir "karma" algoritmasıdır ve hala paramparça.io / static/shattered- 1.pdf ve shattered.io/static/shattered-2.pdf , tamamen farklı iken aynı hash değerine sahiptir.
Strafor uçmak

30
Not: önce bedenlerini kontrol et. Farklı boyutlardalarsa, dosyaları açarken zahmet etmeyin, farklıdırlar.
Emilio M Bumachar

42
Simplistic sürümü: MD5 hash bir karşı korumak için yeterince iyi kaza , bu agains önlemek için yeterince iyi değil kötülüğün . Bunun sizin için yeterince iyi olup olmadığı durumunuza göre karar vermelisiniz.
Euro Micelli

9
diff -s file1 file2aynı olduklarını söylüyorsa, aynıdırlar (aslında bayt başına bayt dosyalarını karşılaştırır, böylece karma çarpışmalar bile hariç tutulur). sağlama toplamları, yalnızca bir karma değeriniz ve bu karma değerin kaynağıyla aynı olduğu düşünülen bir öğeniz olduğunda kullanılır.
Bakuriu

Yanıtlar:


93

Karma değerler aynı olduğunda, dosya içeriğinin 1: 1 aynı olduğu anlamına mı gelir?

Tüm dosyalar bir bayt koleksiyonudur (değerler 0-255). İki dosya MD5 hash ile eşleşirse, her iki byte koleksiyonu da aynı olasılıkla aynıdır (aynı sıra, aynı değerler).

İki dosyanın 128 bitlik bir karma olan aynı MD5'i üretme olasılığı çok düşük. Olasılık:

Yanlışlıkla çarpışan iki sağlamalarının Olasılık 1/2 olan 128 1 sextillion desilyon 366 nonillion 920 octillion 938 septillion 463 undecillion 282 340 yılında 211.000 456. 463 kentilyon 374 katrilyon 607000000000000 431000000000 768000000 (üzerinde bir cevap arasındadır StackOverflow'daki .)

Hash'lerin "yalnızca bir yönde" çalışması kastedilir - yani bir bayt koleksiyonu alırsınız ve bir karma alırsınız, ancak bir karma alıp geri bayt koleksiyonu alamazsınız.

Şifreleme buna bağlıdır (bu şeylerin ne olduğunu bilmeden iki şeyin karşılaştırılabileceği bir yöntemdir).

2005 yılında, bir MD5 karma elde etmek ve aynı MD5 karma ( çarpışma saldırısı ) sahip iki belge yaratan karma veriye uyan veriler oluşturmak için yöntemler keşfedildi . Aşağıdaki @ user2357112'nin yorumuna bakın. Bu, bir saldırganın, örneğin aynı MD5'e sahip iki yürütülebilir dosya oluşturabileceği ve hangisine güveneceğinizi belirlemek için MD5'e bağlı olmanız durumunda kandıracağınız anlamına gelir.

Bu nedenle, MD5 şifreleme veya güvenlik için kullanılmamalıdır. Örneğin indirme bütünlüğünü sağlamak için bir indirme sitesinde bir MD5 yayınlamak kötü bir durumdur. Bir MD5 karma değerine bağlı olarak, dosya veya veri içeriğini doğrulamak için kendinizi üretmediniz, önlemek istediğiniz şeydir.

Kendinizinkini yaratırsanız, kendinize kötü niyetli olmadığınızı bilirsiniz (umarım). Bu nedenle, kullanımınız için sorun yok, ancak başka birinin yeniden üretebilmesini istiyorsanız ve MD5 karma yayınını herkese açık olarak yayınlamak istiyorsanız, daha iyi bir karma kullanılmalıdır.


İki Excel dosyasının aynı satır ve sütunlarda aynı değerleri içermesinin, ancak farklı biçimlendirme, stiller, ayarlar vb. Nedeniyle dosyanın akış akışının tamamen farklı olmasına dikkat edin.

Dosyadaki verileri karşılaştırmak istiyorsanız, tüm biçimlendirmeyi çıkarmak için önce aynı satırlar ve sütunlarla CSV'ye dışa aktarın, ardından CSV'leri karma yapın ya da karşılaştırın.


107
Excel dosyalarında ve diğer ofis belgelerinde de farklı değerler olabilir çünkü dosyadaki meta veriler nedeniyle kaydedilen son tarih / saat için depolanan yeni bir değere sahip olduklarından, hiçbir şeyi değiştirmeden açılıp yeniden kaydedilmişlerdir.
BeowulfNode42

29
Bonus: CSV'ye dışa aktardıysanız diff, dosyaların gerçekten aynı karma değere sahip olmaktan ziyade byte bayt ile aynı olduğunu onaylamak için saygıdeğer veya benzer bir yardımcı programı kullanabilirsiniz.
Monty Harder

18
Bir karma alma ve karma ile eşleşen veri oluşturma, bir preimage saldırısıdır. MD5'in şu anda çarpışma saldırılarına karşı savunmasız olduğuna inanıyorum, ancak preimage veya second preimage saldırılarının şu anda uygun olduğunu sanmıyorum.
user2357112 21:18

2
@Tim ne diyorsun? Dedi ki: onları CSV'ye dışa aktarın diff -sve CSV'nin aynı olup olmadığını kontrol etmek için kullanın . Aslında diff -sexcel dosyalarını bile yapabilirsiniz : diffözdeş olduklarını söylüyorlarsa CSV karşılaştırmasına gitmenize gerek yoktur.
Bakuriu

2
@Bakuriu Açıkça yorumum çok kötü bir şekilde ifade edildi - CSV'ye ihraç etmek çok fazla bilgi kaybedecek - özellikle de formüller, grafikler, koşullu ve standart formatlar.
Tim

37

Uygulamada, evet, özdeş bir şifreleme karma dosyaları , dosyalar bir saldırgan veya başka bir kötü niyetli varlık tarafından oluşturulmadığı sürece dosyaların aynı olduğu anlamına gelir . Herhangi iyi tasarlanmış bir şifreleme karma fonksiyonu ile rastgele çarpışma olasılığı, pratikte ve aktif bir saldırganın yokluğunda göz ardı edilebilecek kadar küçüktür.

Ancak, genel olarak, hayır, aynı karmaya sahip iki rastgele dosyanın kesinlikle aynı olduklarını söyleyemeyiz .

Kriptografik bir karma işlevinin çalışma şekli isteğe bağlı uzunluktaki bir girdi almak ve girdiden hesaplanan sabit uzunlukta bir değer çıkarmaktır. Bazı karma işlevler, aralarından seçilebilecek birden fazla çıktı uzunluğuna sahiptir, ancak çıktı hala bir dereceye kadar sabit uzunlukta bir değerdir. Bu değer birkaç düzine bayta kadar çıkacaktır; günümüzde ortak kullanımda en uzun çıkış değerine sahip karma algoritmalar 512 bit çıkışa sahiptir ve 512 bit çıkış 64 bayttır.

Bir karma işlevine giriş, karma işlevinin çıkışından daha uzunsa, girişi çıkışa sığdırmak için bazı doğrulukların kaldırılması gerekir. Sonuç olarak, aynı çıktıyı üreten çıktının uzunluğundan daha büyük uzunluklarda girdiler mevcut olmalıdır.

Mevcut işgücü olan SHA-256'yı ele alalım. 256 bit veya 32 baytlık bir karma üretir. Her biri tam olarak 32 bayt uzunluğunda ancak farklı olan iki dosyanız varsa, bunlar (algoritmadaki herhangi bir kusur olmadığı varsayılarak) dosyaların içeriğinden bağımsız olarak farklı değerlere sahip olmalıdır; matematiksel anlamda, karma, bir 256 256 giriş boşluğunu 2 256 çıkış alanına eşleyen , çarpışma olmadan yapılması mümkün olan bir fonksiyondur . Bununla birlikte, her biri 33 bayt uzunluğunda iki dosyanız varsa, her iki dosya için de aynı 32 baytlık çıktı karma değerini veren bazı girdilerin bir arada bulunması gerekir , çünkü şimdi 2 264 giriş alanını 2 256 ile eşleştiriyoruz.çıkış alanı; Burada, her çıktı için ortalama olarak 2 8 girdi olması gerektiğini kolayca görebiliriz . Bunu daha da ileri götürün ve 64 baytlık dosyalar ile her çıktı için 2 256 giriş olmalı !

Şifreleme sağlama işlevleri, belirli bir çıktı veren bir girdi oluşturmak veya aynı çıktıyı veren iki girdi oluşturmak için hesaplama açısından zor olacak şekilde tasarlanmıştır . Bu, preimage saldırı direnci veya çarpışma saldırı direnci olarak bilinir . Bu çarpışmaları bulmak imkansız değil ; sadece gerçekten, gerçekten, gerçekten, gerçekten zor olması amaçlanmıştır . (Özel bir çarpışma saldırısı olayı biraz doğum günü saldırısıdır .)

Bazı algoritmalar saldırganlara direnmede diğerlerinden daha iyidir. MD5 bu günlerde genellikle tamamen kırılmış olarak kabul edilir, ancak son baktım, hala ilk iyi ön direnç direnci sportif . SHA-1 de aynı şekilde etkili bir şekilde bozulmuştur; Önceden yapılan saldırılar kanıtlandı, ancak belirli şartlar gerektirdi, ancak bunun süresiz olarak olacağına inanmak için bir neden yok; demişler gibi, saldırılar her zaman daha iyi olur, daha da kötüleşmezler. SHA-256/384/512, halen birçok amaç için güvenli olduğuna inanılmaktadır. Bununla birlikte , yalnızca kötü niyetli olmayan bir şekilde hazırlanmış işlerin geçerli olup olmadığını görmekle ilgileniyorsanız , geçerlidosyalar aynıdır, o zaman bunlardan herhangi birinin yeterli olması gerekir, çünkü giriş alanı zaten rastgele çarpışmalarla ilgilendiğiniz için yeterince kısıtlanmıştır. Dosyaların kötü amaçlı hazırlanmış olduğuna inanmak için herhangi bir nedeniniz varsa, o zaman en azından şu anda güvenli olduğuna inanılan ve SHA-256'daki alt çubuğu koyan bir şifreleme karma işlevi kullanmanız gerekir.

İlk ön tahmin, belirli bir çıktı karma değeri veren bir girdi bulmaktır; ikinci ön tanım, belirtilen çıktıyla aynı çıktıyı veren bir girdi bulmaktır; çarpışma aynı çıktıyı veren iki girdiyi bulmaktır, ne olduğuna bakılmaksızın ve bazen girdilerin ne olduğuna bakılmaksızın.

Tüm bunlar , dosyaların çok farklı veri gösterimlerine sahip olabileceğini ve yine de aynı şekilde görüntülenebileceğini unutmamak için önemlidir . Dolayısıyla , kriptografik karmaları eşleşmese de aynı görünebilir , ancak kareler eşleşirse aynı görünmeleri çok muhtemeldir .


2
Karma eşleşirse, o zaman dosyalar kasıtlı bir çarpışmanın sonucudur veya değiller ve aynı olmaları garanti edilir. Kazara çarpışma olasılığı tamamen teoriktir. “Eğer karışmalar eşleşiyorsa, aynı görünmeleri çok muhtemeldir” diyen yanıltıcıdır: eğer bir kötülük varsa ve bir çarpışma durumu varsa, o zaman aynı olmaları muhtemel değildir ve aksi takdirde olasılık etkin bir şekilde sıfırdır. Savunması gereken bazı düşük olasılık olayı değil.
Gilles

9
@Gilles: Aksine. Michael'ın ifadeleri tam olarak doğru ve "garantili" yanıltıcı (ya da aslında yanlış). Aynı hashete sahip iki dosyanın eşleşmemesi (kötü amaçlı değişiklik yapılmasına rağmen) olasılığı çok düşüktür ve uygulamada ihmal edilebilir. Ancak, sıfır değildir . Bir şans olduğunu Sebebi ne olursa olsun farklı girişler, genellikle yoktur edecek hatta bir olasılıkla ile muhtemelen aynı karma üretmek ve çok ^ -128 2'den yüksek (kriptografik algoritmalar, algortihm ince, bilinmeyen bir şekilde kusurlu olabilir siyah sanat ve % 100 emin olmanın hiçbir yolu yok).
Damon,

5
@Gilles " etkili bir şekilde sıfır " hala sıfır değildir ; bu, iki farklı veri setinin aynı karışma ile sonuçlanacağına dair bazı (kuşkusuz küçük) bir olasılık olduğu anlamına gelir. Buna karşı tartışamazsın.
Attie

5
@Attie: İlişkili olmayan iki dosyanın aynı değere sahip olma olasılığı, yanlış gidebilecek birçok şeyin (örneğin diskteki dosyaları bozan rastgele bit hataları), rastlantısal eşleşmelere karşı korumaya değmeyecek ihtimalin çok altındadır. Kasten tasarlanan kibritlere karşı korunma faydalı olabilir, ancak kazara kibritler o kadar mümkün değildir ki, onlara karşı koruma için harcanan herhangi bir çaba başka yerlerde daha iyi harcanabilir.
supercat

3
@ Gilles yanlış. Bir şans olduğunu tek bir nefeste ne kadar küçük, söyleyemezsin Eğer kazara çarpışma çarpmayacak hemen ertesi Yetki sonra ortaya çıkabileceği, değerlendir. Bunun, tamamen yanlış olduğu bilinen karma algoritmasının bir özelliğini ima ettiği için oldukça yanıltıcı olduğunu söylemek.
iheanyi

10

Bu bir olasılık oyunudur ... karma değerler sınırlı sayıda değeri temsil edebilir.

Varsayımsal (ve çok zayıf) bir 8-bit karma algoritma düşünürsek, bu 256 farklı değer gösterebilir. Algoritma yoluyla dosyaları çalıştırmaya başladığınızda, karmaşa almaya başlayacaksınız ... ama çok geçmeden " karma çarpışmalar " görmeye başlayacaksınız . Bu, iki farklı dosyanın algoritmaya beslendiği ve çıktısıyla aynı karma değeri ürettiği anlamına gelir . Açıkça burada, karma yeterince güçlü değil ve " eşleşen karma içeren dosyaların aynı içeriğe sahip olduğunu" iddia edemeyiz .

Karma büyüklüğünü genişletmek ve daha güçlü şifreleme karma algoritmaları kullanmak, çakışmaları azaltmaya önemli ölçüde yardımcı olabilir ve aynı karma değerine sahip iki dosyanın aynı içeriğe sahip olduğuna güvenimizi artırabilir.

Bu,% 100 kesinliğe asla ulaşamayacağımızı söyledi - aynı hash içeren iki dosyanın aynı içeriğe sahip olduğundan kesinlikle emin olamayız .

Çoğu / birçok durumda bu iyi ve hashları karşılaştırmak " yeterince iyi ", ancak bu sizin tehdit modelinize bağlı.

Sonuç olarak, kesinlik düzeylerini yükseltmeniz gerekirse, aşağıdakileri yapmanızı öneririm:

  1. Güçlü karma algoritmalar kullanın ( potansiyel olarak kötü niyetli kullanıcılara karşı korunmanız gerekirse, MD5 artık yeterli sayılmaz)
  2. Birden fazla karma algoritma kullanın
  3. Dosyaların boyutunu karşılaştırın - ekstra bir veri noktası potansiyel çarpışmaları belirlemeye yardımcı olabilir, ancak gösterilen MD5 çarpışmasının verilerin uzunluğunu değiştirmesi gerekmediğine dikkat edin .

% 100 emin olmanız gerekiyorsa, elbette bir karma ile başlayın, ancak karma eşleşirse, iki dosyanın byte bayt karşılaştırmasıyla izleyin.


Ek olarak, başkalarının da belirttiği gibi ... Word ve Excel gibi uygulamaların ürettiği belgelerin karmaşıklığı, metnin, sayıların, görünür mizanpajın aynı olabileceği ancak dosyada depolanan verilerin farklı olabileceği anlamına gelir.

Excel bu konuda özellikle kötü - sadece bir elektronik tablo açmak ( hiçbir şey yapmamak ) farklı içeriğe sahip yeni bir dosya oluşturabilir.


6
MD5 artık kriptografik olarak yeterli sayılmaz , ancak benzersizlik kontrolü için (kötülük olmadığında, örneğin girişi denetlerseniz) hoş ve hızlıdır (ve 128 bit bol olmalıdır)
Chris H

4
" onu iki bayt bayt karşılaştırması ile takip edin. " Eğer bir dosya karşılaştırması yapacaksanız, ilk önce bunu da yapabilirsiniz ... hesaplamak için her bir dosyayı okumaya gerek yok her iki dosyayı da karşılaştırmak için yeniden okumak için hash'ler!
TripeHound

3
@TripeHound Dosyaların hem yerel olup olmadığına, hem de birinin bir hashına sahip olup olmadığına ve sisteme yeni bir dosya getirdiğine, yeni dosyanın yine de bir veritabanında saklanan bir hash'a ihtiyacı varsa, vb. Durumunuza uygun bir çağrı yapın.
Attie

5
Hayır, bir olasılık oyunu değil. Yanlışlıkla bir çarpışma olasılığının yanlış olduğunu düşünüyorsunuz. Sadece olmayacak. Karşılaştırma sırasında biraz saygısız olmak daha olasıdır. Öte yandan, bazı senaryolarda kasıtlı bir çarpışma olabilir ve bu bir olasılık oyunu değildir.
Gilles

3
@ mbrig: 32 bitlik bir hash, kazayla yanlış uyuşma riski taşır. Ancak, 128 veya 256 bit kullanmak, çok büyük bir fark yaratıyor. 128 bit ile, her biri milyarlarca terbiyeli büyüklükte, gerçekten rasgele belgeler yazan bir maymunun aynı hash ile iki belge yaratma şansı yaklaşık% 0,3 olacaktır. 256 bitle, milyarlarca maymun saniyede bir milyar adet terbiyeli büyüklükte rastgele belge yazabilirse bile, milyarlarca yıl boyunca tesadüfen eşleşen hash değerlerine sahip olan milyarlarca olmayan belgenin herhangi birinin kaybolması olasılığı küçük olacaktır.
supercat

6

İki dosya aynı MD5 karma değerine sahipse ve ikisi de özel hazırlanmış değilse, o zaman aynı olurlar. Aynı MD5 karması ile dosyaları işlemek ne kadar zor dosya formatına bağlıdır, Excel dosyaları ile ne kadar kolay olduğunu bilmiyorum.

Bu nedenle, sadece yalan söyleyen ve kopyaları bulmak isteyen kendi dosyalarınız varsa, MD5 güvendedir. Dosyalardan birini yazdıysanız ve diğer dosya şüpheli bir kökene sahipse, MD5 hala güvendedir (aynı MD5 sağlama toplamıyla farklı dosyaları almanın tek yolu her iki dosyayı da oluşturmaktır). Güvenmediğiniz biri size bir bütçe teklifi gönderirse ve daha sonra aynı olduğunu iddia ettiği başka bir dosya gönderirse, MD5 yeterli olmayabilir.

Herhangi bir riski önlemek için, MD5 yerine SHA-256 veya SHA-512 kullanın. İki dosya aynı SHA-256 karmaya sahipse, aynıdırlar. Aynı şey SHA-512 için de geçerli. (Farklı olmaları için teorik bir olasılık var, ancak bunun yanlışlıkla gerçekleşmesi olasılığı, bilgisayarınızın doğrulama sırasında bir miktar çevrilme olasılığından çok daha azdır. Birisi için kasıtlı olarak iki dosyayı işleyen biri için Aynı karma, hiç kimse bunu SHA-256 veya SHA-512 için nasıl yapacağını bilmiyor.)

İki Excel dosyasının farklı karmaları varsa, bunlar farklıdır, ancak ne kadar farklı olduklarını bilmenin yolu yoktur. Aynı verilere sahip olabilirler ancak farklı biçimlendirmeler yapabilirler ya da sadece özelliklerde farklılık gösterebilirler ya da farklı sürümler tarafından kaydedilmiş olabilirler. Aslında Excel, Word gibi bir şeyse, yalnızca bir dosyayı kaydetmek meta verilerini günceller. Yalnızca sayısal ve metin verilerini karşılaştırmak ve biçimlendirmeyi ve özellikleri yok saymak istiyorsanız, elektronik tabloları karşılaştırmak için CSV'ye dışa aktarabilirsiniz.

Mevcut Unix / Linux araçlarına sahipseniz, cmpiki dosyayı karşılaştırmak için kullanabilirsiniz . Aynı makinedeki iki dosyayı karşılaştırmak için sağlama toplamları yalnızca işleri daha karmaşık hale getirir.


İki dosya aynı MD5 karma değerine sahipse ve ikisi de özel hazırlanmış değilse, o zaman aynı olurlar. Bu yanlış. Olası mesajların sonsuzluğu vardır, ancak yalnızca 2 ^ 64 olası 64 bitlik karmalar vardır. Buna "güvercin deliği prensibi" denir : "güvercin deliği prensibi, neşyaların mkonteynere konması durumunda n > men az bir kabın birden fazla eşya içermesi gerektiğini " belirtir . 2 ^ 64 mesajdan daha fazla mesaj oluşturursanız, herhangi bir "özel işçilik" olmadan çarpışmalarınız olacaktır. Ve sadece 2 ile olabilir .
Andrew Henle

@AndrewHenle, MD5 64 bit değildir, 128'dir. Kazara çarpışma meydana gelirse, bizi evrenin ısı-ölüm zaman çizelgelerine götürürse, bunun sadece akademik (dolayısıyla işe yaramaz) bir tanımı için "mümkün" olur.
Charles Duffy

@CharlesDuffy Hashinin rasgele dağıldığını varsayıyorsunuz. Değil.
Andrew Henle

Etkili bir şekilde rastgele dağılıma eşdeğer olmak, iyi bir şifreleme karması neyin oluşturulduğunun tanımının bir parçasıdır - bir nedenden ötürü çok fazla karıştırma turuna sahipsiniz. Elbette, zayıf karma algoritmalar var, ancak bu zayıf noktalara odaklanmak bizi kasıtlı saldırılar etrafında daha önce belirtilen uyarılara götürür. (Ya da MD5’in sadece etkili bir şekilde rastgele 64 bit içerdiği gösterildi mi diyorsunuz? Devam etmediğimi itiraf edeceğim, bu yüzden makul - bağlantı lütfen?)
Charles Duffy

@AndrewHenle Bir çarpışmanın matematiksel olarak imkansız olduğunu, yanlış olacağını ancak burada ilgili olmadığını belirtir. Olmadığını, bunun doğru olduğunu belirtiyorum. Yorumunuz, anlaşmayı tamamen değiştirecek şekilde yanlış. 2 ^ 128 olası MD5 karması vardır, 2 ^ 64 değil. Bu, bir çarpışma oluşturmak için emin olmak için 2 ^ 128 kareler oluşturmanız gerekeceği anlamına gelir. Aslında, doğum günü paradoksuna göre, 2 ^ 64 size daha önce oluşturulmuş bir karma ile değil, sizin yarattığınız karmalar arasında çarpışma şansı verirdi. Fakat çarpışmayı nasıl yapacağımızı bildiğimiz için bu çok fazla.
Gilles

6

Kısa cevap: Bir kriptografik hash Eğer eşleşen karmaları ile dosyalar aynı olduğunu makul emin olmak yardımcı gerekiyordu. Kasten hazırlanmış olmadıkça, benzer hash değerlerine sahip iki biraz farklı dosyanın şansı gülünç derecede küçüktür. Ancak, kasıtlı olarak tahrif edilebilecek dosyaların karşılaştırılması ve doğrulanması söz konusu olduğunda, MD5 kötü bir seçimdir. (SHA3 veya BLAKE2 gibi başka bir karma işlevi kullanın.)

Uzun cevap: İdeal bir karma işlevi, her bir benzersiz veri parçası için neredeyse benzersiz bir şifreleme karma oluşturma özelliğidir. Başka bir deyişle, bu evrende karma değerleri çarpışan iki dosya olduğunu kesinlikle biliyoruz, bu iki dosyanın doğal olarak bir araya gelme şansı gülünç derecede küçük.

On yıl önce, MD5’ten olabildiğince uzak durmam gerektiğine karar verdim. (Tabii ki, düne kadar, bunu yapmamın yanlış nedenini hatırladım; on yıl uzun bir zamandı, görüyorsunuz. Bu cevabı neden hatırlayıp düzenlediğimi hatırlamak için geçmiş notlarımı tekrar ziyaret ettim.) 1996'da MD5’in bulunduğunu gördünüz. çarpışma saldırılarına duyarlı olun. 9 yıl sonra, araştırmacılar aynı karma ile bir çift PostScript belgesi ve (ouch!) X.509 sertifikası yaratabildiler! MD5 açıkça kırıldı. (Megaupload.com aynı zamanda MD5 kullanıyordu ve o sırada beni rahatsız eden karmaşanın etrafında bir sürü hantal panki vardı.)

Bu yüzden, MD5'in (ve hala) benign dosyaları karşılaştırmak için güvenilir olmasına rağmen, kişinin tamamen kullanmayı bırakması gerektiği sonucuna vardım. Buna güvenmenin, hoşgörü ve yanlış güvene dönüşme riski taşıdığını düşünmüştüm: MD5 karmalarını kullanarak dosyaları karşılaştırmaya başladığınızda, bir gün güvenlik son izini unutursunuz ve aynı hastayı elde etmek için kasten hazırlanmış iki dosyayı karşılaştırırsınız. Ek olarak, CPU'ların ve kripto işlemcilerin buna destek vermesi pek olası değildi.

Ancak, orijinal posterin MD5 kullanmak için daha az nedeni var, çünkü:

  1. Bir kişi yalnızca iki dosyayı karşılaştırdığı sürece, bayt bayt karşılaştırması aslında birinin kendi MD5 karmasını oluşturmaktan daha hızlıdır. Üç veya daha fazla dosyayı karşılaştırmak için ... şimdi meşru bir nedeniniz var.
  2. OP, "bunu gözden geçirme ve bir sürü eklenti kurmadan gözden geçirme yollarını" belirtti. Windows PowerShell'in Get-FileHash komutu SHA1, SHA256, SHA384, SHA512 ve MD5 karmalarını üretebilir. SHA hash işlevlerini donanım destekli modern bilgisayarlarda, bunları oluşturmak daha hızlıdır.

6
İstediğiniz uzunlukta kendi şifreleme karma işlevinizi oluşturabilirsiniz, doğru; ama sonra sabit bir uzunluğa sahiptir ve yine de güvercin deliği prensibi geçerlidir. Genel cevap şudur: "Sadece karmaları karşılaştırarak, iki dosyanın aynı olduğundan emin olamazsınız".
Kamil Maciorowski

2
@KamilMaciorowski Teoride, evet yapabilirim. Ismarlama karma fonksiyonum sadece en büyük dosyanın bir kopyasını oluşturabilir. Ancak bunu daha fazla tartışmaya ilgim yok; Gerçek şu ki, daha akıllı olduğunuzu ve geri teptiğinizi kanıtlamak için nitpicking anlamına gelen bir neden için düşürüldünüz. Şimdi oylamayı geri alamazsın.

@KamilMaciorowski ile aynı fikirdeyim ... Bu bir olasılık oyunudur ... tek bir karma kullanarak , eşleşen hashli dosyaların aynı olduğundan " makul derecede emin olabilirsiniz ", ancak% 100 garanti yoktur. Daha iyi algoritmalar kullanmak veya birden fazla algoritma kullanmak güveninizi artırabilir - dosya boyutlarını karşılaştırmak bile yardımcı olabilir ... ancak bayt bayt denetlemeden asla% 100 güvende olamazsınız.
Attie

1
@Attie Huh! Aslen demek istediğim bu. Teşekkürler. 🙏 Sadece “makul derecede kendinden emin olabilirsiniz” gibi şık ifadelere aşina değilim. Üzgünüm. 😜 Yine de, bu yüzden düzenleme butonumuz var. Şahsen ben hiçbir zaman iyi bir cevabı çöpe alamazdım çünkü içinde bir kelime yanlış. Düzenliyorum.

1
"İyi bir cevabı silme" hakkında: lütfen ilk önce bunun bir yazım hatası olmadığını ve gerçekten demek istediğinizi temin ettiğimi not edin; daha sonra reddedildi ve aynı zamanda size geri bildirimde bulundum, cevabınızın daha iyi olacağını umarak nedenimi açıkladım. Öyle oldu, bu yüzden aşağı oyum artık yok. Temelde cevabınızla ilgili neyin yanlış olduğunu düşündüğümü söyledim, Attie açıklığa kavuşturmaya yardımcı oldu, cevabı geliştirdiniz. Benim açımdan hepimiz bu durumu doğru bir şekilde hallettik ve tüm hikaye çok iyi sonuçlandı. Teşekkür ederim.
Kamil Maciorowski

5

2 excel belgesine sahibim ve dosya adının yanı sıra tamamen aynı olup olmadıklarını kontrol etmek istiyorum.

Pratik bir bakış açısına göre, farklı olup olmadıklarını bulmak için dosyaları doğrudan karşılaştırmak, her dosya için bir sağlama hesaplamaktan ve ardından bu hastayı karşılaştırmaktan daha hızlı olacaktır.

Karmaları hesaplamak için her iki dosyanın içeriğinin tamamını okumak zorundasınız.

Doğrudan karşılaştırma yoluyla aynı olup olmadıklarını belirlemek için, her iki dosyanın içeriğini eşleşene kadar okumalısınız. Bir fark bulduğunuzda, dosyaların aynı olmadığını ve her iki dosyadan da daha fazla veri okumak zorunda olmadığınızı bilirsiniz.

Ve her ikisini de yapmadan önce, iki dosyanın boyutlarını karşılaştırabilirsiniz. Boyutlar farklıysa, içerik aynı olamaz.


Bir fiziksel sürücüde iki dosya kullanırken, her bir dosyadaki G / Ç hızını ayrı ayrı tutabilen bir karma işlevi kullanmak, iki dosyayı okumak arasında geçiş yapmaya gerek kalmayacağından, dosyaları karşılaştırmaktan biraz daha hızlı olabilir. Yer karmaları gerçekten parlıyor, ancak belleğe sığmayacak kadar büyük birçok dosyayı içeren karşılaştırmalar yapmaya çalışıyor. Bunların hepsinin uyuşup uyuşmadığını bulmak isteseniz bile, dosya 1'den dosya 2'ye, ardından dosya 1'den dosya 3'e, sonra dosya 1'den dosya 4'e, vs. tüm hash'leri hesaplamaktan neredeyse iki kat daha yavaş olabilir.
supercat

@supercat Dosyalar, MB veya daha büyük boyuttaki parçalar halinde okunursa, dosyalar arasında geçiş fark edilmez. Ve eğer bir iş akışı çoğaltılmış dosyaları bulmak için bir grup dosyayı karşılaştırmayı içeriyorsa, karma her dosyanın yazıldığı gibi hesaplanabilir - bunu yaptığınız için hemen hemen ücretsiz olarak yapılabilir.
Andrew Henle

Dosyaların büyük bölümlerini tamponlamak için yeterli alan varsa, anahtarlama zamanlarının bir sorun olması gerekmez, aksi takdirde olabilirler. Dosyaları yazarken karmaları hesaplamaya gelince, bu dosyaların değiştirilmeden veya en azından saklanan karmaları geçersiz kılmadan değiştirilemeyeceğinin garantisi olabilirse, bu iyi olabilir. Biri sadece kayıtlı hash değerleri bakarak, yedekli dosyaları yedeklemek engellenmeye çalışılıyor varsa bir kazayla-bozuk dosyayı yedeklemek ama bozuk dosya olmayan bozuk dosyaları yedeklemek rahatsız bir tane yol açabilir gerektiğini eşleşen ancak değil .
supercat,

"Bir kez bir fark bulduğunuzda, dosyaların aynı olmadığını bilirsiniz" - mutlaka değil. XLSX dosyaları, hala aynı içeriğe sahip olan içeriği farklı sırada depolayabilecek ZIP dosyalarıdır. Ancak, bunları açıp her bir dosyayı karşılaştırsanız bile, XLSX dosyası, içeriği etkilemeden örneğin farklı satır sonlarına sahip olabilecek XML belgeleri içerir.
Thomas Weller

5

MD5 veya SHA gibi karma değerlerin sabit uzunlukları vardır, 300 alfanümerik karakter olduğunu söylerler (gerçekte daha kısadırlar ve tüm alfanümerik karakter kümesini kullanmazlar).

Diyelim ki dosyalar alfasayısal karakterlerden ve 2GB boyutunda.

Olası karma değerlerden çok daha fazla dosya (2GB boyutunda) olduğunu kolayca görebilirsiniz. Güvercin deliği ilkesi bazı (farklı) dosyaların aynı karma değerlere sahip olması gerektiğini söylüyor.

Ayrıca, paramparça.io 1'de gösterildiği gibi iki farklı dosyaya sahip olabilirsiniz: tamamen farklı.

1 SHA1, md5'ten daha "güçlü" bir karma algoritmasıdır


Kazara çarpışma olasılığı göz önüne alınamayacak kadar düşüktür. Kasıtlı çarpışma riski MD5 için de geçerlidir ve burada korkunç derecede alakalı olmayan SHA-1'den daha kötüdür.
Gilles

4

HAYIR. Farklı değerler dosyaların farklı olduğunu garanti eder. Aynı değerler, dosyaların aynı olmalarının garantisi değildir. CRC16 kullanarak örnekler bulmak nispeten kolaydır.

Çağdaş karma düzenleri ile olasılık dengesinde onlar aynıdır.


1
Soru, yanlışlıkla çarpışma riski olmayan MD5 ile ilgilidir. Kasten çarpışma riski var, ancak bu bir olasılık meselesi değil.
Gilles

1
Aynı zamanda farklı adlara sahip excel elektronik tablolarla ilgili, bayt karşılaştırması için bir baytın seçenek olamayacağı kadar büyük olabilirler mi? İki karma şema birlikte kesinlik sağlayacaktır.
mckenzm

2
@Gilles Tüm hash kodları , tanım gereği, yanlışlıkla çarpışma riskine sahiptir. Bundan kurtulmanın tek yolu tüm dosyayı karma kod olarak kullanmak. Yorumunuz anlam ifade etmiyor.
user207421

3

Sorunuz geriye doğru olsa da, hash'in aynı verilere sahip oldukları anlamına geldiğini varsayalım (bu% 100 garantili değildir, ancak her saniye dosyaları bir çarpışmaya çarpmamaları için bir ömür boyu karşılaştırmak için yeterince iyidir). Aynı verilere sahip olmanın aynı karmaya sahip olacağı anlamına gelmez. Yani hayır - bir excel dosyasındaki verileri, dosyayı karmaştırarak başka bir excel dosyasındaki verilerle karşılaştıramazsınız, çünkü iki dosyanın temelindeki veriler farklı olmadan farklılaşabileceği birçok yol vardır. Açık bir yol - veri XML olarak saklanır, her hücrenin kendi XML düğümü vardır. Bu düğümler farklı sırada saklanırsa, veriler aynıdır ancak dosya farklıdır.


3

Diğer cevapları eklemek için, burada aynı MD5 karması ve farklı içeriğe sahip dosya çiftlerinin birçok örneği bulunmaktadır.


Bağlantı sadece bir cevap, ama ilginç.
Thomas Weller

2

Bu OP'nin cevabı verilmiştir, ancak bir özeti faydalanabilir.

İki dosyanın aynı olup olmadığını kontrol etmek istiyorsanız, birçok dosya ve karmaşanın kontrolünüz altında olup olmamasına bağlıdır.

Eğer dosyaları kendiniz dosyalardan yaratıyorsanız ve başka hiç kimsenin kasten yanlış sonuca varmanızı sağlamak için fırsat / beceri / motivasyona sahip olmadığından kesinlikle emin değilseniz, MD5 ve SHA1 gibi "bilinen kırık" kareler bile neredeyse yeterli olacağı kesin. Ama yani bu sen milyonlarca yıldır yüksek hızda dosya oluşturabilir ve istediğiniz hala aslında farklıdır ama aynı karmaya sahip herhangi iki dosya ile bitirmek pek mümkün. Neredeyse kesinlikle güvenli.

Bu, PC'nizdeki veya dosya sunucunuzdaki iki dizinin aynı içeriğe sahip olup olmadığını, bir dizindeki herhangi bir dosyanın tam kopya olup olmadığını, vb. tasarlandı / yasa dışı bir şekilde değiştirildi ve doğru sonuçları elde etmek için karma uygulamanıza / yardımcı programınıza güveniyorsunuz.

Dosyalardan birinin (veya önceden hesaplanmış bir karma değerinin) sizi yanlış bir sonuca kandırmak için manipüle edildiği veya değiştirildiği bir senaryodaysanız, daha güçlü (kırılmamış) bir karmaşaya ve / veya başka bir güvenliğe ihtiyacınız vardır. Örneğin, bir dosyayı indirip bir karmaşayı inceleyerek geçerli olup olmadığını kontrol ederseniz, saldırgan doğru bir karmaşayla hatalı bir dosya tasarlayabilir veya web sitesine "doğru bir karma yerleştirmek için saldırabilir" olabilir. " (beklenen değer. Bu daha geniş güvenlik sorunlarıyla ilgilidir.


2

Windows komut satırında, compiki dosyanın tamamen aynı olup olmadığını belirlemek için yardımcı programı kullanabilirsiniz . Örneğin:

comp fileone.xls filetwo.xls

1

Karma değerler aynı olduğunda, dosya içeriğinin 1: 1 aynı olduğu anlamına mı gelir?

Hayır. Eğer hashlar farklıysa, içeriklerin farklı olduğu anlamına gelir. Eşit hashcode'lar eşit içerik anlamına gelmez. Bir karma kodu, tanımı gereği, büyük bir alanın daha küçük bir aralığa indirgenmesidir: ima edilen, eşit olmayan içerik üzerindeki kodların eşit olabileceğidir. Aksi halde, onları hesaplamanın bir anlamı olmayacaktı.


Aksi halde, onları hesaplamanın bir anlamı olmayacaktı. Eğer matematik yasalarını ihlal ettiyseniz ve rastgele verileri sıkıştırabilen, güvercin deliği ilkesini ihlal edebilen kayıpsız bir sıkıştırma işlevi icat ettiyseniz, onu kullanmak çok değerli olacaktır! 128-bit hash eğer çok kullanışlı olacağını vermedi benzersiz bir dosyanın tüm içeriğini temsil eder. Karma dosyayı dosyaya geri döndürecek bir dekompresyon işlevi olmasa bile, matematiksel olarak imkansız bir çarpışma içermeyen hash'ın olması, örneğin VM görüntülerinde olduğu gibi güvenilmeyen verilerde dup-bulmayı hızlandırmak için iyi olurdu.
Peter Cordes

"Karma değerler farklıysa, içeriklerin farklı olduğu anlamına gelir." Şart değil. XLSX dosyaları ZIP dosyalarıdır ve aynı içeriğin farklı dosya sırasına kaydedilmesi mümkün olacaktır.
Thomas Weller

1

Bu cevap, gerçekleşebilecek ya da olamayacak senaryoların ve uygulayabileceğiniz gerekçelerin kullanışlı bir haritası olmalıdır. Karma işlevlerinin neden bu şekilde çalıştığını öğrenmek için diğer yanıtlara bakın.


Bir karma işlevi seçip ona bağlı kaldıktan sonra, göz önünde bulundurmanız gereken tüm kombinasyonlardır:

          |    identical   |   different    |
          |   hash values  |  hash values   |
----------+----------------+----------------+
identical |   can happen,  | cannot happen, |
  files   |     common     |   impossible   |
----------+----------------+----------------+
different |   can happen,  |   can happen,  |
  files   |      rare*     |     common     |
----------+----------------+----------------+

* rare, unless whoever generates (at least one of) the files
  purposely aims at this scenario

Aynı dosyaların farklı karma değerler ürettiği senaryo, kesinlikle imkansız olanıdır.


Her zaman geçerli olan iki sebep :

  • Eğer dosyalar aynıysa , kesin değerler kesinlikle aynıdır .
  • Karma değerler farklı ise dosyaları farklıdır kesin .

Sıkı olmayan iki sebep :

  • Eğer dosyalar farklıysa, karma değerler muhtemelen farklıdır.
  • Karma değerler aynıysa, o zaman dosyalar muhtemelen aynıdır.

0

Amaçlarınız için, evet, özdeş kareler özdeş dosyalar anlamına gelir.

Diğer cevaplar açıkça belirtildiği gibi, aynı hash ile sonuçlanan 2 farklı dosya oluşturmak mümkündür ve MD5 bu konuda özellikle sağlam değildir.

Bu nedenle, çok sayıda Excel belgesini karşılaştırmayı planlıyorsanız veya birinin karşılaştırmayı değiştirmek isteyebileceğini düşünüyorsanız, daha güçlü bir karma algoritması kullanın. SHA1, MD5'ten daha iyidir. SHA256 tekrar daha iyidir ve özel kullanımınız için size tam bir güven vermelidir.


-1

Dosyaları, özdeşleri aynıysa muhtemelen büyük olasılıkla aynıdır. Her iki dosyayı da aynı şekilde değiştirerek (örn. Aynı değeri kullanılmayan hücreye aynı değeri koyarak) sonra değiştirilen dosyaların karelerini karşılaştırarak güveni artırabilirsiniz. Önceden bilinmeyen bir şekilde değiştirilmiş bir dosya için kasıtlı bir çarpışma oluşturmak zordur.


Office dosyalarında depolanan ek veriler nedeniyle bu çalışmaz. Örneğin, imleci kaydetmeden önce aynı hücreye koymanız, tam zamanında kaydetmeniz vs. gerekir. Fakat o zaman bile, XLSX dosyaları dahili olarak zip dosyalarıdır, eğer bu algoritma ayrı ayrı dosyaları farklı bir sırayla saklarsa (ne olursa olsun), dosya aynı ama karma değil
Thomas Weller

-2

Buna pratik bir şekilde bakalım. "Haşolar aynı" demek yerine "İki dosyanın hashlarını hesaplayan ve aynı mı değil mi çıktısını çıkaran bir bilgisayar programı yazdım" derim ve programı iki dosya ile çalıştırırım. "özdeş". Bunu yapmasının birkaç nedeni olabilir:

Dosyalar aynı olabilir. Kodumda hatalar olabilir (aslında uygulamada gerçekleşmiş olan) memcmp ile değil strcmp ile iki uzun (256 byte) hash karşılaştırması yapıyordu: Her hashtaki ilk bayt sıfırsa ve karşılaştırma şansı "aynı" olur. Bu, bir donanım hatası olabilir (bir hafıza hücresine çarpan ve onu değiştiren kozmik ışın) veya eşzamanlı karma (karma çarpışma) olan iki farklı dosyadan oluşan nadir bir durum olabilir.

Özdeş olmayan dosyalar için, en olası neden programcı hatasıdır, daha sonra hastalları "yanlış" ile "doğru" arasında karşılaştırmanın sonucu olan bir boole değişkeni değiştiren kozmik ışın gelir ve çok daha sonra gelir. bir karmaşanın tesadüfü.

Her bir dosyayı toplayarak ve sunucuda zaten depolanmış aynı bir karma olan bir dosyayı kontrol ederek 10.000 kullanıcıdan aynı dosyaları yedeklemekten kaçınan kurumsal yedekleme sistemleri vardır. Bu nedenle, bir çarpışma durumunda, bir dosya yedeklenmez ve muhtemelen veri kaybına neden olur. Birisi, bir meteoritin sunucunuza çarpması ve bir dosyayı kaybetmektense tüm yedeklemeleri imha etmesinin daha muhtemel olduğunu hesapladı çünkü sağlama toplamı farklı bir dosyayla eşleşti.

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.