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?