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-ի համար

```pascal
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-ի համար

```pascal
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 մշակված ծրագրային ապահովում
Կատեգորիա:Գուգլի ծառայություններ