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