Sleutels Google Authenticator Uitlezen
Het viel mij op dat Authenticator TOTP sleutels opgeslagen kunnen worden in Vaultwarden (Bitwarden). Dat is erg handig, want daarmee beschik je over een geĆÆntegreerde authenticator app. In combinatie met de handige desktop app en browser extension gaat inloggen op de vele pagina's en systemen zeer gebruiksvriendelijk. Maar nu het probleem: hoe kom ik snel aan alle secret keys (geheime sleutels)? Anders moet ik immers opnieuw QR codes genereren. Dat is een heel karwei.
Gelukkig zit er in Google Authenticator tegenwoordig een optie om accounts over te zetten (exporteren/importeren). Met de menu-optie accounts overzetten
kunnen drie QR codes gegenereerd worden. De bedoeling is (eigenlijk) om die QR codes op een ander toestel in Google Authenticator te scannen. Dat laatste wil ik (op dit moment) niet - ik wil juist de geheime sleutels weten, zodat ik die vervolgens in Vaultwarden kan plakken.
Precies dat is mogelijk met een handig Python script wat ik vond op Github: https://github.com/scito/extract_otp_secret_keys.
Op mijn laptop draai ik Debian GNU/Linux. Met het commando apt install python3-pip
kan ik (als root) de Python Package Installer (of kortweg pip
) installeren. Met pip
kan ik vervolgens (als gewone gebruiker) de benodigde packages installeren. De packages die ik nodig had zijn protobuf
en qrcode
. De Python Package Installer kan (moet) ik met mijn gewone gebruikersaccount gebruiken. Het resultaat is dat pip
de benodigde bestanden onder $HOME/.local
neerzet. De commando's die ik uit moest voeren zijn: pip install protobuf
en pip install qrcode
.
Tot slot heb ik de code van Roland Kurmann (scito) gedownload via de link https://github.com/scito/extract_otp_secret_keys/archive/refs/heads/master.zip. De ZIP heb ik vervolgens uitgepakt in $HOME/Python
. In die map staat dan extract_otp_secret_keys-master
met het script extract_otp_secret_keys.py
.
Dat laatste betekent dat ik het script kan "voeren" met de geƫxporteerde gegevens uit Google Authenticator. Tijdens de export van de gegevens is het nodig om drie keer een QR code te scannen. Ik heb daarvoor de ingebouwde webcam van mijn laptop gebruikt. Ik heb simpelweg het commando qtqr
uitgevoerd vanaf de terminal. Het voordeel is dat de data dan direct zichtbaar wordt in de terminal tijdens het scannen. In QtQR heb ik bij "Select data type" de optie gewoon op "Text" laten staan. Vervolgens is het een kwestie van op de knop "Decode from Webcam" klikken. Vervolgens kan met de "Edit" knop de tekst bekeken/bewerkt worden.
Meer informatie over QtQR:
- Debian Packages: qtqr, qr-tools
- Launchpad: QR Tools in Launchpad
Ik heb van alle drie QR codes de tekst bekeken en vervolgens gekopieerd naar een text editor. De tekst bestaat uit URL's. Ik heb de URL's onder elkaar gezet en het geheel opgeslagen onder de naam export_qr.txt
op mijn bureaublad. Met het commando python extract_otp_secret_keys.py -p /home/bouke/Desktop/export_qr.txt
kon ik tot slot de gegevens uitlezen.
Tijdens de eerste poging werd er een melding weergegevens over de versie van het pakket Protocol Buffers protobuf
. Ook de oplossing stond er bij: export PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python
uitvoeren en daarna nog een keer proberen. Dat zou trager werken - maar de verwerkingsduur was enkele seconden (op mijn laptop).
Het resultaat is dat al mijn QR codes - inclusief geheime sleutels - in mijn terminal venster werden weergegeven. Ik heb simpelweg de uitvoer gekopieerd en geplakt in een text editor voor de verdere verwerking. Wat ook nog kan is om de uitvoer om te leiden naar een bestand. Ik heb dat niet gedaan (het was niet nodig) - maar de uitvoer omleiden kan door middel van het toevoegen van een groter-dan-teken gevolgd door een bestandsnaam. In mijn geval was dat dan zoiets geweest zoals python extract_otp_secret_keys.py -p /home/bouke/Desktop/export_qr.txt > /home/bouke/Desktop/export_qr_output.txt
.
Dit script is een succes en het heeft mij geholpen om niet alle QR codes te hoeven vervangen. Ik ben over het algemeen wel wat terughoudend met dit soort scripts. Ik heb de broncode bekeken - en ik kon niets ontdekken waarmee mijn gegevens misbruikt kunnen worden. Ik heb ook gekeken naar wie de auteur is en wat hij zoals aan gewerkt heeft. Ik zag dat Roland - naast een interessant Github pagina - een interessante site heeft: https://scito.ch/. Op die site staat ook een artikel met de titel Extract secret keys from Google Authenticator QR export. In dat artikel staat ook een voorbeeld van de uitvoer van het Python script.
Ik heb uiteraard de onversleutelde tekstbestanden naderhand verwijderd (uiteraard werk ik op een versleutelde laptop - maar toch: onversleutelde tekstbestanden laat ik liever niet op mijn bureaublad staan).