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
- znaleźć hasło jednego użytkownika?
- znaleźć hasło danego użytkownika?
- znaleźć hasło wszystkich użytkowników?
- znaleźć sposób na zalogowanie się jako jeden z użytkowników?
- 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?
źródło
Odpowiedzi:
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:
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/password
pliku czytelnym dla wszystkich , są teraz w/etc/shadow
pliku, 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ł ...źródło
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:
źródło
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 .
źródło
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:
źródło
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:
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.
źródło
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.
źródło
PBKDF2
(akaRfc2898DeriveBytes
),password_hash
/password_verify
,Bcrypt
i 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ł.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 :
źródło