Einmalkennwort

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

Ein Einmalkennwort oder Einmalpasswort ist ein Kennwort zur Authentifizierung oder auch Autorisierung. Jedes Einmalkennwort ist nur für eine einmalige Verwendung gültig und kann kein zweites Mal benutzt werden. Entsprechend erfordert jede Authentifizierung oder Autorisierung ein neues Einmalkennwort. Es ist sicher gegen passive Angriffe, also Mithören. Auch Replay-Attacken sind somit unmöglich. Gegen das Angriffsszenario Man in the Middle helfen Einmalkennwörter nicht. Auch hat der Einsatz von Einmalkennwörtern keinen Einfluss auf die Sicherheit einer Verschlüsselungsmethode.

Die oft gebrauchte Abkürzung „OTP“ steht für englisch One-Time-Password, was der direkten Übersetzung von „Einmalkennwort“ entspricht. Es besteht jedoch die Gefahr einer Verwechselung mit dem Verschlüsselungsverfahren One-Time-Pad, da beide mit „OTP“ abgekürzt werden.

Die Herausforderung beim Einmalkennwort ist, wie beide Seiten wissen können, welches Kennwort für einen bestimmten Anmeldevorgang gültig ist. Dazu kommen zwei Möglichkeiten in Betracht: Kennwortlisten oder Kennwortgeneratoren.

Kennwortlisten[Bearbeiten]

Bei diesem System werden vorgefertigte Listen von Kennwörtern auf beiden Seiten hinterlegt. Diese Liste wird entweder der Reihe nach abgearbeitet (d. h.: die Einträge sind durchnummeriert) oder es wird einfach ein noch nicht benutzter Wert wahlfrei ausgewählt. Dieser Wert wird als Kennwort übermittelt und auf beiden Seiten aus der Liste gestrichen. Die TAN-Listen beim Online-Banking sind ein Beispiel für eine Kennwortliste.

Zwischen den genannten Varianten besteht folgender Unterschied: Bei Einmalkennwörtern, welche hintereinander, also sequentiell, verwendet werden, gibt es zu jedem Zeitpunkt genau einen gültigen Wert, nämlich den ersten noch nicht verwendeten. Bei Einmalkennwörtern, welche vom Absender beliebig aus einer Liste ausgewählt werden können, gibt es zu jedem Zeitpunkt genau so viele gültige Werte, wie es unverbrauchte Werte auf der Liste gibt.

Ein Nachteil ist ein möglicher „Verlust“ dieser Liste. Ein Angreifer, dem (z. B. bei einem Systemeinbruch) diese Liste in die Hand fällt, kennt damit alle in Frage kommenden Einmalkennwörter. Ein System, welches die Liste nicht komplett speichern muss, ist demnach diesem Verfahren vorzuziehen.

Kennwortgeneratoren[Bearbeiten]

Ein Kennwortgenerator ist ein Programm welches automatisch ein Kennwort generiert.

Verfahren[Bearbeiten]

Bei den Kennwortgeneratoren wird durch einen speziellen Algorithmus zu jedem Zeitpunkt jeweils ein aktuelles Kennwort generiert. Dabei müssen drei Verfahren unterschieden werden:

  1. Zeitgesteuerte Generatoren
  2. Ereignisgesteuerte Generatoren
  3. Challenge-Response-gesteuerte Generatoren

Bei allen dreien ist es nicht der Algorithmus selbst, der übertragen wird, sondern nur der Beweis, das Ergebnis des Algorithmus. Mit dem richtigen Ergebnis weist der Client nach, dass er über den richtigen Algorithmus und, wenn nötig, die richtige Initialisierung verfügt.

Zeitgesteuert[Bearbeiten]

Obwohl der Server jeweils dieselbe Berechnung wie der Client (der Security-Token) ausführt, akzeptiert und berechnet er im Allgemeinen innerhalb eines Toleranzbereichs mehrere Einmalkennwörter, da eventuell im Token die eingebaute Uhr nicht hundertprozentig exakt geht. Dennoch hat jedes Einmalkennwort ein genau definiertes Zeitintervall für seine Gültigkeit, welche im Regelfall zwischen 1 bis max. 15 Minuten liegt.

Dazu ein kurzes Beispiel eines Tokens, welcher jede Minute sein Einmalkennwort ändert. Das Einmalkennwort ist jedoch nicht nur zum Zeitpunkt t gültig, sondern wird serverseitig wegen der Toleranz auch zum Zeitpunkt t − 1 min und t + 1 min und damit drei Minuten lang akzeptiert. Gute Verfahren synchronisieren sich anhand der eingehenden Daten auf den Client. Bei längeren Unterbrechungen zwischen den Anmeldungen kann aber auch dies fehlschlagen.

Bei Verwendung eines einzigen Tokens bei mehreren unabhängigen Stellen würde sich bei einem Ablauschen des Einmalkennworts bei einer Stelle ein Sicherheitsrisiko für die anderen Stellen innerhalb des Toleranzbereiches eröffnen.

Eine weit verbreitete Implementierung eines zeitgesteuerten One-Time-Password (OTP) ist Google Authenticator der einen Algorithmus umsetzt, welcher auch als time-based OTP (TOTP) bekannt ist.

Ereignisgesteuert[Bearbeiten]

Auch bei dem ereignisgesteuerten Verfahren führt der Server wie beim zeitgesteuerten dieselbe Berechnung aus, die auf der Client-Seite stattgefunden hat, und auch hier berechnet und akzeptiert er in einem Toleranzbereich mehrere Einmalkennwörter, ausgenommen schon verwendeter. Der Grund ist, dass der Besitzer gelegentlich ein generiertes Kennwort nicht verwenden könnte. Dieses Verfahren ist viel schonender für die Batterien eines entsprechenden Gerätes (Token). Es ist auch möglich, es ohne permanente Stromversorgung zu betreiben, indem einfach der letzte verwendete und damit ohnehin entwertete Wert gespeichert wird.

Bei einer Verwendung eines einzigen Tokens bei mehreren unabhängigen Stellen, müssen alle Stellen zeitnah über jede Verwendung bei irgendeinem Ereignis informiert werden.

Challenge-Response-gesteuert[Bearbeiten]

Synchronisationsprobleme gibt es im Falle eines Challenge-Response-Verfahrens nicht. Bei diesem Verfahren gibt der Server eine Aufgabe (Challenge) vor, die der Client beantworten muss (Response). Der Client erhält also einen Wert des Servers als Eingabe und berechnet darauf basierend ein Einmalkennwort.

Der Vorteil dieses Verfahrens ist, dass die Challenge völlig unabhängig gestellt werden kann. Gibt es auf der Server-Seite keinen Algorithmus, der sich vorausberechnen lässt, dann gibt auf der Client- bzw. Cracker-Seite keine Möglichkeit, eine Response im Voraus zu berechnen. Damit ist auch die Verwendung eines einzigen Algorithmus bei mehreren unabhängigen Stellen möglich, die Sicherheit wird dadurch nicht reduziert. Es gibt Lösungen, welche mit einem Gerät (Token) die Response berechnen. In diesem Fall kann auch die unten beschriebene Technik zur Anwendung kommen, mit dem Initialwert als Challenge.

Verwendete Technik in den meisten Generatoren[Bearbeiten]

Typische Beispiele für die am häufigsten verwendeten Verfahren sind einerseits die sogenannten Token von z. B. RSA Security, ID Control, Vasco, Kobil und anderen Herstellern, andererseits etwa Implementierungen des Einmalkennworts nach Lamport (auch als Lamport Hash bezeichnet), dessen Algorithmus im Wesentlichen auf dem wiederholten Anwenden einer Hashfunktion beruht.

Voraussetzung für das One-Time-Password-Verfahren ist, dass beide Beteiligte (Client und Server) ein gemeinsames, geheimes Kennwort ggKW kennen. Aus diesem wird nun eine Reihe von One-Time-Passwords (OTP) erzeugt.

Initialisierung[Bearbeiten]

Konfiguriert wird das Verfahren, indem der Server und der Client mit dem gleichen Startwert S initialisiert werden. Dieser berechnet sich über eine Zufallszahl r_A, dem sogenannten „Samen“ (englisch seed), verbunden (konkateniert) mit dem „gemeinsamen geheimen Kennwort“ ggKW, und einer nicht umkehrbaren, kryptographischen Hash-Funktion H:

S = H(r_A \ || \ ggKW).

Berechnung der One-Time-Passwords[Bearbeiten]

Nun wird eine Reihe von One-Time-Passwords generiert, indem auf S mehrfach iterativ die Hash-Funktion angewandt wird: Das erste OTP entsteht, indem die Hash-Funktion N-mal angewandt wird: KW_N = H^N(S). Das nächste, indem die Hash-Funktion N-1-mal angewandt wird. Ein möglicher Mithörer kann aus dem verschickten Kennwort nicht das Nächste berechnen, da er dazu die Hash-Funktion invertieren müsste, um von KW_N auf KW_{N-1} zu kommen. Dies ist jedoch unmöglich.

Verifizierung des OTP beim Server[Bearbeiten]

Der Server hat initial die gleiche Operation durchführt wie der Client und sich nur KW_N \ = H^N(S) gemerkt. Der Client schickt als erstes OTP KW_{N-1} an den Server. Dieser verifiziert es, indem er auf das neu erhaltene OTP KW_{N-1} einmal die Hash-Funktion anwendet H(KW_{N-1}) \ \to KW_N und das Ergebnis mit dem bei sich gespeicherten OTP KW_N vergleicht. Stimmen die Werte überein, ist das OTP KW_{N-1} verifiziert.

Für die nächste Verifizierung merkt sich der Server nun KW_{N-1} und der Client muss als nächstes OTP KW_{N-2} senden.

Reinitialisierung[Bearbeiten]

Da bei jeder Authentifizierung ein neues OTP geschickt wird, und der Zähler N irgendwann Null erreicht, muss das OTP-System reinitialisiert werden. Dazu kann der Client z. B. selbständig einen neuen Seed r_A und ein neues N wählen und dem Server mitteilen. Auch kann über eine sichere Leitung ein neues gemeinsames, geheimes Kennwort ggKW vereinbart werden. Bei vielen, heute verwendeten Token ist jedoch eine Kommunikation über den Wert selbst hinaus nicht vorgesehen.

Sicherheit[Bearbeiten]

Da kryptographische Hash-Funktionen nicht invertierbar sind, kann das geheime Kennwort nicht in Erfahrung gebracht werden. Auch ist das System gegen Replay-Attacken geschützt, da jedes Mal ein neues Kennwort übertragen wird.

Authentifiziert wird aber nur der Client vom Server. Der Server authentifiziert sich hingegen nicht beim Client. Somit kann ein Angreifer einen eigenen Server im Netzwerk installieren und dem Client vorgaukeln, dass dieser Server der Authentifizierungs-Server sei.

Siehe auch[Bearbeiten]

Weblinks[Bearbeiten]