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
,
ma ne esistono anche dei cloni.
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
Alla fine per assicurarvi che tutto funzioni vi basterà dare il comando:
~ $ gpg --card-status
e vedrete qualcosa del genere