Aus Raspberry Pi Geek 05/2023

Raspberry Pi Pico als Passwortmanager im Hosentaschenformat

© pkproect / 123RF.com

Schlüsselbund

Bernhard Bablok

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.

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 4 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
RASPBERRY PI GEEK KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Raspberry Pi Geek bei Google Play Readly Logo
Nach oben