Jak strzelić sobie z łuku w kolano

Raz na miesiąc przychodzi taki dzień, gdy trzeba zmienić hasło do systemu. Procedura zmiany hasła jest prosta. Zagłębiam się w mroczne czeluście swojego umysłu i wybieram jakąś podstępną frazę, którą następnie przekształcam według pewnego algorytmu i na wyjściu mam nowe hasło, które towarzyszyć będzie mi przez najbliższe 30 dni. Gdyby to było tak proste...

Przez kilka pierwszych dni uporczywie najpierw wpisuję poprzednie hasło, dopiero potem przestawiam się na automatyczne wpisywanie nowej frazy. W tym czasie wiele rzeczy może pójść nie tak. Na przykład fraza może (nie)świadomie zmutować w mej zawodnej pamięci (luźne skojarzenie: Random bit flips in hardware and security). Mogę też poplątać przekształcenie, które do niej stosuję. Choć sam schemat jest w miarę spójny, to za wprowadzam do niego kilka spontanicznych modyfikacji, o których później mogę zapomnieć. Do tego wszystkiego trzeba jeszcze dodać... zwykłe literówki.

Raz na jakiś czas nadchodzi godzina gadziny. Na przykład wracam z kuchni z kubeczkiem herbaty (a to jest angażujące zadanie), siadam przed swoim zablokowanym komputerem i... Nic, pustka, cisza.

Właśnie dziś zdarzyła mi się (prawie) taka sytuacja – im bardziej wpisywałem hasło, tym bardziej było ono nieprawidłowe. Oczywiście mogłem zresetować sobie hasło z poziomu administratora, ale twardym trzeba być, nie miękkim (ewentualne problemy z sekretami przechowywanymi przez DPAPI tutaj pominę). Ja nie złamię swojego hasła?!

Procedura była prosta. Frazę mniej więcej pamiętałem. Mniej więcej, bo w międzyczasie zmutowała mi do czterech możliwych postaci. Następnie dla każdej z tych postaci zastosowałem przekształcenia, które zwykle stosuję, oraz modyfikacje, które mogły radośnie wpaść mi do głowy. Kolejnym krokiem było poradzenie sobie z ewentualnymi literówkami. Ten problem rozwiązałem w sposób brutalny – po prostu na podstawie każdego “bazowego” hasła generowałem (to już skryptem oczywiście) zestaw kolejnych możliwych haseł według prostej zasady – kolejne znaki (pozycje) w haśle bazowym zastępowałem wszystkimi możliwymi znakami (pythonowo: string.letters + string.digits + string.puntctuation). Ostatni krok mógłbym powtarzać w celu uzyskania słownika zawierającego potencjalne hasła uzyskane w wyniku więcej niż jednej literówki. W każdym razie na wyjściu otrzymałem słownik złożony z prawie 7 000 pozycji. Pozostało tylko skorzystać z Caina i spokojnie zalogować się do systemu :)

P.S. Literówka wynikała z tego, że prawa ręka pracowała szybciej niż lewa. Po prostu prawą ręką zdążyłem wprowadzić dwa znaki zanim lewą zdążyłem zwolnić SHIFT. I udało mi się to DWA razy pod rząd podczas zmiany hasła (nowe hasło i jego potwierdzenie).

Oryginał tego wpisu dostępny jest pod adresem Jak strzelić sobie z łuku w kolano

Autor: Paweł Goleń