Pytanie:
Czy Facebook przechowuje hasła w postaci zwykłego tekstu?
Michał Šrajer
2014-03-16 21:58:32 UTC
view on stackexchange narkive permalink

Miałem zamiar zresetować swoje hasło do Facebooka i otrzymałem ten błąd:

Twoje nowe hasło jest zbyt podobne do obecnego. Spróbuj innego hasła.

Zakładałem, że Facebook przechowuje tylko skróty haseł, ale jeśli tak, w jaki sposób może zmierzyć podobieństwo haseł? To powinno być niemożliwe z dobrą funkcją mieszającą, prawda?

Pytanie brzmi - jak to możliwe i jakie są tego konsekwencje?

Z góry dziękuję.

AKTUALIZUJ”

Nie wyjaśniłem tego jasno - nie poproszono mnie o podanie starego ani nowego hasła. Była to procedura „resetowania hasła”, w której podaję tylko nowe hasło, więc większość odpowiedzi z sugerowanego duplikatu nie ma zastosowania.

AKTUALIZACJA2

zagadka rozwiązana - zobacz komentarz (od inżyniera Facebooka)

Odpowiedź na to pytanie znajduje się poniżej i ktoś, kto widział kod, potwierdził, że jest poprawny! Nie potrzeba więcej spekulacji.
Zauważyłem, że w wielu witrynach internetowych pojawiają się komunikaty typu „już używałeś tego hasła”. Dlatego niektóre witryny nie tylko porównują ostatnią. Przypuszczam, że można to nazwać środkiem bezpieczeństwa, ale nie mogę się powstrzymać od poczucia, że ​​jest to niepotrzebne.
Rodzaj duplikatu: http://security.stackexchange.com/questions/47840/password-security (ponieważ wykluczyłeś niedawno wprowadzone hasło, większość odpowiedzi nie pasuje idealnie, ale niektóre nadal tak. a jeden z nich jest tutaj dość bliski pierwszej odpowiedzi)
„Czy Facebook przechowuje hasła w postaci zwykłego tekstu?”[Tak] (https://krebsonsecurity.com/2019/03/facebook-stored-hundreds-of-millions-of-user-passwords-in-plain-text-for-years/).
Sześć odpowiedzi:
Michał Šrajer
2014-03-16 22:33:04 UTC
view on stackexchange narkive permalink

Miejmy nadzieję i załóżmy, że Facebook przechowuje tylko skróty aktualnego hasła (i potencjalnie poprzednich).

Oto, co mogą zrobić:

  1. użytkownik ustawia pierwsze hasło na „pierwsze”, a fb przechowuje hash („pierwsze”).

  2. później użytkownik resetuje hasło i jest proszony o podanie nowego hasła „First2”

  3. Facebook może generować kilka haseł (podobnych do nowego): ["First2", "fIrst2", "firSt2", ... "first2", ... "first ", ...], a następnie porównaj hash każdego z nich z przechowywanym hashem.

To jedyne rozwiązanie, jakie przychodzi mi do głowy. Jakieś inne?

Ta odpowiedź brzmi, jak robi to Facebook. Źródło: przeczytałem i zmodyfikowałem kod źródłowy do sprawdzania hasła.
[Dlaczego Facebook przeszkadza?] (Http://security.stackexchange.com/questions/53658/why-does-facebook-bother-comparing-old-and-new-passwords)
Jeśli są zaszyfrowane, muszą przechowywać (co najmniej) dwa skróty, ponieważ akceptują hasła, a także hasło z odwróconą wielkością. (KaCkE kontra kAcKe)
Myślałem, że dobry hash powinien to zrobić, więc nie można niczego odczytać z hasha (zmiana jednego bitu całkowicie zmieni hash)?
@TruthOf42 Wykonuje rodzaj ataku brutalnego opartego na nowym haśle, nie odwraca żadnych skrótów ani nie porównuje skrótów poza testowaniem ich dokładnej równości.
@Anonymouse Właśnie ponownie przeczytałem: tworzy listę haseł podobnych do hasła, haszuje je i utrzymuje tę wynikową listę. Gdy następnie tworzysz nowe hasło, jeśli skrót jest równy jednemu z poprzednich, oznacza to, że jest zbyt podobne
@TruthOf42 Właściwie wygląda na to odwrotnie - skróty podobnych haseł nie są przechowywane. Podobieństwo haseł zależy im tylko na tym, że tworzysz nowe hasło, więc haszują odmiany nowego hasła, porównują je ze starym hashem, a następnie wyrzucają, jeśli nie pasują (jeśli pasują , ostrzegają).
@TruthOf42, co mówi cpast. Ma to również dużo większy sens, jeśli chodzi o przestrzeń dyskową, nie zgadzasz się?
@Anonymouse absolutnie, nie wspominając o tym, że przechowywanie skrótów podobnych haseł może prowadzić do problemów, jeśli okaże się, że algorytm haszujący ma jakąś wadę
@JeffFerland: Jeff, czy mógłbyś podać liczbę podobnych haseł, które z grubsza próbujesz odgadnąć i zahaszować? 10? 100? 1000? Jestem po prostu ciekawy.
@MichałŠrajer Obecnie Facebook testuje całkowicie odwróconą skrzynkę po zalogowaniu. Facebook testuje całkowicie odwróconą wielkość liter i odwrócenie pierwszej litery przy zmianie hasła.
Ale czy nie musisz wpisywać swojego obecnego hasła, aby zmienić hasło na nowe? Mogliby po prostu porównać przed zrobieniem sumy hash
@JonasDralle To byłoby wystarczające w większości przypadków, ale ta metoda może być przydatna podczas próby ustalenia, czy nowe hasło jest podobne do któregokolwiek z wcześniej używanych haseł.Nie jestem jednak pewien, czy Facebook to robi.
@XtraSimplicity prawdopodobnie nie.
Właśnie zauważyłem, że Outlook przekazuje tę samą wiadomość i było to zaskakujące, ponieważ moje hasło zmieniało się, zmieniając całkowicie pierwsze słowo - nie tylko odwrócenie wielkości liter lub wariancję liczb / symboli - ale pozostawiając resztę bez zmian.Dawny.FluffyDoggy do RambunctiousDoggy.Podejrzewam, że muszą również uwzględnić tego rodzaju scenariusz.
Czy to oznacza, że facebook używa tej samej soli do każdego hasła?
@sluge Nie, to znaczy, że generują skróty "First2", "fIrst2", "firSt2", ... "first2", ... "first", ... z tą samą solą, co stary przechowywany hash.Jeśli jeden z nich pasuje, wyświetlają błąd.Jeśli żaden z nich nie pasuje, wyrzucają je wszystkie i haszują nowe hasło nową solą.
TildalWave
2014-03-17 01:51:16 UTC
view on stackexchange narkive permalink

Nie wiedziałbym, czy to robią (nawet nie używają Facebooka), ale możliwe jest również, że używają sprzętowych modułów bezpieczeństwa (HSM) do swoich kryptoprocesów, które nie przechowują zaszyfrowanych haseł ale jedynie zaszyfruj je odwracalnie. Biorąc pod uwagę liczbę żądań autoryzacji, z którymi muszą sobie radzić, miałoby to sens, ponieważ jest to o rząd wielkości szybsze niż bezpieczne (czytaj: wolne) haszowanie haseł, a jednocześnie zapewnia bezpieczne przechowywanie haseł.

Moduły HSM można następnie zaprogramować tak, aby porównywały zapisane i nowe hasło jako dane wejściowe jednej z ich funkcji i po prostu zwracały jego wynik (może to być nawet wartość logiczna w naszym przypadku), przy czym oryginalne hasło nigdy nie zostało przesłane lub przechowywane w postaci zwykłego tekstu w dowolnym miejscu, poza pamięcią wewnętrzną (która jest odporna na manipulacje). Zwykle nazywa się to wbudowanym bezpiecznym kluczem i przechowywaniem / przetwarzaniem aplikacji .

Nawiasem mówiąc, wiele banków używa HSM, ponieważ jego prawidłowa implementacja wymaga również fizycznego zabezpieczenia same urządzenia i sposób uzyskiwania do nich dostępu (a ponadto są one dość kosztowne), ale to oczywiście zapewnia znacznie większą elastyczność w sposobie bezpiecznego przetwarzania haseł bez ich ujawniania.

Wątpię w to. Moduły HSM oferują bezpieczne i szybkie przetwarzanie kryptograficzne, ale nie zapewniają dużej pojemności. Nie znam żadnego HSM, który byłby w stanie przechowywać hasła wszystkich użytkowników Facebooka.
@user1039462 Słyszałeś kiedyś o bezpiecznym przechowywaniu odpornym na manipulacje? Jeśli to jest dobre dla DoD, dlaczego nie miałoby być dla Facebooka? I tak, możesz mieć całkowicie wystarczającą pojemność, jeśli jesteś gotów za to zapłacić. Nie wszystkie moduły HSM są dostępne w postaci kluczy USB. ;)
Sam obsługuję kilka modułów HSM opartych na PCI, ale wszystkie mają pojemność kilkuset kluczy. Czy możesz wskazać mi przykład z dużą pamięcią masową? Jestem ciekawy.
Ile kluczy potrzebujesz? Możesz użyć [podłączonego do sieci HSM] (https://encrypted.google.com/search?q=Network-Attached+HSM) i zewnętrznych woluminów zaszyfrowanych i odpornych na manipulacje. Albo, o ile wiem, mogli zbudować własne urządzenia HSM z dużymi wolumenami wewnętrznymi. Przykład? No nie wiem, od Luna SA do AWS CloudHSM?
user11869
2014-03-16 22:50:08 UTC
view on stackexchange narkive permalink

Jest tylko jedna poprawna odpowiedź na to pytanie. Nikt nie wie (z wyjątkiem Facebooka).

Facebook może przechowywać twoje hasło do Facebooka w postaci zwykłego tekstu, ale może istnieć również schemat wykorzystujący rozmyte skróty lub wstępnie obliczone skróty podobnych haseł.

Tak naprawdę nie można się tego dowiedzieć, chyba że włamiemy się do Facebooka i nie skontrolujemy wszystkich jego zasobów.

jeśli naprawdę uda ci się włamać na facebooka ... bądź miły i przewiń;)
Bezużyteczna odpowiedź. Najwyraźniej szukamy sposobów, w jakie Facebook (a co ważniejsze, nasze witryny) może to zrobić, zachowując jednocześnie bezpieczeństwo.
Ta odpowiedź nie jest do końca poprawna, ponieważ jeśli FB * przechowuje hasła w postaci zwykłego tekstu, mogą istnieć dowody na to, że to robią (np. W postaci czegoś, co nie byłoby możliwe, gdyby nie przechowywał zwykłego tekstu). Przeczytałem pytanie OP jako pytanie na ten temat; w szczególności * czy obserwowane zachowanie dowodzi, że przechowywane są hasła w postaci zwykłego tekstu? *
Pamiętaj, że były inżynier Facebooka (i obecny diament) [potwierdził] (https://security.stackexchange.com/questions/53481/does-facebook-store-plain-text-passwords#comment84577_53483), że zaakceptowana odpowiedź to w rzeczywistościjak Facebook to robi, więc to naprawdę nie jest poprawne.Poza tym OP tak naprawdę nie pytał, jak * właściwie * to robią - pytali tylko, jak Facebook * może * to zrobić.
Ammusionist
2014-03-17 05:35:48 UTC
view on stackexchange narkive permalink

Inną możliwością jest to, że Facebook przechowuje skrót Twojego hasła i skrót SOUNDEX Twojego hasła. Następnie, gdy wprowadzisz nowe hasło, może porównać skrót swojego SOUNDEX z poprzednio zapisanymi i odpowiedzieć, że hasło jest zbyt podobne.

To oczywiście tylko domysły.

Witamy w klubie, ale mam nadzieję, że nie tak to robią, że byłoby zbyt łatwo dopasować je do słowników haseł i zawęzić do kilku możliwych opcji dla większości kont, gdyby ich baza danych została naruszona. Zakładając, że może to ujawnić, powinniśmy naprawdę spróbować wezwać [@JeffFerland] (http://security.stackexchange.com/users/836/jeff-ferland), aby na to odpowiedzieć. Mod tutaj i inżynier produkcji na Facebooku, to powinno wystarczyć. :)
Prawdopodobne, ponieważ hasło może przejść przez soundex, a następnie zaszyfrować zmienną soundex, aby porównać z poprzednią zaszyfrowaną wersją soundex.
mohrphium
2014-03-17 00:12:30 UTC
view on stackexchange narkive permalink

Inną możliwością jest to, że fb nie haszuje, ale szyfruje hasła kluczem głównym. Niż mogliby go odszyfrować w dowolnym momencie, aby porównać go z nowym.

  1. Miejmy nadzieję, że nie - powinni to zaszyfrować!
  2. Jak zauważył Rell3oT, nikt nie wie poza fb . Więc wszystko, co możemy zrobić, to rzucać szalone domysły na ring.
w założonym przypadku "facebook używa klucza głównego", czy rozsądne byłoby założenie asymetrycznego użycia, w przeciwnym razie system musiałby mieć "klucz główny" zawsze w pamięci, a włamanie do serwera oznaczałoby również znajomość "klucza głównego" dostępne w pamięci, dzięki czemu zaszyfrowane rzeczy są raczej zwykłym tekstem
Ze względów bezpieczeństwa jest to to samo, co przechowywanie haseł w postaci zwykłego tekstu.
Wciąż często używany - zakładam również, że (miejmy nadzieję) facebook ma kilku wykwalifikowanych specjalistów od bezpieczeństwa, którzy znają się na tych rzeczach.
Royce Williams
2016-12-27 09:31:54 UTC
view on stackexchange narkive permalink

Podaj trochę więcej szczegółów na temat samej metody przechowywania haseł.

Wcześniejsze odpowiedzi historyczne poprzedzają jakiekolwiek potwierdzenie z Facebooka. Ale na Passwords 14 Alec Muffett wygłosił przemówienie, w którym szczegółowo opisał przechowywanie haseł na Facebooku.

W swoim wystąpieniu potwierdza, że ​​Facebook nie jest przechowywanie haseł w postaci zwykłego tekstu, ale raczej korzysta z metody wieloetapowej, która jest dość odporna na różnorodne ataki:

slide from Alec Muffett talk, showing Facebook's password storage method

... w następujący sposób:

  $ cur = 'plaintext' # MD5 tekst jawny. $ cur = md5 ($ cur) # Hash SHA1 z solą 160-bitową. $ salt = randbytes (20) $ cur = hmac_sha1 ($ cur, $ salt) # Hash SHA256 z tajną solą, używając wewnętrznie wyodrębnionej usługi kryptograficznej. $ cur = cryptoservice :: hmac ($ cur) [= hmac_sha256 ($ cur, $ secret )] # Przeprowadź wynik przez scrypt KDF (używając nieujawnionych parametrów strojenia) $ cur = scrypt ($ cur, $ sól) # Użyj SHA256 (aby zredukować i znormalizować wynik dużego scrypt) $ cur = hmac_sha256 ($ cur, $ salt )  

Ten poziom oporu nie powinien być zaskakujący, ponieważ Muffett jest autorem crack, jednego z pierwszych skutecznych narzędzia do łamania haseł.

Mamy więc teraz potwierdzenie, że Facebook nie przechowuje haseł w postaci zwykłego tekstu.



To pytanie i odpowiedź zostało automatycznie przetłumaczone z języka angielskiego.Oryginalna treść jest dostępna na stackexchange, za co dziękujemy za licencję cc by-sa 3.0, w ramach której jest rozpowszechniana.
Loading...