Существует один очень удобный аппаратный менеджер паролей, называемый Пастильда. Подробнее про него можно почитать тут: Пастильда — открытый аппаратный менеджер паролей. Устройство весьма остроумное. Большинство людей с ходу даже не понимают, что это такое. Я и сам таким был. Мне понадобилось 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.  Тем более, что компания-разработчик Третий Пин отказались выпускать новые релизы для своей Пастильды 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, тоже красная PCB как и Пастильда Вы наверное удивитесь, но вам даже не обязательно покупать именно оригинальную Пастильду за 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 раз дешевле чем на ЧипДип). Трудность №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? 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~ 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 на Пастильде. Их тоже могу прислать. 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  Embedded SW/Firmware Engineer