Dette indlæg er alene udtryk for skribentens egen holdning.

nRF52840 Dongle med OpenSK uden $300 kabel

30. marts 2020 kl. 21:382
Artiklen er ældre end 30 dage
Manglende links i teksten kan sandsynligvis findes i bunden af artiklen.

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!

Artiklen fortsætter efter annoncen

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!

Artiklen fortsætter efter annoncen

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:

  1. 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.

  1. apt install git curl python3-pip libssl-dev pkg-config
  2. curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
  3.  
  4. root@debian-10-fido:~# echo "PATH=$PATH:$HOME/.cargo/bin" >> .bashrc
  5. root@debian-10-fido:~# . .bashrc
  6.  
  7. $ rustc -V
  8. rustc 1.42.0 (b8cedc004 2020-03-09)
  9. $ cargo -V
  10. 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.

  1. apt install python3
  2.  
  3. $ python3
  4. Python 3.7.3 (default, Dec 20 2019, 18:57:59)

Derefter skulle man kunne installere nrfutil med:

  1. pip3 install nrfutil

Denne fejler dog med en BLE, pakke, øv.

  1. Collecting pc_ble_driver_py>=0.14.1 (from nrfutil)
  2. 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)
  3. 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:

  1. python3 -m pip install -U pip

hvorefter vi endelig kan installere nrfutil

  1. root@debian-10-fido:~# pip3 install nrfutil
  2. root@debian-10-fido:~# nrfutil version
  3. 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

  1. git clone https://github.com/tock/tockloader.git
  2. cd tockloader/
  3. ls
  4. less README.md
  5. python3 setup.py
  6. python3 setup.py install

Setup OpenSK repo

Så er det tid til at hente base repo og bygge!

  1. git clone https://github.com/google/OpenSK.git
  2. cd OpenSK
  3. ./setup.sh
  4.  
  5. ...
  6. Compiling elf2tab v0.4.0
  7. Finished release [optimized] target(s) in 1m 17s
  8. Installing /root/.cargo/bin/elf2tab
  9. Installed package `elf2tab v0.4.0` (executable `elf2tab`)
  10. 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.

  1. root@debian-10-fido:~# lsusb
  2. Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
  3. Bus 001 Device 002: ID 1915:521f Nordic Semiconductor ASA
  4. Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Jeg brugte bare de kommandoer som er i issue 81:

  1. ./deploy.py --board=nrf52840_dongle_dfu --opensk --programmer=nordicdfu
  2. <<<< Re insert the Dongle >>>>
  3. ./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

  1. root@debian-10-fido:~/OpenSK# ./deploy.py --board=nrf52840_dongle_dfu --opensk --programmer=nordicdfu
  2. info: Updating rust toolchain to nightly-2020-02-03
  3. info: syncing channel updates for 'nightly-2020-02-03-x86_64-unknown-linux-gnu'
  4. info: checking for self-updates
  5. info: component 'rust-std' for target 'thumbv7em-none-eabi' is up to date
  6. info: Rust toolchain up-to-date
  7. info: Building Tock OS for board nrf52840_dongle_dfu
  8. Finished release [optimized + debuginfo] target(s) in 0.01s
  9. info: Building OpenSK application
  10. Compiling openssl-sys v0.9.54
  11. Compiling openssl v0.10.28
  12. Compiling ctap2 v0.1.0 (/root/OpenSK)
  13. Finished release [optimized] target(s) in 15.82s
  14. info: Generating Tock TAB file for application/example ctap2
  15. info: Generating all-merged HEX file: target/nrf52840_dongle_dfu_merged.hex
  16. info: Creating DFU package
  17. info: Please insert the dongle and switch it to DFU mode by keeping the button pressed while inserting...
  18. info: Press [ENTER] when ready.
  19.  
  20. info: Flashing device using DFU...
  21. [####################################] 100%
  22. Device programmed.
  23. 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:

  1. sudo cp rules.d/55-opensk.rules /etc/udev/rules.d/ && sudo
  2. 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!

2 kommentarer.  Hop til debatten
Denne artikel er gratis...

...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.

Debatten
Log ind eller opret en bruger for at deltage i debatten.
settingsDebatindstillinger
2
31. marts 2020 kl. 10:31

Når nu du har flere nRF52840, så kunne du udnytte deres strålende wireless capabilities, sådan at du bruger to nRF52840:

  • En der sidder permanent i computeren som ingen hemmeligheder har-- En som man kan have i lommen som indeholder alt det hemmelige.

De to nRF52840 kan så sættes til at snakke sammen trådløst.

På den måde har du bedre kontrol over hvad der ryger frem og tilbage (USB er et meget bredt interface) og du slipper også for unplugge hver gang du går nogen steder.

1
31. marts 2020 kl. 09:57

Der er mange forskellige interfaces, når man vil lege med moduler. Standard TTL level serielt interface, så noget Arduino der kan programmeres til lidt af hvert. STM-2 til STM32 platformen etc etc.

Ofte kan der hackes et eller andet sammen, men andet kræver dyrt modul.

I starten var det det også interfacet der var det dyre hvis man ville køre en zigbee stick til home automation, men man kan faktisk bruge de pin-headers der er med ting fra skufen. Skal dog bøjes lidt da de har mindre spacing end normalt.

Heldigvis kan de fleste interfaces købes billigt i Kina. Og mange moduler kommer efterhånden med en bootloader.