Google Authenticator

aus Wikipedia, der freien Enzyklopädie
Wechseln zu: Navigation, Suche

Google Authenticator ist eine Mobile App des Unternehmens Google Inc. Sie ermöglicht eine Zwei-Stufen-Authentifizierung mittels Einmalkennwörter gemäß der branchen-übergreifenden Initiative For Open Authentication (OATH) und unterstützt daraus den Standard HMAC-based One-time Password Algorithmus (OATH-HOTP) nach RFC 4226, ein auf einem Zähler basierenden Einmalkennwortverfahren, und davon abgeleitet den Time-based One-time Password Algorithmus (OATH-TOTP) nach RFC 6238, der ein zeitlimitiertes Einmalkennwortverfahren darstellt.[1][2] Die App wird für die Betriebssysteme Apple iOS, Blackberry und Android angeboten.

Funktionsweise[Bearbeiten | Quelltext bearbeiten]

Der Server, der eine durch Google Authenticator geschützte Anmeldung anbietet, generiert im Rahmen der erstmaligen Initialisierung einen 80-Bit-Geheimcode, den der Benutzer auf ein persönliches Gerät – in der Regel ein Smartphone – übertragen muss. Hierzu wird das Geheimnis als QR-Code oder als Zeichenkette in Form einer Base32-Darstellung übermittelt.

Der Übertragungsvorgang ist, neben dem Umstand, dass der bei der Initialisierung generierte 80-Bit-Geheimcode in Klartext am Gerät gespeichert wird, eine mögliche Schwachstelle: Da es sich hierbei um das Shared Secret des Verfahrens handelt, darf der Code nur von einem vertrauenswürdigen Rechner aus abgelesen werden. Auch eine Fotografie des QR-Codes würde das Geheimnis kompromittieren.

Nach diesem ersten Schritt ist das Geheimnis im Idealfall nur noch dem Server und dem persönlichen Gerät des Nutzers bekannt und sollte diese Speicher auch nie verlassen. Zur Autorisierung wird ein Einmalpasswort generiert, das sich aus der aktuellen Uhrzeit und dem Geheimnis berechnet. Aus diesem Grund müssen die Uhren von Client und Server ungefähr synchron sein. Der untenstehende Pseudocode liefert pro 30 Sekunden ein neues Passwort. In der Praxis kann der Server so programmiert werden, auch den Vorgänger- und Nachfolger-Code zu akzeptieren, um Zeitabweichungen des Clients von bis zu einer Minute abzudecken. Anstatt der Uhrzeit kann laut Spezifikation auch ein Zähler als Basis dienen, der auf beiden Seiten mit jeder Anmeldung hochgesetzt wird. Diese Variante wird derzeit jedoch nicht verwendet.

Bei der Anmeldung muss der Benutzer nun neben dem normalen Passwort auch das generierte Einmalpasswort eingeben. Das zum Erzeugen des Einmalpassworts notwendige Geheimnis wird nicht mehr übertragen und kann deswegen auch nicht abgehört werden.

Aufgrund seines Prinzips schützt Google Authenticator zuverlässig vor Keyloggern und dem Mitlesen von Passwörtern bei der Eingabe, nicht jedoch – im Gegensatz zu Fido U2F – vor Man-in-the-Middle-Angriffen, bei denen ein Angreifer eine gefälschte Login-Seite präsentiert. Außerdem erlauben die meisten Anbieter, bestimmte Rechner als vertrauenswürdige Clients zu definieren, von denen aus die Anmeldung ohne Einmalpasswort erfolgen darf. Kann ein Angreifer sich Zugang zu einem solchen Rechner verschaffen, ist der zusätzliche Schutz nicht mehr gegeben.

Schwachstellen[Bearbeiten | Quelltext bearbeiten]

Der Authenticator speichert die mit den Servern vereinbarten Geheimnisse im Klartext in einer SQLite-Datenbank auf dem Mobilgerät. Die Sicherheit des Verfahrens hängt damit von der Sicherheit des verwendeten Betriebssystems ab. Wird diese Sicherheit durch den Anwender, beispielsweise durch das bei Smartphones anzutreffende Rooten, oder durch Sicherheitslücken im Betriebssystem kompromittiert, können die Geheimnisse ohne Wissen des berechtigten Anwenders ausgelesen und zur Berechnung von Einmalpasswörtern verwendet werden; ein Angreifer kann so den zusätzlichen Schutz durch das zweistufige Verfahren aushebeln.[3]

Auch wenn ein Angreifer in den physischen Besitz des Mobilgeräts gelangt, auch im ausgeschalteten Zustand, kann er die Geheimnisse aus dem Speicher auslesen, solange nicht das gesamte Gerät verschlüsselt ist.

Die Google Authenticator App ist nicht mit einem eigenen Passwort oder wenigstens PIN-Code geschützt; jeder, der im Besitz des eingeschalteten und entsperrten Mobilgeräts ist, kann Einmalpasswörter generieren.

Trotz gewisser Schwächen in den Implementierungsdetails bewirkt die Nutzung der Zwei-Faktor-Authentifizierung auch mit dieser App einen großen Zugewinn an Sicherheit, da der Aufwand für einen Angreifer bei Einsatz dieses Verfahrens erheblich höher ist als bei einer Ein-Faktor-Authentifizierung nur über ein Passwort.

Pseudocode[Bearbeiten | Quelltext bearbeiten]

   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

Weblinks[Bearbeiten | Quelltext bearbeiten]

Einzelnachweise[Bearbeiten | Quelltext bearbeiten]

  1. RFC 4226 HOTP: HMAC-based One-time Password Algorithm
  2. RFC 6238 TOTP: Time-Based One-Time Password Algorithm
  3. Recovering Google Authenticator keys from Android device for backup. Abgerufen am 19. November 2016 (Auf Android-Mobilgeräten wird der Geheimcode unter /data/data/com.google.android.apps.authenticator2/databases/databases gespeichert).