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

Пуск ПасТильды на Плате Olimex-H407

Уровень сложностиПростой
Время на прочтение10 мин
Количество просмотров2.5K

Существует одна очень замечательная учебно-тренировочная электронная плата Olimex-STM32-H407. В этом тексте я покажу как на ней можно запустить прошивку культового российского продукта Пастильда (Pas~).

Что такое Пастильда (Pas~)?

Пастильда - это универсальный аппаратный хранитель паролей для всяческих сайтов. Это устройство посредник между USB клавиатурой и персональным компьютером PC, которое по команде с клавиатуры вставляет нужный логин+TAB+пароль (или просто пароль) для конкретного сайта. Пользователи пастальды запоминают только один пароль в жизни - это пароль для доступа к пастильде (он же пароль к KeePass файлу) . Далее устройсово извлекает нужный сложный уникальный для каждого сайта пароль из KeePass файла и автоматически набирает его в PC.

При этом персональный компьютер (PC) на полном серьезе думает, что пароль так быстро набрали вручную. Но мы, то знаем, что это набрала Пастильда автоматически.

Таким образом, можно набирать пароли, где угодно. Все пароли будут разные и запредельно сложные. На сайте интернет магазина, в электронную почту и даже для входа в операционную систему. Понимаете ?..

Буквально пару слов про HMI Пастильды.

При подключенной Пастильде, когда нажимаешь Hot Key Ctrl + ~ [Поэтому и название такое Password + Tilda(~)] устройство набирает как текст командную строку

>>>

Далее вы вводите мастер пароль. Пастильда печатает звёздочки. Это пароль к KeePass файлу внутри. Мастер пароль от KeePass даже не попадает в PC!

>>>*****

Вы нажимаете Enter. Пастиьлда печатает первую запись из KeePass файла что на SD карте. Например

>>>rutracker

Это так называемый token по которому вы находите нужную ячейку. Вы на клавиатуре нажимаете стрелку вверх или вниз. Пастильда печатает токен следующей ячейки из keePass файла на SD карте. Например

>>>avito

Увидев нужный токен (avito) Вы нажимаете Enter. Пастильда удаляет курсор и токен (автоматически нажимает backspaсe) и вставляет логин кнопку TAB + пароль для avito, например

myemail@mail.ru TAB qw234e%#$rty_foDFDFGr_avito

Таким образом Вы попадаете в личный кабинет для avito.

А Пастильда переключается в обыкновенный проброс нажатий. Вот так...

Причем, если нажимать большой Enter (что слева <-), то Пастильда вставит логин, TAB и пароль. Если нажать маленький нижний угловой вертикальный Enter (что слева -> на клавиатуре), то Пастильда вставит только пароль.

Вам уже нравится Пастильда?

В чём проблема?

Проблема в том, что оригинальная Пастильда стоит дорого: 5k RUR. В нашей развивающейся стране (в России) далеко не все могут себе позволить покупку электроники стоимостью в 5k RUR.

Потом, количество изготовленных и проданных Пастильд было весьма и весьма ограниченно. Буквально несколько сотен штучек за весь жизненный цикл этого замечательного российского продукта. При этом почти все собранные экземпляры PCB скупили под метёлку американцы (на напечатанные доллары).

Поэтому надобно придумать способ пользоваться Пастильдой на более доступном и дешевом железе.

А какую возможность, любезнейшим образом, предоставляет болгарская электронная плата Olimex-STM32-H407. Вот с ней и пришлось работать...

Итак, танцуем от печки...

Аппаратная часть

Что надо из аппаратуры?

Для того чтобы подготовить плату Olimex-STM32-H407 к работе c прошивкой Пастильда надо следующий перечень аппаратуры. Всё это легко приобретается на рынке

#

Оборудование

Комментарий

1

ST-LINK/V2 ISOL

Программатор

2

JTAG шлейф 20пин для программатора

Для соединения программатора и PCB Olimex

3

Кабель USB-А-USB(mini)

Кабель для соединения LapTop(а) и программатора

4

Кабель USB-А-USB(mini)

Кабель для соединения LapTop(а) и PCB Olimex

5

USB Клавиатура

Для подключения её к Пастильде

6

Персональный компьютер (Например LapTop)

Для запуска утилиты обновления прошивки и насыщения KeePass файла паролями

7*

Переходник USB-UART

Для просмотра лога загрузки прошивки и для подключение а UART-CLI

8

Электронная плата Olimex-STM32-H407

Целевое устройство, которое и будет вертеть прошивку с приложением Пастильда

9

Micro SD карта

Съёмное хранилище зашифрованных паролей, которое хранит KeePass файл с расширением *.kdbx

10

USB - Card reader

Чтобы закинуть на Micro SD карту keepass *.kdbx файл с паролями

11

Micro SD - MMC переходник

Расширитель габаритов SD карты чтобы примонтировать её в гнездо Card reader(а)

Как можно заметить это достаточно много всего-всякого. В электронике так всегда.

Электронная плата Olimex-STM32-H407

Вы узнаете нужную Вам электронную плату вот по этой фотографии.

Olimex-STM32-H407 в натуре. Красота несусветная
Olimex-STM32-H407 в натуре. Красота несусветная

Изделие можно купить в интернет магазине Olimex буквально за 27 EUR = 2889 RUR. Это настоящая электронная парта для изучения микроконтроллеров.

Вот так выглядит блок-схема этой электронной платы Olimex-STM32-H407.

В этой электронной плате есть вся необходимая аппаратная начинка для того, чтобы запустить приложение реализующее Пастильду: USB host, USB device, SD micro и LED.

Обратите особое внимание, чтобы частота кварца была именно 12MHz. Некоторые платы Olimex-STM32-H407 продают с кварцем 8MHz. В этом случае у Вас будет нестандартная скорость UART-CLI. Тут либо перепаиваем кварц, либо я присылаю Вам прошивку собранную для Вашего кварцевого резонатора.

Чтобы случайно не отцарапать электролитические конденсаторы при транспортировке платы в рюкзаке я даже примонтировал вот такой прозрачный экран из плексигласа, который мне вырезал лазерным лучом отличный мастер c profi.ru.

Программная часть

Как и в любой Hi-Tech разработке помимо железа есть и софт.

Что надо из сотфвера?

Программа или бинарный файл

Пояснение

1

Программа KeePass.exe

Клиентская программа для работы с базами данных паролей формата KeePass (*.kdbx файлы)

2

ST-LINK_CLI.exe

Утилита перепрошивки STM32 микроконтроллеров от вендора. (CLI версия )

3

OS Windows

Для запуска утилит производителя чипа ST

4

STM32 ST-Link Utility.exe

Утилита перепрошивки STM32 микроконтроллеров от вендора (GUI версия )

5

olimex_stm32_h407_mbr_gcc_m.hex

Первичный загрузчик платы Olimex

6

olimex_h407_bootloader_gcc_m.hex

CLI загрузчик для платы Olimex

7

olimex_h407_freertos_pastilda.hex

Generic прошивка Пастильды для платы Olimex-STM32-H407

8

Tera Term

Терминал последовательного порта для доступа к UART3-CLI.

Подготовка *.kdbx файла с базой данных

Чтобы работать с устройством предварительно надо на SD карту закинуть *.kdbx файл с зашифрованной базой данной с паролями.

Файл создается и заполняется как и в любой другой GUI утилите на Windows. Однако есть один момент.

Данная прошивка работает не со всяким *.kdbx файлом keepass. Перед сохранением файла надо удалить из него служебную информацию (метаданные). Для этого надо зайти в Tools->Database Maintenance. И нажать на кнопки Entry history Delete и Delete object information. И сохранить файл. Таким образом, в финальном keepass файле *.kdbx будет только необходимая информация.

В качестве тестировочного KeePass файла я положил в репозиторий файл db_example.kdbx. Он открывается программой KeePass по паролю 1234qwer. Вы можете открыть файл db_example.kdbx, добавить в него свои пароли, поменять мастер пароль, удалить метаданные, сохранить на sd карту, установить в Пастильду и пользоваться устройством. Файл db_example.kdbx уже нужной версии KeePass.

Подготовка micro SD карты

Что касается форматирования SD карты, то надо отформатировать micro SD карту в файловую систему FAT32. В настройке Allocating unit size надо прописать 2048 байт.

Настройки форматирования microSD карты памяти
Настройки форматирования microSD карты памяти

Таким образом FatFs внутри прошивки сможет успешно примонтировать файловую систему.

Загрузка прошивки

Перед тем как залить прошивку Пастильды надо накатить загрузчик. Ввиду специфики разметки секторов микроконтроллеров семейства STM32F4x тут получилось целых два загрузчика. Первичный загрузчик (MBR) и вторичный загрузчик (BootLoader).

Задача первичного загрузчика - это только лишь вызвать вторичный загрузчик. Задача вторичного загрузчика - вызвать generic приложение и позволить обновлять Generic через UART3.

Вот таким скриптом можно прошить MBR при помощи программатора J-Link

cls
::echo off

set flash_tool="C:\Program Files (x86)\SEGGER\JLink\JFlash.exe"
set firmware=C:\projects\Artifacts\olimex_stm32_h407_mbr_gcc_m\build\olimex_stm32_h407_mbr_gcc_m.hex

set option=
set option=%option% -openprjSTM32F407ZG_JTAG.jflash   
set option=%option% -open%firmware% 
set option=%option% -programverify 
set option=%option% -startapp  
set option=%option% -exit

%flash_tool% %option% 

Вы спросите: "а почему бы первичному загрузчику не вызвать приложение?"

Ответ прост. Вызвать, то он вызовет, а вот обновить по UART не сможет. В этом случае первичный загрузчик бы не поместился в 16kByte-32kByte Flash памяти.

Дело в том что обновление прошивки происходит через CLI. А это работа с текстовыми протоколами. Задача загрузчика принять приложение через UART-CLI и прописать его в боевую ROM память. А этот функционал практически нереально поместить в 16kByte.

В довесок к этому, первые сектора Flash памяти все маленькие и поэтому уже задействованы для on-chip NVRAM. Вначале Flash памяти просто отсутствует непрерывный диапазон нужного размера.

А в конце ROM присутствует огромный сектор 128kByte прям как будто специально заложен для полноценного BootLoader(а). Поэтому вот так и появились два загрузчика. А приложение находится между ними. На выходе получилось три сборки для одного устройства. Вот такие вот порожки с капустой. Понимаете?..

Название файла

Пояснение

стартовый адрес

Size, kByte

Sector

1

olimex_stm32_h407_mbr_gcc_m

MBR

0x08000000

32

0

2

Тут прошивка хранит параметры

NVRAM

0x08008000

32

2

3

olimex_h407_bootloader_gcc_m

BootLoader

0x080E0000

128

11

4

olimex_h407_freertos_pastilda

Generic Application

0x08010000

768

4

--

--

--

Итого:

960kByte

--

Про то, с какими титаническими трудностями мне пришлось столкнуться, разрабатывая эту прошивку можно почитать тут. Колупаться пришлось порядком. Серьёзная работа проделана, не простая.

А как, собственно, залить *.hex прошивку в STM32 микроконтроллер указанными утилитами можно почитать методички от производителя микроконтроллера ST или от производителя электронной платы Olimex.

Вот так выглядит типичная схема подключения оборудования при программировании и отладке Пастильды.

схема подключения оборудования при программировании и отладке Пастильды
схема подключения оборудования при программировании и отладке Пастильды

Прошивка STM32F407ZG программатором JLink по JTAG.

Для Вашего удобства я также подготовил скрипты авто прошивки средствами программатора JLink. Достаточно только соединить плату, программатор, PC и запустить по очереди три скрипта: mbr, bootloader, generic.

Таким образом, прошивки окажутся внутри микроконтроллера STM32F407ZG. Не забудьте только прописать в переменную PATH путь к утилите JFlash.exe. По умолчанию JFlash хранится тут:

C:\Program Files (x86)\SEGGER\JLink\JFlash.exe

Первый запуск загрузчика

Кода Вы пропишите все три прошивки: (mbr, bootloader и generic) программатором у вас останется пустая NVRAM. При первом запуске, чтобы запустить generic приложение загрузчик должен знать по какому адресу прописано generic приложение. Для этого надо выполнить короткое нажатие на кнопку PA0 (активный уровень высокий). Тогда загрузчик пропишет NVRAM адрес начала прошивки по умолчанию и перезагрузится с пуском приложения по адресу 0x08010000.

Если вы не хотите нажимать на кнопку, то можно сконфигурировать NVRAM вручную. Для этого надо открыть TeraTerm, подключиться к UART3 на битовой скорости 460800 bit/s, установить паузу между отправкой символов 10ms, режим 8 бит, 2 стоповых бита.

Подключившись к UART3-CLI загрузчика надо выполнить в cli команду

ps 12 0
Она даст загрузчику команду запустить приложение без проверки CRC приложения. Затем следует выполнить в cli команду
ps 11 0x08010000
Она скажет загрузчику, что надо стартовать generic с адреса 0x08010000. Всё команды ps прописываются в NVRAM.

Теперь остается только пере сбросить электропитание или просто подождать. Загрузчик сам запустить generic приложение на основе настроек в NVRAM.

Конфигурирование NVRAM вручную в UART3-CLI консоли загрузчика
Конфигурирование NVRAM вручную в UART3-CLI консоли загрузчика

Если при наборе команды Вас смущает частый лог от микроконтроллера, то можно написать команду в текстовом файле (например в NotePad++), скопировать строку и вставить её в консоль UART3-CLI. Это можно сделать в бесплатной программе терминале Tera Term.

Первый запуск generic прошивки

При подключении Пастильды у вас перед глазами клавиатура, пастильда и монитор от PC. По сути Pas~ это эдакий микроскопический NetTop. Прошивка на монитор как раз и пишет свои символы. Устройство может в открытом текстовом файле вам на мониторе напечатать любую ASCI графику.

Пастильда реализует однострочный текстовый редактор. Поэтому все действия обычно производятся в ячейке набора логина прямо на сайте куда надо вводить логин и пароль.

Очевидно, что чтобы расшифровать KeePass файл на Micro SD карте нужен мастер пароль. KeePass шифрует файл алгоритмом AES256. Поэтому, как ни крути, на стороне MCU нужен AES256 для расшифровки файла. В оригинальной пастильде аппаратный модуль AES256. В плате от Olimex только программный AES256.

При первом запуске хозяин Пастильды прописывает в NVRAM мастер пароль и имя файла через USB HID CLI. Работает это так... CLI вызывается горячей комбинацией Ctrl+Ctrl.
Появляется вот такой волнистый курсор
~~>

Пользователь вызывает консоль Ctrl+Ctrl и набирает клавиатурой имя KeePass файла на SD карте (например ivpspb.kdbx)
~~> kpf ivpspb.kdbx
и нажимает опять Enter.

Теперь пользователь набирает клавиатурой мастер пароль (например qwerty)
~~> kpa qwerty
и нажимает Enter

Примечание:
При первом введении нового пароля в прошивке формируется transformation key (TK). Он может долго вычисляться, около 3-х минут. Вычисление TK происходит в отдельном потоке. Затем transformation key пропишется в NVRAM и прибор будет расшифровывать бузу данных паролей на порядок быстрее.

Сразу после Enter Пастильда исполняет CLI команду, печатает лог и переходит обратно в режим пробрасывания нажатий от клавиатуры (Forwarding).

Чтобы новые настройки применились надо перезагрузить устройство по электропитанию.

Как только подано электропитание Пастильда берёт мастер пароль из NVRAM и начинает расшифровывать базу KeePass, что лежит в файловой системе Fat на SD карточке. Каждый раз Пастильда начинает расшифровывать базу как только подано электропитание. За эти 17....50 сек длительности расшифровки пользователь даже не успеет открыть почту как база данных уже будет расшифрована и лежать массивом в RAM памяти.

При запросе пароля Пастильда мгновенно выдает логин и пароль.

Важно. Микроконтроллер STM32 можно прошить с протекцией (Option Bytes) памяти, чтобы никто не похитил данные NVRAM через JTAG/SWD.

Итоги

В сухом остатке, удалось портировать прошивку аппаратного менеджера паролей (Пастильду) на широко распространённую болгарскую учебно-тренировочную электронную плату Olimex-STM32-H407.

Это паллиативное решение позволяет сэкономить Вам 3000 рублей на покупке оригинальной Пастильды, которая, к слову, стоит 5000 RUR. Таким образом монополия Третьего Пина в какой-то степени ликвидируется.

Бинари прошивки можно скачать по ссылке [1] на github.com. Если у Вас появятся пожелания к улучшению функционала прошивки, то пишите в комментариях. Я с энтузиазмом внесу улучшения и выкачу новый вариант бинарей.

Надеюсь моя прошивка поможет кому-нибудь тоже начать пользоваться аппаратными менеджерами паролей. Это позволит вам высвободить несколько часов в месяце на ускорении поиска и набора всяческих разных паролей на разных сайтах.

Использование аппаратных менеджеров паролей окупится сторицей

Словарь

Акроним

Расшифровка

NVRAM

Non-volatile random-access memory

MBR

Master Boot Record

SD

Secure Digital

HMI

Human-machine interface

PC

personal computer

CLI

Command-line interface

USB

Universal Serial Bus

LED

Light-emitting diode

RUR

Russian ruble

Ссылки

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Вы пользуетесь аппаратными менеджерами паролей?
10.34% да3
89.66% нет26
Проголосовали 29 пользователей. Воздержался 1 пользователь.
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
У Вас есть или было устройство Пастильда?
11.54% да3
88.46% нет23
Проголосовали 26 пользователей. Воздержались 2 пользователя.
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Вы работали с электронной платой Olimex-STM32-H407
16.67% да4
83.33% нет20
Проголосовали 24 пользователя. Воздержались 3 пользователя.
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Вы применяли программу KeePass?
51.72% да15
48.28% нет14
Проголосовали 29 пользователей. Воздержались 2 пользователя.
Теги:
Хабы:
Всего голосов 11: ↑6 и ↓5+3
Комментарии173

Публикации

Истории

Работа

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

27 марта
Deckhouse Conf 2025
Москва
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань