Электронный токен своими руками

Интернет за последние пару десятилетий из дружелюбного пространства превратился во враждебную среду. Злобные хакеры пытаются нас взломать, зашифровать, украсть, скачать интимные фотки… Традиционных логина и пароля уже явно недостаточно, чтобы надёжно защитить личный аккаунт. Для повышения безопасности всё чаще предлагается многофакторная аутентификация.

Двухфакторная аутентификация использует информацию двух типов: «знаю» — логин+пароль и «владею» — телефон (через SMS, пуш-сообщение, голосовое подтверждение), электронная почта (переход по ссылке для подтверждения), OTP, либо электронный токен.

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

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

Наиболее известные и популярные протоколы безопасной аутентификации разработаны альянсом FIDO.
В 2013 году в Кремниевой Долине был организован FIDO (Fast IDentity Online) альянс. На данный момент FIDO имеет более трёхсот ассоциативных членов и тридцать членов правления. В список членов правления входят такие компании как Google, Yubico, Microsoft, Visa, Mastercard, American Express, Paypal и другие.
Первый стандарт, представленный альянсом, это U2F (Universal Second Factor). Стандарт открыт, подробно документирован, и штатно поддерживается современными браузерами. На известном сайте есть пара статей, подробно объясняющих, как это работает. Пересказывать здесь смысла нет. Читайте.

Если коротко — для аутентификации (проверки подлинности пользователя) предлагается использовать аппаратное USB-устройство (также можно NFC, BLE, SIM-карту), хранящее приватный цифровой ключ, и умеющее делать асимметричную криптографию. Выполнение ряда криптографических процедур позволяет удалённому серверу убедиться, что это именно тот токен, который пользователь ранее зарегистрировал в своём аккаунте.

Посмотрим, что же предлагает мир для u2f-аутентификации.

Традиционный обзор литературы



Yubico
Один из самых известных производителей электронных ключей безопасности. Разрабатывает не только аппаратные ключи, но и кучу open-source ПО. Естественно, входит в состав альянса FIDO. Ознакомиться с ассортиментом и приобрести ключ можно у официального представителя.

Исходники прошивок по понятным причинам закрыты, поэтому читаем описание, добавляем в закладки, радуемся цене (доставка+растаможка+маржа; вот здесь описан опыт приобретения), и идём дальше.

Рутокен
Торговая марка ключей, выпускаемая компанией «Актив». Неплохой ассортимент. И следует отметить, что простой u2f-токен можно купить существенно дешевле, чем Yubikey. Естественно, проприетарные устройства. Хотя в открытом доступе кое-что есть.

JaCarta
Семейство ключей от компании «Аладдин Р.Д.». Есть в том числе и u2f-ключ (хотя здесь утверждают, что продукт снят с производства). Прошивка естественно закрыта.

Для самостоятельного изготовления ключа, однако, нужен открытый проект. И они есть:

Solokey
Полностью открытый проект. Есть и исходники, и описание железа. Умеет не только U2F, но и FIDO2, через USB и NFC.
Реализация FIDO2 требовательна к железу, поэтому в токене трудится микроконтроллер STM32L432. Не самый популярный чип, но если вдруг под рукой есть борда NUCLEO-L432KC — то на неё вполне можно натянуть solokey-прошивку.

У меня такой демоплаты нет, поэтому запомним ссылку (мы ещё сюда вернёмся), и ищем дальше.

Nitrokey
Парни крепко стоят на ногах, поддерживают неплохой ассортимент электронных ключей, а также продают свой NitroPC, готовят к выпуску NextBox и предлагают услугу надёжного уничтожения носителей информации. Проекты ключей в открытом доступе. Часть проектов собственной разработки, а другая часть — форки. Например, Nitrokey-FIDO2 сделан из Солокея (на том же железе), а Nitrokey FIDO U2F — на основе U2F Zero.

U2F Zero
Это прародитель ключа Solokey. Он вполне работоспособен и функционален, исходники открыты, есть инструкция для сборки. Однако автор сорцов рекомендует не заниматься ерундой и использовать свежий и более функциональный (+FIDO2) Solokey.

Я не использовал контроллер EFM8UB11F16G, поэтому проект вызывает только академический интерес. А попробуем-ка загуглить «STM32 U2F». И в первой строке получим:

stm32-u2f
Проект поддерживает только протокол U2F. Собирается под плату STM32F4DISCOVERY. Довольно популярная плата. В качестве ежедневного использования неудобна, но попробовать можно.

u2f-token
А этот проект гораздо интереснее! Потому что сделан под микроконтроллер STM32F103, который мы часто видим в ST-Link и на плате Blue/Black Pill.
Отлично. У всякого уважающего себя эмбеддера найдётся лишняя голубая таблетка и usb-st-link-свисток. Включайте паяльники, сдувайте пыль с микроскопа, поехали...

Подготовка железа



Аппаратная платформа должна иметь:
  • контроллер STM32F103 (или его клон) с памятью Flash не менее 64кб;
  • разъём USB;
  • кнопку;
  • светодиод (отображает запросы к токену);
  • стабилизатор питания, кварцевый резонатор, etc.

Аппаратная кнопка нужна, чтобы убедиться, что аутентификацию выполняет физическое тело. Таким образом обеспечивается защита от вредного ПО, которое хочет удалённо использовать токен без участия его хозяина. В продвинутых аппаратных токенах для дополнительной защиты используется кнопочная панель/тач-скрин для ввода пин-кода, сканер отпечатка пальца и т.п.

В проекте u2f-token есть готовые конфигурации, в том числе для запуска его на голубой таблетке и на ST-Link-свистке. Но без кнопки. Аутентификация разрешается после сброса микроконтроллера однократно в течение 10 сек. Имхо свисток перевтыкивать в USB — неудобно. С голубой таблеткой чуть проще — есть кнопка сброса.

Blue Pill
Доработка таблетки проста — просто добавь button. В собранной (мной) прошивке ожидается замыкание порта PB8 на землю. Подтяжка порта к лог. 1 внутренняя, внешней не требуется. Используется штатный светодиод на PC13.



Black Pill
Если цвет таблетки чёрный, то кнопку (мне) удобнее подключить к PC13. И светодиод висит уже на другом пине (PB12). Поэтому прошивку придётся пересобрать.



Mini ST-Link v2

Токен на таблетке — это пробник. Если пробы прошли успешно, то можно собрать нормальное устройство для повседневного пользования. Продвинутый эмбеддер нарисует схему и плату, изготовит её в JLCPCB, и получит массу удовольствия в виде кучки плат.

Если же нужно собрать пару ключей, то дешевле использовать ST-Link-свисток от наших друзей. На плате есть (почти) всё что нужно. Подойдёт любой контроллер, 103-й оригинал или один из его клонов.

Вот срисовал схему, может кому пригодится:


Замечания по схеме:
  • не показаны второстепенные компоненты (блокирующие конденсаторы, стабилизатор 3,3В, разъём USB);
  • микросхема DD2 — логический элемент-повторитель с выходом ОК (УГО перерисовывать было лень); его назначение — формировать крутые срезы на линии SWIM; вместо DD2 может быть установлен нолик R1;
  • на плате Mini ST-Link одной из старых версий (зелёная ниже по тексту) DD2 не предусмотрена, порт PB11 подключен к PB8, а PB14 наоборот, висит в воздухе;
  • цепи UART_RT/UART_TX/TDO/TDI/SWO/NRST/JRST в свистке не подключены; используются в полноценных реализациях ST-Link`а;
  • всегда думал, что вход BOOT0 нельзя оставлять неподключенным; однако здесь он почему-то висит в воздухе, и тем не менее всё работает. На зелёной плате (старой версии) установлен резистор 10к.
Вспомнил. В одном проекте на основе STM32F407 (да, тот самый, который видеосигнал делать умеет) висящий BOOT0 отобрал у меня кучу нервов и времени, пока искал причину непонятных спорадических глюков...

Наш донор со снятыми штанами:



План работ:
  • установить зелёный светодиод (штатные — красный и синий — моветон, да и светят вбок в маленькую дырочку, их плохо видно);
  • установить сенсорную кнопку;
  • установить разъём для подключения отладчика/программатора (опционально).

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



Инструменты и оборудование
Без микроскопа и паяльника с тонким жалом здесь делать нечего. Чтобы не ловить бегающую по столу плату, нужен держатель плат. Фен тоже лишним не будет.

Шаг первый
Отпаять разъём IDC. Брутальные электронщики выкусывают пластмассу и поочерёдно отпаивают контакты. Но мы используем недеструктивный метод. Зазор между платой и выводами позволяет поочерёдно освободить все контакты разъёма при помощи обычного паяльника и стального лезвия от бритвы. Разъём сохраняется для будущих поделок:



Шаг второй
Зачистить маску в указанных местах и перерезать две дорожки. Дорожка, которая идёт к выводу 15 (цепь SWCLK), будет использована для подключения емкостного контакта. К контакту 5V будет припаян светодиод.



Шаг третий
С обратной стороны снять R11 и R12 (фото ниже). На позицию R12 становить конденсатор 100-1000 пФ. Если чувствительность емкостного датчика окажется слишком высокой, установить на место R11 конденсатор 0-50 пФ (см. даташит TTP223).

Шаг четвёртый
Устанавливаем TTP223, разъём программирования (если нужен), светодиод, паяем провода. Светодиод 0805 или 1206, цвет по своему вкусу. Мне нравится зелёный. Все выводы TTP223 кроме 2 и 5 чуть приподнять. Вывод 4 соединить с 5-м (чтобы задать низкий активный уровень при обнаружении пальца). Вывод 1 подключить к 12 выводу микроконтроллера, 3-й соединить с зачищенной дорожкой возле резонатора. Разъём программирования приклеить каплей эпоксидки и подключить к портам SWD микроконтроллера.

Кстати, есть простой способ, как зажать короткий отрезок провода МГТФ. Думаю, о нём все знают. Но на всякий случай оставлю это здесь (чёрная штука — обычный китайский пинцет):



Нужно сделать примерно так:


Разъём программирования опциональный. Если дальнейших экспериментов не планируется, для программирования можно временно подпаяться с обратной стороны.

Для подключения по SWD предпочитаю разъём PBS1.27-5:
  • 1 — GND
  • 2 — SWDIO
  • 3 — SWCLK
  • 4 — SWDIO
  • 5 — GND

Компактный. Разъём-перевёртыш, не нужно искать ключ. Если при подключении ответную часть чуть наклонить, первым соединяется земля. В серийном изделии разъём можно не устанавливать, для однократного подключения достаточно отверстий. Сплошные плюсы.

Шаг пятый
Перевернуть плату, припаять перемычку для светодиода и полоску из медной фольги. Площадку 3V3 отрезать от питания. Лепесток загнуть на обратную сторону платы. Это будет емкостной сенсор. Также рекомендуется подрезать выводы кварцевого резонатора, чтобы их не коротнуло на корпус.



В итоге получаем вот такую фитоняшку:



С торца имеем SWD-разъём, сенсор и светодиод. После успешного проведения испытаний свисток можно аккуратно замотать каптоновым скотчем. Для защиты от грази, статики, и чтобы плата не выпадала из корпуса. Или напечатать на 3D-принтере крышку-затычку. Или корпус целиком. Если нужен токен-брелок, сверлим дырочку в корпусе возле светодиода (или возле разъёма программирования, если не установлен), вставляем мелкое колечко…

Обзор исходного кода и подготовка прошивки



U2F-token работает под управлением chopstx:
Chopstx is an RT thread library for STM32F103 and GD32F103 (ARM Cortex-M3), STM32F030 (ARM Cortex-M0), MKL27Z (ARM Cortex-M0plus), STM32L432 (ARM Cortex-M4), GD32VF103 (RISC-V Bumblebee) and emulation on GNU/Linux.
Пожалуй, острой необходимости использовать хитрую библиотеку не было, достаточно обычного HAL от ST. С другой стороны, chopstx нативно поддерживает микроконтроллер EFM32, который установлен на платах Tomu, и кучу мелких плат на основе STM32F103. В библиотеке нет ничего лишнего, только низкоуровневая инициализация и поддержка интерфейса USB. И простое RT-ядро. Прошивка u2f-token довольно компактна, её размер менее 32кб, в том числе благодаря использованию chopst.

В контроллере STM32F103 нет аппаратного RNG, поэтому использован хитрый алгоритм NeuG. Рецепт приготовления случайного числа довольно прост: оцифровать при помощи АЦП шум от Vref, термодатчика и Vcc; пропустить через CRC-32; захешировать алгоритмом SHA-256; на выходе получить 32 байта с равномерным случайным распределением. Кстати, этот же алгоритм используется в проекте gnuk.

Настройка конфигурации железа
Библиотеке chopstx нужно сказать, какой используется контроллер, как настроить тактирование, к каким портам подключены светодиод и кнопка. Штатно файлы конфигурации хранятся в файлах chopstx\board\board-*.h. Для сборки проекта расположение нужного файла указывается в makefile.

Форк проекта с моими доработками здесь, ветка blue_pill_btn. В makefile добавил конфигурации для указанных выше трёх плат:
  • Blue Pill: кнопка к PB8 и на землю; светодиод анодом к питанию, катодом к PC13;
  • Black Pill: кнопка к PС13 и на землю; светодиод анодом к питанию, катодом к PB12;
  • ST-Link-v2 mini: сенсорная кнопка к PA2 (активный низкий); светодиод анодом к питанию, катодом к PB12.
Проект подготовлен к сборке в Эклипсе.

Сборка
Сборка прошивки — пожалуй самая трудоёмкая задача для неопытного юзера. В гитохранилище есть подробная инструкция по сборке на Linux. Как обычно принято в opensourse, только хардкор, через make-файл, с привлечением скриптов на баше и пайтоне. Несколько готовых прошивок предлагается в разделе releases.

Чтобы компилятор не нагружать поиском подходящего файла конфигурации (из списка chopstx\board\*.h), перед сборкой проекта создаётся ссылка src\board.h на нужный файл конфигурации утилитой ln (из комплекта busybox). И компилятор использует именно этот файл-ссылку. После смены цели (target) ссылку board.h нужно обязательно удалить командой make distclean, чтобы создать новую на актуальный файл конфигурации. В Виндовз ссылку можно создать в файловой системе NTFS. А в FAT32 — нет, проект не соберётся. В последнем случае нужно руками скопировать нужный chopstx\board\board-*.h в src и переименовать его в board.h. И чуть поправить makefile.

Вполне реально собрать проект и в любимой IDE Eclipse + GCC-ARM. Дополнительно потребуются утилиты cp/ln/mkdir из комплекта busybox. А также руки из правильного места, и традиционные танцы с бубном.

После сборки доработать напильником
Кроме собственно программы, в память микроконтроллера нужно залить сертификат и его приватный ключ. Это всё хранится в памяти Flash начиная с адреса 0x0800F400.

Распределение памяти (STM32F103) следующее:
  • 0x08000000-F3FF — код (реально около 28кб);
  • 0x0800F400-F7FF — сертификат; в начале страницы размещается структура-указатель attestation_cert (см. файл empty-attestation-cert.c);
  • 0x0800F800-FBFF — приватный ключ; 32 байта и для надёжности его хэш, ещё 32 байта;
  • 0x0800FС00-FFFF — счётчик аутентификаций.

Сертификат можно создать собственный, или использовать прилагаемый. Если в строке параметров сборки указать ключ CUSTOM_ATTESTATION_CERT, то будут выполнены скрипты из папки src\cert, которые создадут новый сертификат, и закинут его в файл certificates.c. Если ключ CUSTOM_ATTESTATION_CERT не указать, то будет использован дефолтный (пустой) файл empty-attestation-cert.c, а сертификат придётся записать в память микроконтроллера при помощи скрипта cert\certtool или программатором.

Поскольку сертификат напрямую не привязан к аппаратному железу, то его можно интегрировать в прошивку. Что я и сделал. Пользуйтесь на здоровье. В прошивки (что в приложении к статье) вставлен сертификат, прилагаемый к оригинальному проекту. Действителен до 2029-03-07, срока годности вполне достаточно.

Приватный ключ. Это секрет (32 байта), который отвечает за «уникальность» ключа и используется в криптографических алгоритмах. Ключ защищается его sha256-отпечатком. Отпечаток проверяется во время инициализации устройства (при подаче питания). Если ошибка — ключ будет создан заново. Заодно обнулится счётчик аутентификаций.

Приватный ключ можно также подготовить вручную и внедрить его в прошивку. Это можно сделать при помощи питонячьего скрипта inject_key.py (достаёт бинарник из u2f.elf) или inject_key_bin.py (работает с бинарником u2f.bin). Однако надо внимательно проверить результат. В процессе моих экспериментов ключ и счётчик записывались по неправильному адресу. Или я чего делал неправильно, или в скрипте ошибка.

Счётчик хранится в верхней странице памяти Flash. Для увеличения ресурса в памяти реализован кольцевой буфер, страница памяти будет очищена после достижения его границы. Теоретический ресурс составит 1024/4*10k = 2560 килоциклов. На наш век хватит.
Кстати, ходят слухи о массовом море ключей JaCarta. Причиной вполне может быть ограниченный ресурс Flash-памяти.
Счётчик обнуляется при создании нового приватного ключа. Если для записи приватного ключа использован скрипт inject_key*.py, то начальное значение счётчика также может быть записано этим скриптом. Если прошивка собрана без опции ENFORCE_DEBUG_LOCK=1, то счётчик можно поправиль вручную при помощи программатора: очистить страницу памяти FC00-FFFF (записать FF), а в начало (по адресу FC00) поместить 4-байтное начальное значение (младший байт первый).

Чтобы поддержать ваше желание собрать безопасный ключ, предлагаю готовые прошивки для трёх приведенных выше аппаратных платформ. Каждая прошивка собрана в двух исполнениях:
  • с автоматическим локом, суффикс "_lock";
  • без включения защиты кристалла, суффикс "_nolock".

Первый вариант прошивки после первого старта включает защиту от чтения. Второй вариант этого не делает, оставляя возможность подключения программатора и чтения памяти. Незалоченный чип позволяет клонировать ключ. Что при желании можно сделать (см. далее).

В прошивку уже встроен сертификат. Приватный ключ отсутствует, он будет создан автоматически при первом включении.

Почти готово
Итак, подключаем программатор, полностью очищаем память микроконтроллера, записываем нашу прошивку. Отключаем программатор. Перезапускаем токен по питанию. При первом включении будет создан секретный ключ и обнулён счётчик. После чего токен готов к работе.

Прошивка -lock при первом включении лочится и зависает. Нужно перезапустить токен по питанию. Также пару раз зависал во время первой аутентификации (возможно не смог очистить страницу памяти со счётчиком). Почему это происходит, не разбирался. В дальнейшем во время эксплуатации проблем не возникало.

Проверить работоспособность ключа можно на демо-сайте Юбикея. Там же можно посмотреть протокол обмена между ключом и сервером.

Во время регистрации ключа Виндовз предложит свои услуги (Windows Hello). Отказаться, два раз нажать ОК, и когда замигает светодиод, нажать юзер-кнопку на ключе.


Подтвердить физическое присутствие можно и заранее. Сначала нажать на юзер-кнопку, а потом в течение 10 сек. успеть выполнить процедуру регистрации/аутентификации.

Резервный ключ



Для чего нужен резервный ключ, сказано в этой замечательной статье.

В двух словах: уникальность ключа определяется его device_secret`ом — 32-байтной случайной последовательностью. Для защиты от клонирования дополнительно используется счётчик. Счётчик инкрементируется при каждой аутентификации. Значение счётчика передаётся на сервер. Сервер хранит значение счётчика с предыдущей аутентификации (в привязке к конкретному ключу). Если вдруг у ключа счётчик будет меньше, чем значение на сервере, то такой ключ будет отвергнут. Такое может произойти, если ключ клонировали, а родным ключом успели воспользоваться один или много-много раз.

Однако если на каком-либо другом сайте вас ни разу не было с момента клонирования, то такая защита не поможет, поскольку каждый сервер хранит свой счётчик. И если на Гитлабе после клонирования ключа была тысяча аутентификаций, а на Дропбоксе ни разу, то на последний можно легко зайти ключом-клоном. Поэтому защита так себе...

Идея дубликата, а точнее, бекап-ключа — создать второй ключ с таким же секретом, но со счётчиком гораздо большим, чем ожидаемое количество аутентификаций за время жизни основного ключа (или его хозяина). Тогда при утере рабочего ключа можно достать бекап-ключ, аутентифицироваться на сотне-другой сайтов, где прописан этот ключ, счётчики на серверах обновятся новым значением, и утерянный ключ там работать уже не будет.

Для создания резервного ключа необходимо:
  • залить в рабочий ключ прошивку -nolock;
  • воткнуть ключ в USB; при первом включении ключ придумает случайный device_secret и запишет его в свою Flash-память;
  • подключить программатор, считать память ключа (или только кусок памяти по адресу F800-F83F, где хранится device_secret);
  • в hex/bin файле поправить счётчик (по адресу FC00), увеличив его в чудовищное количество раз;
  • во второй резервный ключ записать прошивку, device_secret и новый счётчик;
  • не забыть защитить память рабочего и резервного ключа от чтения.

После чего
  • положить/спрятать резервный ключ на полочку/под матрац/в сейф/закопать;
  • зарегистрировать рабочий ключ где нужно и пользоваться им в своё удовольствие.

Хранить или не хранить device_secret, каждый решает сам.

Для проверки работоспособности идеи можно аутентифицироваться на конкретном сервере первым ключом, потом вторым, после чего первый ключ сервером не должен приниматься. Для восстановления его работоспособности достаточно удалить и заново зарегистрировать рабочий ключ. Актуальное значение счётчика запоминается сервером во время регистрации ключа.

Ещё пару слов про безопасность



Ключ защищает от несанкционированного входа в аккаунт без ведома его владельца. При физическом наличии ключа у владельца. Если же ключ украли/отобрали, то это совсем другая история. Причём сильно разная, если ключ просто утерян, или была целенаправленная атака.

— Найденный на улице ключ можно использовать, т.к. защиты в виде пин-кода нет; однако нужно точно знать, от какой он двери. И ещё нужно знать первый фактор.

— Ключ на STM32F103 вполне реально клонировать, если нужно воспользоваться ресурсами хозяина, не привлекая его внимание. Для этого требуется токен незаметно изъять, разобрать, отпаять лишние элементы (или снять микроконтроллер), подключить Чип Шепчущий, и только тогда уже получить доступ к приватному ключу (если же чип не залочен — извиняйте, сами виноваты). Затем ключ-оригинал собрать «как было» и незаметно вернуть хозяину. Сценарий довольно специфичен и маловероятен. А параноикам могу предложить залить ключ эпоксидкой. Просто, надёжно, дополнительная механическая прочность, защита от влаги.

В любом случае, токен нужно беречь и не терять. Так же, как не нужно терять ключи от квартиры, машины или от сейфа, особенно если там деньги лежат…

Кстати, фирмовые ключи тоже не обладают абсолютной безопасностью. Например, «новая атака позволяет клонировать ключ безопасности Google Titan и YubiKey».

Как использовать



Список сайтов, поддерживающих FIDO-авторизацию, приведен здесь: www.dongleauth.info.

Для использования ключа входим в личный кабинет (лк), переходим в настройки безопасности, включаем двухфакторную/двухэтапную аутентификацию, ищем в меню пункт, где можно зарегистрировать электронный токен, пробуем зарегистрировать. Если ок — ключом можно пользоваться. Если не ок — сорри.

Наш самопальный ключ вполне переваривают Mail.ru, Google, DropBox, GitLab. А лк Майкрософта ключ не принимает. Либо не нравится неизвестный сертификат, либо хочет FIDO2.

В ключе есть сертификат. А удалённый сервер сам решает, можно ли ему доверять. В особо ответственных случаях (например, лк в банке), сервер вполне может разрешить только доверенные-проверенные-брендовые ключи.

Протокол FIDO работает только через защищённое соединение https. И это логично, с небезопасным соединением использовать надёжную аутентификацию смысла нет.



p.s. Hемного о грустном…

Мировой кризис полупроводников докатился и до нашей барахолки. Голубые/чёрные таблетки, так же, как и ST-Link-донглы, за последние пару месяцев подорожали в разы. Особенно на оригинальном чипе от STM. Впрочем, в донгле ориинальные STM-чипы уже не найдёшь. И таблетки на клонах тоже пошли в массовую продажу. Как показывает практика, «экономика адаптируется», и даже если кризис закончится, цены уже не будут прежними.

Как альтернативу на ближайшее время предлагаю рассмотреть отладочные платы на основе STM32F401/411. Они ещё попадаются по вменяемой цене, иногда даже дешевле, чем F103-й. Вероятно старые запасы.

Из недостатков следует отметить:
  • только один канал АЦП (терпимо);
  • нет интерфейса CAN (редко, но бывает нужен);
  • Flash-память организована в виде больших страниц (4*16кб + 1*64кб + х*128кб), сложности с организацией энергонезависимого хранилища.

В остальном (в отличие от 103-го) у 401/411 только плюсы:
  • шустрое ядро Cortex-M4 с аппаратной поддержкой float;
  • выше тактовая частота, 84/100 МГц;
  • больше памяти (Flash 256/512k, RAM 64-128k);
  • больше таймеров, интерфейсов UART/SPI/I2C.

В качестве анонса: планирую адаптировать прошивку Solokey под F401-й, чтобы сделать полноценный FIDO2-токен.

Продолжение следует…
Файлы в топике: ST-Link v2E.png, bin.zip

Комментарии (4)

RSS свернуть / развернуть
доставка+растаможка+маржа; вот здесь описан опыт приобретения
Какая растоможка, Yubico дешевле 200 евро. Я даже не пойду читать на хабр опыт приобретения, потому что у меня свой. Я уже 4 штуки на амазоне купил, никакого геммороя не испытал. Ну да, он недёшев сам по себе, практически $50, да. Но в остальном — никаких проблем нет.
0
растоможка, какой позор!
0
Зато в юбики включается режим GPG Card, туда прошиваются ключи GPG и они же используются как ключи SSH. Это круче и полезнее U2F, как по мне :)

А вот новость про цены на платы с STM32 грустные. Вообще странно, микроконтроллеры вроде (кроме автомобильных, но там сами автопроизводители идиоты и отказались от годовых заказов) не страдали, там же процесс толстый, мощностей навалом.
0
В контроллере STM32F103 нет аппаратного RNG, поэтому использован хитрый алгоритм NeuG. Рецепт приготовления случайного числа довольно прост: оцифровать при помощи АЦП шум от Vref, термодатчика и Vcc; пропустить через CRC-32; захешировать алгоритмом SHA-256; на выходе получить 32 байта с равномерным случайным распределением. Кстати, этот же алгоритм используется в проекте gnuk.
Я бы посоветовал посмотреть на алгоритм Fortuna Шнаера.
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.