Pastilda: еще одна прошивка
Существует один очень удобный аппаратный менеджер паролей, называемый Пастльда. Подробнее про него можно почитать тут https://habr.com/ru/post/305594/
Так как устройство Open Source (ное), то я составил еще одну прошивку для Пастильды (Плата Pas~ r 1.1) главным образом, с учетом своих пожеланий.
вот блок-схема гаджета Pas~ r1.1. Всё максимально просто: MCU, USB 2x, SD card, RGB LED и SWD.
Архитектура аппаратной части Пастильды 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 вилку и спаивать шлейф из рассыпухи компонентов.
Трудность №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 памяти.
Поэтому пришлось реализовывать алгоритм потокового расшифровывания 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.
Трудность №5--На отладочной плате STM32 MINI-M4 отсутствует SDIO только SPI. Не развели сербы один самый важный провод PD2. Пришлось писать и покрывать тестами драйвер SD-карты по SPI.
Трудность 7--В финальной версии на плате 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/