Compilare GNUK

Pubblicato il lun 04 giugno 2018 in crittografia • 3 min read

Il motivo principale per voler compilare gnuk è quello di poter usare chiavi rsa4096 o ed25519/cv25519. Fino a poco tempo fa sia sul FST-01 che sul NITROKEY START era precaricata una versione di gnuk che limitava il tipo di chiavi da usare a rsa2048. Per rendervi conto delle performances fate riferimento a questo link.

Un altro motivo potrebbe essere quello di usare una versione più aggiornata di gnuk che corregge i bugs individuati. A tal proposito è bene che vi teniate informati leggendo la newsletter ufficiale del progetto.

Avviso

  • Questa procedura potrebbe rendere inservibile il vostro token.
  • Inoltre le chiavi eventualmente presenti sul token verranno cancellate!

Gnuk supporta l'upgrade del firmware. Ma se, durante la procedura di installazione del nuovo firmware, capitassero degli imprevisti allora vi servirà un Debugger SWD come il ST-Link V2. Cos'è il ST-Link V2? E' un circuito per il debugging e la programmazione dei microchip della famiglia STM8 e STM32;
sia il Nitrokey Start che il FST-01 sono basati appunto sul microchip STM32F103TB.
E' prodotto dalla STMicroelectronics

st-link v2,

ma ne esistono anche dei cloni.

st-link v2 clone

Preparazione

Io utilizzo Arch Linux, quindi la procedura di seguito descritta è specifica per questa distribuzione; ma dovrebbe funzionare senza problemi anche sulle altre.

Per prima cosa occorre installare alcuni pacchetti necessari:

$ sudo pacman -S base-dev git arm-none-eabi-gcc arm-none-eabi-newlib arm-none-eabi-binutils python2-pyusb

Nota 1: base-dev è un metapacchetto che comprende:

autoconf automake binutils bison fakeroot file findutils flex gawk gcc gettext grep groff 
gzip libtool m4 make pacman patch pkgconf sed sudo systemd texinfo util-linux which

Nota 2: saranno necessari i permessi di root per effettuare l'update del firmware. Altrimenti sarà necessario creare il file
/etc/udev/rules.d/61-gnuk.rules con il seguente contenuto:

#Questa nel caso usiate il FST-01
SUBSYSTEMS=="usb", ACTION=="add", ATTRS{idVendor}=="234b", ATTRS{idProduct}=="0000",\
ENV{ID_SMARTCARD_READER}="1", ENV{ID_SMARTCARD_READER_DRIVER}="gnupg"

#Questa nel caso usiate NITROKEY-START
SUBSYSTEMS=="usb", ACTION=="add", ATTRS{idVendor}=="20a0", ATTRS{idProduct}=="4211",\
ENV{ID_SMARTCARD_READER}="2", ENV{ID_SMARTCARD_READER_DRIVER}="gnupg"

Fatto ciò bisogna riavviare il demone udevd:

$ sudo udevadmin control --reload-rules
$ sudo systemctl restart systemd-udevd.service

o semplicemente riavviare il pc.

Compilare Gnuk

Clonate il repository:

git clone https://salsa.debian.org/gnuk-team/gnuk/gnuk.git
git submodule update --init --recursive

spostatevi nella directory gnuk/src

$ cd gnuk/src

ed eseguite

$ ./configure --help

per vedere le opzioni disponibili;

  • per NITROKEY-START eseguite
~/gnuk/src $ ./configure --vidpid=20a0:4211 --target=NITROKEY_START --enable-factory-reset
  • in alternativa per FST-01 eseguite
~/gnuk/src $ ./configure --vidpid=234b:0000 --target=FST_01 --enable-factory-reset

e procedete alla compilazione con:

~/gnuk/src $ make

dopo un certo tempo dovrebbe terminare con un output simile al seguente

[...]
arm-none-eabi-objcopy -O ihex build/gnuk.elf build/gnuk.hex
arm-none-eabi-objcopy -O binary build/gnuk.elf build/gnuk.bin
arm-none-eabi-objcopy -O binary build/gnuk.elf build/gnuk.bin
arm-none-eabi-objcopy -O ihex build/gnuk.elf build/gnuk.hex

poi spostatevi nella directory ~/gnuk/regnual ed eseguite

~/gnuk/regnual $ make

le cui ultime righe di output dovrebbero essere

[...]
arm-none-eabi-objcopy -Obinary regnual.elf regnual.bin
arm-none-eabi-objcopy -Oihex regnual.elf regnual.hex

La compilazione è teminata. Adesso non resta che flashare il firmware.

Flashing del firmware

Il Flashing del firmware cancellerà le eventuali chiavi di crittografia presenti sul token. Non eseguitelo se non avete un backup!

Spostatevi nella directory ~/gnuk/tool ed eseguite

~/gnuk/tool $ sudo ./upgrade_by_passwd.py ../regnual/regnual.bin ../src/build/gnuk.bin

vi sarà chiesto il PIN di Admin del token. A meno che non lo abbiate cambiato quello di default è 12345678.

Se non ricordate il PIN o avete bloccato il token allora dovrete ricorrere a questo metodo o al Debugger SWD per caricare il firmware.

Nota 3: nel caso in cui già steste utilizzando il token con GnuPG allora prima di fare l'upload sarà necessario
teminare il processo gpg-connect-agent con il comando

~/gnuk/tool $ gpg-connect-agent -v "SCD KILLSCD" "SCD BYE" /bye

Ecco uno screencap di tutta la procedura

compilazione di gnuk

Alla fine per assicurarvi che tutto funzioni vi basterà dare il comando:

~ $ gpg --card-status

e vedrete qualcosa del genere

gpg card status