Jak często powinny występować cyfry w kodzie jednorazowym?

Wszystko zaczęło się od tego wpisu, którego głównym bohaterem jest paradoks urodzin, a który przeczytałem niedawno. Kto by pomyślał, że wybierając losowo (tylko) tysiąc liczb ze zbioru (aż) czterech milionów liczb mamy (aż!) 10% szans na to, że wybrane liczby się powtórzą? Co prawda nie liczyłem samodzielnie, ale wynik wygląda na prawidłowy. WolframAlpha co prawda wymięka dla czterech milionów, ale dla jednego miliona liczy i wychodzi ok. 39%.

Przypomniało mi się niedawne narzekanie – nie pamiętam niestety czyje – że w hasłach jednorazowych przysyłanych przez mbank SMSem takie same cyfry występują obok siebie się zbyt często, więc chyba generator pseudolosowy jest słaby czy też wręcz zepsuty. Jak mi się przypomniał ten temat, to postanowiłem policzyć prawdopodobieństwo zdarzenia, że SMS, który dostaliśmy, zawiera hasło jednorazowe z powtarzającymi się obok siebie cyframi.

Cyfr w przysyłanym haśle jednorazowym jest osiem. Prawdopodobieństwo, że cyfra kolejna jest różna od cyfry poprzedniej wynosi dokładnie 0,9. Czyli, żeby cyfry się nie powtarzały, to druga musi być inna, niż pierwsza, trzecia inna, niż druga, …, i na koniec ósma inna, niż siódma. Pierwsza cyfra nie ma się z czym powtarzać, oczywiście.

Prawdopodobieństwo zdarzenia, że wszystkie cyfry są różne wynosi zatem dla ośmiocyfrowego hasła jednorazowego 0,9^7 (pierwsza cyfra nie ma znaczenia, bo nie ma się z czym powtarzać) czyli 47,83%. Jaka jest zatem szansa, że cyfry się koło siebie powtórzą? Oczywiście prawdopodobieństwo odwrotne, czyli 1 – 0,9^7. Czyli 52,17%. Zatem, jeśli wszystkie cyfry mają takie samo prawdopodobieństwo wylosowania na wszystkich pozycjach (a tak teoretycznie być powinno), to częściej dostaniemy hasło jednorazowe, gdzie mamy powtarzające się cyfry koło siebie, niż takie, w którym się nie powtarzają. Nie ma to oczywiście nic wspólnego z pierwotnym paradoksem urodzin, ale jest ciekawe.

Nawiasem, prawdopodobieństwo, że którekolwiek cyfry w otrzymanym haśle jednorazowym się powtórzą (niekoniecznie obok siebie) wynosi aż 98% (i to już liczymy wykorzystując wzór do paradoksu urodzin).

Jak mieć bezpieczne hasło i nie popaść w paranoję?

Za sprawą włamania na Wykop wywiązała się dyskusja o hasłach. Pisali o tym groszek (dead link), kUtek, Zal i generalnie z żadnym zaprezentowanym podejściem do końca nie mogę się zgodzić.

Jak dla mnie wszystkie te zabawy ze skrótami itp. są nie do przyjęcia. Albo hasło jest takie, że trzeba je pamiętać (czyli umieć wpisać z głowy), albo można sobie pozwolić na jakiś portfel haseł (i wtedy nie ma się co bawić, tylko można wygenerować losowe). Hasłami losowymi nie ma się co zajmować – mają być długie i możliwie losowe.

Pozostają hasła do zapamiętania. Tu trzeba rozróżnić serwisy krytyczne (także maile, na które mamy ustawione przypominanie haseł) i resztę. Krytyczne łatwo wyróżnić – możliwe większe straty finansowe, wycieki prywatnych danych itp. Pierwsza sprawa, to – jeśli to tylko możliwe – do serwisów krytycznych chronimy także login. Po co? Prosta sprawa, jeśli ktoś będzie chciał nam zrobić kuku, to nie ma co ułatwiać mu sprawy. Plus, niektóre serwisy (zwł. banki) mogą blokować po określonej ilości nieudanych logowań, więc źli ludzie mogą nam uprzykrzyć życie już samą znajomością loginu.

Poza tym, do serwisów krytycznych mamy możliwie mocne, nieschematyczne hasła, które pamiętamy, logujemy się możliwie tylko z zaufanych maszyn i w sposób bezpieczny (nie plain text), nie 20 zakładek na innych portalach otwartych w tym czasie. Jeśli zdarzy nam się logowanie awaryjne z niezaufanej maszyny/niebezpiecznym protokołem – jak najszybciej wymieniamy hasło (z bezpiecznej maszyny). Reszta w rękach admina serwisu. No może jeszcze nie chwalimy się zbytnio, które serwisy są dla nas krytyczne. 😉

Reszta, czyli serwisy niekrytyczne. Tak naprawdę zwykły użytkownik może zrobić tylko trzy rzeczy. Pierwsza, absolutnie konieczna: nie stosujemy takich samych haseł. Przy akcjach jak ta z Wykopem i podobnych, w razie czego włamywacz uzyska dostęp do jednego serwisu. Po takich włamaniach zwykle włamywacz automatem sprawdza, czy można zalogować się z takim samym loginem i hasłem na inne portale (chyba, że darzy nas szczególną uwagą, ale to trochę inna sprawa).

Jeśli chodzi o hasła, reszta to sprawy wtórne – jeśli stosujemy schemat/schematy to po takim włamie włamywacz raczej nie będzie miał dostępu do danych z kilku serwisów (chyba, że darzy nas szczególną uwagą, albo jedna i druga baza wpadną w ręce kogoś, kto nas darzy). Oczywiście warto zmieniać hasła okresowo i mieć różne schematy/hasła, ale wygoda kłóci się z bezpieczeństwem.

Sprawa druga: ustawiamy przypominanie/zmienianie hasła na zaufanego maila. W razie włamu przyda się do odzyskania dostępu, choćby po to, żeby zamieścić sprostowanie.

Sprawa trzecia, nieoczywista. Nie ufamy niekrytycznym portalom. Koniec, kropka. Mogą być poziomy dostępu (jak na Joggerze) ale nie znaczy to, że zamieszczone na wyższym poziomie dane są/będą niedostępne dla innych ludzi. Można to traktować jako kosmetykę, ale pisanie tam rzeczy, których nie napisało by się na stronie głównej to proszenie się o potencjalne kłopoty. Generalnie im mniej prywatnych/wrażliwych danych na takich serwisach, tym lepiej.

Trzeba przyjąć, że włamy itp. na serwisy niekrytyczne będą się zdarzały – przy ich ilości jest to jedynie kwestia czasu. I raczej będą to ataki na bazę serwisu, niż na nasze konto (chyba, że ktoś darzy nas szczególną uwagą), dlatego hasło należy mieć nieoczywiste, długie (dodanie przedrostka w stylu abcdefg (oczywiście nie chwalimy się nim) drastycznie wydłuży czas łamania hasła, jeśli ktoś nas „polubi”, ale IMO nie ma co popadać w paranoję. Co tak naprawdę się stanie, jeśli ktoś skorzysta z naszego konta do Wykopu (i tylko z niego)?

Po wykrytym włamaniu oczywiście zmieniamy hasło. Jeśli stosujemy hasła schematyczne, z oczywistym schematem, należy zmienić schemat i wymienić wszystkie hasła objęte danym schematem. Tyle dobrych rad, praktyka pokazuje, że kompromis między użytecznością a bezpieczeństwem zawsze jest trudny. Dlatego polecam określenie krytycznych serwisów i naprawdę dbanie o bezpieczeństwo w ich przypadku. W przypadku niekrytycznych i tak pewnie lenistwo AKA użyteczność AKA wygoda weźmie górę…