Существует один очень удобный аппаратный менеджер паролей, называемый Пастильда. Подробнее про него можно почитать тут: Пастильда — открытый аппаратный менеджер паролей.
Устройство весьма остроумное. Большинство людей с ходу даже не понимают что это такое. Выглядит как KeyLoger, но на самом деле это хранитель паролей (записная книжка). Подключается последовательно между USB-клавиатурой и LapTop/NetTop/DeskTop/PalmTop(ом). По команде Ctrl+~ появляется консоль >>>. Вводится мастер пароль. Далее можно стрелками выбрать token пароля конкретной учетной записи и нажать enter. После чего устройство само вставит логин и пароль для этого token(а) .
Так как устройство Open Source(ное), то я составил еще одну прошивку для Пастильды ( Плата Pas~ r 1.1) главным образом, с учетом своих пожеланий.
Вот блок-схема гаджета Pas~ r1.1. Всё максимально просто: MCU, USB 2x, SD card, RGB LED и SWD.
Об неудобствах оригинальной прошивки было писано в отчете Betta-тестирования тут: Pastilda: Независимое Beta-Тестирование (16+)
Тем более, что компания-разработчик Третий Пин отказались выпускать новые релизы для своей Пастильды
https://habr.com/ru/post/694970/#comment_25323090
Тем не менее, так как я с 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 |
Price, RUR |
5000 |
1626 |
9780 |
16292 |
Трудность №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 |
Вот, кстати, блок-схема архитектуры платы Olimex-STM32-H407. Всё в ней супер, только MCU без крипто периферии.
а это внешний вид Olimex-STM32-H407, тоже красная PCB как и Пастильда
Вам не обязательно даже покупать именно оригинальную Пастильду за 5k RUR. Можно взять плату Olimex-STM32-H407 (19.95 EUR=1 626 RUR), накатить на неё мою прошивку и пользоваться менеджером паролей. Купить Olimex-STM32-H407 можно тут https://www.olimex.com/Products/ARM/ST/STM32-H407/open-source-hardware
Трудность №3. В реальной жизни обычно боевой файл *.kdbx не помещается в RAM память микроконтроллера STM32. То, что KeePass расшифровывается в консольном приложении на PC еще не значит, что этот же С-код выполнит эту работу на MCU. У микроконтроллера STM32F415RG напомню, всего-навсего 128 KByte непрерывной RAM памяти, а мой типичный *.kdbx файл с 80-ю записями занимал 154 KByte памяти.
Поэтому пришлось реализовывать алгоритм потокового расшифровывания AES256_CBC и потокового синтаксического разбора расшифрованного XML файла кусочками по N(1...1k) byte. Но это тоже можно было отладить на LapTop(е) в консольном приложении.
Трудность №4. На микроконтроллере STM32F407ZG на предельной частоте CPU 168 MHz программное AES256 расшифрование KeePass 153kByte файла длится 53 сек! Это очень долго. Поэтому пришлось искать отладочную плату с STM32 и с аппаратным модулем AES256 ECB и AES256 CBC (HW CRYP). Желательно с тем же MCU STM32F415RGT6. Такой платой оказалась сербская плата STM32 MINI-M4. Удалось очень удачно купить её на Avito всего-навсего за 800 RUR (в 11 раз дешевле чем на ЧипДип).
Трудность №5. На отладочной плате STM32 MINI-M4 отсутствует SDIO, только SPI. Не развели сербы один самый важный провод PD2. Ну бывает. Пришлось писать и покрывать тестами драйвер SD-карты по SPI.
Трудность 7. В финальной версии на плате Pas~r1.1 SWD пошаговая отладка показывала, что постоянно возникала, то нехватка стека, то нехватка кучи. Однако удалось настроить константы прошивки так, что модульные тесты стали проходить.
Программные зависимости в моей прошивке для 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, давая понять, что надо что-то запланированное выполнить.
Вывод
Если у вас есть Пастильда Pas~ r 1.1, отладочная плата Olimex-STM32-H407 или любая другая плата с 2x USB+SD-Card+STM32 и вы хотите протестировать прошивку аппаратного менеджера паролей на своем железе, то обращайтесь в личку я пришлю вам артефакты *.hex, *.bin, *.elf, *.map. Можно также прислать исходники конкретных программных компонентов.
Могу даже сварить вам прошивку для Пастильды на заказ, добавив Ваши custom(ные) пожелания.
Лично мне Пастильда помогает высвободить 2-3 часа в неделю на набирания всяческих паролей.
О том как пере прошить Пастильду r1.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/694408/
https://www.olimex.com/Products/ARM/ST/STM32-H407/open-source-hardware
Комментарии (39)
ATmegAdriVeR
00.00.0000 00:00+9Я могу понять нежелание автора делиться исходными файлами, однако с чужой скомпилированной прошивкой сам концепт такого устроства теряет смысл: предлагается хранить свои пароли на устройстве со сторонним программным обеспечением, которое может быть преднамеренно или непреднамеренно скомпрометировано. Смысл в этом? Тут либо полностью открытые исходные коды, либо никак.
aabzel Автор
00.00.0000 00:00-5Тут железо безопасность гарантирует.
У Pas r1.1 нет никакого wireless сonnectivity.
SD-карту Вы вообще ставите какаю сами выбирете.
Ну что плохого тут может прошивка сделать?ATmegAdriVeR
00.00.0000 00:00+11Очень много: оно же определяется в системе как клавиатура, подключенная к компьютеру. Можно, как минимум, запустить консоль и ввести парочку интересных команд. Можно прикинуться сетевым устройством RNDIS и отправить файлик со всем списком нажатых клавиш в сеть.
kmeaw
00.00.0000 00:00+1Проишвка может скооперироваться со злодейским приложением. Например, это может быть игра на веб-сайте, где игроку надо уворачиваться от чего-нибудь, нажимая клавишу Caps Lock. Прошивка обнаруживает злодейский паттерн мигания светодиода на клавиатуре и начинает печатать в "игру" все секреты, а Caps Lock используется для flow control.
vvzvlad
00.00.0000 00:00+1Простите, а что даст компрометация файла? Для этого нужен еще какой-то модуль на компе например.
ATmegAdriVeR
00.00.0000 00:00+4Выше ответил, устройство подключается к компьютеру через USB - это огромный простор для деятельности. Я не хочу подозревать автора, однако, повторюсь, в прошивку может быть, например, заложена функция логирования всех клавиш. Поскольку устройство позиционируется как элемент безопасности, нужно ко всем звеньям относиться с недоверием.
aabzel Автор
00.00.0000 00:00-2Хорошо, согласен.
Я готов дать *.elf. Вы сможете посмотреть еще названия функций.ATmegAdriVeR
00.00.0000 00:00+6К сожалению, этим устройством не пользуюсь, просто по мере прочтения статьи описаны интересные проблемы при разработке ПО, я настроился на ознакомление с исходниками, и их не оказалось.
aabzel Автор
00.00.0000 00:00Я в согласен выдать сорцы некоторых конкретных программных компонентов Пастильды.
Какой программный компонент Вас интересует?segment
00.00.0000 00:00+1Почему просто не выложить исходники на гитхаб?
aabzel Автор
00.00.0000 00:00-1Там есть некоторые программные компоненты с моей нынешней работы.
Было бы нездорово выявлять их.
А Пастильда это чисто рet-проект, который живет на кодовой базе.segment
00.00.0000 00:00+1Почему бы тогда не заменить эти компоненты "с работы" чем-то другим? Ну перепишите эти части, сделайте там рефакторинг, это уже не будут части с работы. Мне почему-то кажется, что там вряд ли какие-то хитрые алгоритмы, которые могли бы быть ценными для компании.
aabzel Автор
00.00.0000 00:00-1Почему бы тогда не заменить эти компоненты "с работы" чем-то другим?
Хороший С-код может быть написан одним и только одним способом.
segment
00.00.0000 00:00+1Теперь если написал что-то для одной компании, всё, на всю жизнь нельзя писать такой же хороший код? А если задача решается точно таким же образом всегда? А если я написал отличный цикл for, мне для других только while?
aabzel Автор
00.00.0000 00:00Вам не обязательно даже покупать именно оригинальную Пастильду Pas~ r1,1 за 5k RUR. Можно взять отладку Olimex-STM32-H407 (19.95 EUR=1 626 RUR), накатить на неё мою прошивку и пользоваться менеджером паролей. Купить Olimex-STM32-H407 можно тут https://www.olimex.com/Products/ARM/ST/STM32-H407/open-source-hardware
roma_turkin
00.00.0000 00:00+1Согласен с комментаторами насчет закрытости кода. Security through obscurity не работает, и я, к примеру, софт с таким заявленным функционалом предпочел бы сам открыть, просмотреть, собрать и зашить. Мне непонятны причины, почему автор не раскрывает исходники (тут без сарказма, мне действительно интересна мотивация).
Кроме того, беглый взгляд по нескольким исходным файлам оригинального репозитория показывает, что авторы используют лицензию GPLv3. Это вирусная лицензия, обязующая раскрывать исходники тех, кто использует этот код и распространяет его (см. например сюда: https://fossa.com/blog/open-source-software-licenses-101-gpl-v3/)
zprsto
00.00.0000 00:00-1Хочу такой. 8 паролей достаточно.
aabzel Автор
00.00.0000 00:00У Echo KeyLLer неудобный.
--нужен отдельный USB порт
--всего 8 паролей
--нет опций вставки (логин и пароль или только пароль)
--конструктив таков что не во всякий USB пролезет
--нет SD-карты
Берите себе лучше Пастильду.zprsto
00.00.0000 00:00-1А если без шуток, можно же в прошивку Пастильды добавить нескучных мелодий из этого "девайса" и те же восемь кнопок для часто используемых паролей. К тому же сей винтажный корпус должен зайти.
segment
В чем прикол таких упоротых блок схем? Разные цвета, куча надписей разного размера, куча какой-то бесполезной информации, где такому учат?
aabzel Автор
Вот тут 55.983335, 37.208342 в НИУ МИЭТ https://www.miet.ru/
Объяснение в этом тексте https://habr.com/ru/post/667030/
segment
В той статье правильно заметили, что эти блок схемы скорее первый этап при подготовке технического задания. Но даже для этой стадии они слишком перегружены и их невозможно использовать. В той же статье были показаны адекватные примеры из Altium Designer с иерархией листов, которые намного удобнее использовать.
progchip666
Впервые стыдно за мою Альма Матер. Тридцать лет назад там учили тому, как разрабатывать чипы и мы лишь немного отставали от США.... и вот до чего докатились!
aabzel Автор
Залог успешной разработки это качественная документация.
Вот какая схема информативнее: та, что слева STM32F407xx или та, что cправа К1986ВЕ1QI? Какую схему быстрее поймет программист, чтобы написать firmware? Вот и я того же мнения.
Почему на русские микроконтроллеры надо добывать инфу как породу на золотых рудниках, а для STM32 всё на поверхности?
Тем не менее, мне МИЭТ(овских) знаний хватило, чтобы написать прошивку второго поколения для Пастильды.
aabzel Автор
@progchip666 вот Вы как выпускниr тех "славных лет" можете нарисовать блок-схему процессора Cortex-M4 до уровня ALU?
progchip666
Не могу. Во времена моей учёбы не было подобных ядер. Нас учили разработке топологии на примере логических микросхем. Максимум памяти. Развал СССР привёл к развал заводов, которых в Зелеке было вроде как 8. Я перешёл на сборку синклеров и затем разработку электронных приборов. Работать по специальности очень мало кто остался и это были не самые лучшие выпускники, скажем так.
Я не собираюсь идеализировать СССР, но факт остаётся фактом. "Большие компьютеры" в 60-70 годы были на уровне Западных, а в чём то даже то лучше. Потом началось сначала отставание, далее уже копирование, которое отставание усугубило. Дальше персональные компьютеры и соответственно массовое производство. Рынок СЭВ был слишком узок для конкуренции с Западным Миром. Последний гвоздь в гроб процесса деградации забило заточка на нужды "оборонки".
Самое печальное, что сейчас пытаются во многом повторить тот порочный опыт и выехать за счёт производства для нужд вояк. Как и в прошлый, ничем кроме катастрофы это не закончится.
aabzel Автор
Вот. То-то. Получается уже в те времена было тоже низкопробное образование, раз выпускникам не хватало знаний понять процессор архитектуры ARM пятилетней давности 1985года.
progchip666
Во первых я поступал в 1983 году.
Во вторых у меня был другой профиль, видимо современным светилам, которые выйдя из устьюрюпинского политеха отлично разбираются в архитектуре квантовых компьютерах, не доступно понятие специализация,
В третьих СССР была закрытой страной, а интернета не было и в помине в те времена.
В четёртых ровно в 1983 году за рубежом стартавала разработка ARM ядра, ну и наконец первый серийный ARM6, появился лишь в 1992 году. Так что вот этот фуфловый скан показывайте более достойным и благодарным зрителям - ардуинщикам за чашкой пива и не смешите мои тапочки.
Во вторых в это время в СССР уже существовало технологическое отставание в области электроники и с этим я не собираюсь спорить. Оно было на пару порядков меньше чем сейчас, но было. Когда СССР начал проигрывать гонку он пошёл по пути копирования западных образцов и это собственно было началом конца. Слишком много ресурсов уходило на военные технологии.
Кстати, я был в последней группе, которая на военной кафедре изучала технику память в которой была на ФТЯ построена! И это в то время, когда в том же МИЭТ уже стояли ДВК - персональные компьютеры полностью собранные их отечественных компонентов кстати. Пусть даже архитектура процессоров их была скопирована с PDP-11. Можно сказать это прообраз современных RISK процессоров. Мне она куда больше чем IBM нравилась...
aabzel Автор
Хорошо. Но после выпуска были еще и 199x, 200x, 201x. Достаточно много времени чтобы прочитать datasheet.
ARM-Cortex-M распространился по всему миру.
Сейчас ARM Cortex-Mxx программируют как российская школота из кружков робототехники 8-го класса так так и инженеры советского периода.
И те и другие не понимают устройства ядра ARM-Cortex-M.
Так что ли?
progchip666
В не то что кортексов на нашем рынке не было - зайлоги 80 были в ходу до середины 90. Американцы и евреи как ни странно до сих пор используют 81 архитектуру в своих разработках!
Последнюю прогу на ассемблере я где то в начале 2000 написал.До этого была достаточно сложная разработка микроATC на "микрочипах" А в 2004 уже во всю продавал первые по настоящему массовые ARMы в России из серииLPC210x с ядром ARM7TDMI-S. Тогда ещё активно разбирался с их устройством на уровне ядра.
Сейчас вообще не вижу в смысла опускаться до такого уровня абстракций, когда программируешь на Си . Более 90 процентов задач вообще с помощью HAL решаю. Прямое обращение к регистрам только в случае когда надо хитро сконфигурировать периферию (вот сейчас занимаюсь задачей детектора сигналов с ФЭУ, применял) или приходится работать на грани быстродействия микроконтроллера.
Я не разработчик ядер и мне не зачем копаться в них на низком уровне для моих задач.
Вообще не понимаю что вы ко мне докопались. Поучите лучше жизни ардуинщиков, которые в подавляющем большинстве не представляют как микроконтроллер то устроен и завалили весь интернет своими кривыми поделками. Вот уж где для вас поле непаханное открывается!
aabzel Автор
Это просто смешно. С такими знаниями даже ABS не спроектировать.
progchip666
Смейтесь, главное не во время еды. Плохо может закончиться
Какие ABS в 1983 году, когда я поступал в МИЭТ, а программа обучения была естественно ранее разработана?
Вы вообще во времени ориентируетесь хоть немного?
Не говоря уже о том, что я учился в группе, которая готовила технологов. Была другая группа, которые касались не только процессоров, но даже многопроцессорных систем кстати.
aabzel Автор
Советское образование считают хорошим потому что
a) конструкторов учили определять диаметр труб на ощупь,
b) инженеров перемножать трехзначные hex числа в уме.
Первое - чтобы компенсировать дефицит штангенциркулей, второе чтобы компенсировать дефицит калькуляторов.
Так что ли?
Сегодня же с Aliexpress очевидно, что навыки “a” “b” гроша ломаного не стоят.
Подозреваю, что если бы CCCР просуществовал еще 30 лет, то сейчас бы в МИЭТ учили штрих/QR коды распознавать на глаз.
sim2q
А мне нравится!
Сам немного разрабатываю рисую/паяю не сложное и такое примерно как дополнение к основной документации - рисую вручную.
тут замечено и более спорное, но возможно, тоже кем-то востребовано
aabzel Автор
И это правильно.
Не всё понимают эти навороченные принципиальные схемы на 40-100 страниц.
Нужны, как говорят американцы, "уровни абстракции" (abstraction levels).