Google Authenticator

Google Authenticator, Google-ի կողմից թողարկված երկփուլ աուտենտիֆիկացման հավելված, որը աշխատում է Time-based One-time Password Algorithm (TOTP) և HMAC-based One-time Password Algorithm (HOTP) ալգորիթմների շնորհիվ։ Ծառայությունը իրականացնում է [rfc:6238 RFC 6238-ում] և [rfc:4226 RFC 4226-ում] նշված ալգորիթմները։

Authenticator-ը 6- կամ 8-նիշանի, միանգամյա օգտագործման համար նախատեսված թվային գաղտնաբառ է, որը օգտագերը պետք է ներկայացնի մասնակցային հաշվի և գաղտնաբառի հետ՝ Google-ի կամ այլ ծառայությունների ծառայությունները մուտք գործելու համար։ Authenticator նաև կարող է կոդ ստանալ կողմնակի հավելվածների համար, ինչպիսիք են, օրինակ, գաղտնաբառերի մենեջերները և ֆայլերի հոսթինգի ծառայությունները։ Հավելվածի նախկին տարբերակները բաց կոդով մատչելի էին GitHub-ում, բայց վերջին տարբերակները Google-ի սեփականությունն են։

Օգտագործման օրինակ 
Որպես կանոն, ի սկզբանե օգտատերերը պետք է հավելվածը ներբեռնեն և տեղադրեն իրենց բջջային սարքերում։ Կայք մուտք գործելու կամ ծառայության ծառայություններով օգտվելու համար, պետք է ներմուծել մասնակցային հաշիվը և գաղտնաբառը, բացել Authenticator հավելվածը և հատուկ դաշտում ներմուշել միանգամյա օգտագործման համար նախատեսված գաղտնաբառը։

Դրա համար կայքը օգտագիրոջը տրամադրում է ընդհանուր գաղտնի բանալի, որը պետք է պահպանված լինի Google Authenticator հավելվածում։ Այդ գաղտնի բանալին կօգտագործվի բոլոր հետագա կայք մուտքերի համար։

Երկփուլ աուտենտիֆիկացման շնորհիվ գաղտնաբառի/մասնակցային հաշվի իմացությունը բավական չէ մասնակցային հաշիվը ջարդելու համար։ Չարագործը նաև պետք է իմանա գաղտնի բանալին կամ պետք է Google Authenticator-ով սարքին ֆիզիկական մուտք ունենա։ Այլընտրանքային տարբերակ է MITM հարձակումը՝ եթե օգտատիրոջ համակարգիչը վարակված է տրոյանով, ապա մասնակցային հաշիվը, գաղտնաբառը և միանգամյա օգտագործման համար նախատեսված գաղտնաբառը կարող են խափանվել՝ սեփական մուտքի սեսսիան նախաձեռնելու կամ օգտատիրոջ ու կայքի միջև ինֆորմացիան փոփոխելու համար։

Իրականացումներ 
Google Authenticator տրամադրված է Android-ի, BlackBerry-ի, և iOS-ի համար։ Նաև առկա են մի քանի կողմնակի իրականացումներ՝

Windows Phone 7.5/8/8.1/10: Microsoft Authenticator Virtual TokenFactor
Windows Mobile: Google Authenticator for Windows Mobile
Java CLI: Authenticator.jar
Java GUI: JAuth FXAuth 
J2ME: gauthj2me lwuitgauthj2me   Mobile-OTP (Chinese only)  totp-me
Palm OS: gauthj2me
Python: onetimepass
PHP: GoogleAuthenticator.php
Ruby: rotp, twofu
Rails: active_model_otp (third party implementation)
webOS: GAuth
Windows: gauth4win MOS Authenticator  WinAuth
.NET: TwoStepsAuthenticator
HTML5: html5-google-authenticator
MeeGo/Harmattan (Nokia N9): GAuth
Sailfish OS: SGAuth, SailOTP
Apache: Google Authenticator Apache Module
PAM: Google Pluggable Authentication Module oauth-pam
Backend: LinOTP (Management Backend implemented in python)
Chrome/Chrome OS: Authenticator
iOS: OTP Auth

Տեխնիկական բնութագիր 
Ծառայություն մատուցողը յուրաքանչյուր օգտատիրոջ համար ստանում է 80-բիթանոց գաղտնի բանալի (սակայն RFC 4226 §4-ը պահանջում է նվազագույնը 128 բիթ և խորհուրդ է տալիս 160 բիթ)։ Բանալին տրամադրվում է Base32 կոդավորմամբ 16-, 26-, 32-նիշանի տողի կամ QR-կոդի տեսքով։ Գաղտնի բանալու միջոցով կլիենտը ստեղծում է HMAC-SHA1
 TOTP-ի տարբերակի համար՝ «UNIX-ի դարաշրջանի» 30-վայրկյանանոց ինտերվալների քանակից
 և  հաշվիչից, որը մեծացվում է ամեն HOTP տարբերակի համար ամեն նոր կոդով։

Հետո HMAC -ի մի մաս հանվում է փոխակերպվում է 6-նիշանի կոդի։

Կեղծ կոդ Time-based OTP-ի համար 
  function GoogleAuthenticatorCode(string secret)
      key := base32decode(secret)
      message := floor(current Unix time / 30)
      hash := HMAC-SHA1(key, message)
      offset := last nibble of hash
      truncatedHash := hash[offset..offset+3]  //4 bytes starting at the offset
      Set the first bit of truncatedHash to zero  //remove the most significant bit
      code := truncatedHash mod 1000000
      pad code with 0 until length of code is 6
      return code

Կեղծ կոդ Event/Counter OTP-ի համար 
  function GoogleAuthenticatorCode(string secret)
      key := base32decode(secret)
      message := counter encoded on 8 bytes
      hash := HMAC-SHA1(key, message)
      offset := last nibble of hash
      truncatedHash := hash[offset..offset+3]  //4 bytes starting at the offset
      Set the first bit of truncatedHash to zero  //remove the most significant bit
      code := truncatedHash mod 1000000
      pad code with 0 until length of code is 6
      return code

Ծանոթագրություններ

Հղումներ 
 Google Authenticator  on Google Help
 Google Authenticator legacy source code on GitHub
 Google Authenticator implementation in Python on Stack Overflow

Գուգլի ծառայություններ
2010 մշակված ծրագրային ապահովում