calc.pw: Der Open-Source Hardware-Passwortberechner

Es ist vollbracht! In den letzten Wochen und Monaten habe ich einige Zeit mit der Arduino-Plattform verbracht und mich Stück für Stück in unterschiedliche Themenbereiche eingearbeitet. Ziel war es, calc.pw zu entwickeln.

calc.pw Aufbauschema

calc.pw Aufbauschema

calc.pw ist ein Passwortberechner: Man gibt ein Masterpasswort ein und kann mit diesem und einer dienstabhängigen Information ein Passwort für diesen Dienst erzeugen. Das gleiche Masterpasswort kombiniert mit der gleichen dienstabhängigen Information führt wieder zum gleichen Passwort. Damit entfällt die schwierige Aufgabe, sich kryptische (aber sichere) Passworte merken zu müssen.

calc.pw Verwendung calc.pw Verwendung
calc.pw Verwendung calc.pw Verwendung

calc.pw Verwendung

Dem ein oder anderen Leser kommt dieses Konzept eventuell bekannt vor: Vor ein paar Jahren hatte ich mit PassCalc bereits eine Windows-Software vorgestellt, die die gleiche Funktion bietet. Weshalb also calc.pw?

In den letzten Jahren habe ich PassCalc regelmäßig (sprich: täglich) verwendet. Dabei sind mir einige Probleme aufgefallen. Das größte davon ist, dass man PassCalc auf dem Rechner laufen lassen muss, an dem man gerade ein Passwort benötigt. Denn nicht bei allen PCs kann man sich sicher sein, dass diese nicht einen Virus oder einen Trojaner beherbergen. Diese könnten nämlich das Masterpasswort mitlesen und somit später und unbehelligt alle anderen Passwörter generieren. Zudem kam es vor, dass auf dem PC eben kein Windows lief, sondern zum Beispiel Linux oder Mac OS X. All diese Probleme werden mit separater Hardware umgangen, da diese nicht ohne weiteres von einem Virus kompromitiert werden kann.

Um die Verwendung von calc.pw möglichst einfach zu machen, wird es zwischen Tastatur und Computer gesteckt. Während der normalen Verwendung leitet calc.pw einfach die Tastenanschläge an den Computer durch. Erst durch Drücken der Tastenkombination STRG+ESC wechselt man in den Modus zur Passwortberechnung. Nach Eingabe der Information und Drücken von ENTER oder STRG+ESC wird das Passwort erzeugt und man gelangt automatisch wieder in den Passthrough-Modus, in dem die Tastenanschläge durchgeleitet werden.

calc.pw Passthrough-Modus

calc.pw Passthrough-Modus

Als nächstes habe ich zwei Dinge vor: Zum einen möchte ich ein Gerät programmieren, das zwischen Tastatur und Computer gesteckt wird und in einem Verschlüsselungsmodus eingegebene Texte verschlüsselt an den Computer überträgt. Und zum anderen möchte ich sehen, wie kompliziert es ist, die Funktion von calc.pw in eine Tastatur zu verfrachten. Man darf also gespannt sein. 🙂
Passwortgeschützte Grüße, Kenny

22 Kommentare » Schreibe einen Kommentar

  1. Wenn man Passwörter ändern muss/will, was macht man?

    Würde man ein neues Master-Passwort wählen, müsste man alle Passwörter ersetzen. Und würde man bei jeder Neugenerierung eine neue Bezeichnung wählen, hätte man irgendwann einen Salat aus unmerkbaren Bezeichnungen.

    Oder übersehe ich da etwas?

    Bei jeder Art von neuem Input (der auch noch zufällig sein müsste) muss sich der Nutzer mehr Informationen merken, da das Gerät an sich nichts speichert. (Falls man einen 3. Input für die Generierung in Erwägung zieht.)

    Und was macht man, wenn man einen Login sucht, und die Bezeichnung nicht mehr kennt? Wäre es nicht möglich die Bezeichnungen zu speichern? Das Master-Passwort bliebe ja noch geheim.

    In den meisten Passwort-Tresoren hat man auch noch weitere Möglichkeiten, wie z.B. das Speichern von Dateien oder sonstigen Informationen. Könnte man den Output von calc.pw nicht auch für simple Verschlüsselungen verwenden? Das müsste allerdings alles auf dem Arduino passieren, und da fällt mir kein anderer Weg ein als Informationen in das jeweilige Monitorkabel ein zu speisen. Das wiederum würde die Komplexität des Projekts sprengen, oder nicht?

    Tut mir leid, der Kommentar ist etwas wirr geschrieben, da mir beim Schreiben noch etliche Sachen eingefallen sind.

    • Vielen Dank für deinen Kommentar. Ich fange erst einmal oben an.

      In der Tat hat man bei der Kompromittierung eines Passwortes nur zwei Möglichkeiten: Entweder man ändert die Information des entsprechenden Dienstes oder man ändert das Masterpasswort und damit die Passwörter aller Dienste. Das Speichern der Informationen auf dem Gerät wiederum ist zwar eine Möglichkeit, jedoch keine sonderlich gute. Denn in diesem Fall würden die Nutzer anfangen sich darauf zu verlassen. Wenn das Gerät dann abhanden kommt oder kaputt geht, haben sie evtl. Informationen genutzt, an die sie sich wirklich nicht mehr erinnern können. Fernab davon habe ich die Erfahrung gemacht, dass es schneller geht, einfach die Information einzutippen, als - z.B. in einer Liste - danach suchen zu müssen. Eine Möglichkeit, das ganze zu optimieren, wäre, dass der Nutzer die Information abspeichert und beim Tippen des Nutzers versucht wird, eine Information zu erkennen und diese dann als Vorschlag anzuzeigen. Aber auch hier könnte das ganze dazu führen, dass der Nutzer anfängt, Informationen zu nutzen, die er nicht mehr direkt mit dem Dienst assoziiert.

      Aus eigener Erfahrung: Ich verwende einen ähnlichen Mechanismus nun bereits seit 4 Jahren (in Form von Software) und das Problem, sich nicht mehr an seine Information zu einem Dienst zu erinnern, ist - zumindest nach meinen Erfahrungen - verschwindend gering. Ich habe beispielsweise letzte Woche in einem Shop bestellt, in dem ich vorher erst 1x bestellt habe - vor 3 Jahren. Das Passwort zu diesem Shop war beim ersten Versuch richtig. Natürlich verwende ich auch Dienste, bei denen in den letzten Jahren bekannt wurde, dass sie gehackt wurden (z.B. Kickstarter). Auch diese nutze ich weiterhin - eben mit geänderter, aber für mich ebenso einfach herleitbarer Information. Und abseits davon: Da ich demnächst auf einen neuen Algorithmus zur Passwortgenerierung umschwenken will, habe ich letztens mal eine Auflistung der Accounts gemacht, die ich regelmäßig nutze. Dabei komme ich auf eine Anzahl von knapp über 100 Stück - wahrscheinlich mehr, als ein normaler Nutzer.

      Hierzu vielleicht noch als Ergänzung: Teil der Sicherheitsbetrachtung von calc.pw ist es, die Angriffsvektoren möglichst gering zu halten. Das war der initiale Grund, die Passwörter nicht länger auf dem - am Internet hängenden - Nutzer-PC oder Smartphone durchzuführen, sondern auf einer separaten Hardware. Das bringt natürlich Limitierungen mit sich (wie, dass man die Passwörter ja wieder auf die Endgeräte bekommen muss), die durch das Tastaturinterface reduziert werden sollen. Natürlich bestünde die Möglichkeit, einfach eine Passwortdatenbank in Hardware zu gießen und der dann ein Tastaturinterface zu geben, jedoch wird dann das Gerät zum Problem - bei Ausfällen oder Verlust. Genau aus dem Grund habe ich den Weg der Passwortgenerierung gewählt. Denn die dazu nötigen Dinge soll der Nutzer sich merken oder herleiten können - das Problem der Merkbarkeit wird also für die Nutzer reduziert - ohne, dass sie von der Hardware abhängig werden. Denn im absoluten Notfall können sie auch einfach Software verwenden, die den gleichen Algorithmus implementiert hat.

      Nun noch zur simplen Verschlüsselung: Ja, das wäre tatsächlich möglich und ist sogar geplant. Das ganze nennt sich dann Typethrough-Encryption. Dazu gibt man ein Passwort ein und wechselt in den Verschlüsselungsmodus. Alle weiteren Tastatureingaben werden dann transparent verschlüsselt. Man tippt als seinen Text ein, beim Rechner kommt jedoch bereits der verschlüsselte Datenstrom an.

      Ich hoffe, die Ausführungen waren hilfreich. ^_^

      • Vielen Dank für diese lange, ausführliche Antwort, (fast) alle meine Fragen beantwortet, und auch noch Vorfreunde auf die Zukunft von calc.pw gemacht 😛

        Was noch offen geblieben ist, ist die Idee für Output von calc.pw den PC-Monitor zu verwenden. Man könnte den Input vom PC entweder in dieser Zeit komplett abschalten (wahrscheinlich einfacher^^), oder vielleicht sogar beides gleichzeitig auf einen Bildschirm bringen.

        calc.pw hat eigentlich sogar noch mehr Potential z.B. könnte eine GPG-Mail schreiben (dann bräuchte man einen hochwertigeren Bildschirm 🙁 oder meine vorgeschlagene Variante) oder end2end (nur noch mehr am Ende) chatten (dann wäre es sogar egal wenn der Computer kompromittiert wäre :D)

        Wenn du ein neues Passwort hast, wie änderst du die Information (das braucht ein spezielleres cooles Wort :P)? Kann man da ein Muster verfolgen? z.B. kickstarter-nach-dem-hack oder kickstarter-2? Kann man über seine Informationen nicht auch einfach offline auf einem Papier buchführen?

        • Noch eine spontane andere Idee: Man könnte anstatt eines Masterpassworts auch einen Key auf einem Stick benutzen (und für ganz paranoide auch einen verschlüsselten Key auf einem Stick).

          Da müsste man dann allerdings ein Backup machen (und das genauso sicher halten), um die von dir angesprochene Unabhängigkeit zur Hardware (in diesem Fall der Stick) zu gewährleisten.

          • Eine Idee, die ich für Unternehmen habe, ist eine Version, bei der die Masterpasswörter auf PIN-geschützten Smartcards abgelegt sind. Das Unternehmen würde einfach die Smartcards samt PIN an ihre Mitarbeiter ausgeben und regelmäßig zentral die Passwörter ändern. Die Mitarbeiter bräuchten dann nur noch ihre Smartcard, ihr calc.pw und müssten dann entsprechend nach der zentralen Passwortänderung nur noch die neue Information verwenden: z.B. "intranet 01.2014" für das Intranetpasswort im Januar, "intranet 02.2014" für das Intranetpasswort im Februar, "vpn 01.2014" für das VPN-Passwort im Januar, "vpn 02.2014" für das VPN-Passwort im Februar, etc.

            So behielte ein Unternehmen immer die Kontrolle über die Zugänge, ohne ihren Mitarbeitern eine große Hürde beim Zugang zu setzen. Gleichzeitig lässt sich diese Lösung mit allen Unternehmensanwendungen nutzen - es ist keine Umrüstung auf eine (meist proprietäre) Single-Sign-On Lösung notwendig.

            • Ist für das "normale" nicht-für-Unternehmen calc.pw ein Keyfile geplant? Dabei würden die Vorteile schon überwiegen: Man kann nicht mehr das Master-Passwort "anschauen" und hat in der Generierung einen weiteren Faktor, der in die Passwörter einfließt.

              Gibt es derzeit eigentlich schon Mobilversionen? Kann gerade leider nicht gut suchen :s
              Wie funktioniert sowas, ohne der Idee von calc.pw untreu zu werden? calc.pw mit Bluetooth?

              In der c't 18/2014 war übrigens ein ausführlicher Artikel über solche Verfahren. 🙂

              • Keyfiles selbst sind nicht geplant, da sie (IMHO) keinen Mehrwert bieten, sondern im Gegenteil die Sache eher komplizierter machen. So ein Keyfile müsste (möglichst verschlüsselt) auf einem Datenträger liegen. So ein Datenträger kann verloren gehen oder einfach kaputt gehen - dann ist das Schlüsselmaterial weg. Man gewinnt also absolut nichts.

                • Man kann das Schlüsselmaterial verlieren.
                • Man benötigt ein Passwort, um das Schlüsselmaterial bei Verlust zu sichern.
                • Das Passwort für das Schlüsselmaterial muss man sich merken.

                Man kommt also da heraus, dass man ein Passwort benötigt, das man braucht, um Schlüsselmaterial zu entschlüsseln, das als Passwort dient. Warum dann nicht gleich einmal sich ein starkes Passwort merken?

                Derzeit gibt es noch keine Mobilversion, aber sie ist geplant.
                Ja, Bluetooth soll dabei zum Einsatz kommen.
                Ein paar Bluetooth-Module und andere Bauteile habe ich bereits.
                Leider fressen mir derzeit andere Themen die Freizeit auf. 😀

        • Also: Monitor-Input vom calc.pw ist kaum machbar, dazu ist der Mikrocontroller viel zu schwach. Mit einem Display ist es schon gut bedient.

          Das noch-mehr-Ende-zu-Ende ist auch nicht sooo eine gute Idee. Denn das würde bedeuten, dass calc.pw direkt am Internet hängen würde. Damit kämen wieder genau die gleichen Probleme, als wenn man einen normalen PC dafür verwenden würde.

          Theoretisch kann man über seine Informationen auch Offline (z.B. auf Papier) Buch führen. Sinnvoller ist es hingegen, welche zu wählen, die man sich merken kann. Ich verwende das gleiche Konzept seit Jahren und hatte damit bisher keine Probleme. 🙂

          • An die Performance-Probleme bei dem Monitor hatte ich nicht gedacht 🙁
            Wäre es möglich nur einen kleinen Teil zu nutzen? (die rechte obere Ecke mit x Pixeln?)

            Beim end2end dachte ich an den PC der am Internet hängt und nur per Tastatur den schon verschlüsselten Text weiterleitet. Jedoch bräuchte calc.pw dann auch wieder einen hochwärtigeren Monitor.

            Nochmal zu den Informationen, ist es da schlau bestimmte Muster zu verfolgen?

            • Im Internet findet man überall Leute, die empfehlen einen Raspi als HDMI-Shield zu benutzen (oder halt den Raspi direkt selbst). Wäre es nicht auch möglich das Projekt einfach auf einen Raspi zu übertragen?

              • Ich bezweifle, dass das möglich ist. calc.pw soll eine Tastatur werden, kein kompletter Computer. Du bist aber gern dazu eingeladen, ein Derivat zu basteln, das als Hardwarebasis einen Raspi verwendet. Zu meinen eigenen Projektzielen hingegen liefe es konträr.

            • Nein, so funktionieren die entsprechenden Protokolle leider nicht. 😀

              Es gibt zwar Demos, in denen VGA-Signale erzeugt werden. Das ist aber nur mit starker Optimierung zu schaffen - und für das eigentliche calc.pw wäre dann kein Platz mehr. 😉

  2. Schon interessant, aber ich kapier' den Sinn des Ganzen nicht: Wenn die Hardware Keyboard-Eingaben tätigt (oder man selbst das erzeugte PW eintippt) kann doch wieder der Keylogger-Trojaner zuschlagen und das war's -> Kein zusätzlicher Schutz durch externe HW, oder?

    Wenn ich das bspw. mit "KeePass" vergleiche, bietet dies (theoretisch) höheren Schutz, da hier das PW über die Zwischenablage eingepasted werden kann, ohne die Tastatur zu bemühen. Selber Nachteil allerdings: KeePass muss auf demselben Rechner laufen und kann dadurch natürlich auch selbst durch den Trojaner attackiert werden (und bei erfolgreicher Attacke sind dann *alle* Passwörter weg ...).

    Letztendlich bleibt dann ein Service wie "LastPass" - dem man dann aber trauen können muss...

    • Es gibt hier einen entscheidenden Unterschied. Ein Keylogger kann nur die Passwörter mitlesen, die am infizierten Rechner tatsächlich generiert und verwendet werden. Alle anderen Passworte sind sicher, da das verwendete Masterpassworte niemals auf den Rechner gelangt. Das ist der Schutz durch die externe Hardware. Sollte man sich also an einem infizierten Rechner nur bei seinem E-Mail-Konto einloggen, so muss man beim Bekanntwerden der Infektion auch ausschließlich das Passwort des E-Mail-Kontos ändern, um die Sicherheit wiederherzustellen.

      Bei Passwortdatenbanken sieht das jedoch (wie du bereits gesagt hast) anders aus, da ein Trojaner dort das Masterpasswort mitlesen und die Passwort-DB stehlen kann. Auch, dass die Zwischenablage verwendet wird, ist kein wirklicher Schutz, denn diese kann von jedem Programm mitgelesen werden.

    • Also wenn wir davon ausgehen, dass du Kleinkram wie USB-Kabel, Widerstände, LEDs, Potentiometer, Pushbutton und Steckverbinder schon hast, landest du (je nach Anbieter) bei etwa 60-70€ plus Versand für ein Arduino Leonardo, ein USB-Host-Shield und ein 16x2 LCD.

      Der Vorteil, die Funktion von calc.pw direkt an eine Tastatur anzubauen, wäre, sich das ca. 25-30€ teure USB-Host-Shield sparen zu können.

      Man muss dazu sagen, dass ich absichtlich die (meist teurere) Original-Arduino-Hardware verwendet habe. Es gibt potentiell auch günstigere Spin-Offs, die bereits einen funktionierenden USB-Host-Controller enthalten.

      • Na, also das mit dem USB Hub hat schon Vorteile, von wegen Mobilität. Wenn man eine gescheite Software dazu packt, die die Vorarbeiten übernimmt (Tastaturlayout und Co.) und wenn das Gerät schon fertig verbaut ist, könnte man sicher Interessenten dafür finden.

        Ich habe jetzt nur noch nicht verstanden, wie das mit den Passwörtern funktioniert. Man klemmt das Gerät an und erzeugt ein Masterpasswort, dann tippt man ein Passwort ein und der Minirechner schickt die Daten weiter, die aus den Eingaben generiert hat, richtig?

        Aber dann muss man sich ja trotzdem für verschiedene Seiten, verschiedene Passwörter merken!?

        • Nö, das ist der Witz des ganzen. Anstatt dir das komplexe Passwort merken zu müssen, reicht es, wenn du dir das Masterpasswort merkst (das du beim Hochfahren des Geräts eintippst) und Informationen verwendest, die aus dem jeweiligen Dienst herleiten kannst. Du tippst beim nächsten Hochfahren wieder das gleiche Masterpasswort ein und voila! Beim Eingeben der gleichen Information erhälst du wieder das gleiche Passwort.

          • Ah ok, koppelt sich das Gerät ab, sobald ein Masterpasswort im Speicher ist? Man muss den großen Rechner neu starten oder den kleinen Rechner? Bei USB müsste es ja egal sein, ob man die Tastatur im laufendem Betrieb an- und absteckt. Was machen Laptopuser? 😀

            • Ich weiß nicht genau, was du mit "abkoppeln" meinst.

              Tja. Notebook-Nutzer müssen eine Tastatur anschließen, genauso wie Desktop-PC-Nutzer. Sollten sie darauf keinen Bock haben und sollten sie der Meinung sein, dass ihr Rechner sicher genug ist, können sie auch die "Revision 1" verwenden. Bei dieser ist das Backend "cryptuino" in eine Konsolenanwendung kompiliert: Auch diese findet man bei den Downloads.

              • Mit Abkoppeln meine ich, dass man nicht einfach das Masterpasswort aus dem Speicher lesen kann.

                • Achso. Also: Das Masterpasswort wird nur im SRAM gehalten, geht also beim Verlust der Netzspannung verloren. Sollte einem das nicht sicher genug sein, ist es auch möglich, über den Reset-Button das Masterpasswort aktiv überschreiben zu lassen (wenn man z.B. ds Gerät nur kurz verlässt, aber sicher sein will, dann keiner dram rumdoktoren kann).

Schreibe einen Kommentar

Um Ihnen beim weiteren Kommentieren auf dieser Webseite die erneute Eingabe Ihrer Daten zu ersparen, wird beim Absenden Ihres Kommentars ein Cookie an Ihren Browser gesendet und von diesem gespeichert. Mit dem Absenden eines Kommentars auf dieser Webseite stimmen Sie der Speicherung und Übertragung dieses Cookies explizit zu.

Pflichtfelder sind mit * markiert.