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?
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?
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ł.
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.
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 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.
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.
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.
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.
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
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.
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%.
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.
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.