einfache Passwortabfrage

Zurück zur Übersicht

             

Der Denkanstoß für dieses Programmfragment stammt aus der deutschen Python - Mailingliste, als dort jemand anfragte, ob man nicht eine nicht zu aufwendige Passwortabfrage machen könnte und dabei zu sichern ist, dass das Passwort selbst dem Leser des Quelltextes nicht sofort in den Schoß gepackt wird. Also etwas nicht supersicheres, aber auch nicht zu leicht. Eine der Antworten aus der erfahrenen Python-Jünger-Schar lautete:

                                                                  Nimm das Modul rotor.py

Damit war meine Neugier geweckt und damit fingen nämlich auch die Probleme an. Das Modul stand natürlich nicht in meinem Unterverzeichnis der Lib - Module. In der deutschen Übersetzung der Python - Referenz von Markt&Technik war das Modul garnicht erwähnt und in der englischen Ausgabe von O'REILLY "Python Standard Library" war es zwar beschrieben, aber mit dem Vermerk "optional"! Deshalb suchte ich nun in den einschlägigen Python - Web - Pages. Fehlschlag! In der Dokumentation war es aufgeführt, es wurde auch in anderen Texten erwähnt, aber kein Modulquelltext war zu finden. Was bleibt da noch? Man könnte ja notfalls in den Python - Quelltexten rumsuchen. Ein sehr kräftezehrendes Verfahren :-). Bevor ich damit anfing, gab ich in der Kommandozeile, wirklich nur spaßeshalber, ein:

>>> import rotor

Danach fiel mir die Kinnlade runter. Es kam keine Fehlermeldung!!!

Was habe ich daraus gelernt?

1. Es handelt sich offenbar um ein eingebautes Modul, weshalb die Suche erfolglos war.
2. Beim nächsten mal teste ich diese Möglichkeit früher!!

Nun gehen wir aber mal an das Problem:

Das Modul rotor.py verschlüsselt einen String mit einem Schlüssel, wonach der String nicht mehr verständlich ist. Mit dem gleichen Schlüssel kann der unverständliche String wieder in die Urform zurückverwandelt werden. Die Idee besteht darin, das Passwort als Schlüssel einzusetzen. Dann würde im Quelltext der Passwortabfrage nur der "unverständliche String" stehen, der nach der Decodierung als Resultat ein unverfängliches Wort erzeugt, das im Quelltext irgendwo herumsteht.

Der Quelltext meines Lösungsvorschlages steht hier:

Nach dem Import des Moduls rotor.py wird ein Objekt r erzeugt, das die Ver- und Entschlüsselung vornehmen kann. Hier wird eine Entschlüsselung mit der Funktion decrypt() vorgenommen. Als Ergebnis kommt das Wort 'result' heraus. (Nur als Beispiel, kann beliebig anders gewählt werden). Das Passwort, das funktioniert, lautet "ichbins*". Probiert es am besten selbst aus, es geht wirklich. Woher nehme ich aber den "unverständlichen String"? Man kann ihn einfach mit der Hand erzeugen:

Auf der Kommandozeile (ich nehme hier die Idle, weil man dann Text über die Zwischenablage herauskopieren kann und ihn nicht abschreiben muss) geben wir ein:

>>> from rotor import *

>>> r = newrotor('ichbins*')
>>> unlesbar = r.encrypt('result')
>>> unlesbar

Dann kommt folgende Antwort.

>>> '\x88\xb0\xcd!\xb1\x0b'

 Na, ist die "unverständlich" genug? :-)

Das Ergebnis kommt übrigens in dieser Schreibweise nur, wenn man den Variablennamen ohne print eingibt. Wir kopieren es heraus, denn wir werden es gleich brauchen, wenn wir ein eigenes Passwort verarbeiten wollen. Für das Beispiel reicht es, hier weiterzulesen.

Mit dem Passwort 'ichbins*' haben wir das Wort 'result' verschlüsselt. Das Ergebnis kann in den Quelltext geschrieben werden um dort mit Hilfe des (hoffentlich) richtigen Passwortes in das Ergebnis 'result' umgewandelt zu werden. Kommt auch 'result' heraus, war das Passwort korrekt, sonst nicht.
 


Einschub für Fortgeschrittene:

Mit dieser fest eingetragenen Lösung ist es natürlich umständlich, wenn das Passwort mal geändert werden soll. Daher ist es günstiger, den unverständlichen String in einer Datei zu halten. Mit einer zusätzlichen Funktion im Bedienmenue "Ändern des Passwortes" kann dann ein aktualisierter "unverständlicher String" generiert und abgerspeichert werden. Eventuell kann man bei solchen Komfort dann noch zusätzlich ein Super-User-Passwort dazufügen, falls Eure Freunde und Nutzer des Programm mal vergesslich waren.