sobota, 3 września 2011

Wprowadzony kod nie został zweryfikowany - problemy z weryfikacją dwuetapową Google

Czas na kolejnego posta wyjaśniającego zawiłości technologii, która zaskakuje nas każdego dnia prostymi rzeczami. Od jakiegoś czasu korzystam z weryfikacji dwuetapowej dla swojego konta Google. Prosta rzecz, a daje pewność, że nawet jeśli ktoś pozna moje hasło to i tak nie będzie mógł się zalogować. Fajnie? Fajnie było, ale tylko do czasu.

Cała patent opiera się na tym, że podczas logowania do swojego konta z nowej maszyny lub przeglądarki jesteśmy proszeni już nie tylko o swoje standardowe hasło, ale również o dodatkowy 6-cyfrowy kod. Kod ten może być generowany np. przez specjalną aplikację zainstalowaną w telefonie. Wpisujemy więc szybko kod, który ważny jest tylko jakieś 30 sekund i po pomyślnej weryfikacji wreszcie otrzymujemy dostęp do konta. Super. Tylko co, gdy kod wygenerowany przez aplikację nagle okazuje się nieprawidłowy?

No dobra, zdarza się. Próbujemy jeszcze raz. Hmm, znowu? To już chyba coś nie tak. I jeszcze ten komunikat:

Wprowadzony kod nie został zweryfikowany
(The code you entered didn't verify)

To jak? Nie mogli go zweryfikować (np. awaria systemu), czy po prostu jest nieprawidłowy?! Mniejsza z tym. Oczywiście chodzi o to, że kod jest nieprawidłowy. Ale dlaczego? Przecież taki mi się wyświetla. Postanowiłem skorzystać z kodów zapasowych trzymanych w bezpiecznym miejscu. Zalogowałem się, wyłączyłem kłopotliwy mechanizm i postanowiłem skonfigurować od nowa aplikację na telefonie. A nuż pomoże. Czytam znowu te wszystkie informacje o tym jak działa weryfikacja dwuetapowa, czytam sobie i... nagle mnie oświeca.

Kody generowane przez aplikację są zależne od czasu. Są więc generowane w jakiś sposób na podstawie zegara, bieżącej godziny. Rzut okiem na czas systemowy - 21:03, rzut okiem na czas w telefonie - 21:08. WTF? Albo coś się zrąbało w komputerze albo w telefonie. Aaaa... przecież już nie raz łapałem się na tym, że zegar mi na Androidzie śpieszy. Nie pomagała synchronizacja z operatorem, nie pomagały ręczne poprawki. I tak po jakimś czasie znowu szedł te kilka minut do przodu.

Ok. W takim razie kończę ponowną konfigurację mechanizmu weryfikacji na swoim koncie, cofam zegar w telefonie, odpalam aplikację, wpisuję kod na stronie... Voila! Jestem.

PS. Ostatecznie nie wiem z jakim zegarem powinienem mieć zsynchronizowany czas w telefonie żeby kody były generowane poprawnie, ale przypuszczam, że można się sugerować godziną podawaną przez serwery typu time.nist.gov, time.windows.com, etc. Póki co tak jest dobrze.