Projektvorstellung: Sicherer Hardware-2FA-Authenticator (USB-Dongle)
Dieses Projekt beschreibt den Eigenbau eines Hardware-Authenticators auf Basis eines Raspberry Pi Pico. Ziel ist es, den oft stressigen Login-Prozess am PC zu vereinfachen, ohne dabei Kompromisse bei der Sicherheit einzugehen.
Ausgangslage & Idee
Wer sich häufig bei verschiedenen Diensten einloggen muss, kennt das Problem: Man greift zum Smartphone, entsperrt es, öffnet die Authenticator-App, sucht den richtigen Dienst und tippt den 6-stelligen Code dann händisch am PC ab. Aber Zack-Zack! Der Timer läuft!
Die Lösung: Ein kompakter USB-Dongle mit einem kleinen Display und einer Bedientaste. Auf diesem Dongle sind die TOTP-Secrets gespeichert. Über die Taste lässt sich bequem durch die verschiedenen Dienste scrollen. Ein etwas längerer Tastendruck reicht aus, und der Dongle tippt den aktuellen 6-stelligen Code via HID (emulierte Tastatur) automatisch am PC ein – inklusive abschließendem "Enter".
Das Sicherheitskonzept
Offensichtliche Sicherheitsbedenken bei Hardware-Token: Jeder, der physischen Zugriff auf den Dongle hat und das Passwort des jeweiligen Dienstes kennt, könnte sich einloggen. Das muss zwingend verhindert werden.
Die Lösung: Die Secrets werden auf dem Dongle AES-verschlüsselt abgelegt. Der Dongle selbst kennt den Schlüssel zum Entschlüsseln nicht – dieser liegt ausschließlich auf dem PC.
- Der Effekt: Der Dongle ist ohne den passenden PC völlig wertlos.
- Das Angriffs-Szenario: Ein potenzieller Angreifer bräuchte physischen Zugriff auf den PC (oder einen Keylogger), müsste den Dongle stehlen und die regulären Login-Daten (Benutzername/Passwort) der Dienste kennen.
Diese Hürde ist enorm hoch und vergleichbar mit dem Diebstahl eines entsperrten Smartphones inkl. bekanntem Zugriffscode. Dieser Ansatz stellt somit einen hervorragenden und vertretbaren Kompromiss aus maximalem Komfort und hoher Sicherheit dar.
Realisierung
1. Hardware
Das Herzstück bildet ein Raspberry Pi Pico (RP2040). Dieser Mikrocontroller ist in verschiedenen Ausführungen erhältlich, unter anderem auch direkt im kompakten USB-Dongle-Format. Das Referenzdesign wurde mit einem Standard-Pico aufgebaut. Warum kein ESP32? Es gibt ähnliche Projekte, die auf einem ESP32 basieren und drahtlos funktionieren. Drahtlose Verbindungen stellen jedoch immer einen potenziellen Angriffsvektor dar. Der kabelgebundene Pico bietet hier die bessere Stabilität, einfacheres Handling und vor allem eine striktere Sicherheitsebene.
2. Software
Das Software-Setup besteht aus drei ineinandergreifenden Komponenten:
- Komponente 1:
aegis_exporter(PC) Dieses Programm wird nur einmalig zur Initialisierung (oder bei Updates der Codes) benötigt. Es liest die exportierten Secrets aus, generiert den AES-Schlüssel (für den PC) und erzeugt das verschlüsselte Gegenstück für den Pico. - Komponente 2:
picototp(Pico-Sketch) Dieser Code wird über die Arduino IDE auf den Pico geladen. Die zuvor erzeugte Dateisecrets.hwird in den Sketchordner importiert. Nach dem Kompilieren und Hochladen ist der Dongle personalisiert und funktioniert ab sofort nur noch mit dem passenden AES-Schlüssel des jeweiligen PCs. - Komponente 3:
pico_daemon(PC) Dieses Hintergrundprogramm verwaltet den angeschlossenen Dongle. Sobald der Pico eingesteckt wird, werden die verschlüsselten Secrets auf dem Dongle mithilfe des PC-seitigen AES-Schlüssels entsperrt und verbleiben bis zum Abziehen sicher im RAM des Picos. Zusätzlich synchronisiert der Daemon die aktuelle PC-Uhrzeit mit dem Dongle (zwingend notwendig für die TOTP-Generierung). Das Programm arbeitet ressourcenschonend im Hintergrund und verursacht kaum messbare Systemlast.
Bedienung im Alltag
- Einstecken: Der Dongle initialisiert sich und ist in wenigen Sekunden einsatzbereit.
- Auswählen: Ein kurzer Druck auf die Taste wechselt zum nächsten Dienst auf dem Display.
- Authentifizieren: Ein etwas längerer Tastendruck tippt den 6-stelligen Code am PC ein und bestätigt automatisch mit Enter.
Fazit zur Architektur
Die Sicherheitstrennung ist bestmöglich umgesetzt: Der PC kann die rohen, unverschlüsselten Secrets niemals dauerhaft aus dem Speicher des Picos auslesen, und der Pico hat umgekehrt keine Möglichkeit, an Passwörter oder Login-Daten des PCs zu gelangen.
⚠️ Best Practices & Wichtige Sicherheitshinweise
Wer dieses Projekt nachbaut, geht mit extrem sensiblen Daten um. Folgende Regeln sind zwingend einzuhalten:
- Restriktionen bei der Datenhaltung: Alle sicherheitsrelevanten Dateien sollten ausschließlich auf einem verschlüsselten USB-Speicherstick verarbeitet und danach sicher (z. B. in einem Tresor) verwahrt werden. Nach der erfolgreichen Programmierung des Picos müssen die
secrets.hund alle anderen exportierten Rohdaten restlos vom PC gelöscht werden! Lediglich die AES-Schlüsseldatei darf und muss auf dem PC verbleiben. - Absolute Vorsicht beim Export (Flugmodus!): Wenn Secrets vom Google Authenticator zu Aegis übertragen und als JSON-Datei exportiert werden, muss das Smartphone zwingend in den Flugmodus (offline) versetzt werden!
- Der Grund: Fast alle modernen Smartphones laden erstellte Screenshots automatisch in die Cloud (Google Fotos, iCloud etc.) hoch. Ein sofortiges Löschen auf dem Gerät reicht oft nicht aus, um den Cloud-Sync abzubrechen.
- Die Regel: Offline gehen -> Exportieren -> Daten auf den USB-Stick ziehen -> JSON-Dateien und Screenshots auf dem Handy restlos löschen -> USB-Stick freigeben -> Erst danach den Flugmodus wieder deaktivieren.
Hinweis zur Kompatibilität: Dieses Projekt und der Export-Workflow wurden primär mit Android-Smartphones (Aegis Authenticator) getestet. Nutzer von iOS-Geräten müssen für den sicheren Export ihrer TOTP-Secrets gegebenenfalls alternative Wege nutzen.
Wer nun Lust verspürt, das Projekt selbst zu bauen, der lese hier weiter. Viel Spaß beim Nachbau!
