Google Authenticator ist eine Alternative zu SMS für die 2Step-Überprüfung und installiert eine App auf Android, in der die Codes gesendet werden.

Es funktioniert ohne Konnektivität; Es funktioniert sogar im Flugzeugmodus. Dies ist, was ich nicht bekomme. Wie ist es möglich, dass es ohne Konnektivität funktioniert? Wie synchronisieren sich das Mobiltelefon und der Server, um zu wissen, welcher Code gerade gültig ist?

Kommentare

  • Die Codes werden nicht “ gesendet „. Sie werden über einen Startwert und einen Zähler erstellt

Antwort

Google Authenticator unterstützt sowohl das HOTP und TOTP -Algorithmen zum Generieren von Einmalkennwörtern.

Bei HOTP teilen sich Server und Client einen geheimen Wert und a Zähler, mit dem auf beiden Seiten unabhängig voneinander ein Einmalkennwort berechnet wird. Immer wenn ein Kennwort generiert und verwendet wird, wird der Zähler auf beiden Seiten erhöht, sodass Server und Client synchron bleiben.

TOTP verwendet im Wesentlichen den gleichen Algorithmus wie HOTP mit einem Hauptunterschied: Der in TOTP verwendete Zähler wird durch die aktuelle Zeit ersetzt. Der Client und s Erver bleibt synchron, solange die Systemzeiten gleich bleiben. Dies kann mithilfe des Netzwerkzeitprotokolls erfolgen.

Der geheime Schlüssel (sowie der Zähler im Fall von HOTP) hat zu einem bestimmten Zeitpunkt sowohl dem Server als auch dem Client mitgeteilt werden. Im Fall von Google Authenticator erfolgt dies in Form eines QRCode-codierten URI. Weitere Informationen finden Sie unter: KeyUriFormat .

Kommentare

  • Im Fall von HOTP, woher weiß Google Authenticator, dass ich “ “ das Kennwort verwendet habe, ohne mit dem Server zu synchronisieren? Google Authenticator blinkt weiterhin verschiedene Schlüssel und ich kann sie einfach verwenden, ohne meinem Handy Feedback zu geben.
  • @MarioAwad Die Antwort darauf finden Sie im HOTP RFC, Abschnitt 7.4 . ietf.org/rfc/rfc4226.txt
  • Vielen Dank für die genau definierte Antwort und das Follow-up. Eine kurze Zusammenfassung von Abschnitt 7.4: Hin und wieder eine Neusynchronisierung des Zählers und ein Vorausschaufenster für den Zähler sorgen dafür, dass die Dinge funktionieren, ohne dass eine sofortige Synchronisierung erforderlich ist.
  • Wie @TerryChia betonte, der geheime Schlüssel ist im QR-Code. Beachten Sie die Empfindlichkeit des QRCode / Information. Ich habe vor einiger Zeit einen Blog-Beitrag geschrieben. netknights.it/en/the-problem-with-the-google-authenticator

Antwort

Arbeiten:

Authenticator implementiert den TOTP-Algorithmus (Time-Based One-Time Password). Es enthält die folgenden Bestandteile:

• Ein gemeinsames Geheimnis (eine Folge von Bytes)

• Eine Eingabe, die aus der aktuellen Zeit abgeleitet wurde

• Eine Signaturfunktion

Gemeinsames Geheimnis: Das gemeinsame Geheimnis ist das, was Sie benötigen, um das Konto auf Ihrem Telefon einzurichten . Entweder machen Sie mit Ihrem Telefon ein Foto eines QR-Codes oder Sie können das Geheimnis manuell eingeben.

Eingabe (aktuelle Zeit): Der Wert für die Eingabezeit, den Sie einfach von Ihrem Telefon erhalten. Sobald Sie das Geheimnis erhalten haben, ist keine weitere Interaktion mit dem Server erforderlich. Es ist jedoch wichtig, dass die Zeit Ihres Telefons als Server genau ist wird im Wesentlichen wiederholen, was auf Ihrem Telefon unter Verwendung der dem Server bekannten aktuellen Zeit passiert.

Signaturfunktion: Die verwendete Signaturfunktion ist HMAC-SHA1. HMAC steht für Hash-basierten Nachrichtenauthentifizierungscode und ist ein Algorithmus, der eine sichere Einweg-Hash-Funktion (in diesem Fall SHA1) verwendet, um einen Wert zu signieren. Mithilfe eines HMAC können wir die Authentizität überprüfen. Nur Personen, die das Geheimnis kennen, können dieselbe Ausgabe für dieselbe Eingabe (die aktuelle Zeit) generieren.

OTP-Algorithmus :

Pseudocode:

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 

Geben Sie hier die Bildbeschreibung ein.

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

Schauen Sie sich auch dieses Github-Projekt für die GO-Implementierung an: https://github.com/robbiev/two-factor-auth/blob/master/main.go

Kommentare

  • Unterstützt ‚ der Google-Authentifikator nicht auch HOTP?

Antwort

Es wird mit einem Samen basierend auf der Zeit arbeiten, so dass es der Art und Weise ähnlich ist, wie die RSA-Schlüsselanhänger funktionieren. d.h. sie erfordern auch keine Konnektivität.

Ich habe mich gerade umgesehen und dies wird hier beantwortet: https://stackoverflow.com/questions/8340495/how-rsa-tokens-works

Antwort

Wenn eine strace die sshd Daemon kann man sehen, wie der Server über den geheimen Schlüssel „weiß“, wenn er die Konfigurationsdatei des Benutzers liest:

#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] 

Das Mobiltelefon weiß es bereits, Sie haben es über QR gescannt oder eingegeben.

Kommentare

  • Dies ist ein gutes Beispiel dafür, wie Sie die Token demonstrieren können wird nicht an den Server gesendet, erklärt aber ‚ nicht, wie es tatsächlich funktioniert (was OP gefragt hat)
  • ‚ t an sich, aber es behebt den Mangel an Konnektivität.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.