Obecnie najwięcej głosów na to pytanie brzmi:
Kolejna, która nie jest tak bardzo kwestią bezpieczeństwa, chociaż jest związana z bezpieczeństwem, jest kompletna i skrajna porażka zrozumieć różnicę między haszowaniem hasła a jego szyfrowaniem . Najczęściej spotykane w kodzie, w którym programista próbuje udostępnić niebezpieczną funkcję „Przypomnij mi moje hasło”.
Na czym dokładnie polega ta różnica? Zawsze miałem wrażenie, że haszowanie jest formą szyfrowania. Do jakiej niebezpiecznej funkcji odnosi się plakat?
Odpowiedzi:
Haszowanie to funkcja jednokierunkowa (cóż, mapowanie). Jest to nieodwracalne, stosujesz bezpieczny algorytm mieszania i nie możesz odzyskać oryginalnego ciągu. Jedyne, co możesz zrobić, to wygenerować coś, co nazywa się „kolizją”, czyli znaleźć inny ciąg, który zawiera ten sam hash. Bezpieczne kryptograficznie algorytmy wyznaczania wartości skrótu mają zapobiegać występowaniu kolizji. Możesz zaatakować bezpieczny haszysz za pomocą tęczowego stołu , któremu możesz przeciwdziałać, dodając sól do haszyszu przed jego przechowywaniem.
Szyfrowanie to właściwa (dwukierunkowa) funkcja. Jest odwracalny, możesz odszyfrować zniekształcony ciąg, aby uzyskać oryginalny ciąg, jeśli masz klucz.
Niebezpieczna funkcja, do której się odnosi, polega na tym, że jeśli zaszyfrujesz hasła, Twoja aplikacja ma gdzieś przechowywany klucz, a osoba atakująca, która uzyska dostęp do Twojej bazy danych (i / lub kodu), może uzyskać oryginalne hasła, uzyskując zarówno klucz, jak i zaszyfrowany tekst , podczas gdy z hashem jest to niemożliwe.
Ludzie zwykle mówią, że jeśli cracker jest właścicielem Twojej bazy danych lub Twojego kodu, nie potrzebuje hasła, więc różnica jest dyskusyjna. Jest to naiwne, ponieważ nadal masz obowiązek chronić hasła użytkowników, głównie dlatego, że większość z nich używa w kółko tego samego hasła, narażając ich na większe ryzyko, ujawniając ich hasła.
źródło
Haszowanie jest funkcją jednokierunkową, co oznacza, że po zaszyfrowaniu hasła bardzo trudno jest odzyskać oryginalne hasło z skrótu. Szyfrowanie to funkcja dwukierunkowa, w której znacznie łatwiej jest odzyskać oryginalny tekst z zaszyfrowanego tekstu.
Zwykłe haszowanie można łatwo pokonać za pomocą ataku słownikowego, w którym atakujący po prostu wstępnie haszuje każde słowo w słowniku (lub każdą kombinację znaków do określonej długości), a następnie używa tego nowego słownika do wyszukiwania zaszyfrowanych haseł. Użycie unikalnej, losowej soli dla każdego zapisanego zaszyfrowanego hasła znacznie utrudnia atakującemu użycie tej metody. Zasadniczo musieliby stworzyć nowy unikalny słownik dla każdej wartości soli, której używasz, strasznie spowalniając ich atak.
Przechowywanie haseł za pomocą algorytmu szyfrowania jest niebezpieczne, ponieważ jeśli użytkownikowi lub administratorowi łatwiej jest odzyskać oryginalne hasło z zaszyfrowanego tekstu, atakującemu łatwiej jest to zrobić.
źródło
Jak pokazano na powyższym obrazku, jeśli hasło jest zaszyfrowane, zawsze jest to ukryty sekret, z którego ktoś może wyodrębnić hasło w postaci zwykłego tekstu. Jednak gdy hasło jest zaszyfrowane, jesteś zrelaksowany, ponieważ nie ma prawie żadnej metody odzyskania hasła z wartości skrótu.
Wyodrębnione z zaszyfrowanych i zahaszowanych haseł - co jest lepsze?
Czy szyfrowanie jest dobre?
Hasła w postaci zwykłego tekstu mogą być szyfrowane przy użyciu algorytmów szyfrowania symetrycznego, takich jak DES, AES lub za pomocą innych algorytmów, i mogą być przechowywane w bazie danych. Przy uwierzytelnianiu (potwierdzeniu tożsamości za pomocą nazwy użytkownika i hasła) aplikacja odszyfruje zaszyfrowane hasło przechowywane w bazie danych i porówna je z podanym przez użytkownika hasłem dla równości. W tego typu podejściu do obsługi haseł, nawet jeśli ktoś uzyska dostęp do tabel bazy danych, hasła nie będą po prostu ponownie używane. Jednak jest też zła wiadomość. Jeśli w jakiś sposób ktoś zdobędzie algorytm kryptograficzny wraz z kluczem używanym przez Twoją aplikację, będzie mógł przeglądać wszystkie hasła użytkowników przechowywane w Twojej bazie danych przez odszyfrowanie. „To najlepsza opcja, jaką mam”, może krzyczeć programista, ale czy jest lepszy sposób?
Kryptograficzna funkcja skrótu (tylko w jedną stronę)
Tak, być może przegapiłeś punkt tutaj. Czy zauważyłeś, że nie ma potrzeby odszyfrowywania i porównywania? Jeśli istnieje jednokierunkowa metoda konwersji, w której hasło można przekonwertować na jakieś przekonwertowane słowo, ale operacja odwrotna (wygenerowanie hasła z przekonwertowanego słowa) jest niemożliwa. Teraz nawet jeśli ktoś uzyska dostęp do bazy danych, nie ma możliwości odtworzenia lub wyodrębnienia haseł za pomocą przekonwertowanych słów. Przy takim podejściu nie będzie prawie wcale, aby niektórzy mogli znać ściśle tajne hasła użytkowników; a to ochroni użytkowników używających tego samego hasła w wielu aplikacjach. Jakie algorytmy można zastosować w tym podejściu?
źródło
Zawsze myślałem, że szyfrowanie można przekonwertować w obie strony, w taki sposób, że wartość końcowa może przywrócić pierwotną wartość, a dzięki funkcji Hashing nie można przywrócić wyniku końcowego do pierwotnej wartości.
źródło
Algorytmy haszujące mają zwykle charakter kryptograficzny, ale główna różnica polega na tym, że szyfrowanie jest odwracalne poprzez odszyfrowanie, a haszowanie nie.
Funkcja szyfrowania zwykle pobiera dane wejściowe i generuje zaszyfrowane dane wyjściowe o tym samym lub nieco większym rozmiarze.
Funkcja mieszająca pobiera dane wejściowe i generuje zwykle mniejszy wynik, zwykle również o stałym rozmiarze.
Chociaż nie jest możliwe pobranie haszowanego wyniku i "dehashowanie" go w celu przywrócenia oryginalnego wejścia, zazwyczaj można brutalnie wymusić drogę do czegoś, co daje ten sam hash.
Innymi słowy, jeśli schemat uwierzytelniania pobiera hasło, haszuje je i porównuje z zaszyfrowaną wersją wymaganego hasła, może nie być wymagane, abyś faktycznie znała oryginalne hasło, tylko jego skrót i możesz użyć brutalnej siły drogę do czegoś, co będzie pasować, nawet jeśli jest to inne hasło.
Funkcje haszujące są zwykle tworzone w celu zminimalizowania ryzyka kolizji i utrudnienia obliczenia czegoś, co da ten sam hash, co coś innego.
źródło
Najlepiej byłoby zrobić jedno i drugie.
Najpierw należy zaszyfrować hasło w celu zapewnienia jednokierunkowego zabezpieczenia. Użyj soli dla dodatkowego bezpieczeństwa.
Następnie zaszyfruj hash, aby chronić się przed atakami słownikowymi, jeśli twoja baza danych skrótów haseł zostanie naruszona.
źródło
Haszowanie :
Jest to algorytm jednokierunkowy i raz zaszyfrowany nie może zostać wycofany i to jest jego słodki punkt przeciwko szyfrowaniu.
Szyfrowanie
Jeśli wykonamy szyfrowanie, będzie do tego klucz. Jeśli ten klucz zostanie ujawniony, wszystkie Twoje hasła mogą zostać łatwo odszyfrowane.
Z drugiej strony, nawet jeśli twoja baza danych zostanie zhakowana lub administrator twojego serwera wziął dane z DB i użyłeś zaszyfrowanych haseł, haker nie będzie w stanie złamać tych zaszyfrowanych haseł. Byłoby to praktycznie niemożliwe, gdybyśmy użyli hashowania z odpowiednią solą i dodatkowym zabezpieczeniem z PBKDF2.
Jeśli chcesz przyjrzeć się, jak należy pisać funkcje skrótu, możesz odwiedzić tutaj .
Istnieje wiele algorytmów do wykonywania haszowania.
MD5 - używa funkcji skrótu Message Digest Algorithm 5 (MD5). Wyjściowy hash ma długość 128 bitów. Algorytm MD5 został zaprojektowany przez Rona Rivesta na początku lat 90. i obecnie nie jest preferowaną opcją.
SHA1 - Używa algorytmu skrótu bezpieczeństwa (SHA1) opublikowanego w 1995 roku. Wyjściowy skrót ma długość 160 bitów. Chociaż jest to najczęściej używane, obecnie nie jest to preferowana opcja.
HMACSHA256 , HMACSHA384 , HMACSHA512 - Użyj funkcji SHA-256, SHA-384 i SHA-512 z rodziny SHA-2. SHA-2 został opublikowany w 2001 roku. Wyjściowe długości skrótu wynoszą odpowiednio 256, 384 i 512 bitów, jak wskazują nazwy funkcji skrótu.
źródło
Chociaż inne odpowiedzi mogą być poprawne, w kontekście, w jakim znajdował się cytat, haszowanie jest narzędziem, które można wykorzystać do zabezpieczania informacji, szyfrowanie jest procesem, który pobiera informacje i bardzo utrudnia odczyt / użycie osobom nieupoważnionym.
źródło
Oto jeden z powodów, dla których możesz chcieć użyć jednego nad drugim - odzyskiwanie hasła.
Jeśli przechowujesz tylko skrót hasła użytkownika, nie możesz zaoferować funkcji „zapomnianego hasła”.
źródło