Jaki jest obecnie najbezpieczniejszy algorytm szyfrowania jednokierunkowego?

Jak wielu wie, szyfrowanie jednokierunkowe jest przydatnym sposobem szyfrowania haseł użytkowników w bazach danych. W ten sposób nawet administrator bazy danych nie może znać hasła użytkownika, ale będzie musiał odgadnąć hasło, zaszyfrować je tym samym algorytmem, a następnie porównać wynik z zaszyfrowanym hasłem w bazie danych. Oznacza to, że proces wymyślania hasła wymaga ogromnych ilości domysłów i dużej mocy obliczeniowej.

Widząc, że komputery po prostu coraz szybciej i że matematycy wciąż rozwijają te algorytmy, zastanawiam się, który z nich jest najbezpieczniejszy biorąc pod uwagę nowoczesną moc obliczeniową i techniki szyfrowania.

Używam MD5 prawie wyłącznie od lat i zastanawiam się, czy jest coś więcej, co powinienem zrobić. Czy powinienem rozważać inny algorytm?

Kolejne powiązane pytanie: jak długo powinno być pole dla takiego zaszyfrowanego hasła? Muszę przyznać, że wiem praktycznie nic o szyfrowaniu, ale zakładam, że hash MD5 (jako przykład) może być dłuższy i prawdopodobnie wymagałby większej mocy obliczeniowej, aby złamać. A może długość pola w ogóle nie ma znaczenia, pod warunkiem, że zaszyfrowane hasło pasuje do niego w pierwszej kolejności?

Author: Teekin, 2010-02-25

7 answers

Warning: Ponieważ ten post został napisany w 2010 roku, GPU zostały szeroko wdrożone do hashów haseł brute-force. GPU w umiarkowanej cenie może uruchomić dziesięć miliardów MD5s na sekundę. Oznacza to, że nawet całkowicie losowe 8-znakowe hasło alfanumeryczne (62 możliwe postacie) można brutalnie zmusić w 6 godzin. SHA-1 jest tylko nieznacznie wolniej, to zajmie jeden dzień. Hasła użytkownika są znacznie słabsze, a (nawet przy soleniu) spadnie w tempie tysięcy hasła na drugi. Funkcje Hash są zaprojektowane tak, aby były szybkie . Nie chcesz tego. do haseł. Użyj scrypt, bcrypt lub PBKDF-2.

MD5 został uznany za słaby w 1996 roku i nie powinien być już używany do celów kryptograficznych. SHA-1 jest powszechnie używanym zamiennikiem, ale ma podobne problemy. Na SHA-2 Rodzina funkcji hashowych jest aktualnym zamiennikiem SHA-1. Członkami SHA-2 są indywidualnie określane jako SHA - 224, SHA-256, SHA-384 i SHA-512.

W tej chwili kilka funkcji hashowych rywalizuje o SHA-3, kolejny znormalizowany kryptograficzny algorytm haszujący. Zwycięzca zostanie wybrany w 2012 roku. Żaden z nich nie powinien być jeszcze używany!

Do hashowania haseł można również rozważyć użycie czegoś w rodzaju bcrypt. Został zaprojektowany tak, aby był wystarczająco powolny, aby ataki brute force na dużą skalę były niewykonalne. Ty może sam dostroić powolność, dzięki czemu można ją spowolnić, gdy komputery stają się szybsze.

Warning: bcrypt jest oparty na starszym algorytmie szyfrowania dwukierunkowego, Blowfish, dla którego istnieją lepsze alternatywy. Nie sądzę, aby kryptograficzne właściwości haszujące bcrypt były w pełni zrozumiałe. Ktoś mnie poprawi, jeśli się mylę; nigdy nie znalazłem wiarygodnego źródła, które omawia właściwości bcrypt (inne niż jego powolność) z kryptografii perspektywa.

Może być nieco pocieszające, że ryzyko kolizji ma mniejsze znaczenie dla hashowania haseł niż dla kryptografii klucza publicznego lub podpisów cyfrowych. Korzystanie z MD5 dzisiaj jest okropnym pomysłem dla SSL, ale nie równie katastrofalnym dla hashowania haseł. Ale jeśli masz wybór, po prostu wybierz mocniejszy.

Używanie dobrej funkcji hash jest za mało , aby zabezpieczyć swoje hasła. Należy hashować hasła razem z sole które są długie i kryptograficznie losowe. Powinieneś również pomóc użytkownikom wybrać silniejsze hasła lub hasła, jeśli to możliwe. Dłużej zawsze jest lepiej.

 56
Author: molf,
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-08-14 21:57:05

Świetne pytanie! Ta strona {[2] } to dobra lektura. W szczególności Autor twierdzi, że MD5 nie nadaje się do hashowania haseł:

Problem w tym, że MD5 jest szybki. Podobnie jak jego współcześni konkurenci, jak SHA1 i SHA256. Szybkość jest celem projektowym nowoczesnego bezpiecznego hasha, ponieważ Hash jest budulcem prawie każdego kryptosystemu i zwykle jest wykonywany na żądanie na pakiet lub na wiadomość.

Prędkość jest dokładnie tym, czego nie chcesz w funkcja hash hasła.

Artykuł następnie wyjaśnia niektóre alternatywy i zaleca Bcrypt jako "właściwy wybór" (jego słowa, nie moje).

Zastrzeżenie: w ogóle nie próbowałem Bcrypt. Uznaj to za przyjazną rekomendację, ale nie coś, co mogę potwierdzić własnym doświadczeniem technicznym.

 10
Author: Matt Solnit,
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
2010-02-24 21:29:52

Aby zwiększyć siłę hasła, należy użyć szerszej gamy symboli. Jeśli masz 8-10 znaków w haśle, staje się to dość trudne do złamania. Chociaż wydłużenie go sprawi, że będzie bezpieczniejszy, tylko jeśli użyjesz znaków numerycznych/alfabetycznych/innych.

SHA1 jest kolejnym algorytmem hashującym (szyfrowanie jednokierunkowe), jest wolniejszy, ale ma dłuższą wersję. (kodowane messsage) (160 bit), gdzie MD5 ma tylko 128 bitów.

Wtedy SHA2 jest jeszcze bardziej bezpieczny, ale zużywa mniej.

 6
Author: Tony The Lion,
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
2010-02-24 21:21:59

Zasolenie hasła jest zawsze dodatkowym poziomem obrony

$salt = 'asfasdfasdf0a8sdflkjasdfapsdufp';
$hashed = md5( $userPassword . $salt );
 3
Author: David Morrow,
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
2010-02-24 21:26:47

Widząc, że komputery stają się coraz szybsze i że matematycy wciąż rozwijają te algorytmy

Szyfrowanie RSA jest bezpieczne, ponieważ polega na tym, że naprawdę duża liczba jest trudna do uwzględnienia. W końcu komputery będą wystarczająco szybkie, aby uwzględnić liczbę w rozsądnym czasie. Aby wyprzedzić krzywą, używasz większej liczby.

Jednak w przypadku większości witryn internetowych celem hashowania haseł jest niewygodne dla kogoś z dostępem do bazy danych, aby odczytać hasło, a nie zapewnić bezpieczeństwo. W tym celu MD5 jest w porządku1.

Sugeruje się, że jeśli złośliwy użytkownik uzyska dostęp do całej bazy danych, nie będzie potrzebował hasła. (Zamek w drzwiach wejściowych nie powstrzyma mnie przed wejściem przez okno.)


1 to, że MD5 jest "zepsute" nie oznacza, że możesz go odwrócić, kiedy tylko chcesz.

 3
Author: Seth,
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
2010-02-24 21:53:08

Poza tym, że jest kryptograficznie bezpieczną funkcją jednokierunkową, dobra funkcja hash dla ochrony hasłem powinna być trudna do brutalnej siły - tzn. powolna z założenia. Scrypt jest jednym z najlepszych w tej dziedzinie. Ze strony głównej:

Szacujemy, że na nowoczesnym (2009) sprzęcie, Jeśli 5 sekund zostanie spędzonych na przetwarzaniu pochodnego klucza, koszt hardware brute-force ataku na scrypt jest około 4000 razy większy niż koszt podobnego ataku na bcrypt (aby znaleźć ten sam hasło), a 20000 razy większy niż podobny atak na PBKDF2.

To powiedziawszy, z powszechnie dostępnych funkcji hashowych, wykonywanie kilku tysięcy iteracji czegokolwiek z rodziny SHA jest całkiem rozsądną ochroną dla niekrytycznych haseł.

Ponadto zawsze dodawaj sól, aby uniemożliwić dzielenie się wysiłkiem na brutalne wymuszanie wielu hashów na raz.

 1
Author: Ants Aasma,
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
2010-02-24 21:55:31

NIST prowadzi obecnie konkurs na wybór nowego algorytmu haszującego, podobnie jak w przypadku algorytmu szyfrowania AES. Więc odpowiedź na to pytanie będzie prawdopodobnie Inna w ciągu kilku lat.

Możesz sprawdzić zgłoszenia i przestudiować je dla siebie, aby zobaczyć, czy jest jeden, który chciałbyś użyć.

 0
Author: Jeffrey L Whitledge,
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
2010-02-24 21:31:46