
USB-ключ для ввода TOTP-кодов и сохранённого пароля
karen07 10 минут назад USB-ключ для ввода TOTP-кодов и сохранённого пароля Средний 4 мин 4 DIY или Сделай сам Программирование микроконтроллеров * C * Туториал USB-ключРепозиторий проекта: всегда было лень доставать...
<5 — 2026'da uzaya kaç SpaceX Starship fırlatması ulaşacak?
Вот важная новость с фронта ИИ: karen07 10 минут назад USB-ключ для ввода TOTP-кодов и сохранённого пароля Средний 4 мин 4 DIY или Сделай сам Программирование микроконтроллеров * C * Туториал USB-ключРепозиторий проекта: всегда было лень доставать телефон ради TOTP-кода, а вручную вводить длинные сложные пароли — удовольствие тоже сомнительное. С паролями эту проблему часто решают плохо: делают пароль попроще и покороче, чтобы его было удобно набирать. Но с TOTP так не получится — код живёт отдельно, его всё равно нужно открыть, посмотреть и перепечатать.
Так как небольшой опыт в программировании микроконтроллеров у меня уже был (Послушный YubiKey), я решил сделать маленький «вписыватель паролей»: USB-устройство, которое подключается к компьютеру, притворяется обычной клавиатурой и само вводит TOTP-код или сохранённый пароль. Чтобы вводить пароль и TOTP так, будто их набирает пользователь, устройство должно уметь работать как USB HID-клавиатура. Для этого подходит не любой микроконтроллер: нужна поддержка USB device и HID.
Технические детали
Мой выбор пал на RP2040-Zero — его легко достать, он недорогой, компактный, хорошо документирован, и по нему есть много туториалов. Что купить и как спаятьНеобходимо купить сам RP2040-Zero, но для работы TOTP требуется Unix time время с точность хотя бы 5 секунд. RP2040-Zero Для этого есть внешние платы, самым подходящим мне по форм фактору оказался DS3231.
DS3231Общение между RP2040-Zero и DS3231 идет через I2C. I2C пины RP2040-ZeroI2C пины у DS3231У DS3231 можно отпаять черную колодку, и соединить RP2040-Zero и DS3231 через два пина, тем самым мы получим компактную 3D структуру и общую жесткость конструкции. Но при отпайке будьте аккуратные с батарейкой у DS3231, она может перегреться.
Лучше вообще перед всеми работами её отпаять батарейку, и уже припаять в самом конце. Чип к чипуПолучается чип к чипу, рисков по нагреву и короткому замыканию нет. Остается проводами подключить +3.
Отраслевые последствия
Пины плюс минусПины плюс минусПрошивка для RP2040-ZeroПрошивка написана на C под Raspberry Pi Pico SDK и собирается через CMake. Для USB я использую TinyUSB: устройство объявляется как HID с двумя report ID. Первый report — обычная USB-клавиатура, через него я «печатаю» TOTP-код или сохранённый пароль.
Второй report — служебный vendor-defined HID-канал для настройки через WebHID. Когда WebHID-страница отправляет команду, она попадает в callback tud_hid_set_report_cb(). Первый байт пакета — это код команды, остальные байты — данные.
Так я устанавливаю время в DS3231, записываю TOTP-секрет, записываю пароль, очищаю данные или возвращаю статус устройства. Время хранится не во flash, а в RTC DS3231. При настройке браузер отправляет Unix time, а прошивка переводит его в обычные поля даты и времени: год, месяц, день, часы, минуты и секунды.
Этот прогресс даёт важные сигналы о будущем отрасли, и технологический мир внимательно наблюдает.





