Czy SHA-1 jest bezpieczny do przechowywania haseł?

148

Wniosek: SHA-1 jest tak samo bezpieczny przed atakami typu preimage, jakkolwiek jest łatwy do obliczenia, co oznacza, że ​​łatwiej jest zamontować bruteforce lub słownikowy atak. (To samo dotyczy następców, takich jak SHA-256). W zależności od okoliczności, funkcja skrótu, która została zaprojektowana tak, aby była kosztowna obliczeniowo (taka jak bcrypt), może być lepszym wyborem.


Niektórzy ludzie często rzucają uwagi typu „SHA-1 jest zepsuty”, więc staram się zrozumieć, co to dokładnie oznacza. Załóżmy, że mam bazę danych zawierającą skróty haseł SHA-1, a osoba atakująca z najnowocześniejszym algorytmem łamania SHA-1 i botnetem ze 100 000 maszyn uzyskuje do niej dostęp. (Posiadanie kontroli nad 100 tys. Komputerów domowych oznaczałoby, że mogą wykonać około 10 ^ 15 operacji na sekundę). Ile czasu potrzebowaliby na

  1. znaleźć hasło jednego użytkownika?
  2. znaleźć hasło danego użytkownika?
  3. znaleźć hasło wszystkich użytkowników?
  4. znaleźć sposób na zalogowanie się jako jeden z użytkowników?
  5. znaleźć sposób na zalogowanie się jako określony użytkownik?

Jak to się zmienia, jeśli hasła są „solone”? Czy metoda solenia (prefiks, postfiks, oba, czy coś bardziej skomplikowanego, jak xoring) ma znaczenie?

Oto moje obecne zrozumienie, po pewnym googlowaniu. Proszę poprawić odpowiedzi, jeśli coś źle zrozumiałem.

  • Jeśli nie ma soli, atak tęczowy natychmiast znajdzie wszystkie hasła (z wyjątkiem bardzo długich).
  • Jeśli istnieje wystarczająco długa losowa sól, najskuteczniejszym sposobem na znalezienie haseł jest brutalna siła lub atak słownikowy. Ani ataki kolizyjne, ani ataki typu preimage nie pomagają w ustaleniu rzeczywistego hasła, więc ataki kryptograficzne na SHA-1 nie są tutaj pomocne. Nie ma nawet większego znaczenia, jaki algorytm jest używany - można by nawet użyć MD5 lub MD4 i hasła byłyby równie bezpieczne (jest niewielka różnica, ponieważ obliczanie skrótu SHA-1 jest wolniejsze).
  • Aby ocenić, jak bezpieczne jest „tak samo bezpieczne”, załóżmy, że pojedyncze uruchomienie sha1 zajmuje 1000 operacji, a hasła zawierają wielkie i małe litery oraz cyfry (czyli 60 znaków). Oznacza to, że atakujący może testować 10 15 * 60 * 60 * 24/1000 ~ = 10 17 potencjalnych haseł dziennie. W przypadku ataku brute force oznaczałoby to testowanie wszystkich haseł do 9 znaków w 3 godziny, do 10 znaków w tygodniu, do 11 znaków w roku. (Zajmuje 60 razy więcej na każdy dodatkowy znak.) Atak słownikowy jest dużo, dużo szybszy (nawet atakujący z jednym komputerem mógłby to zrobić w kilka godzin), ale znajduje tylko słabe hasła.
  • Aby zalogować się jako użytkownik, osoba atakująca nie musi znajdować dokładnego hasła; wystarczy znaleźć ciąg, który daje ten sam hash. Nazywa się to pierwszym atakiem przedobrazowym. O ile mogłem stwierdzić, nie ma ataków przedobrazowych na SHA-1. (Atak z brutalną siłą zająłby 2 160 operacji, co oznacza, że ​​nasz teoretyczny napastnik potrzebowałby 10 30 lat, aby go przeprowadzić. Teoretyczne ograniczenia to około 2 60 operacji, podczas których atak trwałby kilka lat.) Istnieją ataki przedobrazowe. przeciwko zredukowanym wersjom SHA-1 o znikomym efekcie (dla zredukowanego SHA-1, który wykorzystuje 44 kroki zamiast 80, czas ataku skrócił się z 2160 operacji do 2157). Istnieją ataki kolizyjne na SHA-1, które mieszczą się w zakresie teoretycznych możliwości ( najlepszy, jaki znalazłem, skraca czas z 2 80 do 2 52 ), ale są one bezużyteczne w przypadku haszowania haseł, nawet bez solenia.

Krótko mówiąc, przechowywanie haseł za pomocą SHA-1 wydaje się całkowicie bezpieczne. Przegapiłem coś?

Aktualizacja: Marcelo wskazał artykuł, który wspomina o drugim ataku przedobrazowym w 2 106 operacjach . ( Edycja: jak wyjaśnia Thomas , ten atak jest hipotetyczną konstrukcją, która nie ma zastosowania do rzeczywistych scenariuszy). Nadal nie rozumiem, jak to oznacza zagrożenie dla użycia SHA-1 jako funkcji wyprowadzania klucza. Czy istnieją ogólnie dobre powody, by sądzić, że atak kolizyjny lub drugi atak przedobrazowy można ostatecznie przekształcić w pierwszy atak przedobrazowy?

Tgr
źródło
To ma teraz 7 lat i wiele się wydarzyło od czasu ostatniej edycji. SHA-1 nie jest już uważany za wystarczająco bezpieczny do haszowania haseł
GordonM
@GordonM co się stało? Wraz ze wzrostem mocy obliczeniowej ataki kolizyjne SHA-1 stają się coraz bardziej praktyczne, ale nie mają tutaj większego znaczenia. SHA-1 nigdy nie był naprawdę bezpieczny dla haszowania haseł (szybkie skróty generalnie nie są), ale w takim stopniu, w jakim było, nadal jest AFAIK.
Tgr
SHA-1 nigdy nie był bezpieczny dla haszowania haseł, ponieważ nigdy nie miał na celu zabezpieczenia haseł w pierwszej kolejności ...
Azxdreuwa

Odpowiedzi:

209

Krótka odpowiedź na twoje pytanie brzmi: SHA-1 jest tak bezpieczny, jak tylko możesz. MD5 też byłby w porządku, nawet MD4; ale może to zdenerwować niektórych inwestorów. W przypadku public relations najlepiej jest użyć „lepszej” funkcji skrótu, np. SHA-256, nawet jeśli skrócisz jej wyjście do 160 lub 128 bitów (aby zaoszczędzić na kosztach przechowywania). Niektóre z kandydatów SHA-3 do rundy 2 wydają się być szybsze niż SHA-1, a jednocześnie są prawdopodobnie „bezpieczniejsze”; ale wciąż są trochę nowe, więc trzymanie się SHA-256 lub SHA-512 byłoby teraz bezpieczniejszą drogą. Dzięki temu będziesz wyglądać profesjonalnie i ostrożnie, co jest dobre.

Zauważ, że „tak bezpieczne, jak to tylko możliwe” to nie to samo, co „całkowicie bezpieczne”. Poniżej znajdziesz dość obszerne wyjaśnienia.

O znanych atakach:

Znane ataki na MD4, MD5 i SHA-1 dotyczą kolizji, które nie wpływają na odporność na przedobraz. Wykazano, że MD4 ma kilka słabych punktów, które można (tylko teoretycznie) wykorzystać podczas próby złamania HMAC / MD4, ale nie dotyczy to twojego problemu. 2 106 sekundowy atak przedobrazowy w artykule Kesleya i Schneiera jest ogólnym kompromisem, który ma zastosowanie tylko do bardzo długich danych wejściowych (2 60 bajtów; to milion terabajtów - zauważ, jak 106 + 60 przekracza 160; tam to widać kompromis nie ma w sobie nic magicznego).

W pozostałej części tego komunikatu założono, że używana funkcja skrótu (np. SHA-1) jest „czarną skrzynką” bez specjalnej właściwości, której może użyć atakujący. To właśnie masz teraz, nawet z "zepsutymi" funkcjami skrótu MD5 i SHA-1.

O stołach tęczowych:

„Atak tęczowy” to w rzeczywistości dzielenie kosztów słownikiem lub atakiem siłowym. Jest pochodną kompromisu czasowo-pamięciowego opisanego po raz pierwszy przez Hellmana w 1980 roku. Zakładając, że masz N możliwych haseł (to jest rozmiar twojego słownika lub 2 n, jeśli rozważasz wymuszenie brutalne funkcji skrótu z wynikiem n bitów), następuje atak z podziałem czasu, w którym wstępnie obliczasz N zaszyfrowanych haseł i przechowujesz je w dużej tabeli. Jeśli posortujesz dane wyjściowe skrótu, możesz uzyskać hasło w jednym wyszukiwaniu. Tęczowe tablice to elegancki sposób na przechowywanie tej tabeli ze znacznie ograniczonej przestrzeni. Przechowujesz tylko zaszyfrowane hasła N / t i łamiesz hasła za pomocą O (t 2 ) wyszukiwania. Tęczowe stoły pozwalają wirtualnie obsługiwać wstępnie obliczone tabele znacznie większe niż te, które można realistycznie przechowywać.

Jednak niezależnie od tego, czy jest to tęcza, czy nie, napastnik musi przynajmniej raz wykonać pełny atak. Można to postrzegać jako kilka kolejnych warstw optymalizacji:

  1. Atak siłowy / słownikowy kosztuje N za złamanie każdego hasła.
  2. Za pomocą wstępnie obliczonej tabeli atakujący płaci ten koszt raz N, a następnie może zaatakować wiele haseł z bardzo niewielkim dodatkowym kosztem za hasło.
  3. Jeśli wstępnie obliczona tabela jest tablicą tęczową, to N może być nieco większe, ponieważ koszt przechowywania jest zmniejszony. Wąskie gardło na N staje się mocą procesora, którą może zgromadzić atakujący, a nie rozmiarem jego dysków twardych.

Jeśli N jest na tyle duże, że koszt procesora haszowania N haseł jest niedorzeczny, to taki atak nie jest możliwy, niezależnie od tego, czy używane są tablice tęczowe. Oznacza to, że (odporna na preimage) funkcja skrótu z wyjściem 80 bitów lub więcej wystarczy, aby atak siłowy był niewykonalny.

O solach:

Sole są sposobem na pokonanie wstępnych obliczeń. W powyższym opisie sól przenosi napastnika z powrotem do kroku 1: salting zapobiega dzieleniu kosztu O ( N ) przez atakującego między kilka zaatakowanych haseł. Wstępnie obliczone tabele, tęczowe tablice a fortiori , nie są już możliwe.

Chcesz solenia, ponieważ kiedy zaszyfrowane dane składają się z haseł , tj. Czegoś, co mieści się w mózgu przypadkowej istoty ludzkiej, wtedy N może być dość niskie: ludzie naprawdę źle wybierają i zapamiętują hasła. O to właśnie chodzi w „atakach słownikowych”: czyli przy użyciu zmniejszonej przestrzeni potencjalnych haseł („słownika”) przy założeniu, że wiele haseł użytkowników będzie się znajdować w specjalnie wybranej przestrzeni.

W związku z tym solenie przynajmniej uniemożliwi atakującemu wykorzystanie wstępnie obliczonych tabel, w szczególności wstępnie obliczonych tabel tęczowych. Zakłada się, że osoba atakująca będzie w stanie złamać jedno lub dwa hasła; nie chcemy, aby złamał 1000 innych haseł przy odrobinie dodatkowego narzutu.

Również solenie jest dobre dla public relations.

O koszcie SHA-1:

Podstawowy koszt SHA-1 dotyczy haszowania 64-bajtowego bloku. Tak działa SHA-1: dane są uzupełniane, a następnie dzielone na 64-bajtowe bloki. Koszt przetwarzania pojedynczego bloku to około 500 cykli zegara w systemie Intel Core2, a to dla pojedynczego rdzenia. MD5 i MD4 są szybsze, liczą odpowiednio około 400 i 250 cykli. Nie zapominaj, że większość nowoczesnych procesorów ma kilka rdzeni, więc odpowiednio pomnóż.

Niektóre systemy solenia zalecają olbrzymie ilości soli; np. to, co wchodzi do funkcji skrótu, to w rzeczywistości 40000 kolejnych kopii pojedynczej 128-bitowej soli, po których następuje samo hasło. To sprawia, że ​​haszowanie haseł jest droższe (o 10000 razy w moim przykładzie), zarówno dla uprawnionego użytkownika, jak i dla atakującego. To, czy jest to dobry pomysł, zależy od konfiguracji. W przypadku logowania w systemie stacjonarnym jest to dobre: ​​użytkownik nawet nie zauważy, że hashowanie jego hasła zajęło 10 ms zamiast 1 µs; ale koszt dla atakującego wzrósł o bardzo zauważalny współczynnik 10000. Na serwerach współdzielonych z tysiącami klientów na sekundę łączny koszt może stać się wygórowany. Z koncepcyjnego punktu widzenia podnoszenie poprzeczki o ten sam czynnik zarówno dla uprawnionego użytkownika, jak i dla atakującego nie jest ostatecznie dobrym zabezpieczeniem; ale w niektórych sytuacjach może to być dobry pomysł.

Informacje o atakach internetowych:

Wszystko to dotyczy pokonywania ataków offline . Atak offline to taki, w którym atakujący ma wszystkie dane potrzebne do „przetestowania” haseł; np. atakujący mógłby uzyskać kopię bazy danych zawierającej zaszyfrowane hasła. W ataku offline osoba atakująca jest ograniczona tylko przez swoje zasoby obliczeniowe. Odwrotnie, atak online to atak, w którym każde domysły atakującego muszą przejść przez uczciwego weryfikatora (np. Atakujący po prostu próbuje zalogować się do zaatakowanego systemu). Ataki online są udaremniane poprzez egzekwowanie limitów liczby próbnych haseł na sekundę. Ekstremalne przykłady to karty inteligentne, które wyłączają się po trzech błędnych kodach PIN.

Zwykle ze względu na bezpieczeństwo hasłem opłaca się znacznie bardziej zorganizować system tak, aby nie pozwalał atakującemu na wykonanie ataku offline. To właśnie robią systemy Unix: zaszyfrowane hasła, które kiedyś znajdowały się w /etc/passwordpliku czytelnym dla wszystkich , są teraz w /etc/shadowpliku, który jest chroniony przed dostępem do odczytu, z wyjątkiem kilku uprzywilejowanych aplikacji. Zakłada się tutaj, że jeśli atakujący potrafi czytać /etc/shadow, to prawdopodobnie ma na tyle kontrolę nad systemem, że tak naprawdę nie potrzebuje już haseł ...

Thomas Pornin
źródło
5
Doskonała odpowiedź. Jedyne, z czym się nie zgadzam, to „Pod względem koncepcyjnym podniesienie poprzeczki o ten sam czynnik dla uprawnionego użytkownika i atakującego nie jest ostatecznie dobrym zabezpieczeniem” - atakujący musi wykonać wiele operacji, które musi wykonać użytkownik. Dodanie jednego cyklu zegara dla loginu użytkownika dodaje miliony dla atakującego.
Nick Johnson
1
@Thomas To pozostaje aktualne i prawdopodobnie pozostanie aktualne przez nieokreśloną przewidywalną przyszłość. Hakerzy mogą odgadnąć rzeczywiste hasła za pomocą dowolnego haszowania ze względu na niską jakość typowych haseł. Zgadnij „123456”, a zawsze dostaniesz kilka trafień. Pozostanie to bez względu na to, jakiego magazynu haseł używasz.
tylerl
1
Tylko z mojego punktu widzenia, ale dlaczego miałbyś trzymać się SHA1, skoro silniejsze szyfrowanie hasła jest już powszechnie dostępne? Rok temu MD5 był uważany za „bezpieczny”, a teraz tak nie jest - z tego, co wiemy, to samo może się stać z SHA1 każdego dnia. Osobiście od tego momentu stawiam na Blowfish - wydaje się, że ma lepszego przedstawiciela i mniej zaniepokojonych ekspertów w społeczności kryptowalut, jest dostępny prawie wszędzie, więc nie ma powodu, aby uprawiać hazard z SHA1.
mindplay.dk
1
Jestem zszokowany do głębi, gdy natknąłem się na odpowiedź od @ThomasPornin, mówiącą, że MD5 jest bezpieczny do przechowywania haseł. Jeśli MD5 jest w porządku, dlaczego WSZYSTKO mówi, że go nie używaj, użyj bcrypt ?? Czy są zbyt ostrożni? Przeczytałem i zrozumiałem wszystko i miałem wrażenie, że MD5 jest bardzo zły, ponieważ jest tak podatny na brutalną siłę. Komentarze sprzed roku nie przeczą odpowiedzi ...
tymczasowy_user_nazwa
1
@Aerovistae: możesz rzucić okiem na tę odpowiedź na stronie security.SE; zawiera więcej analiz i najnowsze szczegóły dotyczące haszowania haseł.
Thomas Pornin
30

Poprzednie odpowiedzi nie wspominają o procesorach graficznych, które mogą równolegle haszować SHA-1 do tego stopnia, że ​​cała baza danych może być teraz brutalnie wymuszona w ciągu minut lub godzin, a nie dni lub tygodni, nawet jeśli hasła zostały przesolone.

Nowoczesne algorytmy haszowania haseł, takie jak bcrypt lub scrypt, są specjalnie zaprojektowane, aby były trudne do uruchomienia na GPU ze względu na fakt, że są to szyfry blokowe o znacznie wyższych wymaganiach dotyczących pamięci (a dostępu do pamięci w GPU nie można paralelizować w tym samym stopniu). Mają także „funkcję roboczą”, która pozwala na spowolnienie ich w locie wraz z rozwojem technologii.

Krótko mówiąc, powinieneś używać tylko najlepszych narzędzi do pracy. SHA-1 znacznie odbiega od aktualnego stanu techniki.

Więcej informacji:

Jammycakes
źródło
2
„Nowoczesne algorytmy haszowania haseł, takie jak bcrypt lub PBKDF2, zostały zaprojektowane specjalnie w taki sposób, aby były trudne do uruchomienia na procesorach graficznych” - czy miałeś na myśli „bcrypt lub scrypt”? PBKDF2 to po prostu haszowanie iterowane, nie ma w nim nic, co byłoby problematyczne dla GPU.
Tgr,
4
Daj mi znać, jakiego GPU używasz, kupię to samo. Jeśli możesz wykonać 2 ^ 160 obliczeń SHA-1 w „minutach” (to będzie mniej niż „godziny”, czyli maksymalnie 59 minut), musisz być w stanie wykonać więcej niż 10 ^ 44 na sekundę. Ponieważ limit transferów PCIe wynosi około 128 GT / s, twój GPU musi mieć również niesamowitą pamięć wbudowaną. Chcę to.
Damon,
3
@Damon: Wydajesz się zakładać, że użytkownicy mają albo „trywialne” hasła (<8 bitów entropii), albo „niezniszczalne” hasła (> 60 bitów entropii). Całkowicie ignorujesz wszystkich pomiędzy, których entropia hasła mieści się w zakresie 10-60 bitów. Są to użytkownicy, w których bcrypt, tęczowe tablice i procesory graficzne stanowią zazwyczaj około 80% typowej bazy użytkowników.
jammycakes
1
(Ups ... Powinienem był powiedzieć: „To są użytkownicy, dla których bcrypt, tęczowe tabele i GPU robią największą różnicę”)
jammycakes,
3
Niektóre statystyki i analizy można znaleźć na stronie troyhunt.com/2011/06/brief-sony-password-analysis.html - podczas gdy 36% użytkowników wybiera hasła, które pojawiają się w słownikach haseł, tylko 2-3% wybiera te najpopularniejsze.
jammycakes
7

Twój opis brzmi zgodnie z aktualnym stanem wiedzy.

Nie powinieneś jednak używać jednej iteracji żadnej funkcji skrótu: Przynajmniej powinieneś iterować wiele razy (1000 iteracji skrótu zwiększa pracę atakującego 1000-krotnie. Zwiększa to twoją pracę o tę samą wartość, ale robisz o wiele mniej haszowania haseł niż oni).

Najlepiej jednak byłoby użyć istniejącego prymitywu przechowywania haseł, takiego jak opisane tutaj .

Nick Johnson
źródło
Iterowanie tysięcy razy nie jest tak dobrym pomysłem, jak mogłoby się wydawać. Zwiększa ryzyko kolizji hash. yorickpeterse.com/articles/use-bcrypt-fool
jammycakes
1
Ten artykuł wygląda na całkowicie zdezorientowany. Bezpieczna funkcja haszowania nie traci znaczącej entropii przez iteracyjne haszowanie, a iteracyjne haszowanie jest podstawowym składnikiem schematów rozciągania kluczy, takich jak PBKDF2 i scrypt. Nawet bcrypt, który poleca autor, stosuje podobną konstrukcję. Jego „atak” polega na znalezieniu obrazu wstępnego skrótu - w takim przypadku większość konstrukcji używających tego skrótu i ​​tak jest całkowicie zepsuta. Wreszcie, nie polecam ludziom bezpośredniego używania iteracyjnego haszowania - jak mówię w moim pytaniu, powinieneś użyć istniejącego prymitywu zaprojektowanego do tego celu.
Nick Johnson,
7

SHA1 to skrót wiadomości , nigdy nie miał być funkcją haszowania hasła (lub wyprowadzania klucza). (Chociaż może być użyty jako element konstrukcyjny dla KDF, na przykład w PBKDF2 z HMAC-SHA1.)

Funkcja mieszania haseł powinna chronić przed atakami słownikowymi i tęczowymi tablicami. Aby osiągnąć ten cel, zaprojektowano kilka algorytmów.

Obecnie najlepszym wyborem jest prawdopodobnie Argon2 . Ta rodzina funkcji haszowania haseł wygrała konkurs w 2015 r.

Jeśli Argon2 nie jest dostępny, jedyną inną znormalizowaną funkcją haszowania hasła lub wyprowadzania klucza jest PBKDF2 , który jest starym standardem NIST. Inne opcje, jeśli użycie standardu nie jest wymagane, obejmują bcrypt i scrypt .

Wikipedia zawiera strony dla tych funkcji:

Erwan Legrand
źródło
4

W SHA-1 odkryto poważne luki, które sprawiają, że wyszukiwanie jest znacznie szybsze niż brutalna siła. Nadal jest to w dużej mierze trudne do opanowania, ale nie oczekuje się, że będzie tak długo; programiści paranoidalni preferują coś z rodziny SHA-2.

Z tego artykułu dotyczącego pierwotnego wyniku z 2005 roku:

„Czas iść, ale nie biec, do wyjść przeciwpożarowych. Nie widać dymu, ale alarm przeciwpożarowy wyłączył się”.

Nie chodzi o to, że obecna kryptoanaliza sprawia, że ​​SHA-1 jest niebezpieczna, ale raczej, że społeczność kryptograficzna martwi się, że gorsze wiadomości mogą być tuż za rogiem. Ten strach dotyczy również SHA-2, który wykazuje te same wady co SHA-1, aczkolwiek na znacznie większej przestrzeni poszukiwań, stąd trwające poszukiwania SHA-3 .

Krótko mówiąc, SHA-1 jest teraz bezpieczny i prawdopodobnie jeszcze przez jakiś czas będzie, ale społeczność kryptowalut nie jest zadowolona z prognozy.

Marcelo Cantos
źródło
Czy możesz podać link? Jak powiedziałem, najlepszy atak przedobrazowy, jaki mogłem znaleźć, sprawia, że ​​wyszukiwanie jest aż 8 razy szybsze, a nawet aby to zadziałało, musisz pominąć połowę kroków SHA-1. (Myślę też, że jest to drugi atak typu preimage, który jest bezużyteczny w przypadku
haszowania
Jestem też sceptyczny wobec czegoś, co pochodzi z NSA, w świetle ostatnich wiadomości :)
Alex W
4

Od lutego 2017 r. SHA-1 nie powinien być już uważany za bezpieczny. Firma Google poinformowała o sukcesie ataków kolizyjnych na pełne, niezredukowane rundy SHA-1 ( link do raportu ). Aby wyświetlić ogłoszenie Google, kliknij tutaj .

Edycja: jak wskazali inni, hasła nie są podatne na ataki kolizyjne. Jednak jako ogólna wskazówka nie wybrałbym SHA-1 dla aplikacji związanych z bezpieczeństwem. Istnieją lepsze alternatywy.

Aaron
źródło
OK, znalezienie kolizji SHA-1 zajęło około 6500 lat procesora i 100 lat GPU , to nie jest atak na produkcję. Łamanie haseł nie jest brutalną siłą przeciwko wszystkim możliwym wejściom, ale przeciwko listom 10000000 częstych haseł. Oto papier .
zaph
1
Wada polega na używaniu tylko funkcji skrótu do ochrony haseł. Samo użycie funkcji skrótu nie jest wystarczające, a samo dodanie soli niewiele wpływa na poprawę bezpieczeństwa, skróty kryptograficzne są bardzo szybkie. Zamiast tego wykonaj iterację po HMAC z losową solą przez około 100 ms i zapisz sól z hashem. Za pomocą funkcji, takich jak PBKDF2(aka Rfc2898DeriveBytes), password_hash/ password_verify, Bcrypti podobne funkcje. Chodzi o to, aby atakujący spędzał dużo czasu na wyszukiwaniu haseł przy użyciu brutalnej siły. Ochrona użytkowników jest ważna, używaj bezpiecznych metod haseł.
zaph
Kolizja nie jest przedobrazem, a hasła nie są podpisami. Ataki kolizyjne nie działają na hasła, ponieważ wymagają znajomości oryginalnego tekstu jawnego.
Tgr
Tgr: zgodził się, dziękuję. Zaph: Tak, solenie w celu ochrony przed atakami tęczy i używanie powolnych haszów kryptograficznych należą do zalecanych praktyk, do których nie odniosłem się specjalnie w tej odpowiedzi.
Aaron
3

Jeśli przechowujesz solone hasło, SHA-1 jest w porządku ze względów praktycznych. SHA-2 jest uważany za bezpieczniejszy, ale SHA-1 nie stanowi problemu, chyba że masz powód, by być naprawdę paranoikiem.

Oto, co mówi NIST :

Dotychczasowe wyniki dotyczące SHA-1 nie podważają jego bezpieczeństwa. Jednak ze względu na postęp technologiczny NIST planuje wycofać SHA-1 na rzecz większych i silniejszych funkcji skrótu (SHA-224, SHA-256, SHA-384 i SHA-512) do 2010 roku.

VladV
źródło
To jest komentarz NIST z 2004 r. Ich projekt zalecenia z 2010 r. Mówi, że SHA-1 jest zatwierdzony dla wszystkich aplikacji do generowania podpisów innych niż cyfrowe po 2010 r.
Tgr