Google Authenticator
Google Authenticator jest programowym tokenem uwierzytelniania dwuetapowego stworzonym przez Google. Aplikacja generuje sześć cyfr, które należy podać podczas logowania razem z loginem i hasłem do usług Google.
Można stworzyć również listę "papierowych" haseł jednorazowych (tym razem jest to kilka zestawów ośmiocyfrowych), które można użyć awaryjnie w przypadku braku dostępu do telefonu (aplikacji). Hasła te należy zapisać lub wydrukować i przechowywać w bezpiecznym, ale dostępnym miejscu, np. portfelu. W każdej chwili listę tych haseł można odwołać i wygenerować nowy zestaw.
Google Authenticator można wykorzystać do logowania do systemu w połączeniu z modułem PAM i OpenSSH.
Implementacje
Google stworzyło wersje dla iOS,[1] BlackBerry, Android[2] i moduł PAM.[3] Istnieją implementacje stworzone przez inne osoby na następujące platformy:
- Windows Phone 7: Authenticator
- Windows Mobile: Google Authenticator for Windows Mobile
- Java CLI: Authenticator.jar
- Java GUI: JAuth
- J2ME: gauthj2me lwuitgauthj2me Mobile-OTP
- PalmOS: gauthj2me
- webOS: GAuth
- Windows: gauth4win
Opis techniczny
Google tworzy 80-bitowy tajny klucz dla każdego użytkownika w postaci ciągu 16 znaków Base32 oraz jako QR Code. Klient tworzy skrót HMAC-SHA1 używając do tego celu tajnego klucza oraz wiadomości, która jest liczbą 30-sekundowych okresów, które upłynęły od czasu uniksowego. Część HMAC jest wyodrębniana i konwertowana na sześciocyfrowy kod.
Pseudokod
function GoogleAuthenticatorCode(string secret)
key := base32decode(secret)
message := current Unix time ÷ 30
hash := HMAC-SHA1(key, message)
offset := last nybble of hash
truncatedHash := hash[offset..offset+4] //4 bajty zaczynające się od ofsetu
Set the first bit of truncatedHash to zero //usuń najbardziej znaczący bit
code := truncatedHash mod 1000000
pad code with 0 until length of code is 6
return code
Technologia
Google Authenticator używa algorytmu dla haseł jednorazowych bazujących na czasie zgodnie z RFC 6238.