dynaperl

100% porentief rein

OTP Token von SafeNet: eToken PASS

Ich habe gerade einen eToken Pass (TOTP Version) der Firma SafeNet hier und wollte  den gerne gegen eigene Software Testen (keine OTP Infrastruktur von SafeNet). Was sich erst als nicht so einfach herausstellte. Zum einen verwendet der Token sha256 als Hash Methode (viele Tools verwendet noch sha1) und zum anderen verwendet der Token als Basis-Zeit den 1.1.2000 (und nicht den 1.1.1970). Wenn man das weiß ist es dann relativ einfach.

Ich verwende zum testen dieses Python Modul:

import oath
import hashlib
import time
print "code",oath.totp(my_secret_key,'dec6',30,time.time()-946684800.0,hashlib.sha256)

Die Differenz zwischen dem 1.1.1970 und dem 1.1.2000 sind 946684800.0 Sekunden. Mein mir vorliegender Key geht aber um 8 Minuten falsch so das ich bei mir 946685280.0 verwenden mußte.

Es bietet sich deswegen an die Funktion accept_totp zu verwenden der man ein Drift mitgeben kann um wie viel Schritte die Zeit/der Code abweichen darf  (in meinem Beispiel +/- 20 mal 30 Sekunden).

>>> print oath.accept_totp(my_secret_key, '123456', 'dec6', 30, time.time()-946685280.0 ,hashlib.sha256, 20, 20)
(True, -16)

Den Key (Seed) des Tokens haben ich übrigens vom Hersteller auf einer CD bekommen. Normalerweise würde man den selbst erstellen. Dazu gibt es einen Programmier-Stift mit dem sich die Tokens neu programmieren lassen. Die Variable my_secret_key ist in dem Fall dann ein 64 Zeichen langer Hexcodierter String.

Die Kommentarfunktion ist geschlossen.