Google Authenticator er et alternativ til SMS til 2Step-verifikation ved at installere en app på Android, hvor koderne sendes.

Det fungerer uden nogen forbindelse det fungerer endda i flytilstand. Dette får jeg ikke. Hvordan er det muligt, at det fungerer uden forbindelse? Hvordan synkroniserer mobiltelefonen og serveren for at vide, hvilken kode der er gyldig i det samme øjeblik?

Kommentarer

  • Koderne sendes ikke " ". De laves via et frø og en tæller .

Svar

Google Authenticator understøtter både HOTP og TOTP algoritmer til generering af engangskodeord.

Med HOTP deler serveren og klienten en hemmelig værdi og en tæller, der bruges til at beregne en engangskodeord uafhængigt af begge sider. Hver gang der genereres og bruges en adgangskode, øges tælleren på begge sider, så serveren og klienten forbliver synkroniseret.

TOTP bruger i det væsentlige den samme algoritme som HOTP med en større forskel. Tælleren, der bruges i TOTP, erstattes af den aktuelle tid. Klienten og s erver forbliver synkroniseret, så længe systemtiderne forbliver de samme. Dette kan gøres ved hjælp af Netværkstidsprotokol .

Den hemmelige nøgle (såvel som tælleren i tilfælde af HOTP) har at blive kommunikeret til både serveren og klienten på et eller andet tidspunkt. I tilfælde af Google Authenticator gøres dette i form af en QR-kode kodet URI. Se: KeyUriFormat for flere oplysninger.

Kommentarer

  • I tilfælde af HOTP, hvordan ved Google Authenticator, at jeg har " brugt " adgangskoden uden at synkronisere med serveren? Hvad Google Authenticator gør er, at det fortsætter med at blinke forskellige taster, og jeg kan bare bruge en hvilken som helst dem uden at give feedback til min mobil.
  • @MarioAwad Svaret på det findes på HOTP RFC, afsnit 7.4 . ietf.org/rfc/rfc4226.txt
  • Tak for det veldefinerede svar og opfølgning. Hurtigt resume af afsnit 7.4: Resynkronisering af tælleren ind imellem og et fremadrettet vindue til tælleren er det, der får tingene til at fungere uden at kræve øjeblikkelig synkronisering.
  • Som @TerryChia påpegede, den hemmelige nøgle er i QR-koden. Vær opmærksom på følsomheden af QRCode / Information. Jeg skrev et blogindlæg for et stykke tid siden netknights.it/en/the-problem-with-the-google-authenticator

Svar

Arbejder:

Authenticator implementerer TOTP-algoritmen Time-Based One-Time Password (TOTP). Den har følgende ingredienser:

• En delt hemmelighed (en række af bytes)

• Et input afledt af det aktuelle tidspunkt

• En signeringsfunktion

Delt hemmelighed: Den delte hemmelighed er, hvad du skal få for at oprette kontoen på din telefon . Enten tager du et billede af en QR-kode ved hjælp af din telefon, eller du kan indtaste hemmeligheden manuelt.

Input (aktuel tid): Den inputtidsværdi, du” får “fra din telefon, det er ikke nødvendigt med yderligere interaktion med serveren, når du først har fået hemmeligheden. Det er dog vigtigt, at din telefons tid er nøjagtig, da serveren gentager i det væsentlige, hvad der sker på din telefon ved hjælp af den aktuelle tid, som serveren kender.

Signeringsfunktion: Den anvendte signeringsfunktion er HMAC-SHA1. HMAC står for Hash-baseret meddelelsesgodkendelseskode, og det er en algoritme, der bruger en sikker envejs hash-funktion (SHA1 i dette tilfælde) til at underskrive en værdi. Brug af en HMAC giver os mulighed for at kontrollere ægtheden – kun personer, der kender hemmeligheden, kan generere den samme output for den samme input (den aktuelle tid).

OTP-algoritme :

Pseudokode:

original_secret = xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx secret = BASE32_DECODE(TO_UPPERCASE(REMOVE_SPACES(original_secret))) input = CURRENT_UNIX_TIME() / 30 // sets a constant value for 30 seconds hmac = SHA1(secret + SHA1(secret + input)) //apply hashing offset = hmac[len(hmac)-1] & 0x0F //Last nibble four_bytes = hmac[offset : offset+4] //takes a subset of 4 bytes from 20 bytes large_integer = INT(four_bytes) //Covert four bytes to integer small_integer = large_integer % 1,000,00 //gives 6 digit code 

indtast billedbeskrivelse her

Reference: https://garbagecollected.org/2014/09/14/how-google-authenticator-works/

Tjek også dette github-projekt til GO-implementering: https://github.com/robbiev/two-factor-auth/blob/master/main.go

Kommentarer

  • Understøtter ' ikke google-godkenderen også HOTP?

Svar

Det vil arbejde på et frø baseret på tid, så det ligner den måde, RSA nøgleringe fungerer. dvs. de behøver heller ikke nogen forbindelse.

Jeg har lige kigget mig rundt, og dette bliver besvaret her: https://stackoverflow.com/questions/8340495/how-rsa-tokens-works

Svar

Hvis en strace er sshd dæmon, man kan se, hvordan serveren “ved” om den hemmelige nøgle, da den læser brugerens konfigurationsfil:

#strace -f -v -e open /usr/sbin/sshd -p 2222 -dddd -f /etc/ssh/sshd_config 2>&1 | grep -i goog > > [pid 2105] open("/home/myuser/.google_authenticator", O_RDONLY) = 4 > > [pid 2105] open("/home/myuser/.google_authenticator~", > > O_WRONLY|O_CREAT|O_EXCL|O_TRUNC|O_NOFOLLOW, 0400debug3: > > mm_sshpam_respond: pam_respond returned 1 [preauth] 

Mobiltelefonen ved det allerede; du scannede det via QR eller indtastede det.

Kommentarer

  • Dette er et godt eksempel på, hvordan du demonstrerer, at tokens er ikke sendes til serveren, men forklarer ikke ' faktisk, hvordan det fungerer (hvilket er hvad OP spurgte)
  • Det betyder ikke ' t per se, men det løser ikke den manglende forbindelse.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *