W praktyce tak, identyczny skrót kryptograficzny oznacza, że pliki są takie same, o ile pliki nie zostały spreparowane przez osobę atakującą lub inną złośliwą jednostkę. Szanse na przypadkowe kolizje z dowolną dobrze zaprojektowaną funkcją skrótu kryptograficznego są tak małe, że są nieistotne w praktyce i przy braku aktywnego atakującego.
Ogólnie jednak nie, nie możemy powiedzieć, że dwa dowolne pliki posiadające ten sam skrót zdecydowanie oznaczają, że są one identyczne.
Sposób działania funkcji skrótu kryptograficznego polega na pobieraniu danych wejściowych o dowolnej długości i wyprowadzaniu wartości wejściowej o stałej długości obliczonej na podstawie danych wejściowych. Niektóre funkcje skrótu mają wiele długości wyjściowych do wyboru, ale dane wyjściowe nadal są w pewnym stopniu wartością o stałej długości. Wartość ta może wynosić do kilkudziesięciu bajtów; Algorytmy mieszające o najdłuższej obecnie powszechnie używanej wartości wyjściowej mają 512-bitową moc wyjściową, a 512-bitowa moc wyjściowa to 64 bajty.
Jeśli wejście funkcji skrótu jest dłuższe niż wyjście funkcji skrótu, należy usunąć pewną wierność, aby dopasować dane wejściowe do wyniku. W związku z tym musi istnieć wiele danych wejściowych o długości większej niż długość danych wyjściowych, które generują takie same dane wyjściowe.
Weźmy jako przykład obecny koń pociągowy, SHA-256. Wysyła skrót 256 bitów lub 32 bajty. Jeśli masz dwa pliki o długości dokładnie 32 bajtów, ale różne, powinny one (zakładając brak błędów w algorytmie) mieszać różne wartości, bez względu na zawartość plików; pod względem matematycznym skrót jest funkcją odwzorowującą 2 256 przestrzeni wejściowej na 2 256 przestrzeni wyjściowej, co powinno być możliwe bez kolizji. Jednakże, jeśli masz dwa pliki, które są długo każde 33 bajtów, musi istnieć jakiś kombinacji wejść, które dają ten sam 32-bajtowy wartość hash wyjście dla obu plików, ponieważ jesteśmy teraz odwzorowanie 2 264 miejsca wejścia na o 2 256przestrzeń wyjściowa; tutaj możemy łatwo zauważyć, że średnio powinno być 2 8 wejść dla każdego wyjścia. Przejdźmy dalej, a przy plikach 64-bajtowych powinno być 2 256 wejść dla każdego wyjścia!
Kryptograficzne funkcje skrótu są tak zaprojektowane, że obliczeniowo trudno jest skomponować dane wejściowe, które dają określone dane wyjściowe, lub skomponować dwa dane wejściowe, które dają takie same dane wyjściowe. Jest to znane jako preimage resistance odporność lub ataku kolizja oporu . Nie jest niemożliwe znalezienie takich kolizji; po prostu ma być naprawdę, bardzo, bardzo, bardzo trudny. (Trochę szczególnym przypadkiem ataku kolizyjnego jest atak urodzinowy ).
Niektóre algorytmy są lepsze od innych w przeciwstawianiu się atakującym. MD5 jest obecnie ogólnie uważany za całkowicie zepsuty, ale ostatnio spojrzałem, nadal miał całkiem niezłą odporność na pierwszy obraz . SHA-1 jest podobnie skutecznie łamany; ataki preimage zostały wykazane, ale wymagają określonych warunków, choć nie ma powodu, aby sądzić, że tak będzie w nieskończoność; jak mówi przysłowie, ataki zawsze się poprawiają, nigdy się nie pogarszają. SHA-256/384/512 są obecnie nadal uważane za bezpieczne dla większości celów. Jeśli jednak chcesz tylko sprawdzić, czy dwa nie-złośliwie spreparowane, prawidłowepliki są takie same, to każdy z nich powinien być wystarczający, ponieważ przestrzeń wejściowa jest już wystarczająco ograniczona, aby najbardziej interesowały Cię losowe kolizje. Jeśli masz powód, by sądzić, że pliki zostały spreparowane złośliwie, musisz przynajmniej użyć kryptograficznej funkcji skrótu, która jest obecnie uważana za bezpieczną, co stawia dolny pasek na SHA-256.
Pierwszym przykładem jest znalezienie danych wejściowych, które dają określoną wartość skrótu wyjściowego; drugim obrazem jest znalezienie jednego wejścia, które daje takie samo wyjście, jak inne, określone wejście; kolizja polega na znalezieniu dwóch danych wejściowych, które dają takie same dane wyjściowe, bez względu na to, co to jest, a czasami bez względu na to, jakie są dane wejściowe.
To powiedziawszy, ważne jest, aby pamiętać, że pliki mogą mieć bardzo różne reprezentacje danych i nadal wyświetlać dokładnie to samo. Mogą więc wydawać się takie same, mimo że ich skróty kryptograficzne się nie zgadzają, ale jeśli skróty się zgadzają, bardzo prawdopodobne jest, że będą takie same.
cmp
systemem Unix lubfc
(porównanie plików) w systemie Windows.