GNUK на Blue Pill

Собираем криптографический токен по цене флешки.

   /|      .----.      |\
 /  |  __ |      | __  |  \
|   .Y`  `\|    |/`  `Y.   |
|  |        `--`        |  |
 \|        ,----,        |/
  |      /        \      |
  |     |          |     |
   |   / )  GNUK  ( \   |
    \/ /|          |\ \/
    | |  \        /  | |
   |  |\   ~----~   /|  |
   |  | ~-.______.-~ |  |
    |  \ ___    ____/  |
     \      ~~~~      /
       ~ - .____. - ~

Для сборки данного устройства нам понадобится:

  1. Отладочная плата Blue Pill
  2. Программатор ST-Link V2
  3. Провода (часто в комплекте с программатором).
  4. Час свободного времени.

Настраиваем микроконтроллер

Переключаем микроконтроллер в режим DFU:

BOOT0: 0 -> 1

Внимание: После загрузки прошивки не забудьте переключить перемычку обратно, в противном случае токен работать не будет.

Соединяем программатор к отладочной плате:

GND   -> GND
SWCLK -> SWCLK
SWDIO -> SWDIO
3V3   -> 3V3

Подключаем ST-LINK V2 к компьютеру.

Загружаем прошивку

Устанавливаем необходимые пакеты:

$ sudo pacman -S arm-none-eabi-gcc arm-none-eabi-newlib openocd

Также устанавливаем arm-none-eabi-picolibc из AUR:

$ git clone https://aur.archlinux.org/arm-none-eabi-picolibc.git
$ makepkg -si

Загружаем последнюю стабильную версию GNUK:

$ git clone https://salsa.debian.org/gnuk-team/gnuk/gnuk.git \
  --recurse-submodules --branch "release/2.2"

Настраиваем и собираем прошивку:

$ cd gnuk/src/
$ export kdf_do=optional
$ ./configure --target=BLUE_PILL --vidpid=234b:0000
$ make

Стираем старую прошивку:

$ openocd -f interface/stlink.cfg -f target/stm32f1x.cfg \
  -c init -c "reset halt" -c "stm32f1x unlock 0" -c reset -c exit

Загружаем новую прошивку:

$ openocd -f interface/stlink.cfg -f target/stm32f1x.cfg \
  -c "program build/gnuk.elf verify reset exit"

Запрещаем чтение памяти:

$ openocd -f interface/stlink.cfg -f target/stm32f1x.cfg \
  -c init -c "reset halt" -c "stm32f1x lock 0" -c reset -c exit

Отключаем программатор и включаем плату через USB, проверяем GNUK:

lsusb | grep -i gnuk

Если ваше устройство отображается, то поздравляю - вы успешно собрали собственный аппаратный токен. В следующей статье мы разберём как создать пару ключей на данном устройстве.

Смотрите также