Kurzfassung |
Ausgangssituation |
Meine Lösung |
Vorgaben |
Mein Programm |
Passworteingabe |
Entschlüsselung |
Verschlüsselung |
Sicherheit |
Das Programm |
Nachtrag: Neue Passworteingabe |
Version zwei zum runterladen |
Da wollen die Politiker im Ernst Online-Durchsuchungen und Bundestrojaner als
Mittel gegen Terrorismus einsetzen?
In meinen Augen ist das großer Quatsch,
da man die Zugriffe mit einfachen Mitteln verhindern kann.
Auch als Nicht-Terrorist habe ich Texte auf meinem Computer, die rein privat sind. Um zu zeigen, wie einfach man solche Daten vor dem ausspionieren sicher schützen kann, habe ich einen simplen Passwort-Tresor programmiert, in dem ich all meine Pins, PUKs, Passwörter und Benutzernamen einlagere.
Die Software gibt's inklusive Quelltext (Delphi5) und verschlüsseltem Beispiel kostenlos hier zum runterladen (905K) (Psst - weiter unten steht 'ne neuere Version...)
Damit ist alles wesentliche gesagt. Aber wer es genauer wissen will, darf natürlich weiterlesen...
Heutzutage muss man sich Unmengen an Passwörtern, Geheimzahlen und Benutzernamen merken.
Spontan fallen mir folgende Stellen ein, bei denen ich so ein geheimes Wort brauche:
PIN für
EC-Karte, Kreditkarte und Handy,
Passwort und Benutzername für diverse
Rechner zu Hause (mein PC, der Videorekorder, die Fritz!box, das Wlan).
Im Internet gibt es Unmengen an Kram:
diverse Mailkonten, diverse Foren,
Homepageadministration, Bankkonten,
Voip-Zugang, Voip-Anrufbeantworter,
dyndns, Bahn, Krankenkasse,
Fotodienst, eBay, Paypal
und natürlich mein Steam-Account.
Das nimmt Formen
an, die mein alterndes Gehirn so langsam überfordern.
Wenn ich
denn mal krank werde, fällt mir bestimmt nicht mehr ein, unter welchem
Benutzernamen ich mich bei
der Krankenkasse einloggen muss.
Und das Passwort dazu schon gar nicht.
Also könnte ich
mir ein schönes kompliziertes Passwort ausdenken und dann überall
nur dieses benutzen. Hm - nicht besonders sicher.
Oder ich schreibe
mir die alle auf.
Ein Einbrecher, welcher den Zettel findet wäre
dann eine Katastrophe!
Zum Glück gibt es ja Programme
wie den Passworttresor oder auch keepass . Mit so einem Programm muss ich mir nur ein
Passwort (Master-Passwort) merken, mit dem ich dann Zugriff auf alle meine
gespeicherten Passwörter bekomme.
Aber ist das auch sicher? Und wie
verschlüsseln die die Daten? Kommt da echt keiner dran?
Kann nicht ein
Key-Logger das Eintippen meines Master-Passworts mitbekommen?
Oder stehen nach der Entschlüsselung
vielleicht die ganzen Passwörter unverschlüsselt im Arbeitsspeicher, so dass der
Bundestrojaner leichtes Spiel hat und sie heimlich an die halbe Unterwelt verteilt?
Gemäß dem Motto Vertrauen ist gut - Kontrolle ist besser
denke ich
*** Runterladen ist gut, selbermachen ist besser ***
Und es macht irre Spaß, sich für potenzielle Angreifer ein paar Besonderheiten
auszudenken, die ihnen das Leben schwer machen sollten!
Also hab ich mich hingesetzt und selber so einen Tresor programmiert. Natürlich könnt ihr den Quelltext dazu haben, damit ihr alles nachprüfen und eigene Veränderungen vornehmen könnt.
Mein Passworttresor soll möglichst simpel programmiert sein, damit nachvollziehbar ist, wie er arbeitet. Er muss Schutz gegen das Aufzeichnen von Tastendrücken bei der Passworteingabe bieten und darf das Masterpasswort und die gespeicherten Passwörter nicht im Klartext im Arbeitsspeicher ablegen.
Nun gibt es eine Reihe von etablierten Verschlüsselungsverfahren. Siehe
AES-Kandidaten
twofish
AES-Verschlüsselung
Rijndael
Wer sich die Links näher ansieht, wird feststellen, dass man das nicht mal eben blickt . Bei der Implementierung könnte ich also Fehler machen, welche die ganze Sicherheit zunichte machen.
Diese Algorithmen sind auf Effektivität bezüglich Rechendauer und Datengröße getrimmt. Aber das brauch ich ja gar nicht. Ob meine 35 Passwörter nun in 0.003s oder in 3s decodiert werden, spielt keine Rolle. Ob ich dafür 1000 Bytes oder 1 Megabyte brauche ist mir auch egal. Hauptsache, der Kram ist nur für mich decodierbar.
Ok, ganz so einfach, wie das Teil, was ich letztens im Überraschungs-Ei gefunden habe, möchte ich es potenziellen Crackern natürlich nicht machen:
In Sachen Verschlüsselung gehe ich daher einen völlig anderen Weg. Statt durch ausgeklügelte mathematische Verfahren meine Daten bis zur absoluten Unkenntlichkeit zu verändern, mach ich es viel verständlicher:
Ich verstecke sie geschickt!
Grob gesehen funktioniert das so: Eine Textdatei von sagen wir mal 4000 Bytes wird bitweise in einem 250 mal so großen (1000000 Byte) Haufen Zufallsdaten verstreut. Welche Bits Rauschen und welche Nutzdaten sind, wird durch den Zugangscode (Passwort) bestimmt.
Wahrscheinlich hat noch nie jemand wirklich eine Nadel in einem Heuhaufen gesucht. Aber man kann sich sehr gut vorstellen, was das für eine bescheuert aussichtslose Wochenendtätigkeit ist.
So ähnlich mach ich es aber: ein paar wichtige Nutzdaten werden in einer riesigen Datenmenge,
die genau so aussehen wie die Nutzdaten, eingestreut.
Die Eingabe des Zugangscodes ist ein heikler Vorgang. Wenn dabei jemand zusieht, ist es um die Sicherheit geschehen! Für einen Trojaner ist so was eine Steilvorlage:
Da braucht er bloß die Tastendrücke mitzulesen, einmal nach Hause telefonieren - und schon ist der Hacker glücklich.
Aber für solches Gewürm hab ich nix übrig!
Meine Passworteingabe malt eine Tastatur auf den Bildschirm. Nun kann man entweder eine Taste auf der Tastatur drücken, oder eine Taste auf der (frei definierbaren) Bildschirmtastatur anklicken. Oder beides prima mischen!
Ja, da sind auch ein paar komische Sonderzeichen dabei, um es den Crackern echt schwer zu machen!
Ok, der Trojaner hat wohl verschissen.
Bleibt die neugierige Sau, die mir über die Schulter sieht.
Selbst wer mitschreibt welche Buchstaben
ich eingebe, bekommt meinen Tresor nicht ohne weiteres auf. Ich merke nämlich,
wie das Passwort eingegeben wird.
Dazu bestimme ich die Zeit zwischen den Tastendrücken vor und nach einem Leerzeichen.
Ja - mein Passwort besteht aus mehreren Wörtern. Deshalb nenne ich es
auch Zugangscode.
Bei der Zeitbestimmung wird gemessen, ob ich am Wortende eine größere Pause mache als am Wortanfang - oder umgekehrt. Macht man es falsch, bleiben die Daten verborgen.
Wenn sich ein Spionage-Programm tief ins Betriebssystem einklinkt, kann es unter Umständen auf den gesamten Arbeitsspeicher zugreifen. Nachdem ich meinen Zugangscode eingegeben habe, dürfen meine geheimen Passwörter also nicht komplett entschlüsselt im RAM liegen.
Ist natürlich auch nicht so!
Mein Algorithmus vermischt die von mir eingegebenen Daten und legt sie auch nur gemischt im Speicher ab. Zugegeben, der Algorithmus ist total simpel. Aber im Speicher würde man halt den Text "Bank-Passwort" nicht mehr erkennen.
Die eigentliche Decodierung passiert nur durch das menschliche Auge (und da kommt auch der Bundestrojaner nicht ran)!
Gesteuert durch den Zugangscode wird ein Mischindex erstellt. Der
gibt an, an welcher Stelle im Dokument ein Zeichen dargestellt werden soll. Beim Anzeigen
des entschlüsselten Textes wird daher nicht einfach der Text ausgegeben, sondern
durch den Mischindex wird bestimmt, an welcher Stelle auf dem Bildschirm das Zeichen
erscheinen soll.
Nur dadurch, dass am Ende alle Zeichen an ihrer Position sind, entsteht ein
lesbarer Text.
Ist auch nur ein Detail im Zugangscode falsch, liefert die Anzeige totalen Schrott:
Damit man nicht durch recht simple Attacken an meine geschützten Daten kommt, habe ich mir einiges einfallen lassen. So sieht die verschlüsselt gespeicherte Datei nach jedem Speichern total anders aus.
Klar, wenn nur der Zugangscode die Position der Nutzdaten bestimmen würde, bräuchte man nur mehrere Versionen der mit dem gleichen Passwort verschlüsselten Datei übereinander legen , und könnte dann an den immer gleich bleibenden Daten die Positionen der Nutzdaten erkennen.
Details dazu finden sich in der Programmdokumentation - das ist ein wenig trocken, weshalb ich hier damit nicht langweilen möchte.
Das Programm geht extrem verschwenderisch mit Ressourcen um. Es braucht selbst für eine kleine Datei eine irre Rechenkapazität und erzeugt unglaublich große verschlüsselte Dateien.
Na und - ist doch prima.
Wenn jemand das knacken will, ist mir doch lieber, er braucht pro Versuch 1 Sekunde auf 'nem Großrechner statt dass man eine Million Passwörter pro Sekunde auf 'nem Pentium 1 durchhecheln kann.
Auch dieses Programm lebt davon, dass es letztendlich viel einfacher ist, die PIN meiner ec-Karte zu erraten, als zu versuchen, meine Tresordatei zu knacken!
Für Cracker blöd
ist auch, dass man erst
ganz am Ende erkennen kann, ob der Zugangscode korrekt war. Das kostet richtig
Rechenzeit, mal eben ein Passwort auszuprobieren!
Die Bedienoberfläche ist extrem
simpel. Man kann halt einfach nur eine Textdatei ansehen/editieren/speichern.
Also genau das, was ich brauche!
Dass man zu Anfang eine Textdatei (mit Passwörtern, GeheimCodes, Pins etc.) laden soll, diese dann verschlüsselt speichert und dann das Programm neu starten muss um schon wieder das Passwort eingeben zu müssen - und erst dann die Daten editieren kann - hat einen Sinn: Dadurch muss man das Passwort 2x eingeben, bevor man Daten eingibt. Wenn man einen Tippfehler bei der ersten Passworteingabe gemacht hat, käme man nie wieder an die Daten ran!
Hier nochmal der Link zur Software Version 1 inklusive Quelltext: kryptool1.zip (905K)
In dem Archiv befindet sich auch eine verschlüsselte Beispieldatei, in der erklärt wird, wie die Verschlüsselung funktioniert. Das Passwort ist natürlich Zabex !
Damit das Mitprotokollieren von Mauspositionen und Mausklicks nichts nützt, um das Passwort nochmals eingeben zu können, ist mir eine neue Idee gekommen: Die Alphabetuhr.
Dabei muss der Klick im richtigen Moment erfolgen. Ein Spitzel bräuchte dann den Bildschirminhalt zum Mausklickzeitpunkt.
Das Fenster für die Passworteingabe sieht nun im oberen Teil so aus:
Die Zeiger oben rotieren.
Klickt man nun irgendwo in den Bereich einer der
4 Uhren, so wird das Zeichen eingegeben, welches dem Zeiger am nächsten
ist. Damit man das üben kann, wird das Zeichen im Klartext angezeigt.
Sobald man aber eine Taste gedrückt hat (auf der Tastatur vor dem Monitor),
werden auch die Alphabetuhr-Eingaben als zufällige Zeichen angezeigt.
Klicken kann man übrigends auch deutlich unterhalb der Uhren - z.B neben der Leertaste. Oder auch zwischen den Tastenfeldern. Zur Verdeutlichung habe ich die Zonen mal farbig hinterlegt.
Zeichnet man einfach die Mausbewegungen und Klicks auf, ergibt das beim nächsten Abspielen ein völlig anderes Passwort, da die Zeiger an zufälliger Position starten - und mit unterschiedlicher Geschwindigkeit laufen.
Diese zusätzliche Eingabemöglichkeit macht das Programm noch sicherer - und sieht schön kompliziert aus!
Hier der Link zur neuen Software inklusive Quelltext: kryptool2zip
(155K).
Zum ausprobieren
kann man sich diese Textdatei
runterladen: kryptool2beispiel.zip
(814K)
Sie enthält die Beschreibung des Codierverfahrens.
Einfach
die ausgepackte Datei ins gleiche Verzeichnis wie das Programm kopieren.
Das Passwort
ist ZABEXprotect
Ich hatte auch schon daran gedacht, das Alphabet als Schwarm oder Schlange zufällig über den Bildschirm fliegen zu lassen. Dann muss man mit der Maus hinterher und die richtige Taste im Flug erwischen. Das ist aber wahrscheinlich ziemlich nervig, damit ein längeres Passwort einzugeben, da man sich dauernd neu orientieren muss.
Eine weitere Idee ist, eine Tastatur mit QWERTZ-Schema anzuzeigen, wo an jeder Taste das Zeichen steht, welches man auf der echten Tastatur drücken muss, um dieses Zeichen einzugeben.
Ein Beispiel:
Wenn ich ein Z eingeben will, schaue ich auf die Z-Taste
auf dem Bildschirm. Dort sehe ich, dass an der Z-Taste z.B. "ö" steht. Nun muss
ich also auf ö tippen, um Z einzugeben. Die Belegung wird bei jedem Start zufällig
vergeben. Damit hat der Keylogger keine Chance.
Der normale über die Schulter
Schauende aber auch nicht - da er beim "ö" tippen wohl nicht so schnell zurückverfolgen
kann, dass man Z eingeben wollte. Und beim nächsten Start steht vielleicht ein
"k" an der Z-Taste - da wird das mit dem "ö" nix.
Mal sehen, vielleicht bau ich so eine Software mal - jeder der mitmachen will ist willkommen!
Kommentieren | Startseite |
Best view: use a W3C compatible HTML-browser.
Curious view: use an Editor!