Raspberry Pi Pico als Passwortmanager im Hosentaschenformat

Aus LinuxUser 04/2023

Raspberry Pi Pico als Passwortmanager im Hosentaschenformat

© pkproect / 123RF.com

Schlüsselbund

Haben Sie es satt, sich Dutzende Passwörter für Konten und Webseiten merken zu müssen? Mit einem Pi Pico als portable Anmeldehilfe gehört das der Vergangenheit an.

Eine inflationäre Anzahl von Zugängen samt Passwörtern erschwert das sichere Verwalten aller Identitäten. Abhilfe versprechen zahlreiche unterschiedliche Ansätze wie Fido2/Passkey, spezielle Software wie Keypass oder die im Browser eingebaute Passwortverwaltung. Die fallen jedoch entweder zu kompliziert (Fido2) aus, werden nur eingeschränkt unterstützt (Passkey, Fido2) oder misstrauisch beäugt.

In diesem Projekt geht es um einen bequemen Ersatz: eine Tastatur, die auf Knopfdruck Benutzername und Passwort in die Anmeldeformulare eintippt. Als Tastatur dient dazu ein Raspberry Pi Pico, der dieses HID (Human Interface Device) emuliert.

Die Technik dahinter existiert längst: Manipulierte USB-Sticks mit einem Mikrocontroller sind beliebte Angriffsmittel unter Cyberkriminellen. Ein argloser Mitarbeiter findet den vermeintlich verlorenen USB-Stick auf dem Firmenparkplatz und steckt ihn neugierig an seinem Arbeitsplatz ein. Schon aktiviert sich im Hintergrund die Tastatur und installiert eine Backdoor.

Hardware

Neben dem Pico benötigen Sie einen kleinen Bildschirm und mindestens vier Tasten für das Projekt. Als ideal für unsere Zwecke stellte sich der Bildschirm Pico-LCD-0.96 von Waveshare (Abbildung 1) für 7 Euro heraus.

Abbildung 1: Der 0.96-Zoll-Bildschirm von Waveshare stellt einen 5-Wege-Schalter (links) sowie zwei einzelne Tasten (rechts) bereit.

Abbildung 1: Der 0.96-Zoll-Bildschirm von Waveshare stellt einen 5-Wege-Schalter (links) sowie zwei einzelne Tasten (rechts) bereit.

Er verfügt über einen 5-Wege-Schalter links neben dem Bildschirm, über den Sie durch Betätigung nach oben und unten durch die Einträge navigieren. Mit der oberen der zwei Einzeltasten auf der rechten Seite lösen Sie die Eingabe des Benutzernamens aus, durch einen Druck auf die untere schicken Sie das Passwort ab. Alternative Displays mit Tastern in derselben Preisklasse finden Sie auch bei anderen Herstellern. So offeriert beispielsweise Pimoroni das Pico-Display-Pack mit vier Tasten.

Der Pico selbst findet an der Unterseite des Displays seinen Platz, wodurch die Kombination sehr platzsparend ausfällt (Abbildung 2). Die Auflösung von 160 x 80 Pixeln eignet sich hervorragend für drei Zeilen mit Shop- und Benutzername sowie Passwort. Farb-TFTs in dieser Größe basieren häufig auf einem ST7735-Chip, deshalb fällt die Treiberversorgung für alle infrage kommenden Miniaturbildschirme recht gut aus.

Abbildung 2: Der Raspberry Pi Pico sitzt platzsparend unterhalb des als HAT ausgeführten Mini-Displays.

Abbildung 2: Der Raspberry Pi Pico sitzt platzsparend unterhalb des als HAT ausgeführten Mini-Displays.

Software

Die Firmware für unseren Passworthelfer ist in CircuitPython implementiert. Anders als bei MicroPython meldet sich ein Pico mit CircuitPython gleich dreifach an einem Host an: als Massenspeicher (USB-Laufwerk), als serielle Schnittstelle und als HID. Im Systemlog können Sie das beim Einstecken verfolgen, etwa über das Kommando sudo journalctl -f. Den gesamten Code des Projekts finden Sie auf Github [1]. Hier gehen wir nur auf ein paar spezielle Aspekte des Programms ein.

Das Hauptprogramm erwartet die Passwortliste in der Datei secrets.py. Dabei handelt es sich um eine simple Python-Liste von Dreifachtupeln mit der Struktur (Shop-Name,Benutzername,Passwort). Ein kleines Beispiel dazu zeigt Listing 1. Über ein normales Import-Statement geladen, stehen die Daten direkt als passende Struktur bereit. Die Anwendung merkt sich über einen Index stets den aktuellen Eintrag und zeigt ihn auf dem Bildschirm an.

Listing 1

Passwortliste

secrets = [
  ('Amazon','ama-id','ama-pw'),
  ('Ebay','ebay-id','ebay-pw'),
  ('Google','google-id','google-pw'),
  ('Reichelt','reichelt-id','reichelt-pw'),
  ('Adafruit','ada-id','ada-pw')
]

Steuerung

Nach der Anzeige eines Eintrags läuft das Programm in einer Endlosschleife und wartet auf Tastendrücke. Damit diese Schleife nicht in einer langen Abfrage der verschiedenen GPIOs ausartet, gibt es in CircuitPython die Hilfsklasse Keys aus dem Modul keypad. Der Konstruktor erwartet eine Reihe von GPIO-Nummern sowie einige Attribute (Listing 2). Dazu gehört etwa die Angabe, welchen Wert der Pin beim Drücken hat oder in welchem Intervall die Abfrage erfolgen soll.

Listing 2

Button-Verarbeitung

import keypad
keys = keypad.Keys(
  [PIN_USER,PIN_PW,PIN_UP,PIN_DOWN,PIN_ENTER],
  value_when_pressed=False, pull=True,
  interval=0.1, max_events=4 )
callbacks = [
  on_user,on_pw,on_up,on_down,on_enter
]
while True:
  event = keys.events.get()
  if event and event.pressed:
    callbacks[event.key_number]()

Der Code in Listing 2 legt parallel zum Objekt Keys noch eine Liste mit Callbacks an (Zeilen 6 bis 8). In der Hauptschleife ermittelt das Programm zum aktuellen Event die Nummer der auslösenden Taste (event.key_number) und ruft die entsprechende Funktion mit demselben Index auf (Zeilen 10 und 12). Das Ganze fällt derart generisch aus, dass Sie den Codeschnipsel als Baustein in beliebigen Anwendungen nutzen könnten.

Tastaturemulation

Die beiden Taster rechts vom Bildschirm in Abbildung 1 sollen Benutzername und Passwort ausgeben, und zwar in Form von Tastatureingaben. Dazu muss freilich der Cursor im richtigen Eingabefeld stehen. Programmiertechnisch ist das eine einfache Übung, wie Listing 3 demonstriert.

Listing 3

Tastaturemulation

import usb_hid
from adafruit_hid.keyboard  import Keyboard
from keyboard_layout_win_de import KeyboardLayout
tastatur_device = Keyboard(usb_hid.devices)
keyboard = KeyboardLayout(tastatur_device)
def on_user():
  keyboard.write(secrets[index][1])
def on_pw():
  keyboard.write(secrets[index][2])

Zuerst generiert der Code ein Tastatur-Device (Zeile 4) und danach die Tastatur mit deutschem Layout (Zeile 5). Das passende Python-Modul keyboard_layout_win_de aus Zeile 3 fehlt allerdings in den offiziellen Bibliothekssammlungen. Sie müssen es manuell von Github [2] herunterladen und ins Verzeichnis /lib auf Ihrem Pico kopieren.

Einmal erzeugt, kommt die Tastatur in den Callbacks on_user() und on_pw() zum Einsatz. Dort schreibt sie den Benutzernamen und das Passwort aus dem aktuellen Eintrag der Passwortliste (Zeilen 6 bis 9).

Sicherheit

Es macht nicht sonderlich viel Mühe, das Gadget zu benutzen. Sie navigieren zur Anmeldeseite des Shops und wählen am Pico den richtigen Eintrag. Dann springen Sie ins Feld für den Benutzernamen und drücken die obere Taste. Zu guter Letzt wechseln Sie ins Passwortfeld und drücken die untere Taste.

Genauso einfach bedient allerdings ein Fremder den Passworthelfer, falls er einmal in falsche Hände gerät. Wirklich sicher wäre das Gadget nur mit einer verschlüsselten Passwortdatei auf dem Pico. Beim Start müsste der Passworthelfer dann eine PIN anfordern. Das klingt unbequem und ist es auch. Außerdem stachelt das Ganze dann vielleicht erst recht den Forschungsdrang des Finders an. Da eine papierene Passwortliste auf dem Schreibtisch ebenfalls nicht PIN-geschützt wäre, stellen wir hier nicht ganz so hohe Anforderungen. Es geht um eine Balance zwischen Bequemlichkeit auf der einen und Sicherheit auf der anderen Seite.

Zur Absicherung gibt es verschiedene Optionen. Beispielsweise könnte sich der Pico beim Einstecken einfach tot stellen, also den Bildschirm gar nicht erst einschalten. Erst eine vordefinierte Abfolge von gedrückten Tasten würde das System aktivieren.

Eine weitere mögliche Alternative dazu finden Sie im Projekt-Repository: Hier tarnt sich der Pico mit einer Diashow (Abbildung 3). Die Tasten blättern lediglich durch die Grafiken, ansonsten passiert nichts. Erst wenn Sie die Eingabetaste des 5-Wege-Schalters beim richtigen Bild drücken, schaltet der Pico von der Diashow auf den Passworthelfer um.

Abbildung 3: Diashow auf dem Display.

Abbildung 3: Diashow auf dem Display.

Ebenfalls infrage kommt ein Vorkompilieren der Passwortdatei mithilfe des Tools Mpy-cross [3]. Bei allen diesen Maßnahmen sollten Sie sich jedoch dessen bewusst sein, dass sie nichts gegen Profis nützen.

Fazit

Der Pico als universelles Tool macht als Passwortspeicher für die Hosentasche eine gute Figur. Die Hardwarekosten halten sich dabei in Grenzen, und dank CircuitPython lässt sich auch die Software schnell implementieren.

Selbst wenn Sie bei Ihrer altbewährten Methode zum Verwalten von Passwörtern bleiben, lohnt sich ein Blick in den Code dieses Projekts. Als Fundgrube für Codeschnipsel für die Button-Steuerung oder die Arbeit mit kleinen Displays taugt die Software allemal. (csi/jlu)

Der Autor

Bernhard Bablok arbeitet bei der Allianz Technology SE als SAP-HR-Entwickler. Wenn er nicht gerade Musik hört oder mit dem Rad respektive zu Fuß unterwegs ist, beschäftigt er sich mit Themen rund um Linux, Programmierung und Kleincomputer. Sie erreichen ihn unter mailto:mail@bablokb.de.

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDF
LinuxUser 04/2023 KAUFEN
EINZELNE AUSGABE
ABONNEMENTS
TABLET & SMARTPHONE APPS
E-Mail Benachrichtigung
Benachrichtige mich zu:

Hinweis: Dieser Artikel ist älter als ein Jahr, enthaltene Informationen sind möglicherweise veraltet.

1 Kommentar
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
ChrisLetti
3 Jahre her

Warum wird eigentlich nicht erklärt, wie man das Programm auf den Pico bekommt? In anderen Tutorials wird mir gesagt, das der Pico mit CircuitPython nur die Code.py liest. Was soll ich denn jetzt machen?

Nach oben