Воспроизводимая сборка прошивок Trezor
Подготовка
- Виртуальная машина VirtualBox с установленным дистрибутивом Ubuntu 22.04 Desktop
- 50 GB для диска виртуальной машины
- 4 GB оперативной памяти
- 4 потока процессора
- Установленный Docker
Зависимости
Устанавливаем trezorctl:
sudo apt install python3-pip
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
python3 -m pip install trezorКлонируем репозиторий прошивки:
git clone https://github.com/trezor/trezor-firmware ~/trezor-firmware
cd ~/trezor-firmwareВерсии прошивок
Теперь необходимо определиться, какую прошивку вы хотите протестировать на воспроизводимость.
Модели устройств имеют следующие условные обозначения:
- T1B1 – Trezor One
- T2T1 – Trezor T
- T2B1 – Trezor Safe 3 rev.A
- T3B1 – Trezor Safe 3 rev.B
- T3T1 – Trezor Safe 5
Условные обозначения моделей состоят из четырех символов:
- T – Trezor
- Цифровое обозначение основного чипа: 1 – STM32F20x, 2 – STM32F42x, 3 – STM32U5
- Тип управления: B – кнопки (Buttons), T – сенсорный экран (Touch)
- Поколение устройства
Обозначения прошивок:
- legacy – прошивки Trezor One
- core – прошивки Trezor T, Safe 3 и Safe 5
История версий прошивок доступна по ссылкам:
Сборка прошивки
Команда запуска сборки может отличаться от версии к версии, поэтому необходимо проверить доступные опции с помощью команды:
./build-docker.sh --help
Legacy
Соберем мультивалютную прошивку 1.13.0 для Trezor One. Команды будут выглядеть следующим образом:
git checkout legacy/v1.13.0
./build-docker.sh --skip-core --skip-bitcoinonly legacy/v1.13.0После сборки файл прошивки firmware.bin будет находиться в поддиректории build/legacy-T1B1/firmware/.
Core
Соберем мультивалютную прошивку 2.8.9 для Trezor T. Команды будут выглядеть следующим образом:
git checkout core/v2.8.9
# модели устройств можно указать через запятую, например --models T2B1, T3T1
./build-docker.sh --skip-bitcoinonly --models T2T1 core/v2.8.9После сборки файл прошивки firmware.bin будет находиться в поддиректории build/core-T2T1/firmware/.
Проверка прошивки
Legacy
Скачайте, распространяемую разработчиками, версию прошивки:
trezorctl firmware download --model T1B1 --version 1.13.0Downloading from https://data.trezor.io/firmware/t1b1/trezor-t1b1-1.13.0.bin
Trezor One v2 firmware (1.8.0 or later)
Firmware version 1.13.0 build 0
Firmware fingerprint: 356433bd9de6cb564bf7778fc5de73c56197459523358f267e9235af9e1ce46d
Firmware saved under trezor-t1b1-1.13.0.bin.Заголовок официальной прошивки включает цифровые подписи Satoshi Labs – 195 байт на смещении 0x220 или 544 в десятичной системе счисления. Перепишем подписи в заголовке нулями:
dd if=/dev/zero of=trezor-t1b1-1.13.0.bin bs=1 seek=544 count=195 conv=notrunc195+0 records in
195+0 records out
195 bytes copied, 0,00155346 s, 126 kB/sСравним хэш-суммы подготовленной официальной прошивки и прошивки, собранной из исходного кода:
sha256sum trezor-t1b1-1.13.0.bincf72859c0995e04e09ea36eefaca28906e99dffa7b72fb1327410de4006cbd6c trezor-t1b1-1.13.0.binsha256sum build/legacy-T1B1/firmware/firmware.bincf72859c0995e04e09ea36eefaca28906e99dffa7b72fb1327410de4006cbd6c build/legacy-T1B1/firmware/firmware.binТакже можно считать подписи из оригинала и записать в скомпилированную прошивку, тем самым получив оригинальный файл:
rm -f trezor-t1b1-1.13.0.bin
trezorctl firmware download --model T1B1 --version 1.13.0
dd if=trezor-t1b1-1.13.0.bin bs=1 skip=544 count=195 | dd of=build/legacy-T1B1/firmware/firmware.bin bs=1 seek=544 conv=notrunc195+0 records in
195+0 records out
195 bytes copied, 0,00124924 s, 156 kB/s
195+0 records in
195+0 records out
195 bytes copied, 0,0016341 s, 119 kB/sСверим хэш-суммы и верифицируем созданную прошивку:
sha256sum trezor-t1b1-1.13.0.bina5f51f64c0ad8dac888ed5a1c5e6b64271b382b6ed73cfe6a569cfb874cd4545 trezor-t1b1-1.13.0.binsha256sum build/legacy-T1B1/firmware/firmware.bina5f51f64c0ad8dac888ed5a1c5e6b64271b382b6ed73cfe6a569cfb874cd4545 build/legacy-T1B1/firmware/firmware.bintrezorctl firmware verify build/legacy-T1B1/firmware/firmware.binTrezor One v2 firmware (1.8.0 or later)
Firmware version 1.13.0 build 0
Firmware fingerprint: 356433bd9de6cb564bf7778fc5de73c56197459523358f267e9235af9e1ce46dCore
Скачайте, распространяемую разработчиками, версию прошивки:
trezorctl firmware download --model T2T1 --version 2.8.9Downloading from https://data.trezor.io/firmware/t2t1/trezor-t2t1-2.8.9.bin
T2T1 firmware image.
Vendor header from SatoshiLabs, version 0.0
Firmware version 2.8.9 build 0
Firmware fingerprint: ec61dba50be195f1cbb78688a0b92fb293c23150b68f5dab3b44420a106fca17
Firmware saved under trezor-t2t1-2.8.9.bin.Заголовок официальной прошивки включает цифровую подпись Satoshi Labs длиной 65 байт.
В зависимости от модели устройства подписи находятся на следующих смещениях в прошивке:
- T2T1 – 5567
- T2B1 – 1471
- T3B1 – 1471
- T3T1 – 1983
Используя нужное смещение, перепишем подписи в заголовке нулями:
dd if=/dev/zero of=trezor-t2t1-2.8.9.bin bs=1 seek=5567 count=65 conv=notrunc65+0 records in
65+0 records out
65 bytes copied, 0,000794589 s, 81,8 kB/sСравним хэш-суммы подготовленной официальной прошивки и прошивки, собранной из исходного кода:
sha256sum trezor-t2t1-2.8.9.bin16c98a0ce67a84723f053da98a02cfa79717af85bd73df52acafc6c37aeebe94 trezor-t2t1-2.8.9.binsha256sum build/core-T2T1/firmware/firmware.bin16c98a0ce67a84723f053da98a02cfa79717af85bd73df52acafc6c37aeebe94 build/core-T2T1/firmware/firmware.bin