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

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

Обновлено сегодня

Аппаратный кошелек OneKey имеет полностью открытую прошивку. Исходный код прошивки для соответствующих продуктов можно найти в репозитории OneKey на GitHub. Перед официальным выпуском файлов прошивки, предназначенных для массового производства, команда 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 Action.

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

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

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

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

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

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

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

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

7.png

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

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

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

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

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

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

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

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

6.png

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

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

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

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

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

    • 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» получен из «Файла прошивки, предварительно подписанного GitHub CI» в репозитории 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
Нашли ответ на свой вопрос?