Как стать автором
Обновить

ПасТильда: ещё одна прошивка

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров5.1K

Существует один очень удобный аппаратный менеджер паролей, называемый Пастильда. Подробнее про него можно почитать тут: Пастильда — открытый аппаратный менеджер паролей.

Устройство весьма остроумное. Большинство людей с ходу даже не понимают, что это такое. Я и сам таким был. Мне понадобилось 25 минут, чтобы понять что это и зачем, причем объяснял нам это сам автор проекта на специальном мероприятии в Питере.

Выглядит как KeyLoger, но на самом деле это хранитель паролей (записная книжка). Подключается последовательно между USB-клавиатурой и LapTop/NetTop/DeskTop/PalmTop(ом). По команде Ctrl+~ появляется консоль >>>. Вводится мастер пароль. Далее можно стрелками вверх-вниз выбрать token пароля конкретной учетной записи и нажать enter. После чего устройство само автоматически допечатает логин и пароль для этого token(а).

У вас наверняка есть пароли от wifi роутера, gmail, госуслуги, coursera, stepick, hh, linkedin, skype, lamoda, booking, github, avito, habr, citilink, dropbox. Многие сайты сейчас просто не допускают учётки с простыми паролями. Требуют цифры, спецсимволы, заглавные буквы. Вот тут-то вам и понадобится Пастильда. Она всё запомнит на SD-карточку аппаратно и выдаст по запросу с клавиатуры.

О неудобствах оригинальной прошивки было писано в отчете Betta-тестирования тут: Pastilda: Независимое Beta-Тестирование (16+)

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

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

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



Тем более, что компания-разработчик Третий Пин отказались выпускать новые релизы для своей Пастильды
https://habr.com/ru/post/694970/#comment_25323090

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

В качестве основного стека технологий пришлось выбрать Win10, GCC, C, CMSIS, HAL, FatFs, Make, Eclipse, ST-LINK_gdbserver, arm-none-eabi-gdb.exe, FreeRTOS.

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

Ровно было на бумаге, да забыли про овраги.

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

Трудность №0 (снобский шаг между пинами SWD 2мм)

Оказалось что первое препятствие это изготовить harness для подключения программатора ST-Link V2 ISOL. Как видите, шаг вилки очень экзотический это 2мм. Это самый хипстерский шаг между пинами, который только можно было придумать. Пришлось насаживать на PCB вилку и спаивать шлейф из рассыпухи компонентов из митинского радиорынка.

Трудность №1. (на Pas~ r 1.1 отсутствует UART для Debug CLI Terminal)

На оригинальном устройстве Pas~ r 1.1 отсутствует отладочный UART. Как по мне, дак это очень печально, так как UART нужен для отладки в RunTime. Для интерфейса командной строки (Debug CLI Terminal). Поэтому пришлось искать отладочные платы с 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

Price, RUR

5000

1626

9780

16292

Трудность №2. (Аппаратная несовместимость Olimex-STM32-H407 и Pas~ r 1.1 )

В Pas~ r 1.1 USB FS и HS порты не соответствуют отладочной плате Olimex-STM32-H407. Видимо разработчики из Пина не догадывались о существовании классической платы 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

Вот, кстати, блок-схема архитектуры культовой платы Olimex-STM32-H407. Всё в ней супер, вот только MCU без крипто периферии.

Olimex-STM32-H407
Olimex-STM32-H407

а это внешний вид Olimex-STM32-H407, тоже красная PCB как и Пастильда

Olimex-STM32-H407
Olimex-STM32-H407

Вы наверное удивитесь, но вам даже не обязательно покупать именно оригинальную Пастильду за 5k RUR. Можно взять плату Olimex-STM32-H407 (19.95 EUR=1626 RUR), затем накатить на неё мою прошивку и пользоваться менеджером паролей. Купить Olimex-STM32-H407 можно тут https://www.olimex.com/Products/ARM/ST/STM32-H407/open-source-hardware

Трудность №3.
(*.kdbx файл не помещается в RAM память)

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

Поэтому пришлось реализовывать алгоритм потокового расшифровывания AES256_CBC и потокового синтаксического разбора расшифрованного XML файла кусочками по N(1...1k) byte. Но это тоже можно было отладить на LapTop(е) в консольном приложении.

Трудность №4 (53 секунды ожидания расшифровки)

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

STM32 MINI-M4
STM32 MINI-M4

Трудность №5 (на отладке с CRYP модулем нет SDIO)

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

Трудность #7 (17 секунд ожидания расшифровки)

Даже при аппаратном расшифровании получилось так, что база данных расшифровывается 17 секунд. Это тоже, что если вы подойдете к домофону, приложите ключ, а дверь откроется только через 17 секунд. Поэтому пришлось перенести прошивку на RTOS. Я добавил отдельный поток для пробрасывания нажатий кнопок (Keys Forwarding) и отдельный поток для расшифровки KeePass (*.kdbx) файла. Идея проста. Как только на Пастильду подается питания она сразу берет из NVRAM мастер пароль и начинает в отдельном потоке расшифровывать KeePass файл. Тем времени эта же прошивка в отдельном потоке пробрасывает нажатия кнопок и пользователь ничего не замечает. К тому времени как понадобится ввести пароль, когда пользователь откроет нужный Web сайт расшифрованные данные уже будут лежать в SRAM памяти. Классический способ разрешения противоречий во времени. Получается что с RTOS нет нужды в микроконтроллере с крипто периферией. Всё делается чисто софтверно.

Трудность 8 (нехватка памяти)

В финальной версии на плате Pas~r1.1 SWD пошаговая отладка показывала, что постоянно возникала, то нехватка стека, то нехватка кучи, то нехватка ROM(особенно для первичного загрузчика 16kByte). Однако удалось настроить скрипты сборки и константы прошивки так, что модульные тесты стали проходить.

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

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

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

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

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

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

4--Добавил диагностическую консоль. Если навести курсор в текстовый файл и нажать оба Crtl (Left Crtl + Right Crtl), то появляется курсор ~~> и можно прямо с клавиатуры послать прошивке доступные команды в Run-Time. А ответ прошивка выдаст в этот же открытый текстовый файл, просто автоматически допечатав свой output.

Можно до программировать устройство в Run-Time(ме), прогнать модульные тесты, посмотреть версию софта и железа. Подробнее про удобство CLI(шки) можно почитать тут https://habr.com/ru/post/694408/

Можно, например, завести таймер обратного счета и когда прошивка досчитает до нуля, то програмно перерубить клавиатуру и начать мигать красным RGB, давая понять, что надо что-то запланированное выполнить.

5-- Добавил энергонезависимое запоминание последнего введенного индекса токена. То есть Пастильда вам сама предложит ввести тот логин/пароль, который вы чаще всего используете. Это своего рода кэш память.

6-- Добавил возможность быстрого поиска нужной записи в базе данных по имени token(а). Это своего рода авто дополнение.

Пастильда это не просто одна прошивка. Это целая экосистема. Загрузчики, приложения, тестовые сборки, симуляторы и прочее.

Новый конечный автомат Пастильды теперь такой

Pas~ new FSM
Pas~ new FSM

Вывод

Если у вас есть Пастильда Pas~ r 1.1 или отладочная плата Olimex-STM32-H407 или вообще любая другая плата с двумя USB+SD-Card и STM32 и вы хотите протестировать прошивку аппаратного менеджера паролей на своем target(е), то обращайтесь в личку и я пришлю вам артефакты *.hex, *.bin, *.elf, *.map.
Если вы не доверяете *.hex, *.bin, то глядя на *.elf и *.map вы уж точно поймете какие функции есть в прошивке и насколько прошивка опасна. Я специально соберу артефакты с опцией -g. Можно также прислать исходники некоторых программных компонентов от Pas~.

Могу даже сварить Вам прошивку для Пастильды на заказ, добавив Ваши custom(ные) пожелания.

Лично мне Пастильда помогает высвободить 2-3 часа в неделю на набирания всяческих паролей. Также Pas~ может выступать как отладочная плата. Иногда я отлаживаю и тестирую кодовою базу на Pas~.

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

Я написал не только Generic прошивку, но и первичный MBR загрузчик и вторичный загрузчик по UART, key loger на Пастильде. Их тоже могу прислать.

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/694408/
https://thirdpin.io/portfolio/razrabotka-apparatnogo-menedzhera-parolej

https://www.olimex.com/Products/ARM/ST/STM32-H407/open-source-hardware

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
У вас есть Пастильда (Pas r1.1)?
3.51% да2
96.49% нет55
Проголосовали 57 пользователей. Воздержались 7 пользователей.
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
У вас есть красная отладочная плата Olimex H407?
1.85% да1
98.15% нет53
Проголосовали 54 пользователя. Воздержались 7 пользователей.
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
У вас есть любая отладочная плата на STM32 c USB HID Host + USB HID Device?
38.89% да21
61.11% нет33
Проголосовали 54 пользователя. Воздержались 6 пользователей.
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
У вас есть отладочная плата STM32 MINI-M4?
1.92% да1
98.08% нет51
Проголосовали 52 пользователя. Воздержались 6 пользователей.
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Вы пользуетесь программой KeePass?
45% да27
55% нет33
Проголосовали 60 пользователей. Воздержались 5 пользователей.
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
У вас есть зелёная отладочная плата STM32F746G-DISCO?
0% да0
100% нет2
Проголосовали 2 пользователя. Воздержавшихся нет.
Теги:
Хабы:
Всего голосов 12: ↑8 и ↓4+7
Комментарии53

Публикации

Истории

Работа

Ближайшие события

19 сентября
CDI Conf 2024
Москва
24 сентября
Конференция Fin.Bot 2024
МоскваОнлайн
30 сентября – 1 октября
Конференция фронтенд-разработчиков FrontendConf 2024
МоскваОнлайн