Jedną z koncepcji, nad którą zawsze się zastanawiałem, jest użycie kryptograficznych funkcji skrótu i wartości. Rozumiem, że te funkcje mogą generować wartość skrótu, która jest unikalna i praktycznie niemożliwa do odwrócenia, ale oto, nad czym zawsze się zastanawiałem:
Jeśli na moim serwerze to w PHP produkuję:
md5("stackoverflow.com") = "d0cc85b26f2ceb8714b978e07def4f6e"
Gdy uruchomisz ten sam ciąg za pomocą funkcji MD5, uzyskasz ten sam wynik po instalacji PHP. Proces jest używany do wytworzenia pewnej wartości z jakiejś wartości początkowej.
Czy to nie oznacza, że istnieje sposób na zdekonstruowanie tego, co się dzieje i odwrócenie wartości skrótu?
Co jest takiego w tych funkcjach, że nie można odtworzyć wynikowych łańcuchów?
Odpowiedzi:
Materiał wejściowy może mieć nieskończoną długość, przy czym wyjście ma zawsze 128 bitów. Oznacza to, że nieskończona liczba ciągów wejściowych wygeneruje ten sam wynik.
Jeśli wybierzesz liczbę losową i podzielisz ją przez 2, ale zapiszesz tylko resztę, otrzymasz 0 lub 1 - odpowiednio parzyste lub nieparzyste. Czy można wziąć to 0 lub 1 i uzyskać oryginalny numer?
źródło
Gdyby funkcje skrótu, takie jak MD5, były odwracalne, byłby to przełom w historii algorytmów kompresji danych! Łatwo zauważyć, że gdyby MD5 było odwracalne, to dowolne fragmenty danych o dowolnym rozmiarze mogłyby być reprezentowane przez zaledwie 128 bitów bez utraty informacji. W ten sposób byłbyś w stanie zrekonstruować oryginalną wiadomość z numeru 128-bitowego, niezależnie od rozmiaru oryginalnej wiadomości.
źródło
W przeciwieństwie do tego, co podkreślają tutaj najczęściej popierane odpowiedzi, brak iniekcji (tj. Istnieje kilka ciągów haszujących z tą samą wartością) kryptograficznej funkcji skrótu spowodowanej różnicą między dużym (potencjalnie nieskończonym) rozmiarem wejściowym a stałym rozmiarem wyjściowym nie jest ważna kwestia - właściwie wolimy funkcje skrótu, w których takie kolizje występują tak rzadko, jak to tylko możliwe.
Rozważ tę funkcję (w notacji PHP jako pytanie):
Powoduje to dodanie spacji, jeśli ciąg jest zbyt krótki, a następnie zajmuje pierwsze 16 bajtów ciągu, a następnie koduje go jako szesnastkowy. Ma taki sam rozmiar wyjściowy jak hash MD5 (32 znaki szesnastkowe lub 16 bajtów, jeśli pominiemy część bin2hex).
Spowoduje to wyświetlenie:
Ta funkcja ma również tę samą właściwość braku iniekcji, co została podkreślona w odpowiedzi Cody'ego dla MD5: Możemy przekazywać ciągi dowolnego rozmiaru (o ile pasują do naszego komputera), a wypisze tylko 32 cyfry szesnastkowe. Oczywiście nie może być zastrzykiem.
Ale w tym przypadku znalezienie łańcucha, który odwzorowuje ten sam hash, jest trywialne (po prostu zastosuj
hex2bin
swój hash i masz go). Jeśli Twój oryginalny ciąg miał długość 16 (jak w naszym przykładzie), otrzymasz nawet ten oryginalny ciąg. Nic takiego nie powinno być możliwe w przypadku MD5, nawet jeśli wiesz, że długość wejścia była dość krótka (poza wypróbowaniem wszystkich możliwych wejść, aż znajdziemy pasujący, np. Atak siłowy).Ważnymi założeniami dla kryptograficznej funkcji skrótu są:
Oczywiście moja
simple_hash
funkcja nie spełnia żadnego z tych warunków. (W rzeczywistości, jeśli ograniczymy przestrzeń wejściową do „ciągów 16-bajtowych”, wówczas moja funkcja stanie się iniekcyjna, a zatem będzie nawet możliwa do udowodnienia odporność na drugi obraz przed obrazem i kolizje).Istnieją teraz ataki kolizyjne na MD5 (np. Możliwe jest utworzenie pary łańcuchów, nawet z danym prefiksem, które mają ten sam hash, co wymaga trochę pracy, ale nie jest to niemożliwe), więc nie powinieneś używać MD5 na wszystko, co krytyczne. Nie ma jeszcze ataku przedobrazowego, ale ataki będą lepsze.
Aby odpowiedzieć na rzeczywiste pytanie:
To, co skutecznie MD5 (i inne funkcje skrótu zbudowane na konstrukcji Merkle-Damgarda) skutecznie robi, to zastosowanie algorytmu szyfrowania z wiadomością jako kluczem i pewną ustaloną wartością jako „zwykłym tekstem”, używając otrzymanego zaszyfrowanego tekstu jako skrótu. (Wcześniej wejście jest uzupełniane i dzielone na bloki, każdy z tych bloków jest używany do szyfrowania wyjścia poprzedniego bloku, XOR z jego wejściem, aby zapobiec odwrotnym obliczeniom).
Nowoczesne algorytmy szyfrujące (w tym te używane w funkcjach skrótu) są wykonane w taki sposób, aby utrudnić odzyskanie klucza, nawet jeśli podano zarówno tekst jawny, jak i zaszyfrowany (lub nawet gdy przeciwnik wybierze jeden z nich). Robią to na ogół wykonując wiele operacji tasowania bitów w taki sposób, że każdy bit wyjściowy jest określony przez każdy bit klucza (kilka razy), a także każdy bit wejściowy. W ten sposób możesz łatwo odtworzyć to, co dzieje się w środku, tylko jeśli znasz pełny klucz i wejście lub wyjście.
W przypadku funkcji skrótu podobnych do MD5 i ataku typu preimage (z pojedynczym ciągiem mieszanym, aby ułatwić sprawę), masz tylko dane wejściowe i wyjściowe funkcji szyfrowania, ale nie masz klucza (właśnie tego szukasz).
źródło
Odpowiedź Cody'ego Brociousa jest właściwa. Ściśle mówiąc, nie można „odwrócić” funkcji skrótu, ponieważ wiele ciągów jest odwzorowanych na ten sam skrót. Zauważ jednak, że albo znalezienie jednego ciągu, który jest mapowany na dany hash, albo znalezienie dwóch ciągów, które są mapowane na ten sam hash (tj. Kolizja ), byłoby dużym przełomem dla kryptoanalityka. Ogromna trudność obu tych problemów jest powodem, dla którego dobre funkcje skrótu są przydatne w kryptografii.
źródło
MD5 nie tworzy unikalnej wartości skrótu; celem MD5 jest szybkie wytworzenie wartości, która zmienia się znacząco w zależności od niewielkiej zmiany źródła.
Na przykład,
(Oczywiście to nie jest rzeczywiste szyfrowanie MD5)
Większość skrótów (jeśli nie wszystkie) również nie jest unikalna; są raczej wystarczająco wyjątkowe , więc zderzenie jest wysoce nieprawdopodobne, ale nadal możliwe.
źródło
Dobrym sposobem na myślenie o algorytmie mieszania jest zmiana rozmiaru obrazu w Photoshopie ... powiedzmy, że masz obraz o wymiarach 5000x5000 pikseli, a następnie zmieniasz go do zaledwie 32x32. To, co masz, jest nadal reprezentacją oryginalnego obrazu, ale jest znacznie mniejsze i skutecznie „wyrzuciło” pewne części danych obrazu, aby zmieścić się w mniejszym rozmiarze. Więc gdybyś zmienił rozmiar tego obrazu 32x32 z powrotem do 5000x5000, wszystko, co otrzymasz, to rozmazany bałagan. Jednak ponieważ obraz 32x32 nie jest tak duży, teoretycznie można by sobie wyobrazić, że inny obraz mógłby zostać zmniejszony, aby uzyskać dokładnie te same piksele!
To tylko analogia, ale pomaga zrozumieć, co robi hasz.
źródło
Kolizja hash jest znacznie bardziej prawdopodobna, niż mogłoby się wydawać. Przyjrzyj się paradoksowi urodzin, aby lepiej zrozumieć, dlaczego tak jest.
źródło
Ponieważ liczba możliwych plików wejściowych jest większa niż liczba 128-bitowych wyjść, niemożliwe jest jednoznaczne przypisanie skrótu MD5 do każdego możliwego.
Kryptograficzne funkcje skrótu służą do sprawdzania integralności danych lub podpisów cyfrowych (skrót jest podpisywany w celu zwiększenia wydajności). Zmiana oryginalnego dokumentu powinna zatem oznaczać, że oryginalny hash nie pasuje do zmienionego dokumentu.
Te kryteria są czasami używane:
Kryteria te są wybrane tak, aby utrudnić znalezienie dokumentu pasującego do danego skrótu, w przeciwnym razie możliwe byłoby sfałszowanie dokumentów poprzez zastąpienie oryginału takim, który został dopasowany przez hash. (Nawet jeśli zamiana jest bełkotem, sama wymiana oryginału może spowodować zakłócenia).
Numer 3 implikuje numer 2.
W szczególności w przypadku MD5 wykazano, że jest on wadliwy: Jak złamać MD5 i inne funkcje skrótu .
źródło
Ale tutaj pojawiają się tęczowe stoły. Zasadniczo jest to po prostu duża liczba wartości zaszyfrowanych osobno, a następnie wynik jest zapisywany na dysku. Wtedy bit cofania „tylko” służy do przeszukiwania bardzo dużej tabeli.
Oczywiście jest to możliwe tylko dla podzbioru wszystkich możliwych wartości wejściowych, ale jeśli znasz granice wartości wejściowej, może być możliwe jej obliczenie.
źródło
Chiński naukowiec odkrył sposób zwany „kolizjami wybranego przedrostka”, który umożliwia konflikt między dwoma różnymi łańcuchami.
Oto przykład: http://www.win.tue.nl/hashclash/fastcoll_v1.0.0.5.exe.zip
Kod źródłowy: http://www.win.tue.nl/hashclash/fastcoll_v1.0.0. 5_source.zip
źródło
Najlepszym sposobem, aby zrozumieć, co oznaczały wszystkie najczęściej głosowane odpowiedzi, jest faktycznie próba przywrócenia algorytmu MD5. Pamiętam, że kilka lat temu próbowałem przywrócić algorytm MD5crypt , aby nie odzyskać oryginalnej wiadomości, ponieważ jest to oczywiście niemożliwe, ale po prostu wygenerować wiadomość, która wygeneruje ten sam hash, co oryginalny hash. To, przynajmniej teoretycznie, dałoby mi sposób na zalogowanie się do urządzenia z Linuksem, które przechowuje użytkownika: hasło w pliku / etc / passwd przy użyciu wygenerowanej wiadomości (hasła) zamiast używania oryginalnego. Ponieważ obie wiadomości miałyby ten sam hash wynikowy, system rozpoznałby moje hasło (wygenerowane z oryginalnego skrótu) jako prawidłowe. To w ogóle nie zadziałało. Po kilku tygodniach, o ile dobrze pamiętam, stosowanie soliw pierwszej wiadomości mnie zabił. Musiałem przedstawić nie tylko prawidłową wiadomość początkową, ale także poprawną, ważną wiadomość początkową, czego nigdy nie byłem w stanie zrobić. Ale wiedza, którą uzyskałem z tego eksperymentu, była miła.
źródło
Jak większość już powiedziała, MD5 została zaprojektowana do mieszania strumieni danych o zmiennej długości do fragmentów danych o stałej długości, dzięki czemu jeden skrót jest współdzielony przez wiele strumieni danych wejściowych.
Jeśli jednak kiedykolwiek musiałeś znaleźć oryginalne dane z sumy kontrolnej, na przykład jeśli masz skrót hasła i potrzebujesz znaleźć oryginalne hasło, często szybciej jest po prostu wygooglować (lub dowolną preferowaną wyszukiwarkę). dla odpowiedzi niż brutalnej siły. Udało mi się znaleźć kilka haseł za pomocą tej metody.
źródło
z definicji funkcja Hash (kryptograficzna Hash): nie powinna być odwracalna; nie powinna mieć kolizji (najmniej możliwe).
regd twoje pytanie: jest to skrót jednokierunkowy. input (niezależnie od długości) wygeneruje wyjście o stałym rozmiarze (będzie wypełnione w oparciu o algorytm (granica 512 bitów dla MD5)). Informacje są kompresowane (tracone) i praktycznie nie można ich wygenerować z przekształceń odwrotnych.
dodatkowe informacje na temat MD5: jest podatny na kolizje. przejrzał ostatnio ten artykuł, http://www.win.tue.nl/hashclash/Nostradamus/
otwiera kod źródłowy dla implementacji skrótów kryptograficznych (MD5 i SHA) można znaleźć w kodzie Mozilli. (biblioteka freebl).
źródło
Teraz dni hashe MD5 lub inne skróty w tym zakresie są wstępnie obliczane dla wszystkich możliwych ciągów i przechowywane w celu zapewnienia łatwego dostępu. Chociaż teoretycznie MD5 nie jest odwracalne, ale korzystając z takich baz danych, możesz dowiedzieć się, który tekst spowodował określoną wartość skrótu.
Na przykład wypróbuj następujący kod skrótu na http://gdataonline.com/seekhash.php, aby dowiedzieć się, jakiego tekstu użyłem do obliczenia skrótu
źródło
f (x) = 1 jest nieodwracalne. Funkcje skrótu nie są nieodwracalne.
W rzeczywistości jest to wymagane, aby mogli spełnić swoją funkcję polegającą na ustaleniu, czy ktoś posiada nieuszkodzoną kopię zaszyfrowanych danych. Stwarza to podatność na ataki brutalnej siły, które są obecnie dość potężne, szczególnie przeciwko MD5.
Istnieje również zamieszanie tutaj i gdzie indziej wśród ludzi, którzy mają wiedzę matematyczną, ale mało wiedzy na temat szyfrowania. Kilka szyfrów po prostu XORuje dane ze strumieniem klucza, więc można powiedzieć, że tekst zaszyfrowany odpowiada wszystkim tekstom jawnym o tej długości, ponieważ można było użyć dowolnego strumienia klucza.
Jednak to ignoruje fakt, że rozsądny tekst jawny utworzony z nasienia
password
jest znacznie bardziej prawdopodobny niż inny tekst utworzony przez nasienieWsg5Nm^bkI4EgxUOhpAjTmTjO0F!VkWvysS6EEMsIJiTZcvsh@WI$IH$TYqiWvK!%&Ue&nk55ak%BX%9!NnG%32ftud%YkBO$U6o
do tego stopnia, że każdy, kto twierdzi, że drugi jest możliwy, byłby wyśmiewany.W ten sam sposób, jeśli próbujesz wybrać między dwoma potencjalnymi hasłami
password
iWsg5Nm^bkI4EgxUO
, nie jest to tak trudne, jak sądzą niektórzy matematycy.źródło
Podobają mi się wszystkie argumenty. Jest oczywiste, że prawdziwą wartością zaszyfrowanych wartości jest po prostu zapewnienie nieczytelnych dla człowieka symboli zastępczych dla ciągów, takich jak hasła. Nie ma szczególnych korzyści w zakresie bezpieczeństwa. Zakładając, że atakujący uzyskał dostęp do tabeli z zaszyfrowanymi hasłami, może:
W tym przypadku słabe hasła nie mogą być chronione przez sam fakt, że są zaszyfrowane.
źródło