Hasło: Najlepsze Praktyki?

Zawsze byłem ciekawy... Co jest lepsze przy dodawaniu hasła do hashowania: prefix, czy postfix? Dlaczego? Czy to ma znaczenie, o ile solisz?

Aby wyjaśnić: wszyscy (miejmy nadzieję) wiemy już, że powinniśmy posolić hasło, zanim zahaszujemy je do przechowywania w bazie danych [ Edit: , abyś mógł uniknąć takich rzeczy jak to, co ostatnio przydarzyło się Jeffowi Atwoodowi ]. Zazwyczaj odbywa się to poprzez połączenie soli z hasłem przed przekazaniem go przez hashowanie algorytm. Ale przykłady są różne... Niektóre przykłady poprzedzają sól przed hasłem. Niektóre przykłady dodają sól po hasła. Widziałem nawet takich, którzy próbują umieścić sól w środku.

Która metoda jest lepsza i dlaczego? Czy istnieje metoda, która zmniejsza prawdopodobieństwo kolizji hash? Moje Googlowanie nie wykazało przyzwoitej analizy na ten temat.

Edit: świetne odpowiedzi ludzie! Przepraszam, że mogłem wybrać tylko jedną odpowiedź. :)

Author: Adam Marshall, 2009-03-23

8 answers

Prefiks lub sufiks nie ma znaczenia, chodzi tylko o dodanie pewnej entropii i długości do hasła.

Powinieneś rozważyć te trzy rzeczy:

    Sól musi być inna dla każdego przechowywanego hasła. (Jest to dość powszechne nieporozumienie.)
  1. Użyj kryptograficznie bezpiecznego generatora liczb losowych.
  2. Wybierz wystarczająco długo soli. Pomyśl o problemie urodzinowym.

Jest doskonała odpowiedź Dave ' a Sherohmana na inną pytanie, dlaczego zamiast nazwy użytkownika (lub innych danych osobowych) Należy używać losowo generowanych soli. Jeśli zastosujesz się do tych sugestii, naprawdę nie ma znaczenia, gdzie włożysz sól.

 104
Author: Georg Schölly,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:18:08

Myślę, że to wszystko semantyka. Umieszczenie go przed lub po nie ma znaczenia, z wyjątkiem bardzo konkretnego modelu zagrożenia.

Fakt, że tam jest ma pokonać tęczowe stoły.

Model zagrożenia, do którego nawiązałem, byłby scenariuszem, w którym przeciwnik Może mieć do hasła dołączone/dołączone tabele potocznych soli. (Powiedzmy NSA) zgadujesz, że albo mają to dopisane, albo dodane, ale nie jedno i drugie. To głupie i kiepskie przypuszczenie.

Lepiej założyć, że mają możliwość przechowywania tych tęczowych tabel, ale nie, powiedzmy, tabel z dziwnymi solami przeplatanymi w środku hasła. W tym wąskim przypadku, przypuszczam, że przeplatanie byłoby najlepsze.

Jak mówiłem. To semantyka. Wybierz inną sól na hasło, długą sól i dołącz do niej dziwne znaki, takie jak Symbole i kody ASCII: © ¤¡

 25
Author: Tom Ritter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-03-23 19:41:25

Prawdziwa odpowiedź, której nikt chyba nie dotknął, jest taka, że obie są złe . Jeśli wdrażasz własną krypto, bez względu na to, jak trywialną część myślisz, że robisz, zamierzasz popełniać błędy.

HMAC jest lepszym podejściem, ale nawet wtedy, jeśli używasz czegoś takiego jak SHA-1, już wybrałeś algorytm, który nie nadaje się do hashowania haseł ze względu na jego konstrukcję dla szybkości. Użyj czegoś w rodzaju bcrypt lub ewentualnie scrypt i wyjmij problem z rąk całkowicie.

Oh, I nawet nie myśl o porównywaniu wynikowych hashów dla równości z twoim językiem programowania lub narzędziami do porównywania łańcuchów baz danych. Te porównują znak po znaku i zwarcie jako false, jeśli znak różni się. Więc teraz atakujący mogą używać metod statystycznych, aby spróbować i dowiedzieć się, co to jest hash, znak na raz.

 17
Author: Stephen Touset,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-05 21:33:02

To nie powinno robić żadnej różnicy. Hash nie będzie łatwiej zgadnąć, gdziekolwiek umieścisz sól. Kolizje Hash są rzadkie i nieprzewidywalne, ponieważ są celowo nieliniowe. Jeśli to coś zmieni dla bezpieczeństwa, to sugerowałoby problem z mieszaniem, a nie soleniem.

 9
Author: Phil H,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-03-23 19:37:36

Jeśli używasz kryptograficznie bezpiecznego hasha, nie powinno mieć znaczenia, czy pre - czy postfix; punktem hashowania jest to, że pojedyncza zmiana bitu w danych źródłowych (bez względu na to, gdzie) powinna wytworzyć inny hash.

Co jest ważne jest jednak używanie długich soli, generowanie ich za pomocą odpowiedniego kryptograficznego PRNG i posiadanie soli dla użytkownika. Przechowywanie soli per-user w bazie danych jest , a nie problemem bezpieczeństwa, użycie hash jest .

 7
Author: snemarch,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-03-23 20:55:27

Po pierwsze, termin" Tęczowy stół " jest konsekwentnie nadużywany. Tabela "rainbow" jest po prostu szczególnym rodzajem tabeli wyszukiwania, która umożliwia określony rodzaj kompresji danych na kluczach. Poprzez obrót obliczeń dla przestrzeni, tabela wyszukiwania, która zajęłaby 1000 TB, może być skompresowana tysiąc razy, dzięki czemu może być przechowywana na mniejszym dysku.

Powinieneś się martwić hash do tabel wyszukiwania haseł, rainbow lub inaczej.

@onebyone.livejournal.com:

Atakujący ma 'tęczowe tabele' składające się nie z hashów słów słownikowych, ale ze stanu obliczeń hash tuż przed zakończeniem obliczeń hash.

Byłoby wtedy tańsze wymuszenie wpisania pliku hasła z Postfix salt niż przedrostek salt: dla każdego słowa słownikowego z kolei można załadować stan, dodać bajty salt do hasha, a następnie zakończyć go. Z prefiksem soli będzie nie ma nic wspólnego między obliczeniami dla każdego słowa słownikowego.

Dla prostej funkcji skrótu, która skanuje liniowo przez ciąg wejściowy, takiej jak prosty generator liniowy, jest to atak praktyczny. Ale kryptograficznie bezpieczna funkcja hash jest celowo zaprojektowana tak, aby miała wiele rund, z których każda wykorzystuje wszystkie bity ciągu wejściowego, tak że obliczanie stanu wewnętrznego tuż przed do dodania soli nie ma sensu po pierwsza runda. Na przykład SHA-1 mA 80 pocisków.

Ponadto algorytmy hashujące hasła, takie jak PBKDF, składają swoją funkcję hashową wiele razy (zaleca się iterację pbkdf-2 minimum 1000 razy, przy czym każda iteracja stosuje SHA-1 dwa razy) czyniąc ten atak podwójnie niepraktycznym.

 5
Author: cygil,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-03-24 07:09:55

BCrypt hash jeśli platforma ma dostawcę. Uwielbiam, jak nie martw się o tworzenie soli i możesz je jeszcze silniejsze, jeśli chcesz.

 4
Author: Samuel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-03-23 19:40:44

Wstawianie soli dowolnej liczby znaków do hasła jest najmniej oczekiwanym przypadkiem, a zatem najbardziej" bezpiecznym " społecznie, ale tak naprawdę nie jest to bardzo istotne w ogólnym przypadku, o ile używasz długich, unikalnych ciągów dla soli.

 2
Author: jeffcook2150,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-03-23 20:41:32