Pytanie:
Jak ważne jest trzymanie długości hasła w tajemnicy?
Crizly
2015-06-23 19:01:59 UTC
view on stackexchange narkive permalink

Czy utrzymywanie długości hasła w tajemnicy ma kluczowe znaczenie dla bezpieczeństwa?

Czy ktoś, kto wie, że masz hasło o długości powiedzmy 17, znacznie ułatwia brutalne użycie hasła?

W wyidealizowanym świecie ze znanym zestawem znaków i bez słowników lub innych skomplikowanych metod generowania haseł ** nieznajomość długości hasła kosztuje atakującego tyle samo, co jeden dodatkowy znak w zestawie znaków **.
Rozmiar ma znaczenie. Im krótszy, tym mniej chcesz o tym mówić.
znaczenie zachowania w tajemnicy długości jest odwrotnie proporcjonalne do długości.
Większość strun o długości do 17 ma * dokładnie * długość 17 (objętość n-kuli znajduje się blisko powierzchni)
@ColonelPanic Dla dużego n
Dziesięć odpowiedzi:
Mike Ounsworth
2015-06-23 19:24:52 UTC
view on stackexchange narkive permalink

Cóż, zacznijmy od matematyki: jeśli założymy, że twoje hasło składa się z dolnych, górnych i cyfr, to jest 62 znaków do wyboru (aby matematyka była łatwa, prawdziwe hasła również używają symboli). Hasło o długości 1 ma 62 możliwości, hasło o długości 2 ma 62 ^ 2 możliwości, ... hasło o długości n ma 62 ^ n możliwości.

Oznacza to, że jeśli znają twoje hasło ma dokładnie 17 znaków, wtedy mogą pominąć wszystkie hasła o długości mniejszej niż 17, a jest tylko 62 ^ 17 haseł do wypróbowania.

Ale ile jest haseł o długości mniejszej niż 17, w porównaniu do 62 ^ 17?

Cóż, jeśli dodamy 62 ^ n i podzielimy przez 62 ^ 17 otrzymamy (suma od n = 1 do n = 16 z 62 ^ n) / 62 ^ 17 = 0,016 ( link do obliczeń), więc sprawdzenie tylko haseł o długości 17 jest tylko 1,6% szybsze niż sprawdzanie wszystkich haseł o długości do 17

Jeśli mamy schemat haseł, który zezwala na wszystkie 95 drukowalnych znaków ASCII , wówczas oszczędności wynikające z braku konieczności próbowania haseł krótszych niż 17 spadają do 1,06 % ( link do kalkulacji).

Ciekawym matematycznym dziwactwem związanym z tym stosunkiem liczby haseł krótszych niż n do liczby haseł o długości n jest to, że tak naprawdę nie zależy od n. Dzieje się tak, ponieważ jesteśmy już bardzo blisko asymptoty 1/95 = 0,0105. Zatem atakujący uzyskuje taką samą względną lub procentową oszczędność czasu dzięki tej sztuczce, niezależnie od długości hasła; zawsze wynosi od 1% do 2%. Chociaż, oczywiście, absolutny czas, którego to zajmuje, rośnie o rzędy wielkości z każdą dodaną nową postacią.


Powyższe obliczenia zakładają prostego brutalnego forcera, który spróbuje a, b, c , ..., aa, ab, ... Co jest dobrym (ish) modelem łamania odpowiednio losowych haseł generowanych komputerowo, ale jest okropnym modelem zgadywania haseł generowanych przez ludzi.

Narzędzia do łamania prawdziwych haseł to oparte na słownikach, próbujące słowa (i ich kombinacje) ze słownika angielskiego, listy haseł, które wyciekły itp., więc do tych obliczeń należy podejść z przymrużeniem oka.

Innym efektem znajomości długości jest to, że nie muszą oni próbować żadnych haseł dłuższych niż 17 , co w przypadku algorytmów siłowych, które próbują kombinacji słów ze słownika, mogłoby w rzeczywistości być ogromnymi oszczędnościami.


Jak wspomnieli @SteveSether, @xeon i @CountIblis, ujawnienie długości (lub entropii) hasła może również wpłynąć na to, czy atakujący spróbuje złamać Twoje hasło odstraszając ich od silnych haseł i zamiast tego przyciągając ich do słabych. Więc jeśli wiesz, że masz silne hasło, ujawnij je! Jednak ujawnienie długości haseł (lub entropii) dla wszystkich użytkowników w systemie skutkuje wzmocnieniem silnych haseł, a słabszymi.


Podsumowanie:

Podanie komuś długości hasła nie jest najgorszą rzeczą, jaką możesz zrobić, ale nadal bym tego nie zrobił.

„Podanie komuś długości hasła nie jest najgorszą rzeczą, jaką możesz zrobić, ale nadal bym tego nie zrobił”. Istnieją przypadki użycia, w których przechowywanie tych informacji jest przydatne. (Dłuższe hasła -> więcej czasu między obowiązkowymi resetami haseł.) Jeśli bezpieczeństwo bazy danych zostanie naruszone, może dojść do wycieku. Optymalizacja na poziomie około 2% nie jest * znaczącą * wadą w porównaniu ze schematem, który nagradza dłuższe hasła. (Uwaga: właściwie przechowywałbym oszacowanie entropii zxcvbn, a nie długość, ale to też można oszacować w przybliżeniu).
@ScottArciszewski Świadomość, że system akceptuje tylko hasła, na przykład * dłuższe niż 17 *, w rzeczywistości daje atakującemu DUŻO MNIEJ niż 2% przyspieszenia, ponieważ liczba haseł mniejsza niż 17 jest znikoma w porównaniu z * 17 i więcej *. Inną kwestią jest to, że bazy danych powinny przechowywać zasolone skróty haseł, w którym to przypadku żadna informacja o długości nie wycieknie, jeśli baza danych zostanie skradziona.
Miałem na myśli: dwie kolumny `hasło` to hash bcrypt / [password_lock] (https://github.com/paragonie/password_lock),` siła` to oszacowanie entropii zxcvbn hasła do określenia, kiedy zmusić użytkownika do wykonania obowiązkowe resetowanie hasła (jednostronne 30 dni jest denerwujące, użyjmy warunkowania Pawłowa, aby nagrodzić silniejsze hasła).
@ScottArciszewski Fair. W efekcie zachowujesz dwa „skróty” dla każdego hasła: skrót bcrypt i entropia zxcvbn. Ponieważ zxcvbn oblicza się znacznie szybciej niż bcrypt, osoba atakująca musi wykonać tylko 100 000 (lub wtv) iteracji hasła kandydata, jeśli wyniki zxcvbn dokładnie się zgadzają. To OGROMNA przewaga dla atakującego. Ponieważ zxcvbn jest open source, sugerowałbym nieznaczną modyfikację algorytmu, aby przynajmniej wartości entropii w twojej bazie danych nie pasowały * dokładnie * do tych obliczonych przez standardową implementację.
Nazywa się to bezpieczeństwem, choć zapomnieniem. Lepszym pomysłem byłoby przechowywanie `(int) log ($ entropy, 2)`.
@ScottArciszewski ... jak to jest mniej bezpieczeństwa przez zaciemnienie? Nadal zmieniasz sposób obliczania wartości przechowywanej w kolumnie „entropia”. Teraz atakujący musi dopasować się do `(int) log (zxcvbn ($ password), 2)`, co jest nadal szybsze niż `bcrypt ($ password)` ... chyba że czegoś mi brakuje.
@ScottArciszewski Myśląc o tym więcej, z punktu widzenia tego wątku (tj. Ignorując inne czynniki), przechowywanie wyniku zxcvbn obok skrótu hasła jest w rzeczywistości gorsze niż przechowywanie długości, ponieważ jest o wiele więcej ciągów o tej samej długości niż ciągów które mają ten sam wynik zxcvbn z 3 miejscami po przecinku. To prawda, `(int) log_2 ()` bardzo to łagodzi.
@ScottArciszewski Każde oszacowanie entropii hasła daje atakującemu jedynie listę użytkowników-kandydatów, na których ma być celem. tj. „Zaatakuj Andy'ego 6-znakowym hasłem, ale nie Franka 17-znakowym”.
@ScottArciszewski Nie, pozwala również na filtrowanie słowników wymuszających brutalność, aby próbować tylko haseł pasujących do podanej długości / entropii.
@ScottArciszewski Zamiast przechowywać oszacowanie entropii, myślę, że znacznie lepiej jest przechowywać obliczony czas wygaśnięcia. Dodatkowo odrobina randomizacji, jak sugerował Mike, zapewni, że osoba atakująca, której uda się ustalić dokładny dozwolony czas życia hasła, nie obliczy dokładnej szacunkowej entropii.
@MikeOunsworth `ale nadal bym tego nie zrobił` w takim przypadku myślę, że twoje hasło jest dokładnie o jeden znak krótsze niż powinno. Innymi słowy, bezpieczeństwo uzyskane dzięki zwiększeniu długości hasła o jeden znak znacznie przewyższa potencjalną utratę bezpieczeństwa, informując wszystkich, jak długie jest hasło. Osobiście nie mam problemu z powiedzeniem światu, że używam hasła, które ma 32 znaki i 130 bitów entropii.
@MikeOunsworth Nie powiem, że przechowywanie (int) log ($ entropy, 2) jest bezpieczne, ale jeśli zxcvbn ($ password) jest liczbą zmiennoprzecinkową, to przechowywanie pierwszej jest prawdopodobnie bezpieczniejsze, ponieważ skracasz duża precyzja. Zmniejsza to ilość danych dostępnych dla atakującego. To jest jak różnica między powiedzeniem „Oto crc32 mojego hasła” a „Oto pierwsze 2 cyfry crc32 mojego hasła”. Oba mogą być złym pomysłem, ale pierwszy jest znacznie gorszy. Z drugiej strony, poprawianie zxcvbn bez zmiany precyzji byłoby zabezpieczeniem poprzez zaciemnienie.
@PatrickM Poprawienie algorytmu szacowania w celu obejścia problemu byłoby rzeczywiście zabezpieczeniem poprzez zaciemnienie. Ale zmienność nie musi być deterministyczna. Samo dodanie losowej liczby z zakresu od 0 do 1 wystarczyłoby, aby wyeliminować wyciek i uniknąć nieciągłości związanej z zaokrąglaniem.
Mając na uwadze, że podczas ręcznego tworzenia haseł wykorzystywana jest bardzo niewielka ilość miejsca do wprowadzania haseł, należy spodziewać się, że strategiczny przeciwnik będzie próbował złamać hasła niezależnie od ich długości. Przyspieszenie o 1,6% to mała zaleta właśnie dlatego, że przestrzeń wejściowa jest * bardzo duża *. Gdyby przestrzeń wejściowa była bardzo mała (jest) i dobrze znana atakującemu (nie wiemy, czy tak jest), wówczas ataki mogłyby być ułatwione znacznie bardziej niż o zaledwie 1,6% (ale nie możemy określić ilościowo ile za brak danych).
Należy usunąć "zgodnie z wolframem alfa". Każdy może zweryfikować Twoje roszczenie w ciągu kilku sekund za pomocą jednej linii języka Python, Octave, Mathematica lub cokolwiek innego. To tak, jakby powiedzieć „zgodnie z wolframem alfa, 1 + 1 = 2”.
@RenéG Tam, zredagowane tak, aby było dla Ciebie mniej obraźliwe. Zostawiam jednak linki do obliczeń, ponieważ nie są to oczywiste obliczenia dla osób bez mocnego przygotowania matematycznego. Ponadto nie jest to obliczenie, które można łatwo wykonać w większości języków programowania, ponieważ 62 ^ 17 (lub 95 ^ 17) to O WIELE więcej niż 2 ^ 32, a więc spowoduje przepełnienie int.
Nie chciałem być pedantem :) Nie głosowałem przeciw, to była tylko moja opinia. Tak czy inaczej, nie ma to znaczenia. Choć szczerze mówiąc, ktoś, kto nie wie, jak obliczyć tę sumę, nie powinien pracować z komputerami, prostymi szeregami geometrycznymi. Tło to tylko matematyka w szkole średniej.
@ScottArciszewski i tak po prostu nie ma obowiązkowego resetowania hasła, proszę. W rzeczywistości zmniejszają bezpieczeństwo.
Nie ma mnie w żadnej z moich aplikacji. Mówię tutaj ściśle hipotetycznie.
„jeśli wiedzą, że Twoje hasło ma dokładnie 17 znaków, mogą pominąć wszystkie hasła o długości mniejszej niż 17”. Mogą również pomijać hasła o długości * większej niż * 17. Wydaje się, że nie widzę, jak twoja analiza to rozważa. czego mi brakuje?
@MaskedMan Najprostszy atak siłowy polegałby na wypróbowaniu haseł w kolejności rosnącej długości. Tak więc hasła o długości 18 i większej nigdy nie zostałyby wypróbowane, ponieważ osoba atakująca znalazłaby hasło podczas wypróbowywania haseł o długości 17 i zatrzymałaby się po znalezieniu hasła.
@MaskedMan Masz rację, biorąc pod uwagę dużą liczbę dostępnych programów do łamania haseł, próba odgadnięcia, w jakiej kolejności będą próbowały haseł, to przegrana bitwa. Ta matematyka miała być przybliżonym pierwszym spojrzeniem na zrozumienie problemu, a nie ostateczną odpowiedzią. Jak zauważyłem w mojej drugiej sekcji, ta matematyka jest dość zła dla ataków słownikowych, ale nadal jest solidna do złamania całkowicie losowego hasła, takiego jak `= Wm) Z;] A@5m * vRhD`
Tom Leek
2015-06-23 20:13:22 UTC
view on stackexchange narkive permalink

Oprócz matematycznych wyszczególnionych przez @Mike'a, weź pod uwagę również, że długość hasła przecieka w każdym miejscu:

  • Gdy zostanie wpisane, podstępny obserwator może się tego nauczyć, licząc `` * '' na ekranie lub słuchając naciśnięć klawiszy (w tym drugim przypadku może nagrać dźwięk swoim smartfonem i odtwarzać go w wolnym czasie).

  • W klasycznym scenariuszu „przeglądarki internetowej” nazwa użytkownika i hasło zostaną przesłane do serwera za pośrednictwem protokołu HTTPS POST. Warstwa SSL szyfruje dane, ale SSL nie ukrywa długości danych, więc pasywny obserwator sieci również pozna długość hasła.

  • Zarówno interfejs użytkownika, jak i system odbierający będą przetwarzać hasło za pomocą funkcji, których czas wykonania i wzorce dostępu do pamięci będą zależały od długości hasła. Atakujący, którzy potrafią mierzyć czas, zwykle będą w stanie wywnioskować długość hasła na podstawie tych miar.

Dlatego rozsądnym podejściem jest potraktowanie długości hasła jako danych publicznych. Niektórzy atakujący nie będą mieli do niego dostępu (rodzaj atakujących, którzy właśnie pobrali kopię bazy danych serwera); inni będą to wiedzieć. Bardzo trudno jest ustalić, „jak bardzo tajne jest” długość hasła, a ponieważ bezpieczeństwo polega na kwantyfikowaniu rzeczy, najlepiej po prostu założyć, że wszyscy atakujący mogą wiedzieć długość hasła. Wiara w to, że możesz zachować to w tajemnicy, i szacowanie bezpieczeństwa na podstawie tego pojęcia byłoby zbyt niebezpieczne.

Nawet jeśli długość nie wyciekła, atakujący, który nie wie, że czyjeś hasło to dokładnie np. dziewięć znaków można rozpocząć od zgadnięcia wszystkich możliwych krótszych haseł, ponieważ liczba możliwych haseł mniejszych niż dziewięć znaków jest znacznie mniejsza niż liczba haseł dziewięcioznakowych.
TLS i SSH często używają szyfrów blokowych, co oznacza, że ​​dłuższe hasło spowoduje, że zaszyfrowana wiadomość będzie dłuższa tylko wtedy, gdy przepełnia blok (na przykład 8-bajtowa granica). Jeśli jednak hasło zostanie wpisane w ramach sesji interaktywnej (terminal przez SSH lub VNC przez SSH, ...), dla każdego naciśnięcia klawisza zostanie wysłany jeden pakiet, który ujawnia prawie tyle samo informacji, co dźwięk klucza użytkownika. kliknięcia.
Nowoczesna moda z TLS polega na używaniu zestawów szyfrów AES / GCM, w których nie ma dopełnienia - dzięki temu długość tekstu jawnego można określić z najwyższą precyzją.
Całkowita wielkość entropii pod warunkiem, że długość hasła nie jest zbyt trudna do obliczenia, a raczej MAKSYMALNA entropia ... załóżmy, że hasła mogą mieć dowolną długość od 1 znaku do 32, wtedy jest to najwyżej 5 bitów entropii, z oczywiście ciężkie wiązki w pobliżu dna o minimalną wymaganą długość. Oczywiście niektóre banki ograniczą Cię do 12 znaków (minimum 6), więc to NAJWYŻSZY tylko 2,5 bitu. Wszystko to oczywiście przy założeniu, że długość jest tajna, co nie jest ...
Myślę, że powiedzenie każdemu, kto próbuje brutalnie wymusić Twoje hasło, że masz hasło o długości 17 znaków, wystarczyłoby, aby zniechęcić go nawet do próby brutalnego wymuszenia hasła i znaleźć kolejną lukę w zabezpieczeniach. Dzięki temu uzyskaliby znaczną oszczędność czasu. ;)
@TomLeek brakuje Ci jednego kluczowego punktu. Dodatkowe dane, takie jak nazwy użytkowników, tokeny CSRF i reklamy itp., Zmienią długość treści. W takich przypadkach nie ma sensu słuchać takiego ruchu. Ponadto niektóre witryny same obliczają bcrypt po stronie klienta (nie jestem pewien), wyodrębniając w ten sposób długość z danych żądania.
@david: Tak, upływ czasu między naciśnięciami klawiszy to poważne ujawnienie, jest tam wiele wzajemnych informacji.
Nazwy użytkowników @prakharsingh95: prawdopodobnie nie są tajne w momencie, gdy ktoś próbuje złamać twoje hasło (ale jeśli nazwa użytkownika nie jest znana atakującemu, masz rację, będzie to zmylić próby określenia długości hasła na podstawie rozmiaru https żądanie pocztowe używane do logowania). Tokeny CSRF mają zwykle stałą długość dla danej witryny, a osoba atakująca może określić tę długość po prostu za pomocą witryny, ale bez wątpienia istnieją pewne wyjątki. Żądania https od użytkownika do serwera zazwyczaj nie zawierają reklam.
@SteveJessop Rzeczywiście. Jako reklamę podałem ogólną długość treści HTTPS. Wygląda na to, że dodanie jakiegoś losowego wypełnienia do treści POST z klienta zapobiegnie atakom z kanału bocznego (lub zaszyfrowaniu hasła po stronie klienta).
@prakharsingh95: Toma twierdzi, że istnieje zbyt wiele różnych sposobów, w jakie * może * wyciekać. Nawet gdybyś mógł zatkać ten jeden wyciek z wielu, nadal nie pozwala ci polegać na tajemnicy długości hasła. W przypadku protokołu HTTPS ogólnie rzecz biorąc, pewne pomieszanie długości może wyrzucić trochę plewy i zapobiec niektórym z prostszych wycieków informacji. Na przykład, jeśli masz witrynę internetową obsługującą 10 000 dokumentów o różnych długościach, możesz poważnie przyjrzeć się konsekwencjom atakującego, aby wywnioskować, które z tych dokumentów przegląda każdy z odwiedzających.
Steve Sether
2015-06-23 20:40:37 UTC
view on stackexchange narkive permalink

Ujawnienie długości hasła świadczy o sile hasła. Więc w gruncie rzeczy dajesz komuś wskazówkę, jak trudno odgadnąć.

Więc jeśli twoje hasło jest bardzo długie (w twoim przykładzie 17 znaków), są to w większości bezużyteczne informacje. Jeśli hasło jest krótkie (6 znaków), informuje atakującego, że możesz być wart ataku. Atakujący ścigają najłatwiejsze cele.

Nie nazwałbym informacji, które mogą zaoszczędzić wiele czasu attache „bezużytecznego” :)
Następstwem byłoby: Jeśli to możliwe, ogłoś długość hasła, która jest znacznie większa niż długość prawdziwego hasła. Jeśli atakujący zignoruje to, nic się nie stanie. Jeśli w to uwierzą, mogą powstrzymać się od próby złamania hasła (lub nawet spróbować złej długości hasła).
Lub powiedzmy, że jest krótszy, napastnik pomyśli, że łatwo go złamać i spędzi kilka miesięcy generując ciepło, nic nie produkując.
Lub kłamstwo na próżno: mam 18 długich (kiedy naprawdę jest 16 ... lub odwrotnie)
Peter
2015-06-27 03:03:36 UTC
view on stackexchange narkive permalink

Nie zgadzam się z zaakceptowaną odpowiedzią. Prawdą jest, że długość hasła jest prawie bezużyteczna, jeśli wszystkie hasła są losowo tworzone przez maszynę. To już nie obowiązuje, jeśli hasła są tworzone przez ludzi w zwykły sposób : na podstawie jednego lub większej liczby słów ze słownika wymieszaj wielkie litery małe litery, zastąp niektóre znaki liczbami lub znakami specjalnymi i dodaj przedrostki i sufiksy (np. „! 1”) itp.

Spójrzmy na 2 scenariusze, jeden to 10'000 ' 000 haseł i chcesz znaleźć jak najwięcej pasujących haseł do tych skrótów. Drugi to skrót jednego hasła i chcemy go złamać. W obu scenariuszach różnica okazuje się znacząca. Jak zwykle, wszystkie informacje mogą zostać wykorzystane w ataku, nawet jeśli na pierwszy rzut oka nie wydaje się takie.

Scenariusz 1: Złam wiele z 10 000 000 skróty haseł z ograniczonymi zasobami.

Możemy po prostu spróbować brutalnych ataków na wszystkie skróty haseł bez możliwości ich rozróżnienia, jeśli nie znamy długości hasła.

Jeśli użyj wyczerpującego ataku bruteforce (który gwarantuje znalezienie hasła), wiedząc, że długość hasła zapewni jedynie minimalny zysk. Czemu? Brute wymuszanie wszystkich siedmiocyfrowych haseł zajmuje około 1-2% tak długo, jak brutalne forsowanie wszystkich ośmiocyfrowych haseł. Jedyne, co zyskujemy znając długość, to to, że nie musimy brutalnie wymuszać wszystkich 7-cyfrowych (i mniejszych) haseł, jeśli już wiemy, że hasło ma 8 cyfr. Tyle tylko, że brutalny atak wymaga niemal nieskończonych zasobów (mocy obliczeniowej i / lub czasu) i dlatego nie jest czymś, co możemy lub zrobimy.

Zamiast tego testujemy serię „prawdopodobnych” haseł dla każdej długości hasła . Jednym ze sposobów jest atak słownikowy. Testowanie prawdopodobnych haseł jest o kilka rzędów wielkości tańsze niż użycie wyczerpującej brutalnej siły, ale ma ogromną wadę: po sprawdzeniu wszystkich „prawdopodobnych” 7-cyfrowych haseł z hashem hasła, ale nie znaleźliśmy pasującego hasła, nie wiedzieć, czy pasujące hasło dla tego skrótu hasła jest dłuższe niż 7 cyfr. Więc jeśli nie wiemy na pewno, że hasło nie jest dłuższe niż 7 cyfr, nadal musimy przetestować skrót hasła ze wszystkimi „prawdopodobnie” 8-cyfrowymi hasłami, 9-cyfrowymi hasłami, 10-cyfrowymi hasłami itp. - i podczas testowania prawdopodobnych haseł, tak jak wyczerpujący bruteforce, koszt testowania dłuższych haseł rośnie wykładniczo. Ponieważ wiemy, że hasło ma 7 cyfr, nie musimy go testować z prawdopodobnie 8, 9, 10, 11, 12 cyframi i nawet dłuższymi hasłami, oszczędzając naprawdę ogromną ilość pracy.

Jest lepiej. Po przetestowaniu wszystkich prawdopodobnych haseł o długości, powiedzmy, 20 cyfr, możemy teraz wydać nasze pozostałe zasoby na atak siłowy na te skróty haseł o małej długości hasła, którego nasze poprzednie wyszukiwanie „prawdopodobnych” haseł nie złamało . Powiedzmy, że pozostało 2 000 000 niezrozumianych haseł haseł, a 100 000 z nich ma hasła zawierające mniej niż 6 cyfr. Pamiętaj, że mamy ograniczony budżet. 6-cyfrowe hasła są tanie do złamania. Ale ponieważ wiemy, które 100 000 to 6 lub mniej cyfr, musimy teraz brutalnie wymusić 100 000 6-cyfrowych haseł, aby złamać 100 000, zamiast brutalnego wymuszania 2 000 000 haseł do złamania 100 000 6 hasła cyfrowe. To 5% pracy przy takim samym wyniku!

Jeśli spojrzymy na wszystkie połączone korzyści, dokładny zysk, jaki uzyskamy ze znajomości długości haseł, zależy od szybkości naszej metody testowania „prawdopodobnych” haseł, odpowiedniego wskaźnika sukcesu naszej metody testowania prawdopodobnych haseł dla każdego hasła długość, rozkład długości haseł w zbiorze skrótów haseł, które chcemy złamać, oraz ilość dostępnych zasobów (szybkość obliczeń, czas). Ale znając długości haseł możemy z łatwością kilkakrotnie zwiększyć liczbę haseł, które znajdziemy przy danej ilości zasobów - jeśli liczby działają na naszą korzyść, możemy prawdopodobnie zmniejszyć koszt zasobów do złamania 30 % haseł o rząd wielkości lub więcej.

Scenariusz 2: Złamanie pojedynczego hasła w ataku ukierunkowanym

Nie znając długości hasła, musimy rozdzielić nasze zasoby między brutalne wymuszanie wszystkich kluczy o krótkiej długości i testowanie prawdopodobnych haseł o większej długości. Zakładając, że wydamy połowę naszych zasobów na każde z nich, znajomość długości hasła pozwala nam całkowicie przekazać jedno z 2, a tym samym podwoić nasze dostępne zasoby.

Zdobywamy również dodatkowe informacje, które mogą być niezwykle cenne w ukierunkowanym atak:

  • Jeśli hasło jest wystarczająco krótkie, aby je brutalnie wymusić, możemy określić górną granicę tego, ile czasu zajmie nam uzyskanie hasła. Może to spowodować, że podejmiemy kilka ataków, których inaczej byśmy nie rozważali.

  • Możemy również obliczyć prawdopodobieństwo złamania hasła w ogóle. Jeśli wiemy, że prawdopodobnie nie złamiemy hasła, możemy poświęcić nasze zasoby na znalezienie innych sposobów na złamanie zabezpieczeń systemu.

  • Jeśli mamy 2 różne hasła od tego samego użytkownika, możemy sprawdź, czy jest szansa, że ​​są to w rzeczywistości to samo hasło. Jeśli różnią się tylko o 2-3 cyfry, możemy zgadnąć, że dłuższe hasło może być takie samo jak krótsze, plus prefiks lub sufiks.

  • Jeśli zdobędziemy jeszcze więcej informacji o haśle, może to przynieść zysk o wiele większy niż 2 sztuki pojedynczo . Na przykład, jeśli dowiemy się, że hasło to pojedyncze słowo ze słownika oksfordzkiego, nadal masz szansę zabezpieczyć hasło, jeśli na przykład możemy brutalnie wymusić tylko jedno hasło na minutę. Ale jeśli wiemy, że długość hasła to 17 cyfr, gra się skończyła.

Wygląda na to, że twoja niezgoda z zaakceptowaną odpowiedzią Mike'a Ounswortha w dużej mierze opiera się na tym: zakłada, że hasła są wybierane jednolicie losowo z pełnego zestawu ciągów, ale nie robisz tego, zakładasz, że zostały wybrane przez ludzi w drodzeludzie robią.Myślę, że pomogłoby to w twojej sprawie, gdybyś podkreślił różnice w założeniach.
Vladislavs Dovgalecs
2015-06-24 01:32:35 UTC
view on stackexchange narkive permalink

Ujawnienie długości hasła ma wpływ. Jeśli Twoje hasło jest słabe (krótkie hasło), osoba atakująca może skupić się na jego złamaniu. Jeśli hasło jest silne (długie hasło), osoba atakująca może zbadać inne kierunki ataku. Tak więc znajomość długości hasła pozwala hakerowi wybrać lepszą strategię, oszczędzając czas.

WoJ
2015-06-26 14:42:51 UTC
view on stackexchange narkive permalink

Oprócz odpowiedzi, które dają dobry przegląd Twojego pytania, należy wziąć pod uwagę jeszcze jedną rzecz: dokonując oceny ryzyka musisz założyć, że atakujący wie wszystko o metodologii używanej do tworzenia hasła .

Innymi słowy, jeśli Twoje hasło składa się z czterech przeciętnych angielskich słów sklejonych razem, wszystkie małe litery ( à la xkcd) wtedy musisz założyć (inaczej, że robi to xkcd, BTW), że atakujący otrzyma odpowiedni słownik i spróbuje tylko kombinacji czterech słów.

Masz teraz spację kluczową (liczbę możliwości), która w porównaniu z czasem potrzebnym do sprawdzenia jego elementów na poziomie [liczba związana z określonymi technologiami i środowiskami] prób / sekundę - a to daje statystyczny czas, w którym hasło przetrwa atak.

Teraz możesz zdecydować, czy to wystarczająco długo, z Twoimi własnymi kryteriami (cykl życia hasła, czas pracy z tym kontem, wiek wszechświata, ...)


Jeśli weźmiemy przykład xkcd, byłoby to

  • średnie słownictwo osoby mówiącej po angielsku wynosi około 12 000 słów. Zróbmy połowę tego (czyli 6000)
  • daje to 6000 ^ 4 = ~ 10 ^ 15 kombinacji
  • załóżmy 1000 testów / s na atak online - to jest 10 ^ 12 sekund = 20 000 lat
  • atak offline będzie znacznie skuteczniejszy. Ile zależy od wielu rzeczy, wyspecjalizowane cracking GPU może zaatakować hash w zakresie 10 ^ 9 testów / s, co skraca czas na takie hasło do 15 dni. Zakłada się jednak, że haszowanie nie zostało poprawnie zaprojektowane ( zaszyfrowanie hasła powinno zająć dużo czasu)
Jako wskazówkę możemy użyć słownika [Diceware] (http://viousware.com). To 6 ^ 5 = 7,776 słów. log2 (7776) ~ 12,9 (bitów). Diceware zakłada, że ​​słowa są generowane w sposób niezależny, losowy, równomiernie rozłożony (zwykle przy użyciu fizycznych kości, stąd nazwa).
Count Iblis
2015-06-23 23:54:26 UTC
view on stackexchange narkive permalink

Celowe ujawnienie długości hasła, pod warunkiem, że używasz tylko bardzo długich haseł, zmniejszy prawdopodobieństwo, że hakerzy spróbują je odgadnąć, na co zwraca uwagę Steve Sether w swojej odpowiedzi. Tak więc w rzeczywistości zwiększasz bezpieczeństwo, celowo ujawniając informacje o swoim haśle.

Wydaje mi się, że to technicznie prawda, ale wzrost bezpieczeństwa jest tak bliski zeru, że normalnie bym go zdyskontował.
lub mogą spróbować zhakować go w inny sposób. brutalna siła dla wszystkich haseł <= 8, socjotechnika dla haseł> 8.
gnasher729
2015-06-24 16:33:08 UTC
view on stackexchange narkive permalink

Atakujący nie użyje ataku siłowego, wypróbuje każde możliwe hasło, ale najpierw spróbuje hasła bardziej prawdopodobnego. Całkowicie losowe, ośmioliterowe hasło może być trudniejsze do złamania niż proste do odgadnięcia siedemnastoliterowe hasło.

W rezultacie atakujący nie spróbuje najpierw wszystkich krótkich haseł, ale będzie próbował haseł o różnej długości podczas całego ataku. Więc jeśli masz 18-literowe hasło „hellohellohello123”, nie jesteś bezpieczny; całkowicie losowe ośmioliterowe hasło może być bezpieczniejsze.

Twarde ośmioliterowe hasło jest trudniejsze do odgadnięcia, ponieważ osoba atakująca próbuje również takich rzeczy jak „hellohellohello123” przed sprawdzeniem wszystkich ośmioliterowych haseł. Jeśli podasz atakującemu długość hasła, ta odrobina korekty zniknie. Strata jest więc dużo gorsza niż wspomniano wcześniej 1,26%.

Generalnie to prawda, ale hasła o długości 8 są tak łatwe do złamania brutalną siłą, że nie są tutaj dobrym przykładem. (3 dni przy użyciu wszystkich rodzajów znaków, 11 minut przy użyciu tylko małych liter łacińskich i cyfr)
@Sarge W zależności od funkcji skrótu, jej parametrów i dostępnych zasobów obliczeniowych do jej złamania, brutalne wymuszenie 8-cyfrowego hasła może trwać od (prawie) zera do (prawie) nieskończoności. Nie można sformułować ogólnego stwierdzenia, że ​​złamanie 8-cyfrowego hasła zajmuje 3 dni. Jeśli ktoś używa skrótu, do którego 8-cyfrowe hasło może zostać złamane w ciągu 11 minut przez realistycznego napastnika, najwyraźniej wybrał niewłaściwy skrót.
@SargeBorsch: Skąd to masz? Na przykład iPhone potrzebuje około 0,1 sekundy, aby sprawdzić hasło _one_ i nie ma absolutnie żadnego sposobu na obejście tego. Złamanie nawet 8 cyfr zajmuje 3 miesiące.
iPhone nie jest przykładem, mają słaby sprzęt i mogą mieć też sztuczne ograniczenia. Mam to z https://howsecureismypassword.net/
@gnasher729 Czy kiedykolwiek korzystałeś z aplikacji typu brute force na GPU? Na moim starym GPU 4 lata temu haszował 4 miliardy haseł na sekundę. IPhone jest wolny, tak, ale 0,1 sekundy wydaje się przesadzony, prawdopodobnie jest bliżej 0,1 ms.
@Peter użytkownik może nie wiedzieć, która metoda mieszania jest używana na serwerze jakiejś innej firmy.
@Aidiakapi iPhone potrzebuje około 80 ms obliczeń, aby przetestować jedno hasło (najnowsze modele dodają sztuczne opóźnienia narzucane sprzętowo w przypadku powtarzających się błędnych domysłów). Zobacz na przykład [iOS Security, październik 2012, Apple] (https://www.apple.com/br/ipad/business/docs/iOS_Security_Oct12.pdf), strona 9 w pliku PDF.
@Michael Kjörling To tylko dla własnego bezpieczeństwa. Możesz po prostu utworzyć aplikację do obliczania skrótów dla brutalnego wymuszania haseł dla innych scenariuszy. Jestem również całkiem pewien, że nowoczesne iPhone'y obsługują GPGPU, pozwalając ponownie na brutalne wymuszenie GPU, kilka rzędów wielkości szybciej niż podejścia oparte na CPU. Niemniej jednak za złamanie samego hasła iPhone'a jest to rzeczywiście interesujące zabezpieczenie.
Quora Feans
2015-06-27 23:28:31 UTC
view on stackexchange narkive permalink

Wszystko , co zmniejsza entropię hasła, zmniejsza jego siłę.

Może się zdarzyć, że nawet jeśli ujawnisz długość hasła, pozostała możliwa pula haseł jest nadal wystarczająco duża.

Jeśli chodzi o konkretny przykład, zbiór wszystkich haseł o długości 17 to z pewnością wystarczająco silny przeciwko prawie wszystkim atakom. Pod warunkiem, że nie ujawnisz innych szczegółów, takich jak „Moje hasło o długości 17 zawiera imię mojego kotka, którego nikt nie zna”.

Długość 17 oznacza 272843561753653169767435615050624325866274580142388791900214521038955085904188409449281578168966401 (z uwzględnieniem możliwych kombinacji liter i cyfr - 80 możliwych kombinacji znaki specjalne). Jestem pewien, że to wystarczy, biorąc pod uwagę naszą obecną moc obliczeniową. Liczba powyżej jest rzędu wielkości cyfry, po której następuje 98 0.

The Broken Ace
2015-06-28 04:11:35 UTC
view on stackexchange narkive permalink

Tak. To jest BARDZO kluczowe. Program o nazwie Crunch generuje dla Ciebie listy słów. Zakresy takie jak 1-17 znaków zajmą 15610 petabajtów! Jeśli jednak haker wie, że Twoje hasło ma dokładnie 17 znaków, zajmie to znacznie mniej czasu. Dlatego jest to kluczowe.

Dokładnie 17 znaków zajmuje taką samą ilość danych do przechowywania, jak wszystko do 17 znaków włącznie. Wszystkie znaki 1-16 to po prostu błąd zaokrąglenia w porównaniu do rozmiaru 17.
O. Nie wiedziałem tego.
Przestrzeń wyszukiwania dla 17-znakowego hasła jest dość szalona. Pomyśl o tym, jeśli masz 17 znaków (z 62 możliwych znaków na spację), masz 1-16 na * każdy * z 62 znaków w 17 miejscu. To z definicji sprawia, że ​​wszystkie 1-16 znaków zajmują co najwyżej 1/62 przestrzeni zaledwie 17.


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...