Pastilda: еще одна прошивка

Существует один очень удобный аппаратный менеджер паролей, называемый Пастльда. Подробнее про него можно почитать тут https://habr.com/ru/post/305594/

Так как устройство Open Source (ное), то я составил еще одну прошивку для Пастильды (Плата Pas~ r 1.1) главным образом, с учетом своих пожеланий.

72ecb5dd8caca4f425bc33ef1ab63256.JPG

вот блок-схема гаджета Pas~ r1.1. Всё максимально просто: MCU, USB 2x, SD card, RGB LED и SWD.

Архитектура аппаратной части Пастильды r1.1

Архитектура аппаратной части Пастильды r1.1

Об неудобствах оригинальной прошивки было писано в отчете Betta-тестирования тут https://habr.com/ru/post/694970/

Так как я с 2011 года занимаюсь программированием STM32, то к 2019 году у меня уже была кодовая база в которой было порядка 70% функционала для прошивки Пастильды. Я решил попробовать скомпоновать свою версию *.bin (аря).

В качестве основного стека технологий пришлось выбрать Win10, GCC, C, CMSIS, HAL, FatFs, NoRTOS, Make, Eclipse.

Вы спросите, а что тут, собственно, сложного -то? Написать прошивку для STM32 это же классическая заурядная задача.

С какими трудностями пришлось столкнуться мне?

Трудность №0--Изготовить harness для подключения программатора. Как видите, шаг вилки очень экзотический это 2 мм. Пришлось насаживать на PCB вилку и спаивать шлейф из рассыпухи компонентов.

9edc1ca4fe6ff5f3c200e98f4462c368.JPG

Трудность №1-- На оригинальном устройстве Pas~ r 1.1 отсутствует отладочный UART. Как по мне, дак это очень печально, так как UART нужен для отладки в RunTime. Поэтому пришлось искать отладочные платы с STM32, USB-Host, USB-Device, HW AES256, SDIO, RGB-LED и UART. В интернет магазинах такой платы c полным набором не нашлось. Пришлось отлаживать функционал Пастильды по частям, подобно тому как в математике интегрируют функции по частям, на четырех разных платах: Olimex-STM32-H407, STM32 MINI-M4 и nRF5340-ADK. А программно-независимый код (KeePass Decrypter) я отлаживал и вовсе на x86–64 LapTop (е).

HW атрибут

Pas~ r 1.1

Olimex-STM32-H407

STM32 MINI-M4

nRF5340-ADK

USB-Host

OTG_HS

OTG_FS

+/-

+/-

USB-Device

OTG_FS

OTG_HS

+/-

+/-

HW AES256

+

-

+

+

SDIO

+

+

-

-

UART

-

+

+

+

SD-micro

+

+

-

+

SPI

-

+

+

+

RGB Led

+

-

-

+

MCU

STM32F415RGT6

STM32F407ZGT6

STM32F415RGT6

nrf5340

Трудность №2 --В Pas~ r 1.1 USB FS и HS порты не соответствуют отладочной плате Olimex-STM32-H407. Пришлось писать код с полностью программно-конфигурируемой USB Host и USB Device периферией.

USB-port

Pas~ r 1.1

Olimex-STM32-H407

USB-Host

OTG_HS

OTG_FS

USB-Device

OTG_FS

OTG_HS

Трудность №3 --Обычно боевой файл *.kdbx не помещается в RAM память микроконтроллера. То что KeePass расшифровывается в консольном приложении на PC еще не значит, что этот же код выполнит работу на MCU. У микроконтроллера STM32F415RG всего 128 KByte непрерывной RAM памяти, а мой типичный *.kdbx файл занимал 154K Byte памяти.

73e40445a6772a0b71d8703a63119966.png

Поэтому пришлось реализовывать алгоритм потокового расшифровывания AES256_CBC кусочками по N byte.

Трудность №4--На микроконтроллере STM32F407ZG на частоте 168 MHz программное AES256 расшифрование KeePass 153kByte файла длится 53 сек! Это очень долго. Поэтому пришлось искать отладочную плату с STM32 и аппаратным модулем AES256 ECB и AES256 CBC. Желательно с тем же MCU STM32F415RGT6. Такой платой оказалась сербская плата STM32 MINI-M4. Удалось очень удачно купить её на Avito всего-навсего за 800 RUR.

d033137f778e251ce5c00b746d8824b7.png

Трудность №5--На отладочной плате STM32 MINI-M4 отсутствует SDIO только SPI. Не развели сербы один самый важный провод PD2. Пришлось писать и покрывать тестами драйвер SD-карты по SPI.

0ef9c96ac742c4b522cdd529a6cb41c6.jpg

Трудность 7--В финальной версии на плате Pas~r1.1 пошаговая отладка показывала, что постоянно возникала, то нехватка стека, то нехватка кучи. Однако удалось настроить константы прошивки так, что модульные тесты стали проходить.

Программные зависимости моей прошивки для Pas~r1.1 выстроились примерно так

Дерево зависимостей программных компонентов в прошивке Pas~ r1.1

Дерево зависимостей программных компонентов в прошивке Pas~ r1.1

Что я добавил в новую прошивку для Pas~ r1.1?

1--Возможность вставлять только пароль (Right Enter) не только логин + пароль (Left Enter). Очень многие сайты требуют только пароль.

2--Возможность прокручивать пароли в циклическом массиве. Можно быстро получить доступ к старому паролю в конце KeePass файла.

3--Переключение состояние LED при нажатии кнопки, чтобы была связь, что устройство работает.

4--Диагностическую консоль ~~> при нажатии Left Crtl+Right Crtl.

Вывод:

Если у вас есть Пастильда Pas~ r 1.1 или отладка Olimex-STM32-H407 и вы хотите протестировать альтернативную прошивку аппаратного менеджера паролей, то обращайтесь в личку я пришлю вам *.hex *.bin. Могу даже добавить custom (ные) пожелания.

О том как перепрошить Пастильду v1.1 можно прочитать инструкцию тут https://habr.com/ru/post/698964/

Links

https://habr.com/ru/post/698964/
https://habr.com/ru/post/694970/
https://habr.com/ru/post/346820/
https://habr.com/ru/post/305594/
https://habr.com/ru/company/thirdpin/blog/407633/
https://habr.com/ru/company/thirdpin/blog/466533/
https://habr.com/ru/post/305602/

© Habrahabr.ru