Czy można odszyfrować skróty MD5?

260

Ktoś powiedział mi, że widział systemy oprogramowania, które:

  1. odzyskać zaszyfrowane hasła MD5 z innych systemów;
  2. odszyfrować zaszyfrowane hasła i
  3. przechowuj hasła w bazie danych systemu, korzystając z własnego algorytmu systemu.

Czy to jest możliwe? Myślałem, że odszyfrowanie skrótów MD5 nie jest możliwe / wykonalne.

Wiem, że istnieją słowniki MD5, ale czy istnieje algorytm deszyfrowania?

John Bubriski
źródło
7
Cofnięcie MD5 dałoby również wiele haseł.
Carles Company
231
MD5 to algorytm podsumowania. Pomyśl o tym jako o zamianie krowy w stek. Teraz spróbuj to odwrócić.
Mechaniczny ślimak
5
@Arst z tego, co rozumiem, tak, ale tylko jeśli MASZ WIELE Z nich. A nawet gdyby tak było, nie byłbyś w stanie cofać się, ponieważ algorytm celowo traci informacje.
Jordan,
8
@mechanicalsnail biorąc pod uwagę tę analogię, można zrobić w pełni idealny klon z DNA na steku. :))
Trimikha Valentius
8
@TrimikhaValentius MD5 to algorytm trawienny. Pomyśl o tym jako o jedzeniu steku> trawieniu> produkcji. Teraz spróbuj to odwrócić.
user4157124,

Odpowiedzi:

424

Nie. MD5 nie jest szyfrowaniem (chociaż może być używane jako część niektórych algorytmów szyfrowania), jest to funkcja skrótu jednokierunkowa . Wiele oryginalnych danych jest faktycznie „utraconych” w ramach transformacji.

Pomyśl o tym: MD5 ma zawsze 128 bitów. Oznacza to, że istnieje 2 128 możliwych skrótów MD5. Jest to dość duża liczba, a jednak zdecydowanie zdecydowanie skończona. A jednak istnieje nieskończona liczba możliwych danych wejściowych dla danej funkcji skrótu (a większość z nich zawiera więcej niż 128 bitów lub 16 bajtów). Tak więc w rzeczywistości istnieje nieskończona liczba możliwości dla danych, które uzyskałyby skrót do tej samej wartości. Interesującą rzeczą, która sprawia, że ​​skróty są interesujące jest to, że niezwykle trudno jest znaleźć dwa fragmenty danych, które mają taką samą wartość, a szanse na przypadkowe zdarzenie są prawie zerowe.

Prostym przykładem (bardzo niepewnej) funkcji skrótu (i to ilustruje ogólną ideę jednokierunkowego działania) byłoby wzięcie wszystkich bitów kawałka danych i potraktowanie go jako dużej liczby. Następnie wykonaj dzielenie liczb całkowitych za pomocą dużej (prawdopodobnie pierwszej) liczby n i weź resztę (patrz: moduł ). Pozostanie Ci pewna liczba od 0 do n . Jeśli ponownie wykonasz to samo obliczenie (w dowolnym czasie, na dowolnym komputerze, w dowolnym miejscu), używając dokładnie tego samego ciągu, uzyska on tę samą wartość. A jednak nie ma sposobu, aby dowiedzieć się, jaka była pierwotna wartość, ponieważ istnieje nieskończona liczba liczb, które mają dokładnie tę resztę, po podzieleniu przez n .

To powiedziawszy, stwierdzono, że MD5 ma pewne słabości, takie jak przy złożonej matematyce, możliwe jest znalezienie kolizji bez wypróbowania 2 128 możliwych ciągów wejściowych. A fakt, że większość haseł jest krótka, a ludzie często używają wspólnych wartości (takich jak „hasło” lub „tajne”) oznacza, że ​​w niektórych przypadkach można dość dobrze zgadnąć czyjeś hasło przez Googlinga dla skrótu lub używając Rainbow stół . To jest jeden z powodów, dlaczego należy zawsze „ sól ” zakodowane hasła, tak, że dwa identyczne wartości, gdy mieszany, nie będzie mieszania do tej samej wartości.

Po przejściu fragmentu danych za pomocą funkcji skrótu nie ma możliwości powrotu.

Adam Batkin
źródło
22
jednak w przestrzeni mieszającej MD5 występuje więcej kolizji, niż pierwotnie sądzono. Nie jest już uważany za optymalny jako najlepszy skrót dla haseł.
Cheeso,
12
Ponieważ większość haseł jest krótsza niż skrót MD5, dla każdego skrótu zwykle jest tylko jedno hasło. (I znalezienie jednego, nawet jeśli nie jest oryginalne, wystarczy, aby uzyskać dostęp do konta). Istotą funkcji jednokierunkowej jest to, że nie ma wielu różnych obrazów, więc nie wiemy, który z nich był oryginalny , ale naprawdę trudno jest znaleźć choć jedną oryginalną wartość .
Paŭlo Ebermann
2
@Nick: W rzeczywistości RFC1321 wyraźnie mówi: „Algorytm przyjmuje jako dane wejściowe wiadomość o dowolnej długości”
Adam Batkin,
6
@Olathe - nie jestem pewien, czy się zgadzam. Biorąc pod uwagę skrót, na ogół niemożliwe jest ustalenie (ze 100% pewnością) oryginalnych danych wejściowych. Istnieje (zwykle) nieskończona liczba danych wejściowych, które dają wszystkie możliwe (zakodowane) dane wyjściowe. Powiedziałem ogólnie, ponieważ jeśli wiesz (na przykład), że szukasz ciągu znaków ASCII, a jest to mniej niż, powiedzmy, 12 bajtów, prawdopodobne jest, że istnieje tylko jedno wejście, które daje dane wyjściowe. Ale zawsze będą kolizje (nieskończone) i chyba, że ​​masz jakieś zewnętrzne ograniczenia (jak w moim przykładzie), nigdy nie dowiesz się, co jest słuszne
Adam Batkin
2
@Adam Batkin, masz rację, ale nie mam na myśli 100% pewności. Łamanie szyfrów nie może być wykonane ze 100% pewnością. Nadawca mógł oznaczać losowy bełkot zamiast angielskiego tekstu jawnego przy użyciu tego samego klucza, który odszyfrowuje inne angielskie teksty jawne, ale prawdopodobieństwo angielskiego jest bardzo bliskie 100%. Podobnie, wybierając między długim hasłem japońskiego wiersza UTF-8 a bełkotliwymi ciągami, prawdopodobieństwo tego wiersza jest bliskie 100%. Można to zrobić przy użyciu prawdopodobieństw po fakcie, a nie wstępnie wybranych ograniczeń. Oczywiście nie da się tego zrobić ogólnie, ale nadal jest całkiem przydatny.
Olathe
154

Nie możesz - teoretycznie. Chodzi o to, że to tylko jeden sposób. Oznacza to, że jeśli komuś uda się uzyskać listę skrótów, nadal nie może uzyskać hasła. Dodatkowo oznacza to, że nawet jeśli ktoś używa tego samego hasła w wielu witrynach (tak, wszyscy wiemy, że nie powinniśmy, ale ...) każdy, kto ma dostęp do bazy danych witryny A, nie będzie mógł użyć hasła użytkownika na strona B.

Fakt, że MD5 jest skrótem, oznacza również, że traci informacje. W przypadku dowolnego skrótu MD5, jeśli zezwolisz na hasła o dowolnej długości, może istnieć wiele haseł, które wytwarzają ten sam skrót. Dla dobrego skrótu znalezienie obliczeń przekraczających dość trywialną maksymalną długość byłoby niewykonalne obliczeniowo, ale oznacza to, że nie ma gwarancji, że jeśli znajdziesz hasło, które ma skrót docelowy, to z pewnością jest to oryginalne hasło. Z astronomicznego punktu widzenia mało prawdopodobne jest wyświetlenie dwóch haseł o rozsądnej długości tylko ASCII, które mają ten sam skrót MD5, ale nie jest to niemożliwe.

MD5 to zły skrót do używania haseł:

  • Jest szybki, co oznacza, że ​​jeśli masz skrót „docelowy”, wypróbowanie wielu haseł i sprawdzenie, czy możesz znaleźć takie, które ma skrót do tego celu, jest tanie. Solenie nie pomaga w tym scenariuszu, ale pomaga zwiększyć koszt znalezienia hasła pasującego do jednego z wielu skrótów przy użyciu różnych soli.
  • Wierzę, że ma wady, które ułatwiają znajdowanie kolizji, chociaż znalezienie kolizji w tekście do wydrukowania (zamiast arbitralnych danych binarnych) byłoby co najmniej trudniejsze.

Nie jestem ekspertem od bezpieczeństwa, więc nie przedstawię konkretnych zaleceń poza „Nie wprowadzaj własnego systemu uwierzytelniania”. Znajdź jednego od renomowanego dostawcy i skorzystaj z niego. Zarówno projektowanie, jak i wdrażanie systemów bezpieczeństwa to trudna sprawa.

Jon Skeet
źródło
2
Tak, istnieją inne metody, ale musisz zrozumieć, co Jon powiedział powyżej - „nie powinieneś przesyłać im hasła - to poufne informacje, które mogą pozostać wrażliwe”. - na najniższym poziomie można przechwytywać wiadomości e-mail i odzyskiwać poufne informacje. Hasło powinno pozostać tak bezpieczne, jak to możliwe - zwykle poprzez przechowywanie go jako hash tylko w bazie danych.
Daniel May
3
A także fakt, że jeśli hasło można odwrócić, oznacza to, że każdy, kto uzyska dostęp do bazy danych, może uzyskać hasła użytkowników. To nie jest dobry pomysł. Hasła jednokierunkowe powinny być normą; przechowuj prawdziwe hasło (nawet zaszyfrowane) tylko wtedy, gdy jest to absolutnie konieczne (np. w celu uwierzytelnienia się w innym systemie, który nie jest oparty na tokenach).
Jon Skeet
1
Widziałem środki antyspamowe, w których serwer odbiorników odmawia przychodzącej poczty tylko po to, aby poczekać na ponowienie próby serwera pocztowego nadawcy (spamboty zazwyczaj próbują tylko raz). Może to łatwo przekroczyć limit 10 minut.
sisve
1
@ravisoni: to znalezienie się wartość, która ma ten sam hash, przypuszczalnie przez brute force lub tabel odnośników. Nie ma gwarancji, że jest to oryginalna wartość zwykłego tekstu.
Jon Skeet
5
@ravisoni: Co rozumiesz przez „tutaj”? Jeśli hasło jest nieznane, nie możesz wiedzieć, czy ujawnione jest oryginalne, czy nie. Ale chodzi o to, że w jeden sposób skróty takie jak MD5 z definicji tracą informacje. Fakt, że miejsca takie jak to można wymyślić z hasłem dopasowania jest po prostu dobre dowody MD5 jest zły algorytm użyć ze względów bezpieczeństwa.
Jon Skeet
52

Technicznie jest to „możliwe” , ale pod bardzo surowymi warunkami ( tęczowe tabele , brutalne wymuszanie na podstawie bardzo małej możliwości, że hasło użytkownika znajduje się w tej bazie danych mieszania).

Ale to nie znaczy, że tak

  • Żywotny
    lub
  • Bezpieczne

Nie chcesz „cofać” skrótu MD5 . Korzystając z metod opisanych poniżej, nigdy nie będziesz musiał. „Odwracanie” MD5 jest faktycznie uważane za szkodliwe - kilka stron internetowych oferuje możliwość „łamania” i brutalnego szyfrowania MD5 - ale wszystko to są ogromne bazy danych zawierające słowa słownikowe, wcześniej przesłane hasła i inne słowa. Jest bardzo mała szansa , że będzie miał skrót MD5, którego potrzebujesz odwrócić. A jeśli już solone hash MD5 - to nie będzie działać albo! :)


Sposób logowania za pomocą skrótu MD5 powinien być następujący:

Podczas rejestracji:
Użytkownik tworzy hasło -> Hasło jest szyfrowane przy użyciu MD5 -> Hash przechowywany w bazie danych

Podczas logowania:
Użytkownik wprowadza nazwę użytkownika i hasło -> (sprawdzono nazwę użytkownika) Hasło jest haszowane przy użyciu MD5 -> Hash jest porównywany z hashem przechowywanym w bazie danych

Gdy potrzebne jest „Utracone hasło”:

2 opcje:

  • Użytkownik wysłał losowe hasło, aby się zalogować, a następnie jest proszony o zmianę go przy pierwszym logowaniu.

lub

  • Użytkownik otrzymuje link do zmiany hasła (z dodatkowym sprawdzeniem, czy masz pytanie zabezpieczające / itp.), A następnie nowe hasło jest haszowane i zastępowane starym hasłem w bazie danych
Daniel May
źródło
1
Mam kilka drobiazgów. Tęczowe stoły nie są brutalnym zmuszaniem. W rzeczywistości istnieją programy i witryny, które używają brutalnej siły (bardzo prostych) haseł kilku znaków (generalnie zapętlają się one przez kilka godzin lub dni, możesz wypełnić hash i mieć nadzieję, że pojawi się w pętli). I niestety, biorąc pod uwagę brak jakości wielu haseł, szansa, że ​​się pojawi, nie jest „bardzo małą szansą”.
Maarten Bodewes
32

Nie bezpośrednio. Ze względu na zasadę szufladki istnieje (prawdopodobnie) więcej niż jedna wartość mieszająca się z dowolnym danym wyjściem MD5. Dlatego nie można tego z całą pewnością odwrócić. Ponadto MD5 niezbędne, aby zapewnić, że trudno jest znaleźć jakąkolwiek taką odwróconą hash (jednak nie było ataków, które wytwarzają kolizji - to znaczy, że wytwarzają dwie wartości hash do tego samego rezultatu, ale nie można kontrolować, co otrzymaną wartość MD5 będzie być).

Jeśli jednak ograniczysz przestrzeń wyszukiwania do, na przykład, wspólnych haseł o długości mniejszej niż N, możesz nie mieć już właściwości nieodwracalności (ponieważ liczba wyjść MD5 jest znacznie większa niż liczba ciągów w danej dziedzinie). Następnie możesz użyć tabeli tęczy lub podobnego do odwróconego skrótu.

bdonlan
źródło
1
Dodałbym, że znalezienie innej wartości mieszającej dla tego samego wyjścia nazywa się „kolizją”. Jest to najczęstsza metoda niszczenia systemów z mieszaniem MD5.
Nicole,
5
@Reneesis, znajdowanie danych mieszających się ze znaną wcześniej wartością nazywa się „preimage”, w rzeczywistości i jest o wiele, wiele trudniejsze niż zwykłe zderzenie. Nie wykazano jeszcze ataku preimage przeciwko MD5, ale zastosowano ataki kolizyjne.
bdonlan,
Istotą funkcji skrótu (gdy są używane do przechowywania haseł) nie jest to, że istnieje wiele możliwych haseł, które dają ten sam skrót (są, ale większość z nich jest dłuższa niż sam skrót), ale trudno jest znaleźć nawet jeden z nich (co wystarczyłoby, aby uzyskać dostęp do systemu). I tak, ze względu na tęczowe tabele nie używasz niesolonych skrótów. A ze względu na małą przestrzeń hasła, będziesz używać wolnego hasha (takiego jak bcrypt lub scrypt) zamiast szybkiego (takiego jak MD5 / SHA - * / ....)
Paŭlo Ebermann
1
Aby być technicznym, nie można wykonać MD5 z pewnością, ponieważ sprzęt mógł działać nieprawidłowo. W ten sam sposób możesz nie mieć pewności, że hasło było passwordbardziej niż wszystkie inne nieskończone dane wejściowe, które wytwarzają ten sam skrót, ale wszystkie wyglądają dość losowo, ale możesz być wystarczająco blisko.
Olathe
Zasada szufladki ma oczywiście zastosowanie, ale nadal jest niewykonalne obliczeniowo znalezienie drugiego wejścia, które haszy do pewnej wartości, np. Hash nad normalnym hasłem. Jeśli znajdziesz X, który haszy się z danym H (X), możesz być pewien, że X jest poprawnym wejściem. To sprawia, że ​​cała pierwsza sekcja tej odpowiedzi, a większość pozostałych jest niepoprawna.
Maarten Bodewes
13

Niemożliwe, a przynajmniej nie w rozsądnym czasie.

Często jest to obsługiwane przez „reset” hasła. Oznacza to, że dajesz im nowe (losowe) hasło i wysyłasz je w wiadomości e-mail.

Matthew Groves
źródło
5
Gdyby skrót nie był solony, zdziwiłbyś się, jak często wystarczy wyszukiwanie w Google wartości skrótu ...
Michael Borgwardt
1
Niezbyt praktyczne w przypadku systemu odzyskiwania hasła, nawet niesolonego :)
Matthew Groves
12

Nie możesz przywrócić hasła md5. (W dowolnym języku)

Ale ty możesz:

daj użytkownikowi nowy.

sprawdź jakiś tęczowy stół, by odzyskać stary.

Nettogrof
źródło
1
Nix pomysł na tęczowy stół. Jeśli solisz - a powinieneś - to i tak nie zadziała.
Steven Sudit
1
@StevenSudit Jeśli nadal używają MD5 do mieszania haseł zamiast silnego hasła, nie można założyć, że używają soli. Może tak, prawdopodobnie nie.
Maarten Bodewes,
10

Nie, musiał się mylić ze słownikami MD5.

Skrypty kryptograficzne (MD5 itp.) Są jednym ze sposobów i nie można wrócić do oryginalnej wiadomości z jedynie streszczeniem, chyba że masz inne informacje na temat oryginalnej wiadomości itp., Których nie powinieneś.

Robert Greiner
źródło
8

Deszyfrowanie (bezpośrednie uzyskiwanie zwykłego tekstu z wartości mieszanej w sposób algorytmiczny), nie.

Istnieją jednak metody wykorzystujące tak zwany stół tęczowy . Jest to całkiem wykonalne, jeśli twoje hasła są mieszane bez soli.

Sinan Taifour
źródło
7

MD5 jest algorytmem mieszającym, nie można przywrócić wartości skrótu.

Należy dodać „funkcję zmiany hasła”, w której użytkownik podaje inne hasło, oblicza skrót i zapisuje go jako nowe hasło.

Svetlozar Angelov
źródło
7

Nie ma na to łatwego sposobu. Jest to przede wszystkim punkt zaszyfrowania hasła. :)

Jedną z rzeczy, które powinieneś być w stanie zrobić, to ustawić dla nich tymczasowe hasło ręcznie i wysłać je.

Waham się o tym wspomnieć, ponieważ jest to zły pomysł (i nie ma gwarancji, że i tak zadziała), ale możesz spróbować poszukać skrótu w tęczowej tabeli, takiej jak milw0rm, aby sprawdzić, czy możesz w ten sposób odzyskać stare hasło.

Bill jaszczurka
źródło
6

Zobacz wszystkie inne odpowiedzi tutaj na temat tego, jak i dlaczego nie jest on odwracalny i dlaczego i tak nie chcesz.

Jednak dla kompletności istnieją tęczowe tabele, na których można wyszukać możliwe dopasowania. Nie ma gwarancji, że odpowiedzią w tęczowej tabeli będzie oryginalne hasło wybrane przez użytkownika, aby je bardzo pomylić.

To również nie zadziała w przypadku solonych skrótów. Solenie jest zalecane przez wielu ekspertów ds. Bezpieczeństwa.

Dina
źródło
Nieprawidłowy . Jeśli zostanie znalezione dopasowanie, jest pewne, że będzie to oryginalne hasło. Gdyby tak nie było, możliwe byłoby generowanie kolizji przy dowolnym H (X), gdzie X jest komunikatem bez uprzednio zdefiniowanej struktury określonej przez przeciwnika. Znalezienie takiej kolizji dla kryptograficznie bezpiecznej funkcji skrótu jest niewykonalne obliczeniowo, nawet jeśli jest to uszkodzona funkcja skrótu, taka jak MD5.
Maarten Bodewes
@ MaartenBodewes: „Jeśli zostanie znalezione dopasowanie, to jest pewne, że będzie to oryginalne hasło”. Nie rozumiem, jak to jest, jeśli przyjmiemy nieograniczoną długość haseł. Powiedziałbym, że jest to bardzo prawdopodobne, że jest to oryginalne hasło, ale nie musi tak być. Fakt, że istnieje więcej możliwych haseł niż skrótów MD5, oznacza, że muszą istnieć dwa hasła z tym samym hashem. To, że znalezienie takich kolizji jest niewykonalne obliczeniowo, nie oznacza, że ​​nie istnieją. A może źle cię zrozumiałem?
Jon Skeet,
@JonSkeet Jeśli jest obliczeniowo niewykonalne znalezienie kolizji celowo następnie znalezienie się przez przypadek jest równie mało prawdopodobne, albo gorzej. Z powodu ograniczonej przestrzeni wyjściowej MD5 i problemu urodzinowego szansa na znalezienie kolizji wynosi około 1 do 2 ^ 64 (tj. Około połowy przestrzeni wyjściowej) - i to po dopasowaniu około 2 ^ 64 skrótów. I to nawet nie uwzględnia faktu, że wiadomość prawdopodobnie musi być mała i mieć określony format, aby uznać ją za hasło. Większość haseł ma entropię znacznie poniżej 2 ^ 64 bitów.
Maarten Bodewes,
1
@ MaartenBodewes: Ale istnieje duża różnica między „mało prawdopodobnym astronomicznie” a „niemożliwym”. Twoje stwierdzenie, że ma pewność , że jest to właściwe hasło, jest zbyt silne, IMO. To sugeruje matematyczną pewność, która nie jest obecna.
Jon Skeet,
Możesz także odgadnąć 2 ^ 128-bitowy klucz AES za jednym razem. Jest to „po prostu” wyjątkowo mało prawdopodobne. Kryptografia opiera się na tego rodzaju szansach. Dla wszystkich praktycznych celów, jeśli znajdziesz wiadomość wejściową / hasło, będzie to ta, której szukałeś. To, że teoretycznie możliwe jest znalezienie innego komunikatu wejściowego, jest miłe, ale w przypadku tego pytania na StackOverflow nie trzeba go brać pod uwagę. Tabele tęczy są wypełnione tylko możliwymi hasłami. Nie będą zawierać wystarczającej ilości danych, aby kiedykolwiek mieć szansę na kolizję (albo nieświadomie zastąpią mapowanie, albo staną się sławni).
Maarten Bodewes,
4

Nie ma możliwości „cofnięcia” funkcji skrótu w zakresie znalezienia dla niej funkcji odwrotnej. Jak wspomniano wcześniej, jest to cały sens funkcji haszującej. Nie powinno być odwracalne i powinno umożliwiać szybkie obliczanie wartości skrótu. Zatem jedynym sposobem na znalezienie ciągu wejściowego, który daje określoną wartość skrótu, jest wypróbowanie wszystkich możliwych kombinacji. Z tego powodu nazywa się to atakiem brutalnej siły.

Wypróbowanie wszystkich możliwych kombinacji zajmuje dużo czasu, dlatego wartości skrótu są używane do przechowywania haseł w stosunkowo bezpieczny sposób. Jeśli osoba atakująca jest w stanie uzyskać dostęp do bazy danych ze wszystkimi hasłami użytkowników, tracisz w każdym razie. Jeśli masz wartości skrótu i ​​(mówiąc idealnie) silne hasła, znacznie trudniej będzie uzyskać hasła z wartości skrótu dla atakującego.

Przechowywanie wartości skrótu również nie stanowi problemu z wydajnością, ponieważ obliczanie wartości skrótu jest stosunkowo szybkie. Dlatego większość systemów oblicza wartość skrótu hasła wpisanego przez użytkownika (co jest szybkie), a następnie porównuje ją z wartością skrótu przechowywaną w bazie danych użytkowników.

Kage
źródło
Nie ma w tym nic złego, z wyjątkiem tego, że szybkość funkcji skrótu jest bardzo dużym problemem, ponieważ większość haseł nie jest wystarczająco bezpieczna i pozwala przeciwnikowi na wykonanie ataku słownikowego. Z tego powodu zamiast szybkich, bezpiecznych kryptograficznie funkcji skrótu używane są powolne funkcje skrótu hasła.
Maarten Bodewes,
3

MD5 uważa się za zepsuty, nie dlatego, że można odzyskać oryginalną zawartość z skrótu, ale ponieważ dzięki pracy można utworzyć dwie wiadomości, które mają skrót do tego samego skrótu.

Nie można cofnąć skrótu MD5.

Ned Batchelder
źródło
3
Z założenia wszystkie skróty tej samej długości ulegają zderzeniom. Jest to nieuniknione podczas krępowania danych o zmiennej długości. MD5 jest uważany za przestarzały ze względu na szybkość kolizji, a nie fakt kolizji.
Jonathan Lonowski,
MD5 uważa się za uszkodzony ze względu na udowodnioną możliwość konstruowania kolidujących danych wejściowych.
Ned Batchelder,
3

Możesz znaleźć narzędzia online, które wykorzystują słownik do odzyskania oryginalnej wiadomości.

W niektórych przypadkach metoda słownikowa może być po prostu bezużyteczna:

  • jeśli wiadomość jest zaszyfrowana przy użyciu komunikatu SALT
  • jeśli wiadomość jest mieszana więcej niż jeden raz

Na przykład, oto jedno narzędzie online do deszyfrowania MD5 .

davitz38
źródło
Tęczowe tabele - nie ataki słownikowe - są bezużyteczne, jeśli używa się soli. Hashowanie więcej niż jeden raz - bez soli - wciąż pozwala na tęczowe tabele, chociaż znalezienie wcześniej istniejącego online jest z pewnością mniej prawdopodobne.
Maarten Bodewes,
2

Jedyną rzeczą, która może być skuteczna, jest (jeśli wspomnimy, że hasła są właśnie zaszyfrowane, bez dodawania jakiejkolwiek soli, aby zapobiec atakom powtórkowym, jeśli tak, więc musisz znać sól), przy okazji, skorzystaj z narzędzia do ataku słownikowego , pliki wielu słów, liczb itp., a następnie utwórz dwa wiersze, jeden wiersz to słowo, liczba (w słowniku), drugi to skrót słowa, i porównaj skróty, jeśli je dopasujesz ...

to jedyny sposób, bez wchodzenia w kryptoanalizę.

Berkay
źródło
2

Tak, dokładnie to, o co prosisz, jest możliwe. Nie można „odszyfrować” hasła MD5 bez pomocy, ale możliwe jest ponowne zaszyfrowanie hasła MD5 w innym algorytmie, ale nie wszystkie za jednym razem.

To, co robisz, polega na tym, aby użytkownicy mogli zalogować się do nowego systemu przy użyciu starego hasła MD5. W momencie logowania podali Twojemu programowi logowania niehasowaną wersję hasła, które okazało się zgodne z hasłem MD5, który posiadasz. Następnie możesz przekonwertować to nieskasowane hasło na nowy algorytm mieszający.

Oczywiście jest to proces przedłużony, ponieważ musisz poczekać, aż użytkownicy powiedzą ci, jakie są hasła, ale to działa.

(Uwaga: siedem lat później, no cóż, mam nadzieję, że ktoś uzna to za przydatne)

użytkownik3710044
źródło
Dziękuję za odpowiedź. Jednak zamierzam cię „poderwać” :) Nie pamiętam, czy rzeczywiście to zrobiłem, ale teoretycznie powinno to działać. Zamiast czekać na zalogowanie się każdego użytkownika, abyśmy mogli ponownie zaszyfrować jego hasło, możesz po prostu zaszyfrować zaszyfrowaną wersję jego hasła. Więc każde hasło zostanie zakodowane, a następnie zaszyfrowane. Właśnie zaktualizowałem sprawdzanie hasła, aby zrobić to samo, a dane użytkownika powinny być bezpieczne bez interwencji użytkownika.
John Bubriski
Jeszcze jedno zastrzeżenie do mojego komentarza powyżej. Nie jestem ekspertem w dziedzinie szyfrowania, więc nie jestem pewien, czy ma to jakiekolwiek dalsze konsekwencje dla bezpieczeństwa. Na przykład szyfrowanie słabych haseł, które są słabo zakodowane przed szyfrowaniem, może potencjalnie zagrozić bezpieczeństwu szyfrowania (może użyć też innej soli?). Ponadto możesz mieć kopie zapasowe pływające z tymi hashami MD5. Prawdopodobnie lepiej zrobić pełne unieważnienie wszystkich istniejących haseł podczas wykonywania tego typu aktualizacji.
John Bubriski
Kryptografowie martwią się podwójnym szyfrowaniem, ale myślę, że znaleźli tylko trywialne przypadki, w których jest to problem. Ale nie sądzę, aby było to przydatne w tym przypadku, ponieważ MD5 jest nadal bezpieczny dla (niezbyt długich, tekstowych) haseł. Jednak podwójne haszowanie może być przydatne, jeśli poprzedni programista zapomniał dodać soli, w przeciwnym razie nie mogę wymyślić przypadku, w którym nie musiałbyś mówić wszystkim, że hasła należy uznać za własne. Mamy nadzieję, że kopie zapasowe się nie zgubią, a mimo to są szyfrowane.
user3710044
1

Nie da się tego zrobić. Możesz użyć słownika lub wypróbować różne wartości, dopóki nie uzyskasz szukanego skrótu. Ale nie można go „odszyfrować”.

Vilx-
źródło
widziałem tę stronę, która zamienia md5 na oryginalny tekst: md5.gromweb.com . Jak to możliwe?
samach,
2
@ samach321 - Łatwo: mają bazę danych mieszanych ciągów. Cokolwiek wpiszesz w polu „Konwertuj ciąg na skrót MD5”, zostanie dodane do bazy danych. Spróbuj uzyskać skrót MD5 z innego źródła i wprowadź go. Chyba że jest to coś, co jest w ich DB, nie uzyskasz wyniku.
Vilx-
1

MD5 ma swoje słabości (patrz Wikipedia ), więc istnieją projekty, które próbują wstępnie wyliczyć Hashe. Wikipedia wskazuje również na niektóre z tych projektów. Wiem, że wiem (i szanuję) to kryminał. Nie możesz podać użytkownikowi własnego hasła, ale możesz podać hasło, które działa. Ale myślę: po prostu napisz nowe hasło na wypadek, gdyby zapomniały.

dz.
źródło
Fakt, że MD5 jest zepsuty (dla określonych, ale ważnych zastosowań funkcji) nie ma absolutnie nic wspólnego z tablicami tęczy (o czym wspominasz, wspominając o wstępnym obliczaniu skrótów).
Maarten Bodewes,
1

Algorytm skrótu MD5 nie jest odwracalny, więc dekodowanie MD5 nie jest możliwe, ale niektóre strony internetowe mają zestaw dopasowanych haseł, więc możesz wypróbować online dekodowanie skrótu MD5.

Wypróbuj online:

MD5 Deszyfruj

md5online

md5decrypter

Girish Patidar
źródło
Tak, ale jest to już objęte pytaniem, tak jak w zdaniu „Wiem, że istnieją słowniki”. Samo wskazanie słowników nie liczy się zatem jako odpowiedź.
Maarten Bodewes,
1

Teoretycznie nie jest możliwe odszyfrowanie wartości skrótu, ale masz kilka brudnych technik odzyskiwania oryginalnego zwykłego tekstu.

  1. Bruteforcing : Wszystkie algorytmy bezpieczeństwa komputerowego cierpią z powodu brutalizacji . Opierając się na tym pomyśle, dzisiejsze układy GPU wykorzystują pomysł programowania równoległego, za pomocą którego mogą odzyskać zwykły tekst, masowo brutalnie zmuszając go do użycia dowolnego procesora graficznego. To narzędzie hashcat wykonuje tę pracę. Ostatni raz sprawdził cuda wersję nim udało mi się Bruteforce do 7 się długą postać ciągu sześciu minut.
  2. Wyszukiwanie w Internecie : po prostu skopiuj i wklej skrót w Google i sprawdź, czy możesz tam znaleźć odpowiedni tekst jawny. To nie jest rozwiązanie, gdy pentestujesz coś, ale zdecydowanie warto spróbować. Niektóre witryny utrzymują skrót dla prawie wszystkich słów w słowniku.
Vikkyhacks
źródło
2
Ataki słownikowe to inny sposób lub porównanie z innymi bazami danych, dla których znasz hasła wejściowe.
Maarten Bodewes
1

Nie, nie jest możliwe odwrócenie funkcji skrótu, takiej jak MD5: biorąc pod uwagę wyjściową wartość skrótu, nie można znaleźć komunikatu wejściowego, chyba że znana jest wystarczająca ilość informacji o komunikacie wejściowym.

Deszyfrowanie nie jest funkcją zdefiniowaną dla funkcji skrótu; szyfrowanie i deszyfrowanie są funkcjami szyfru, takiego jak AES w trybie CBC; funkcje skrótu nie szyfrują ani nie odszyfrowują . Funkcje skrótu są używane do przetworzenia komunikatu wejściowego. Jak sama nazwa wskazuje, algorytm odwrotny nie jest z założenia możliwy .


MD5 został zaprojektowany jako kryptograficznie bezpieczna, jednokierunkowa funkcja skrótu. Generowanie kolizji dla MD5 jest teraz łatwe - nawet jeśli duża część komunikatu wejściowego jest wcześniej ustalona. Tak więc MD5 jest oficjalnie uszkodzony i MD5 nie powinien już być uznawany za kryptograficznie bezpieczny skrót. Jednak nadal nie można znaleźć komunikatu wejściowego, który prowadzi do wartości skrótu: znajdź X, gdy znany jest tylko H (X) (a X nie ma wstępnie obliczonej struktury z co najmniej jednym 128-bajtowym blokiem wstępnie obliczonych danych) . Nie są znane ataki pre-image na MD5.

Zasadniczo możliwe jest również odgadywanie haseł przy użyciu brutalnej siły lub (rozszerzonych) ataków słownikowych, porównywanie baz danych lub próba znalezienia skrótów haseł w tak zwanych tablicach tęczy. Jeśli znaleziono dopasowanie, to jest obliczeniowo pewne, że znaleziono dane wejściowe. Funkcje skrótu są również zabezpieczone przed atakami kolizyjnymi: znalezienie X'tego jest H(X') = H(X)dane H(X). Jeśli więc Xzostanie znalezione, to jest obliczeniowo pewne, że rzeczywiście był to komunikat wejściowy. W przeciwnym razie przeprowadziłbyś mimo wszystko atak kolizyjny. Tęczowe tabele mogą być użyte do przyspieszenia ataków, a istnieją wyspecjalizowane zasoby internetowe, które pomogą Ci znaleźć hasło z określonym hashem.

Oczywiście można ponownie użyć wartości skrótu,H(X) aby zweryfikować hasła wygenerowane w innych systemach. Jedyne, co musi zrobić system odbiorczy, to zapisać wynik funkcji deterministycznej, Fktóra przyjmuje H(X)jako dane wejściowe. Kiedy Xpodano do ówczesnego systemu H(X), a zatem Fmoże zostać przeliczone, a wyniki mogą być porównywane. Innymi słowy, odszyfrowanie wartości skrótu nie jest wymagane tylko w celu sprawdzenia , czy hasło jest prawidłowe, a nadal możesz przechowywać skrót jako inną wartość.


Zamiast MD5 ważne jest użycie skrótu hasła lub PBKDF (funkcja wyprowadzania klucza na podstawie hasła). Taka funkcja określa, jak używać soli razem z hashem. W ten sposób identyczne skróty nie będą generowane dla identycznych haseł (od innych użytkowników lub w innych bazach danych). Z tego powodu skróty haseł również nie pozwalają na używanie tablic tęczowych, o ile sól jest wystarczająco duża i odpowiednio losowa.

Skróty hasła zawierają również czynnik roboczy (czasem konfigurowany za pomocą licznika iteracji ), który może znacznie spowolnić ataki, które próbują znaleźć hasło na podstawie wartości soli i wartości skrótu. Jest to ważne, ponieważ baza danych z solami i wartościami skrótu może zostać skradziona. Wreszcie hash hasła może być również trudny do zapamiętywania, dlatego do obliczenia skrótu wymagana jest znaczna ilość pamięci. Uniemożliwia to użycie specjalnego sprzętu (GPU, ASIC, FPGA itp.), Aby umożliwić osobie atakującej przyspieszenie wyszukiwania. Inne dane wejściowe lub opcje konfiguracji, takie jak pieprz lub stopień równoległości, mogą być również dostępne dla skrótu hasła.

Nadal jednak pozwoli każdemu zweryfikować podane hasło, H(X)nawet jeśli H(X)jest to skrót hasłem. Hashy haseł są nadal deterministyczne, więc jeśli ktoś zna wszystkie dane wejściowe, a sam algorytm hash Xmoże być użyty do obliczenia H(X)i - ponownie - wyniki mogą być porównane.

Powszechnie używane skróty haseł są bcrypt , scrypt i PBKDF2 . Istnieje również Argon2 w różnych formach, który jest zwycięzcą stosunkowo niedawnego konkursu mieszania haseł. Tutaj na CrackStation znajduje się dobry post na blogu dotyczący prawidłowego zabezpieczenia hasłem.


Możliwe jest, że przeciwnicy nie będą mogli wykonać obliczenia skrótu, sprawdzając, czy hasło jest prawidłowe. W tym celu można zastosować pieprz jako dane wejściowe do skrótu hasła. Alternatywnie wartość skrótu można oczywiście zaszyfrować przy użyciu szyfru, takiego jak AES i trybu działania, takiego jak CBC lub GCM. Wymaga to jednak przechowywania tajnego klucza / klucza niezależnie i z wyższymi wymaganiami dostępu niż hash hasła.

Maarten Bodewes
źródło
0

MD5 to kryptograficzna (jednokierunkowa) funkcja skrótu, więc nie ma bezpośredniego sposobu jej odkodowania. Głównym celem kryptograficznej funkcji skrótu jest to, że nie można jej cofnąć.

Jedną rzeczą, którą możesz zrobić, jest strategia brute force, w której zgadujesz, co zostało zaszyfrowane, a następnie haszujesz tą samą funkcją i sprawdza, czy pasuje. Chyba, że ​​zaszyfrowane dane są bardzo łatwe do odgadnięcia, może to zająć dużo czasu.

Ajanyan Pradeep
źródło
-1

Nie jest jeszcze możliwe wstawienie skrótu hasła do algorytmu i odzyskanie hasła w postaci zwykłego tekstu, ponieważ haszowanie jest jednokierunkowe. Ale to, co zrobili ludzie, to generowanie skrótów i przechowywanie ich w dużej tabeli, aby po wprowadzeniu określonego skrótu sprawdzał w tabeli hasło pasujące do skrótu i ​​zwraca je tobie. Przykładem witryny, która to robi, jest http://www.md5online.org/ . Nowoczesny system przechowywania haseł przeciwdziała temu za pomocą algorytmu solenia, dzięki czemu po wpisaniu tego samego hasła w polu hasła podczas rejestracji generowane są różne skróty.

oziomajnr
źródło
-1

Nie, nie można odszyfrować / odwrócić md5, ponieważ jest to jednokierunkowa funkcja skrótu, dopóki nie można znaleźć rozległych luk w zabezpieczeniach MD5. Innym sposobem jest to, że niektóre witryny mają dużą liczbę zestawów baz danych haseł, więc możesz spróbować online dekodować ciąg skrótu MD5 lub SHA1. Wypróbowałem stronę internetową taką jak http://www.mycodemyway.com/encrypt-and-decrypt/md5 i działa ona dobrze dla mnie, ale to całkowicie zależy od twojego skrótu, jeśli ten skrót jest przechowywany w bazie danych, możesz uzyskać rzeczywisty ciąg .

Rafi Ahmad
źródło
1
Nie, MD5 nie jest szyfrowaniem, nawet szyfrowaniem jednokierunkowym (co nie ma sensu w pierwszej kolejności).
Maarten Bodewes
@ MaartenBodewes To mój błąd, to nie jest funkcja szyfrowania, to funkcja skrótu Dziękuję.
Rafi Ahmad,