Czy haszowanie pliku MD5 jest nadal uważane za wystarczająco dobrą metodę jednoznacznego identyfikowania go, biorąc pod uwagę wszystkie łamanie algorytmu MD5, problemy z bezpieczeństwem itp.? Bezpieczeństwo nie jest tutaj moim głównym zmartwieniem, ale unikalna identyfikacja każdego pliku tak.
jakieś pomysły?
Odpowiedzi:
Tak. MD5 został całkowicie zerwany z punktu widzenia bezpieczeństwa, ale prawdopodobieństwo przypadkowej kolizji jest nadal znikomo małe. Upewnij się tylko, że pliki nie są tworzone przez osobę, której nie ufasz i która może mieć złośliwe zamiary.
źródło
Ze względów praktycznych utworzony hash może być odpowiednio losowy, ale teoretycznie zawsze istnieje prawdopodobieństwo kolizji, ze względu na zasadę Pigeonhole . Posiadanie różnych skrótów z pewnością oznacza, że pliki są różne, ale uzyskanie tego samego skrótu niekoniecznie oznacza, że pliki są identyczne.
Używanie funkcji skrótu do tego celu - bez względu na to, czy bezpieczeństwo jest problemem, czy nie - powinno zatem zawsze być tylko pierwszym krokiem sprawdzania, zwłaszcza jeśli wiadomo, że algorytm skrótu łatwo tworzy kolizje. Aby wiarygodnie stwierdzić, czy dwa pliki z tym samym hashem są różne, trzeba by porównać te pliki bajt po bajcie.
źródło
MD5 wystarczy, jeśli nie masz przeciwnika. Jednak ktoś może (celowo) utworzyć dwa oddzielne pliki, które mają tę samą wartość (co nazywa się kolizją), co może, ale nie musi, stanowić problem, w zależności od konkretnej sytuacji.
Ponieważ wiedza o tym, czy znane słabości MD5 mają zastosowanie w danym kontekście, jest subtelną sprawą, nie zaleca się używania MD5. Bezpieczną odpowiedzią jest użycie odpornej na kolizje funkcji skrótu (SHA-256 lub SHA-512). Ponadto używanie MD5 to zły public relations (jeśli używasz MD5, bądź przygotowany na to, że będziesz musiał się usprawiedliwiać; podczas gdy nikt nie będzie kwestionował twojego używania SHA-256).
źródło
return 0;
w areturn 1;
). Jest to mało prawdopodobne, ale ryzyko kolizji z SHA-256 jest jeszcze mniejsze. Z matematycznego punktu widzenia nie można być pewnym, że dwa pliki, które mają skrót do tej samej wartości, są identyczne, ale nie można być tego pewnym, porównując same pliki, o ile do porównania używasz komputera. Chodzi mi o to, że nie ma sensu wychodzenie poza jakieś 99,999 .... 9% pewności, a SHA-256 już zapewnia więcej.MD5 może powodować kolizje. Teoretycznie, choć jest to bardzo mało prawdopodobne, milion plików z rzędu może wygenerować ten sam hash. Nie testuj swojego szczęścia i sprawdzaj kolizje md5 przed zapisaniem wartości.
Osobiście lubię tworzyć md5 z losowych ciągów, co zmniejsza narzut związany z haszowaniem dużych plików. Po znalezieniu kolizji wykonuję iterację i ponownie haszuję z dołączonym licznikiem pętli.
Możesz przeczytać o zasadzie szufladki .
źródło
Nie polecałbym tego. Gdyby aplikacja działała w systemie wieloużytkownikowym, mógłby być użytkownik, który miałby dwa pliki z tym samym hashem md5 (może być inżynierem i bawić się takimi plikami lub być po prostu ciekawy - można je łatwo pobrać z http: / /www2.mat.dtu.dk/people/S.Thomsen/wangmd5/samples.html , sam podczas pisania tej odpowiedzi pobrałem dwie próbki). Inną rzeczą jest to, że niektóre aplikacje mogą przechowywać takie duplikaty z dowolnego powodu (nie jestem pewien, czy istnieją takie aplikacje, ale istnieje taka możliwość).
Jeśli jednoznacznie identyfikujesz pliki wygenerowane przez twój program, powiedziałbym, że możesz użyć MD5. W przeciwnym razie poleciłbym każdą inną funkcję skrótu, w której nie są jeszcze znane żadne kolizje.
źródło
Osobiście uważam, że ludzie używają surowych sum kontrolnych (wybierz swoją metodę) innych obiektów, aby działać jako unikalne identyfikatory o wiele za dużo, kiedy naprawdę chcą mieć unikalne identyfikatory. Pobieranie odcisków palców do tego celu nie było intencją i prawdopodobnie będzie wymagało więcej myślenia niż użycie płynu lub podobnego mechanizmu integralności.
źródło
MD5 jest uszkodzony, zamiast tego można użyć SHA1 (zaimplementowany w większości języków)
źródło
Podczas mieszania krótkich (<kilku K?) Łańcuchów (lub plików) można utworzyć dwa klucze mieszające md5, jeden dla rzeczywistego ciągu, a drugi dla rewersu ciągu połączonego z krótkim asymetrycznym ciągiem. Przykład: md5 (reverse (string || '1010')). Dodanie dodatkowego ciągu gwarantuje, że nawet pliki składające się z serii identycznych bitów generują dwa różne klucze. Proszę zrozumieć, że nawet w tym schemacie istnieje teoretyczna szansa, że dwa klucze haszujące będą identyczne dla nieidentycznych ciągów, ale prawdopodobieństwo wydaje się niezwykle małe - coś w kolejności kwadratu prawdopodobieństwa kolizji pojedynczego md5 i oszczędność czasu może być znaczny, gdy liczba plików rośnie. Można również rozważyć bardziej rozbudowane schematy tworzenia drugiego ciągu,
Aby sprawdzić, czy nie występują kolizje, można uruchomić ten test na unikalność kluczy skrótu md5 dla wszystkich wektorów bitów w bazie danych:
wybierz md5 (bit_vector), count (*), bit_and (bit_vector) z db z
grupą bit_vector według md5 (bit_vector), bit_vector posiadający bit_and (bit_vector) <> bit_vector
źródło
Lubię myśleć o MD5 jako wskaźniku prawdopodobieństwa podczas przechowywania dużej ilości danych w plikach.
Jeśli skróty są równe, wiem, że muszę porównywać pliki bajt po bajcie, ale może się to zdarzyć tylko kilka razy z fałszywego powodu, w przeciwnym razie (skróty nie są równe) Mogę być pewien, że mówimy o dwóch różnych plikach .
źródło