Как устроены мозги аппаратного кошелька — заглядываем в исходники Trezor

17 Jul, 2026
1,754
🔱 780
👥 68

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

Я давно хотел покопаться в коде аппаратных кошельков. Обычно это закрытые проприетарные железки, но Trezor пошел другим путем и выложил всё в опенсорс. Это монорепозиторий, где лежит прошивка для всех их устройств — от старенького Trezor One до новых моделей Safe.

Что внутри монорепозитория

Проект огромный, и с первого взгляда в нем легко потеряться. Разработчики разделили код на несколько логических слоев. В папке core живет современная реализация прошивки для новых моделей. Она написана на смеси Python (точнее, MicroPython) и C. Это довольно смелое решение — использовать высокоуровневый язык в девайсе, где ресурсы сильно ограничены.

Папка legacy содержит код для первой версии кошелька. Там всё сурово: чистый C, минимум абстракций. Если вам интересно посмотреть, как выжать максимум из микроконтроллера с крошечным объемом памяти, стоит заглянуть именно туда.

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

Реклама

Почему это интересно разработчику

Первое, что бросается в глаза — использование MicroPython. Казалось бы, зачем тащить интерпретатор в устройство безопасности? Ответ прост: скорость разработки и читаемость кода. Логику интерфейса, обработку меню и бизнес-логику транзакций гораздо проще писать и проверять на Python. При этом критичные к производительности и безопасности части всё равно остаются на C.

Интересно реализовано хранилище данных в директории storage. Они используют собственную имплементацию NORCOW (NOR Copy-On-Write). Это специальная файловая система для flash-памяти, которая минимизирует износ ячеек и гарантирует атомарность операций. Если во время записи выдернуть шнур, данные не превратятся в тыкву.

img

Технический стек и инструменты

Проект использует Protocol Buffers (common/protob) для общения между устройством и компьютером. Это стандарт де-факто для структурированных данных. Если вы захотите написать свой клиент для кошелька, вам не придется гадать, в каком порядке идут байты — просто берете .proto файлы и генерируете код на нужном языке.

Для тех, кто хочет потыкать прошивку без покупки железки, в репозитории есть эмулятор. Он собирается под Linux и macOS. Это мега-удобно: можно запустить код в дебаггере, обвешать его принтами или прогнать через Valgrind.

Вот как примерно выглядит структура взаимодействия:

  1. Python-часть отвечает за UI и высокоуровневую логику.
  2. C-часть берет на себя драйверы, криптографию и низкоуровневую работу с памятью.
  3. Protobuf связывает это всё с внешним миром через USB.

Как начать изучать

Если решите покопаться, начните с папки docs. Там довольно подробно расписано, как поднять окружение для сборки. Не пугайтесь обилия submodule в папке vendor — проект тянет много внешних зависимостей, от драйверов дисплея до специфических криптографических либ.

Отдельного упоминания заслуживает папка python. Там лежит trezorctl — мощная CLI-утилита. Даже если вы не собираетесь переписывать прошивку, посмотрите, как реализован клиент. Это отличный пример того, как писать надежный софт для работы с внешним оборудованием.

Кому стоит заглянуть в этот репозиторий

В первую очередь — тем, кто интересуется встраиваемыми системами (embedded) и безопасностью. Это не учебный проект, а реальный продукт, который прошел через сотни аудитов. Тут можно подсмотреть, как организовывать CI для железа, как писать тесты для прошивок и как вообще структурировать код в больших монорепозиториях.

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

🍪 Мы используем файлы cookie и сервис аналитики Яндекс.Метрика, чтобы сайт работал лучше. Продолжая пользоваться devtrends.ru, вы соглашаетесь с обработкой данных согласно Политике конфиденциальности.