nRF52840 Dongle med OpenSK uden $300 kabel
Nå, dette blog indlæg er denne gang uden politisk indhold. Så det anbefales at spille noget kærlig musik til dine øregange og læse med på denne rejse. Det kunne være https://www.youtube.com/watch?v=zHdxNUX1hkw , https://www.youtube.com/watch?v=zaGUr6wzyT8 , https://www.youtube.com/watch?v=rjOKm28hUXk jeg har en playliste jeg hører, men du kan nok selv finde noget rart at lytte til.
Giv din hjerne en pause fra kriserne og lær mindst 5 nye forkortelser :-)
Rejsen er lidt sjov for jeg kastede mig hovedkuls ud i projektet for noget tid siden. Det sker indimellem. Læste om OpenSK og tænkte, fuck det lyder nice! Jeg kan lave min egen Yubikey og lære en masse om nye teknologier.
Hvad er OpenSK:
OpenSK
This repository contains a Rust implementation of a FIDO2 authenticator.
...
Disclaimer
This project is proof-of-concept and a research platform. It is NOT meant for a daily usage. It's still under development and as such comes with a few limitations:FIDO2
Although we tested and implemented our firmware based on the published CTAP2.0 specifications, our implementation was not reviewed nor officially tested and doesn't claim to be FIDO Certified.Cryptography
We're currently still in the process on making the ARM® CryptoCell-310 embedded in the Nordic nRF52840 chip work to get hardware-accelerated cryptography. In the meantime we implemented the required cryptography algorithms (ECDSA, ECC secp256r1, HMAC-SHA256 and AES256) in Rust as a placeholder. Those implementations are research-quality code and haven't been reviewed. They don't provide constant-time guarantees and are not designed to be resistant against side-channel attacks.
Wauw, bare wauw - det er fandme fedt!
Når man så slår op at den lille USB dimmer koster det samme som en pizza med cola til, så bliver det sjovt.
Links til hardwaren jeg vil omtale:
https://www.nordicsemi.com/Software-and-Tools/Development-Kits/nRF52840-Dongle
Jeg købte 10 stks hos Rutronik24 https://www.rutronik24.com/product/nordic/nrf52840-dongle/10720468.html for 98 EUR omkring 13/2. Du kan købe en for kostprisen hvis vi mødes, har ca. 5 for tiden i tasken.
Levering og problem 1
Det første problem efter levering er, for at flashe denne skal du bruge et $300 kabel - urgghhhh!
Nå, men der var allerede nogle stykker der snakkede om at bruge en anden som mellemmand osv. Jeg valgte at lægge projektet i den store bunke af andre "når jeg en dag bliver gammel"-projekter.
Der er så gået noget tid, og jeg fandt så det lukkede issue! Det issue er hvad resten af indlægget her er bygget med:
https://github.com/google/OpenSK/issues/81
Det fortæller at man kan flashe direkte med DFU bootloader på nRF52840 dongle.
Pre-requisites
Du skal bruge deploy tool der har nogle afhængigheder, som jeg vil behandle for sig
- Rust programmeringssproget
- nrfutil - som kræver python3 og en drilsk pakke. Husk det skal være Python 3!
- den drilske pakke kan installeres hvis du opgraderer pip3 pakke systemet
- tockloader - som skal være ny, jeg bruger git clone til denne
- Setup OpenSK repo, og build
- deploy - man skal køre deploy script to gange
Jeg foretog nedenstående på en Debian 10, og det giver mindst to konklusioner. 1) Man kan flashe uden $300 kabel 2) Man kan flashe med et frit og åbent operativsystem nemt.
Hvis et af nedenstående fejler, må du prøve at finde en løsning. Jeg viser de versioner jeg endte med.
Rust installeres
De anbefaler en fin curl shell:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
Det anbefales derfor at have en dedikeret VM til dette formål.
Installationen burde dog gå nogenlunde glat, inkl lidt andre dependencies.
apt install git curl python3-pip libssl-dev pkg-config curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh root@debian-10-fido:~# echo "PATH=$PATH:$HOME/.cargo/bin" >> .bashrc root@debian-10-fido:~# . .bashrc $ rustc -V rustc 1.42.0 (b8cedc004 2020-03-09) $ cargo -V cargo 1.42.0 (86334295e 2020-01-31)
nrfutil install, fejler
Et af værktøjerne til flashing er selve nrfutil pakken.
Du skal derfor sørge for at have python3 installeret.
apt install python3 $ python3 Python 3.7.3 (default, Dec 20 2019, 18:57:59)
Derefter skulle man kunne installere nrfutil med:
pip3 install nrfutil
Denne fejler dog med en BLE, pakke, øv.
Collecting pc_ble_driver_py>=0.14.1 (from nrfutil) Could not find a version that satisfies the requirement pc_ble_driver_py>=0.14.1 (from nrfutil) (from versions: 0.1.0, 0.2.0, 0.3.0, 0.4.0, 0.5.0, 0.6.0, 0.6.1, 0.6.2, 0.8.0, 0.8.1, 0.9.0, 0.9.1, 0.10.0, 0.11.0, 0.11.1, 0.11.2, 0.11.3, 0.11.4) No matching distribution found for pc_ble_driver_py>=0.14.1 (from nrfutil)
pip upgrade
Lidt søgning viser at hvis man opgraderer pip, så virker det:
python3 -m pip install -U pip
hvorefter vi endelig kan installere nrfutil
root@debian-10-fido:~# pip3 install nrfutil root@debian-10-fido:~# nrfutil version nrfutil version 6.0.1
tockloader build
Tockloader som skal være en nyere, end pip har:
Så vi tager den fra Github
https://github.com/tock/tockloader
git clone https://github.com/tock/tockloader.git cd tockloader/ ls less README.md python3 setup.py python3 setup.py install
Setup OpenSK repo
Så er det tid til at hente base repo og bygge!
git clone https://github.com/google/OpenSK.git cd OpenSK ./setup.sh ... Compiling elf2tab v0.4.0 Finished release [optimized] target(s) in 1m 17s Installing /root/.cargo/bin/elf2tab Installed package `elf2tab v0.4.0` (executable `elf2tab`) root@debian-10-fido:~/OpenSK#
Deploy på USB key
Når du indsætter USB dongle vil den som standard stå i DFU bootloader, klar til flashing. Evt. kan du holde knappen nede under isætningen, det burde give det samme. Ellers må vi spørge en hardwareekspert til råds.
root@debian-10-fido:~# lsusb Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 001 Device 002: ID 1915:521f Nordic Semiconductor ASA Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Jeg brugte bare de kommandoer som er i issue 81:
./deploy.py --board=nrf52840_dongle_dfu --opensk --programmer=nordicdfu <<<< Re insert the Dongle >>>> ./deploy.py --board=nrf52840_dongle_dfu --programmer=nordicdfu --no-app --dont-clear-apps
De to tre gange deploy er vist nødvendigt for at den ikke skal ende i DFU bootloader, eller noget - se issuet
Tak til https://github.com/diegobes m.fl.
Dernæst optræder enheden ved indsætning som:
Nordic_Semiconductor_ASA_OpenSK_v0.1
Set på min Qubes OS med qvm-usb
Yay og tillykke hvis du selv er kommet hertil!
Note: output fra flashing
root@debian-10-fido:~/OpenSK# ./deploy.py --board=nrf52840_dongle_dfu --opensk --programmer=nordicdfu info: Updating rust toolchain to nightly-2020-02-03 info: syncing channel updates for 'nightly-2020-02-03-x86_64-unknown-linux-gnu' info: checking for self-updates info: component 'rust-std' for target 'thumbv7em-none-eabi' is up to date info: Rust toolchain up-to-date info: Building Tock OS for board nrf52840_dongle_dfu Finished release [optimized + debuginfo] target(s) in 0.01s info: Building OpenSK application Compiling openssl-sys v0.9.54 Compiling openssl v0.10.28 Compiling ctap2 v0.1.0 (/root/OpenSK) Finished release [optimized] target(s) in 15.82s info: Generating Tock TAB file for application/example ctap2 info: Generating all-merged HEX file: target/nrf52840_dongle_dfu_merged.hex info: Creating DFU package info: Please insert the dongle and switch it to DFU mode by keeping the button pressed while inserting... info: Press [ENTER] when ready. info: Flashing device using DFU... [####################################] 100% Device programmed. root@debian-10-fido:~/OpenSK#
Testen
Vejledningen er:
To test whether the installation was successful, visit a demo website and try to register and login.
Web sitet er https://webauthn.io/ og det lykkedes!
Efter tryk på register og tryk på hardwaren - der er kun een knap og indtil flere dioder stod og blinkede livligt.
og et login:
med et fint afslutningsbillede - det virker!
Næste skridt ville være at bruge FIDO bilioteker og OpenSSH 8.2 og den slags.
Linux addendum
Der er to ting omkring Linux som er værd at bemærke, hvis du ikke kender Linux.
Rettigheder på Linux er baseret på root-brugeren, denne har lov til alt. Hvis du konfigurerer sudo slipper du for at logge ind som root, men du kan også udføre alt som root - hvad jeg gjorde på min. Hvis du bruger en specifik virtuel maskine kun til at flashe - så er det fint at køre alt som root. Du skal dog ikke tage den slags dårlige vaner med over i produktionssetup.
De anbefaler også at installere nogle regler for almindelige brugere YMMV:
sudo cp rules.d/55-opensk.rules /etc/udev/rules.d/ && sudo udevadm control --reload 318 sync
Min Debian 10 er installeret som en Qubes Debian 10 template - standalone med ovenstående installeret. Det burde virke på samme måde med en som I installerer. Hvis ikke så send mig gerne en email.
PS Beklager hvis nogle kommandoer ikke står så pænt, kan være jeg lige retter lidt hist og her senere!

...men det er dyrt at lave god journalistik. Derfor beder vi dig overveje at tegne abonnement på Version2.
Digitaliseringen buldrer derudaf, og it-folkene tegner fremtidens Danmark. Derfor er det vigtigere end nogensinde med et kvalificeret bud på, hvordan it bedst kan være med til at udvikle det danske samfund og erhvervsliv.
Og der har aldrig været mere akut brug for en kritisk vagthund, der råber op, når der tages forkerte it-beslutninger.
Den rolle har Version2 indtaget siden 2006 - og det bliver vi ved med.