Hi,
vorweg, beim OTP Verfahren das in
DEC benutzt wird handelt es sich um das S/KEY OTP.
Der Server kennt dabei NICHT das Benutzerpasswort, den nur der Benutzer soll dies kennen, es ist sein Geheimnis.
Die komplette Sicherheit basiert auf der Sicherheit einer secure One Way Function, also zB. einer Hash Funktion. Diese Funktionen können Daten nur in eine Richtung konvertieren.
Was passiert nun beim S/KEY:
1.) der Benutzer muß sich erstmal registrieren und bekommt vom Server verschiedene Parameter übermittelt.
2.) der Benutzer registriert sich indem er dazu sein Passwort eingibt
3.) ab nun kann der Benutzer sich immer wieder erneut sichr einloggen ohne erneute Registration.
Die Idee hinter S/KEY ist sehr einfach.
Der Benutzer benutzt sein Passwort und berechnet von diesem einen Hashwert. Nun berechnet der Benutzer von diesem Hashwert wieder einen neuen Hashwert, und von diesem wiederum einen neuen, und so fort und so weiter...
Wichtig ist, es entsteht eine Liste, basierend vom Benutzerpasswort von einzelnen Hashwerten die immer vom vorherigen Hashwert bis hin zum Passwort voneinander abhängig sind. Der Server übermittelt nun bei der Registration wie oft diese sequentielle Berechnung stattzufinden hat. Zb. 1000, also 1000 mal soll ein Hash vom Hash vom Hash vom Hash vom... berechnet werden.
Nachdem dies geschehen ist sendet der Benutzer den 1000'enden Hashwert als Startwert zum Server, der Server speichert 1000 -1 = 999 unter dem Benutzerkonto ab, mitsamt dem 1000'end Hashwert.
Beim nächsten Login sendet der Server die 999 an den Benutzer. Dieser gibt sein Passwort ein und berechnet 999 mal den Hash vom Hash vom Hash.. Er sendet diesen 999'ten Hashwert an den Server, dieser berechnet EINMAL den Hashwert davon und vergleicht diesen mit dem gespeicherten 1000'enden Hashwert. Sind beide identisch so weiß der Server das der Client in der Lage ist die kompletten succesiven Hashwerte ausgehend vom richtigen Passwort zu berechnen. Also nur einer der das Passwort kennt kann ALLE Hashs vom Hash vom Hash vom Hash.... berechnen, und der Server vergleicht den aktuellen Hashwert mit dem logischen Nachfolgehash davon den er ja beim letzten Login erhalten hat.
Somit weis selbst der Server NICHT welcher Hashwert der Vorgängrhashwert ist, denn das ist nur mit dem Passwort berechenbar.
War der Login erfolgreich so speichert der Server im Benutzerkonto nun 999-1 = 998 und den gerade vom Benutzer empfangen Hashwert ab.
Gruß Hagen