Aus spielerrei Gründen, und weil mich die Technik interessiert,
kam mir neulich die Idee mir selber ein Token (kleines Stück Hardware) zu bauen, welches “Einmalpasswörter” zum Login erzeugt.
Genauer soll es ein Baustein werden, der per USB eingesteckt wird, und auf Knopfdruck ein “Einmalpasswort” an den PC übergeben wird.
Das “Einmalpasswort” soll eine Kombination aus Zeichen sein, die von der Gegenseite verifiziert werden kann, und nur für eine Verwendung gültig ist.
Soviel als generelle Einleitung, auf zur eigentlichen Umsetzungsidee:
Die Idee ist, dass sowohl der Token, als auch die Gegenstelle ein Geheimnis teilen (als Beispiel “geheim123”) . Dieses Geheimnis muss vor der ersten Verwendung einmal über einen sicheren Weg ausgetauscht werden.
Danach werden Einmalpasswörter erzeugt, indem eine Prüfsumme (Hash) über das Geheimnis erstellt, und das Geheimnis selber auf ein festgelegte Art verändert wird (z.B. die letzte Stelle hochgezählt).
HASH("geheim123") ----> 576aa4c2e8948b2a10d21617d3a84085 |
Diese Ziffernfolge wird dann übertragen, die Gegenseite bildet ebenfalls den Hash über das Geheimnis und Prüft ob der übermittelte String übereinstimmt.
Im Anschluss wird das Geheimnis auf beiden Seiten verändert, z.B. zu “geheim124”.
Dies führt zu einem neuen Hash
HASH("geheim124") ----> 3942664d5ea817efbdbbd603b5521d6a |
dieser wäre dann das zweite Einmalpasswort, und so weiter.
WICHTIG zum Thema Sicherheit !
Das hier beschriebene ist einfach nur eine Idee von einem Laien.
Es gibt keinerlei Grund zu der Annahme das das Verfahren als “Sicher” angesehen werden kann. Soll das Verfahren “Sicher” sein, dann sollte dringend etwas gewählt werden, dass mehrfach von Spezialisten reviewd wurde. Das RFC 4226 spzifiziert z.B. so etwas (ganz ähnlich zu der Idee hier).
Ich persönlich sehe das Ganze vorallem als Lernprojekt, und werde es nur zusätzlich zu einem herkömlichen Passwort verwenden (welches ich vorher allein verwendet habe).