kramselund jereminsen

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

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 <code>elf2tab v0.4.0</code> (executable <code>elf2tab</code>)
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.

Illustration: Henrik Kramselund Jereminsen

og et login:

Illustration: Henrik Kramselund Jereminsen

med et fint afslutningsbillede - det virker!

Illustration: Henrik Kramselund Jereminsen

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!

Kommentarer (2)
sortSortér kommentarer
  • Ældste først
  • Nyeste først
  • Bedste først
#1 Povl H. Pedersen

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.

  • 0
  • 0
#2 Michael Cederberg

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.

  • 0
  • 0
Log ind eller Opret konto for at kommentere