Ostatnio trochę czytałem o haszowaniu i według AgileBits , używają „ SHA512 w PBKDF2 ” w swoim nowym pliku przechowalni.
Szukałem w Wikipedii obu nazw i wiem, że PBKDF2 jest funkcją wyprowadzania klucza, a SHA jest kryptograficzną funkcja skrótu, ale naprawdę nie rozumiem różnicy i dlaczego oba są używane razem, jeden wewnątrz drugiego.
Czy ktoś może to wyjaśnić osobie bez doświadczenia w kryptografii?
(Możesz założyć, że wiem tylko o matematyce, jeśli to konieczne).
Komentarze
Odpowiedź
SHA-512 to kryptograficznie bezpieczny skrót , PBKDF2 jest tym, co nazywamy funkcją wyprowadzania klucza opartą na haśle. Jeśli wynikowy sekret nie jest używany jako klucz, ale jako wartość skrótu, jest również nazywany hashem hasła . Skróty haseł różnią się od bezpiecznych skrótów w tym sensie, że zawierają sól i współczynnik pracy / liczbę iteracji.
Zarówno skróty kryptograficzne, jak i skróty haseł są funkcjami jednokierunkowymi zaprojektowanymi do tworzenia krótkich, stałych wyników z dane wejście. W przypadku skrótu hasła danymi wejściowymi będzie hasło i sól. Rozmiar soli i liczba iteracji są powszechnie uważane za parametry konfiguracyjne; oba oczywiście mają wpływ na wynik skrótu hasła.
Skróty haseł są generalnie budowane na podstawie funkcji pseudolosowych lub PRF. Zwykłą formą PRF jest kod uwierzytelniania wiadomości oparty na HMAC lub skrócie, który z kolei wewnętrznie używa skrótu. Gdy używane są PRF oparte na skrótach, takie jak HMAC, często konfiguruje się typ / rozmiar używanego skrótu. Jednak skróty haseł nie muszą być budowane przy użyciu skrótów. Każdy inny PRF, na przykład oparty na szyfrze symetrycznym, może zrobić. Na przykład bcrypt jest zbudowany na podstawie Blowfish, szyfru blokowego.
Hasze haseł wymagają soli, aby identyczne hasła nie były odwzorowywane na ten sam skrót. par hash). Ponadto zawierają one współczynnik pracy / liczbę iteracji, więc osoba atakująca musi wykonać więcej pracy, aby obliczyć skrót każdego możliwego hasła. Jest to potrzebne, ponieważ większość haseł nie jest wystarczająco losowych. Bez współczynnika pracy osoba atakująca byłaby w stanie przetestować ogromną liczbę możliwych haseł za pomocą brutalnej siły lub ataku słownikowego.
Komentarze
- dużo więcej informacji tutaj … nie mieści się jednak ' w przestrzeni odpowiedzi.
Odpowiedz
Parafrazując moją odpowiedź na wcześniejsze pytanie , PBKDF2 to ogólny algorytm wysokiego poziomu wewnętrznie wywołuje funkcję pseudolosową (PRF) w celu przetworzenia danych wejściowych. Specyfikacja PBKDF2 nie narzuca żadnego konkretnego PRF, więc realizatorzy mogą swobodnie wybrać dowolny PRF, jaki chcą (o ile spełnia on definicję bezpiecznego PRF i mogą zaakceptować dane wejściowe, które daje mu PBKDF2).
Tak się składa, że zdecydowanie najczęstszym wyborem PRF dla PBKDF2 jest HMAC , który jest kolejną konstrukcją wysokiego poziomu, która wewnętrznie wykorzystuje kryptograficzna funkcja skrótu . Ponownie, specyfikacja HMAC nie narzuca żadnej konkretnej funkcji skrótu *, więc implementatorzy mogą dowolnie wybierać dowolną wartość skrótu. Prawdopodobnie obecnie najczęściej wybieranym wyborem jest jeden z rodziny skrótów SHA-2 , która obejmuje SHA-256 i SHA-512.
Zatem „SHA512 w PBKDF2” prawie na pewno oznacza, że „używają oni PBKDF2 z HMAC jako PRF i SHA-512 jako hash wewnątrz HMAC. **
Co może być mylące, to na pierwszy rzut oka, ten PBKDF2-with-HMAC-with-SHA512 może wyglądać tak, jakby robi coś bardzo podobnego do zwykłego SHA-512: oba biorą dowolne hasło jako dane wejściowe i zamieniają je w pseudolosowy ciąg bitów, z którego nie może być łatwo zrekonstruowane.Jest jednak kilka różnic, z których najważniejsze to:
-
SHA-512 jest szybki. Bardzo szybki. PBKDF2 jest celowo powolne w obliczeniach, a jego powolność można kontrolować, dostosowując parametr liczby iteracji.
-
Bezpośrednim skutkiem jego szybkości jest SHA Samo -512 jest podatne na ataki polegające na brutalnym zgadywaniu haseł przy użyciu oprogramowania takiego jak hashcat , które po prostu generuje wiele haseł i haszuje je, dopóki nie znajdzie takiego, które daje pasujący skrót . Pojedynczy nowoczesny procesor może z łatwością haszować miliony haseł na sekundę, a procesory GPU są jeszcze szybsze.
Ponadto istnieje kilka innych drobnych różnic, które należy zauważyć:
-
PBKDF2 przyjmuje parametr „sól”, którego można użyć, aby upewnić się, że wyjścia są unikalne, nawet jeśli hasła wejściowe nie są . (Używanie soli również udaremnia ataki oparte na obliczeniach wstępnych, ponieważ atakujący nie może pożytecznie rozpocząć haszowania odgadniętego hasła, zanim pozna sól.) SHA-512 sam w sobie nie ma pojęcia soli, chociaż można osiągnąć równoważny efekt, np. dołączając sól do hasła.
-
SHA-512 zawsze generuje 512-bitowe wyjście (stąd jego nazwa), chociaż zawsze możesz skrócić je do mniejszej długości, jeśli nie potrzebuje pełnych 512 bitów. PBKDF2 może w zasadzie generować dane wyjściowe o dowolnej długości, chociaż w praktyce używa go do wygenerowania więcej niż jednego wewnętrznego wyjścia skrótu o wartości bitów nie jest zalecane .
*) Oryginalna definicja HMAC i dowody bezpieczeństwa faktycznie zakładają, że użyta funkcja skrótu ma określony typ znany jako funkcja skrótu Merkle – Damgård . Tak się składa, że wszystkie najpopularniejsze kryptograficzne funkcje skrótu od kilkudziesięciu lat, w tym rodzina SHA-2, były tego typu, więc ograniczenie to nie stanowiło większego problemu w praktyce. Może się to stopniowo zmieniać wraz ze standaryzacją SHA-3 (aka Keccak), który nie jest hashem Merkle – Damgård, ale dogodnie posiada własne oświadczenie dotyczące bezpieczeństwa dla HMAC-SHA3 .
**) To jest grzywna i tradycyjny wybór, o ile to możliwe. Nie jest tak odporny na ataki oparte na GPU i inne równoległe ataki, jak nowsze KDF, takie jak scrypt czy Argon2 byłoby, ale nadal jest dużo lepsze niż zwykły, nie iterowany haszowanie. To powiedziawszy, aby właściwie ocenić jego bezpieczeństwo, musielibyśmy również znać liczbę iteracji używaną dla PBKDF2. Niestety, wiele implementacji PBKDF2 ma tendencję do używania starego „zalecanego minimum” 1000 iteracji, co obecnie jest niewiele więcej niż progiem zwalniającym. Osobiście na nowoczesnym procesorze wolałbym coś bliższego 1 000 000 lub 1 000 000 000 iteracji .
Komentarze
- Pytanie: Czy PBKDF2 jest używane tylko do spowolnienia liczby domysłów (jeśli jest to bruteforce)? Czy są jakieś inne szczegóły, o których należy pamiętać?
- @NaveenNiraula : Oprócz spowolnienia zgadywania brutalnej siły, PBKDF2 ma drugorzędny cel konwertowania haseł o dowolnej długości i formacie na jednolite pseudolosowe ciągi bitowe. Ale zwykłe haszowanie też może to zrobić. Ponadto parametr salt pozwala uzyskać wiele różnych kluczy z tego samego hasło i zapobiega niektórym atakom przy użyciu wstępnie obliczonych słowników, takich jak ” tęczowe tabele „. Ale znowu, jeśli nie ' nie potrzebuję ochrony PBKDF2 przy zgadywaniu brutalnej siły, możesz po prostu użyć do tego zwykłego HMAC lub nawet po prostu połączyć sól z hasłem przed haszowaniem to.
PBKDF2(HMAC_SHA512, password, ...)
.