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

Устройство весьма остроумное. Большинство людей с ходу даже не понимают что это такое. Выглядит как 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.

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

Об неудобствах оригинальной прошивки было писано в отчете 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
Olimex-STM32-H407

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

Olimex-STM32-H407
Olimex-STM32-H407

Вам не обязательно даже покупать именно оригинальную Пастильду за 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 раз дешевле чем на ЧипДип).

STM32 MINI-M4
STM32 MINI-M4

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

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

Программные зависимости в моей прошивке для 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, давая понять, что надо что-то запланированное выполнить.

Вывод

Если у вас есть Пастильда 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)


  1. segment
    00.00.0000 00:00
    +6

    В чем прикол таких упоротых блок схем? Разные цвета, куча надписей разного размера, куча какой-то бесполезной информации, где такому учат?


    1. aabzel Автор
      00.00.0000 00:00

      где такому учат?

      Вот тут 55.983335, 37.208342 в НИУ МИЭТ https://www.miet.ru/

      В чем прикол таких блок схем? 


      Объяснение в этом тексте https://habr.com/ru/post/667030/


      1. segment
        00.00.0000 00:00
        +4

        В той статье правильно заметили, что эти блок схемы скорее первый этап при подготовке технического задания. Но даже для этой стадии они слишком перегружены и их невозможно использовать. В той же статье были показаны адекватные примеры из Altium Designer с иерархией листов, которые намного удобнее использовать.


      1. progchip666
        00.00.0000 00:00
        +1

        Впервые стыдно за мою Альма Матер. Тридцать лет назад там учили тому, как разрабатывать чипы и мы лишь немного отставали от США.... и вот до чего докатились!


        1. aabzel Автор
          00.00.0000 00:00
          +3

          Залог успешной разработки это качественная документация.

          Вот какая схема информативнее: та, что слева STM32F407xx или та, что cправа К1986ВЕ1QI? Какую схему быстрее поймет программист, чтобы написать firmware? Вот и я того же мнения.

          Почему на русские микроконтроллеры надо добывать инфу как породу на золотых рудниках, а для STM32 всё на поверхности?

          Тем не менее, мне МИЭТ(овских) знаний хватило, чтобы написать прошивку второго поколения для Пастильды.



        1. aabzel Автор
          00.00.0000 00:00

          Тридцать лет назад там учили тому, как разрабатывать чипы и мы лишь немного отставали от США.... и вот до чего докатились!

          @progchip666 вот Вы как выпускниr тех "славных лет" можете нарисовать блок-схему процессора Cortex-M4 до уровня ALU?


          1. progchip666
            00.00.0000 00:00
            +1

            Не могу. Во времена моей учёбы не было подобных ядер. Нас учили разработке топологии на примере логических микросхем. Максимум памяти. Развал СССР привёл к развал заводов, которых в Зелеке было вроде как 8. Я перешёл на сборку синклеров и затем разработку электронных приборов. Работать по специальности очень мало кто остался и это были не самые лучшие выпускники, скажем так.

            Я не собираюсь идеализировать СССР, но факт остаётся фактом. "Большие компьютеры" в 60-70 годы были на уровне Западных, а в чём то даже то лучше. Потом началось сначала отставание, далее уже копирование, которое отставание усугубило. Дальше персональные компьютеры и соответственно массовое производство. Рынок СЭВ был слишком узок для конкуренции с Западным Миром. Последний гвоздь в гроб процесса деградации забило заточка на нужды "оборонки".

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


            1. aabzel Автор
              00.00.0000 00:00
              -1

              Не могу. Во времена моей учёбы не было подобных ядер.

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


              1. progchip666
                00.00.0000 00:00
                +1

                Во первых я поступал в 1983 году.

                Во вторых у меня был другой профиль, видимо современным светилам, которые выйдя из устьюрюпинского политеха отлично разбираются в архитектуре квантовых компьютерах, не доступно понятие специализация,

                В третьих СССР была закрытой страной, а интернета не было и в помине в те времена.

                В четёртых ровно в 1983 году за рубежом стартавала разработка ARM ядра, ну и наконец первый серийный ARM6, появился лишь в 1992 году. Так что вот этот фуфловый скан показывайте более достойным и благодарным зрителям - ардуинщикам за чашкой пива и не смешите мои тапочки.

                Во вторых в это время в СССР уже существовало технологическое отставание в области электроники и с этим я не собираюсь спорить. Оно было на пару порядков меньше чем сейчас, но было. Когда СССР начал проигрывать гонку он пошёл по пути копирования западных образцов и это собственно было началом конца. Слишком много ресурсов уходило на военные технологии.

                Кстати, я был в последней группе, которая на военной кафедре изучала технику память в которой была на ФТЯ построена! И это в то время, когда в том же МИЭТ уже стояли ДВК - персональные компьютеры полностью собранные их отечественных компонентов кстати. Пусть даже архитектура процессоров их была скопирована с PDP-11. Можно сказать это прообраз современных RISK процессоров. Мне она куда больше чем IBM нравилась...


                1. aabzel Автор
                  00.00.0000 00:00
                  -2

                  Во первых я поступал в 1983 году.

                  Хорошо. Но после выпуска были еще и 199x, 200x, 201x. Достаточно много времени чтобы прочитать datasheet.
                  ARM-Cortex-M распространился по всему миру.
                  Сейчас ARM Cortex-Mxx программируют как российская школота из кружков робототехники 8-го класса так так и инженеры советского периода.

                  И те и другие не понимают устройства ядра ARM-Cortex-M.
                  Так что ли?


                  1. progchip666
                    00.00.0000 00:00
                    +1

                    В не то что кортексов на нашем рынке не было - зайлоги 80 были в ходу до середины 90. Американцы и евреи как ни странно до сих пор используют 81 архитектуру в своих разработках!

                    Последнюю прогу на ассемблере я где то в начале 2000 написал.До этого была достаточно сложная разработка микроATC на "микрочипах" А в 2004 уже во всю продавал первые по настоящему массовые ARMы в России из серииLPC210x с ядром ARM7TDMI-S. Тогда ещё активно разбирался с их устройством на уровне ядра.

                    Сейчас вообще не вижу в смысла опускаться до такого уровня абстракций, когда программируешь на Си . Более 90 процентов задач вообще с помощью HAL решаю. Прямое обращение к регистрам только в случае когда надо хитро сконфигурировать периферию (вот сейчас занимаюсь задачей детектора сигналов с ФЭУ, применял) или приходится работать на грани быстродействия микроконтроллера.

                    Я не разработчик ядер и мне не зачем копаться в них на низком уровне для моих задач.

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


            1. aabzel Автор
              00.00.0000 00:00
              -1

               Нас учили разработке топологии на примере логических микросхем. Максимум памяти.

              Это просто смешно. С такими знаниями даже ABS не спроектировать.


              1. progchip666
                00.00.0000 00:00
                +1

                Смейтесь, главное не во время еды. Плохо может закончиться

                Какие ABS в 1983 году, когда я поступал в МИЭТ, а программа обучения была естественно ранее разработана?

                Вы вообще во времени ориентируетесь хоть немного?

                Не говоря уже о том, что я учился в группе, которая готовила технологов. Была другая группа, которые касались не только процессоров, но даже многопроцессорных систем кстати.


        1. aabzel Автор
          00.00.0000 00:00

          Советское образование считают хорошим потому что
          a) конструкторов учили определять диаметр труб на ощупь,
          b) инженеров перемножать трехзначные hex числа в уме.

          Первое - чтобы компенсировать дефицит штангенциркулей, второе чтобы компенсировать дефицит калькуляторов.

          Так что ли?

          Сегодня же с Aliexpress очевидно, что навыки “a” “b” гроша ломаного не стоят.

          Подозреваю, что если бы CCCР просуществовал еще 30 лет, то сейчас бы в МИЭТ учили штрих/QR коды распознавать на глаз.


      1. sim2q
        00.00.0000 00:00
        +1

        А мне нравится!
        Сам немного разрабатываю рисую/паяю не сложное и такое примерно как дополнение к основной документации - рисую вручную.

        тут замечено и более спорное, но возможно, тоже кем-то востребовано


        1. aabzel Автор
          00.00.0000 00:00
          +1

          И это правильно.
          Не всё понимают эти навороченные принципиальные схемы на 40-100 страниц.
          Нужны, как говорят американцы, "уровни абстракции" (abstraction levels).


  1. ATmegAdriVeR
    00.00.0000 00:00
    +9

    Я могу понять нежелание автора делиться исходными файлами, однако с чужой скомпилированной прошивкой сам концепт такого устроства теряет смысл: предлагается хранить свои пароли на устройстве со сторонним программным обеспечением, которое может быть преднамеренно или непреднамеренно скомпрометировано. Смысл в этом? Тут либо полностью открытые исходные коды, либо никак.


    1. aabzel Автор
      00.00.0000 00:00
      -5

      Тут железо безопасность гарантирует.
      У Pas r1.1 нет никакого wireless сonnectivity.
      SD-карту Вы вообще ставите какаю сами выбирете.
      Ну что плохого тут может прошивка сделать?


      1. ATmegAdriVeR
        00.00.0000 00:00
        +11

        Очень много: оно же определяется в системе как клавиатура, подключенная к компьютеру. Можно, как минимум, запустить консоль и ввести парочку интересных команд. Можно прикинуться сетевым устройством RNDIS и отправить файлик со всем списком нажатых клавиш в сеть.


      1. kmeaw
        00.00.0000 00:00
        +1

        Проишвка может скооперироваться со злодейским приложением. Например, это может быть игра на веб-сайте, где игроку надо уворачиваться от чего-нибудь, нажимая клавишу Caps Lock. Прошивка обнаруживает злодейский паттерн мигания светодиода на клавиатуре и начинает печатать в "игру" все секреты, а Caps Lock используется для flow control.


        1. aabzel Автор
          00.00.0000 00:00
          -1

          Кто-нибудь понял, что имеет в виду @kmeaw?


    1. vvzvlad
      00.00.0000 00:00
      +1

      Простите, а что даст компрометация файла? Для этого нужен еще какой-то модуль на компе например.


      1. ATmegAdriVeR
        00.00.0000 00:00
        +4

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


        1. aabzel Автор
          00.00.0000 00:00
          -2

          Хорошо, согласен.
          Я готов дать *.elf. Вы сможете посмотреть еще названия функций.


          1. ATmegAdriVeR
            00.00.0000 00:00
            +6

            К сожалению, этим устройством не пользуюсь, просто по мере прочтения статьи описаны интересные проблемы при разработке ПО, я настроился на ознакомление с исходниками, и их не оказалось.


            1. aabzel Автор
              00.00.0000 00:00

              Я в согласен выдать сорцы некоторых конкретных программных компонентов Пастильды.
              Какой программный компонент Вас интересует?


              1. segment
                00.00.0000 00:00
                +1

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


                1. aabzel Автор
                  00.00.0000 00:00
                  -1

                  Там есть некоторые программные компоненты с моей нынешней работы.
                  Было бы нездорово выявлять их.

                  А Пастильда это чисто рet-проект, который живет на кодовой базе.


                  1. segment
                    00.00.0000 00:00
                    +1

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


                    1. aabzel Автор
                      00.00.0000 00:00
                      -1

                      Почему бы тогда не заменить эти компоненты "с работы" чем-то другим?

                      Хороший С-код может быть написан одним и только одним способом.


                      1. segment
                        00.00.0000 00:00
                        +1

                        Теперь если написал что-то для одной компании, всё, на всю жизнь нельзя писать такой же хороший код? А если задача решается точно таким же образом всегда? А если я написал отличный цикл for, мне для других только while?


            1. 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


  1. roma_turkin
    00.00.0000 00:00
    +1

    Согласен с комментаторами насчет закрытости кода. Security through obscurity не работает, и я, к примеру, софт с таким заявленным функционалом предпочел бы сам открыть, просмотреть, собрать и зашить. Мне непонятны причины, почему автор не раскрывает исходники (тут без сарказма, мне действительно интересна мотивация).

    Кроме того, беглый взгляд по нескольким исходным файлам оригинального репозитория показывает, что авторы используют лицензию GPLv3. Это вирусная лицензия, обязующая раскрывать исходники тех, кто использует этот код и распространяет его (см. например сюда: https://fossa.com/blog/open-source-software-licenses-101-gpl-v3/)


  1. zprsto
    00.00.0000 00:00
    -1

    Хочу такой. 8 паролей достаточно.


    1. aabzel Автор
      00.00.0000 00:00

      У Echo KeyLLer неудобный.
      --нужен отдельный USB порт
      --всего 8 паролей
      --нет опций вставки (логин и пароль или только пароль)
      --конструктив таков что не во всякий USB пролезет
      --нет SD-карты

      Берите себе лучше Пастильду.


      1. zprsto
        00.00.0000 00:00
        -1

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


        1. aabzel Автор
          00.00.0000 00:00

          В плате Pas~ r1.1 отсутствует пьезо излучатель. А кнопок вам думаю хватит. На клавиатуре их 110 штук.


          1. zprsto
            00.00.0000 00:00
            +1

            Ну и ладно, я построю свою пастильду с блэкджеком и музыкой!


            1. aabzel Автор
              00.00.0000 00:00

              Ок. Держите меня в курсе.