Аппаратный кошелек OneKey имеет полностью открытую прошивку. Вы можете ознакомиться с исходным кодом прошивки для соответствующих продуктов в репозитории GitHub OneKey. Перед официальным выпуском файлов прошивки, предназначенных для массового производства, команда OneKey использует инструменты автоматизации сборки GitHub (GitHub CI) для компиляции и сборки исходного кода прошивки из соответствующих репозиториев прошивки. Затем файлы подписываются командой OneKey перед их официальным выпуском.
Эта статья предлагает метод самопроверки путем сравнения контрольных сумм файлов до и после официальной мультиподписи команды, чтобы проверить согласованность между файлами прошивки и исходным кодом.
Для получения информации о методах проверки согласованности исходных данных различных файлов с использованием криптографической хеш-функции SHA-256 (сравнение контрольных сумм) обратитесь к этой статье.
Репозитории прошивки с открытым исходным кодом
OneKey Pro
⚙ Системная прошивка: github.com/OneKeyHQ/firmware-pro
Прошивка Bluetooth: github.com/OneKeyHQ/bluetooth-firmware-pro
OneKey Classic 1S
⚙ Системная прошивка: github.com/OneKeyHQ/firmware-classic1s
Прошивка Bluetooth: github.com/OneKeyHQ/bluetooth-firmware-classic
OneKey Classic
⚙ Системная прошивка: github.com/OneKeyHQ/firmware/tree/bixin_dev
Прошивка Bluetooth: github.com/OneKeyHQ/bluetooth-firmware-classic
OneKey Touch
⚙ Системная прошивка: github.com/OneKeyHQ/firmware (ветка: touch)
Прошивка Bluetooth: github.com/OneKeyHQ/bluetooth-firmware-touch
OneKey Mini
⚙ Системная прошивка: github.com/OneKeyHQ/firmware/tree/mini
Чтобы воспроизвести выпуск прошивки OneKey, следуйте видеоинструкции ниже
Процесс выпуска прошивки
Когда стандартная официальная прошивка или прошивка Bluetooth готовы к выпуску, команда OneKey запускает соответствующее действие в репозитории для компиляции исходного кода. После успешной компиляции файлы загружаются в хранилище GitHub Artifacts, ожидая завершения внутренней мультиподписи командой, после чего они размещаются на CDN OneKey. После обновления файла config.json уведомления об обновлении отправляются через приложение OneKey и веб-сайт обновлений прошивки OneKey, предлагая пользователям обновить прошивку. Конкретный процесс показан на схеме ниже.
Цели
Проверить, что «Файл прошивки, подписанный командой OneKey» получен из «Файла прошивки, предварительно подписанного GitHub CI» в репозитории OneKey с открытым исходным кодом.
Проверить согласованность между «Файлом прошивки, подписанным командой OneKey» и «Файлом прошивки, хранящимся в официальном CDN OneKey».
Предварительные требования
Системная прошивка Прошивка Bluetooth
✔ Загрузка файла прошивки, предварительно подписанного GitHub CI (неподписанного)
Перейдите к официальному выпуску прошивки аппаратного обеспечения OneKey на GitHub: https://github.com/OneKeyHQ/firmware/releases
Найдите версию прошивки, которую вы хотите проверить, и перейдите по ссылке GitHub Actions.
Нажмите на имя прошивки в разделе «Artifacts» для загрузки (требуется вход в GitHub).
✔ Загрузка файла прошивки, предварительно подписанного командой OneKey (подписанного)
Перейдите к официальному выпуску прошивки аппаратного обеспечения OneKey на GitHub: https://github.com/OneKeyHQ/firmware/releases
Найдите версию прошивки, которую вы хотите проверить.
Нажмите, чтобы загрузить файл bin в разделе «Assets».
✔ Загрузка файла прошивки, хранящегося в официальном CDN OneKey (подписанного)
Перейдите к файлу CDN OneKey: https://data.onekey.so/config.json
Найдите версию прошивки, которую вы хотите проверить.
Скопируйте ссылку в поле «url».
Откройте в новом окне браузера для автоматической загрузки файла bin.
✔ Загрузка файла прошивки Bluetooth, предварительно подписанного GitHub CI (неподписанного)
Перейдите к официальному выпуску прошивки Bluetooth OneKey на GitHub
OneKey Classic и Classic 1S: https://github.com/OneKeyHQ/bluetooth-firmware-classic/releases
Найдите версию прошивки, которую вы хотите проверить, и перейдите по ссылке GitHub Actions.
Нажмите на имя прошивки в разделе «Artifacts» для загрузки (требуется вход в GitHub).
✔ Загрузка файла прошивки Bluetooth, подписанного командой OneKey (подписанного)
Перейдите к официальному выпуску прошивки Bluetooth OneKey на GitHub
OneKey Classic и Classic 1S: https://github.com/OneKeyHQ/bluetooth-firmware-classic/releases
Найдите версию прошивки, которую вы хотите проверить.
Нажмите, чтобы загрузить файл bin в разделе «Assets».
✔ Загрузка файла прошивки Bluetooth, хранящегося в официальном CDN OneKey (подписанного)
Перейдите к файлу CDN OneKey: https://data.onekey.so/config.json
Найдите версию прошивки, которую вы хотите проверить.
Скопируйте ссылку в поле «ble» - «webUpdate».
Откройте в новом окне браузера для автоматической загрузки файла bin.
✔ Загрузка и установка Python
Перейдите по адресу: https://www.python.org/downloads/
Загрузите и установите последнюю версию 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 с открытым исходным кодом.
Для системной прошивки к CI-версии прошивки добавляется 1024-байтовый результат подписи, который проверяется загрузчиком при запуске устройства.
Процесс проверки с файлом прошивки, хранящимся в официальном CDN OneKey (системная)
Откройте Терминал.
Выполните команду ниже (файл прошивки, подписанный командой OneKey):
shasum -a 256 (путь к файлу)
Выполните команду ниже (файл прошивки, хранящийся в официальном CDN OneKey):
shasum -a 256 (путь к файлу)
Сравните контрольные суммы, сгенерированные двумя командами. Если результаты совпадают, подтверждается согласованность кода двух файлов прошивки.
Процесс проверки с предварительно подписанной прошивкой 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""")
Выполните ту же команду с файлом прошивки Bluetooth, подписанным командой OneKey.
Примечание: измените ota.bin в команде на имя файла прошивки Bluetooth, подписанного командой OneKey.
Сравните контрольные суммы, сгенерированные двумя командами. Если результаты совпадают, можно подтвердить, что «Файл прошивки, подписанный командой 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.
Сравните контрольные суммы, сгенерированные двумя командами. Если результаты совпадают, подтверждается согласованность кода двух файлов прошивки.
