К основному содержимому

Проверка согласованности файлов прошивки с исходным кодом, выпущенным OneKey

Обновлено более 2 нед. назад

Аппаратный кошелек OneKey имеет полностью открытую прошивку. Вы можете ознакомиться с исходным кодом прошивки для соответствующих продуктов в репозитории GitHub OneKey. Перед официальным выпуском файлов прошивки, предназначенных для массового производства, команда OneKey использует инструменты автоматизации сборки GitHub (GitHub CI) для компиляции и сборки исходного кода прошивки из соответствующих репозиториев прошивки. Затем файлы подписываются командой OneKey перед их официальным выпуском.

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

Для получения информации о методах проверки согласованности исходных данных различных файлов с использованием криптографической хеш-функции SHA-256 (сравнение контрольных сумм) обратитесь к этой статье.

Репозитории прошивки с открытым исходным кодом

OneKey Pro

OneKey Classic 1S

OneKey Classic

OneKey Touch

OneKey Mini

Чтобы воспроизвести выпуск прошивки OneKey, следуйте видеоинструкции ниже

Процесс выпуска прошивки

Когда стандартная официальная прошивка или прошивка Bluetooth готовы к выпуску, команда OneKey запускает соответствующее действие в репозитории для компиляции исходного кода. После успешной компиляции файлы загружаются в хранилище GitHub Artifacts, ожидая завершения внутренней мультиподписи командой, после чего они размещаются на CDN OneKey. После обновления файла config.json уведомления об обновлении отправляются через приложение OneKey и веб-сайт обновлений прошивки OneKey, предлагая пользователям обновить прошивку. Конкретный процесс показан на схеме ниже.

onekey github verifiy.png

Цели

  1. Проверить, что «Файл прошивки, подписанный командой OneKey» получен из «Файла прошивки, предварительно подписанного GitHub CI» в репозитории OneKey с открытым исходным кодом.

  2. Проверить согласованность между «Файлом прошивки, подписанным командой OneKey» и «Файлом прошивки, хранящимся в официальном CDN OneKey».

Предварительные требования

Системная прошивка Прошивка Bluetooth

✔ Загрузка файла прошивки, предварительно подписанного GitHub CI (неподписанного)

  • Перейдите к официальному выпуску прошивки аппаратного обеспечения OneKey на GitHub: https://github.com/OneKeyHQ/firmware/releases

  • Найдите версию прошивки, которую вы хотите проверить, и перейдите по ссылке GitHub Actions.

github action.png
  • Нажмите на имя прошивки в разделе «Artifacts» для загрузки (требуется вход в GitHub).

2.png

✔ Загрузка файла прошивки, предварительно подписанного командой OneKey (подписанного)

  • Перейдите к официальному выпуску прошивки аппаратного обеспечения OneKey на GitHub: https://github.com/OneKeyHQ/firmware/releases

  • Найдите версию прошивки, которую вы хотите проверить.

  • Нажмите, чтобы загрузить файл bin в разделе «Assets».

github release bin.png

✔ Загрузка файла прошивки, хранящегося в официальном CDN OneKey (подписанного)

  • Перейдите к файлу CDN OneKey: https://data.onekey.so/config.json

  • Найдите версию прошивки, которую вы хотите проверить.

  • Скопируйте ссылку в поле «url».

  • Откройте в новом окне браузера для автоматической загрузки файла bin.

3.png

✔ Загрузка файла прошивки Bluetooth, предварительно подписанного GitHub CI (неподписанного)

pro-bluetooth-firmware-github-ci.png
  • Нажмите на имя прошивки в разделе «Artifacts» для загрузки (требуется вход в GitHub).

pro-bluetooth-firmware-github-ci-bin.png

✔ Загрузка файла прошивки Bluetooth, подписанного командой OneKey (подписанного)

pro-bluetooth-firmware-github-release-signed.png

✔ Загрузка файла прошивки Bluetooth, хранящегося в официальном CDN OneKey (подписанного)

  • Перейдите к файлу CDN OneKey: https://data.onekey.so/config.json

  • Найдите версию прошивки, которую вы хотите проверить.

  • Скопируйте ссылку в поле «ble» - «webUpdate».

  • Откройте в новом окне браузера для автоматической загрузки файла bin.

pro-ble-firmware-cdn.png

✔ Загрузка и установка Python

Шаги

Ниже приведены шаги проверки для двух ранее установленных целей:

Системная прошивка Прошивка Bluetooth

Процесс проверки с предварительно подписанной прошивкой CI GitHub (системная)

  • Откройте Терминал.

  • Выполните команду ниже (файл прошивки, подписанный командой OneKey):

    • tail -c +1024 /path/to/(путь к файлу) | shasum -a 256

  • Выполните команду ниже (файл прошивки, предварительно подписанный CI GitHub):

    • tail -c +1024 /path/to/(путь к файлу) | shasum -a 256

  • Сравните контрольные суммы, сгенерированные двумя командами. Если результаты совпадают, можно подтвердить, что «Файл прошивки, подписанный командой OneKey» получен из «Файла прошивки, предварительно подписанного CI GitHub» в репозитории OneKey с открытым исходным кодом.

7.png

Для системной прошивки к CI-версии прошивки добавляется 1024-байтовый результат подписи, который проверяется загрузчиком при запуске устройства.

Процесс проверки с файлом прошивки, хранящимся в официальном CDN OneKey (системная)

  • Откройте Терминал.

  • Выполните команду ниже (файл прошивки, подписанный командой OneKey):

    • shasum -a 256 (путь к файлу)

  • Выполните команду ниже (файл прошивки, хранящийся в официальном CDN OneKey):

    • shasum -a 256 (путь к файлу)

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

6.png

Процесс проверки с предварительно подписанной прошивкой CI GitHub (Bluetooth)

  • Найдите файл ota.bin в папке загруженной предварительно подписанной прошивки Bluetooth CI GitHub.

  • Откройте терминал в той же папке, где находится ota.bin.

  • Запустите Python командой: python3

  • Выполните команду ниже, чтобы получить контрольную сумму предварительно подписанной прошивки Bluetooth CI GitHub.

    • exec("""\nimport struct, hashlib\nwith open("ota.bin", mode="br") as f:\n f.seek(0x0C)\n codelen = struct.unpack("i", f.read(4))[0] - 512\n f.seek(0x600)\n print("".join(format(x, "02x") for x in hashlib.sha256(f.read(codelen)).digest()))\n""")

checksum-github-ci-ble.png
  • Выполните ту же команду с файлом прошивки Bluetooth, подписанным командой OneKey.

    • Примечание: измените ota.bin в команде на имя файла прошивки Bluetooth, подписанного командой OneKey.

checksum-github-release.png
  • Сравните контрольные суммы, сгенерированные двумя командами. Если результаты совпадают, можно подтвердить, что «Файл прошивки, подписанный командой OneKey» получен из «Файла прошивки, предварительно подписанного CI GitHub» в репозитории OneKey с открытым исходным кодом.

Процесс проверки с файлом прошивки Bluetooth, хранящимся в официальном CDN OneKey (Bluetooth)

  • Откройте терминал в той же папке, где находится файл прошивки Bluetooth, подписанный командой OneKey.

  • Запустите Python командой: python3

  • Скопируйте команду ниже:

    • exec("""\nimport struct, hashlib\nwith open("ota.bin", mode="br") as f:\n f.seek(0x0C)\n codelen = struct.unpack("i", f.read(4))[0] - 512\n f.seek(0x600)\n print("".join(format(x, "02x") for x in hashlib.sha256(f.read(codelen)).digest()))\n""")

  • Измените ota.bin на имя вашего загруженного файла прошивки Bluetooth, подписанного командой OneKey.

  • Выполните команду для получения контрольной суммы.

  • Повторите вышеуказанные шаги с вашим загруженным файлом прошивки Bluetooth, хранящимся в официальном CDN OneKey.

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

compare-ble-checksum.png
Нашли ответ на свой вопрос?