Google Authenticator är ett alternativ till SMS för 2Step-verifiering, installerar en app på Android där koderna skickas.

Det fungerar utan anslutning; det fungerar även i planläge. Det här får jag inte. Hur är det möjligt att det fungerar utan anslutning? Hur synkroniserar mobiltelefonen och servern för att veta vilken kod som är giltig just nu?

Kommentarer

  • Koderna skickas inte " ". De görs via en frö och räknare .

Svar

Google Authenticator stöder både HOTP och TOTP -algoritmer för att skapa engångslösenord.

Med HOTP delar servern och klienten ett hemligt värde och en som används för att beräkna ett engångslösenord oberoende på båda sidor. När ett lösenord genereras och används ökas räknaren på båda sidor så att servern och klienten kan förbli synkroniserade.

TOTP använder i princip samma algoritm som HOTP med en större skillnad. Räknaren som används i TOTP ersätts av aktuell tid. Klienten och s erver förblir synkroniserade så länge systemtiden förblir desamma. Detta kan göras med Network Time protocol .

Den hemliga nyckeln (liksom räknaren när det gäller HOTP) har att kommuniceras till både servern och klienten vid någon tidpunkt. När det gäller Google Authenticator görs detta i form av en QRCode-kodad URI. Se: KeyUriFormat för mer information.

Kommentarer

  • I fallet med HOTP, hur vet Google Authenticator att jag har " använt " lösenordet utan att synkronisera med servern? Vad Google Authenticator gör är att den fortsätter att blinka olika tangenter och jag kan bara använda någon av dem utan att ge feedback till min mobil.
  • @MarioAwad Svaret på det finns på HOTP RFC, avsnitt 7.4 . ietf.org/rfc/rfc4226.txt
  • Tack för det väldefinierade svaret och uppföljningen. Snabb sammanfattning av avsnitt 7.4: Omsynkronisering av räknaren då och då och ett fönster framåt för räknaren är det som får saker att fungera utan att kräva omedelbar synkronisering.
  • Som @TerryChia påpekade, den hemliga nyckeln finns i QR-koden. Var medveten om känsligheten för QRCode / Information. Jag skrev ett blogginlägg för ett tag sedan netknights.it/en/the-problem-with-the-google-authenticator

Svar

Arbetar:

Authenticator implementerar algoritmen för tidsbaserat engångslösenord (TOTP). Den har följande ingredienser:

• En delad hemlighet (en sekvens av byte)

• En ingång härledd från aktuell tid

• En signeringsfunktion

Delad hemlighet: Den delade hemligheten är vad du behöver få för att ställa in kontot på din telefon . Antingen tar du ett foto av en QR-kod med din telefon eller så kan du ange hemligheten manuellt.

Ingång (aktuell tid): Ingångstidsvärdet du bara får från din telefon, ingen ytterligare interaktion med servern krävs när du har fått hemligheten. Det är dock viktigt att din telefons tid är korrekt eftersom servern kommer i huvudsak att upprepa vad som händer på din telefon med den aktuella tiden som servern känner till.

Signeringsfunktion: Den signeringsfunktion som används är HMAC-SHA1. HMAC står för Hash-baserat meddelandeautentiseringskod och det är en algoritm som använder en säker enkelriktad hashfunktion (SHA1 i detta fall) för att signera ett värde. Med hjälp av en HMAC kan vi verifiera äktheten – endast personer som vet hemligheten kan generera samma utdata för samma ingång (aktuell tid).

OTP-algoritm :

Pseudokod:

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 

ange bildbeskrivning här

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

Kolla även in detta github-projekt för GO-implementering: https://github.com/robbiev/two-factor-auth/blob/master/main.go

Kommentarer

  • Stöder inte ' t Google-autentiseraren stöder också HOTP?

Svar

Det kommer att fungera på ett frö baserat på tid så att det liknar hur RSA-nyckelfobar fungerar. dvs de behöver inte heller någon anslutning.

Jag har just tittat runt och detta besvaras här: https://stackoverflow.com/questions/8340495/how-rsa-tokens-works

Svar

Om en strace är sshd demon, man kan se hur servern ”vet” om den hemliga nyckeln, när den läser användarens 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 vet redan det; du skannade det via QR eller skrev det in.

Kommentarer

  • Detta är ett bra exempel på hur man visar att tokens är skickas inte till servern, men förklarar inte ' hur det fungerar (vilket är vad OP frågade)
  • Det gör inte ' t per se, men det tar upp bristen på anslutning.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *