Ir al contenido principal

Autenticar la consistencia de los archivos de firmware con el código fuente abierto publicado por OneKey

Actualizado hoy

La billetera de hardware OneKey presenta un firmware completamente de código abierto. Puedes consultar el código del firmware de código abierto para productos relevantes en el repositorio de GitHub de OneKey. Antes de que los archivos de firmware destinados a la producción en masa se publiquen oficialmente, el equipo de OneKey utiliza las herramientas de automatización de compilación de GitHub (GitHub CI) para compilar y construir el código fuente del firmware de los respectivos repositorios de firmware. Luego, los archivos son firmados por el equipo de OneKey antes de ser publicados oficialmente.

Este artículo proporciona un método de autoverificación, comparando las sumas de comprobación de los archivos antes y después de la firma múltiple oficial del equipo, para verificar la consistencia entre los archivos de firmware y el código fuente abierto.

Para conocer los métodos sobre cómo verificar la consistencia de los datos de origen de diferentes archivos utilizando la función hash criptográfica SHA-256 (comparando sumas de comprobación), consulta este artículo.

Repositorios de Firmware de Código Abierto

OneKey Pro

OneKey Classic 1S

OneKey Classic

OneKey Touch

OneKey Mini

Para reproducir la versión de firmware de OneKey, sigue el tutorial en video a continuación.

Proceso de Lanzamiento del Firmware

Cuando el firmware estándar oficial o el firmware Bluetooth estén listos para su lanzamiento, el equipo de OneKey ejecutará la Acción del repositorio correspondiente para compilar el código abierto. Después de una compilación exitosa, los archivos se cargan en el almacenamiento de Artefactos de GitHub, esperando que el equipo complete la firma múltiple interna antes de colocarlos en la CDN de OneKey. Después de actualizar el archivo config.json, las notificaciones de actualización se envían a través de la aplicación OneKey y el sitio web de actualización de firmware de OneKey, lo que solicita a los usuarios que actualicen su firmware. Consulta el diagrama a continuación para ver el proceso específico.

onekey github verifiy.png

Objetivos

  1. Verificar que el "Archivo de Firmware Firmado por el Equipo OneKey" se deriva del "Archivo de Firmware Pre-firmado por GitHub CI" en el repositorio de código abierto de OneKey.

  2. Verificar la consistencia entre el "Archivo de Firmware Firmado por el Equipo OneKey" y el "Archivo de Firmware Almacenado en la CDN Oficial de OneKey".

Prerrequisitos

Firmware del Sistema Firmware Bluetooth

✔ Descargar Archivo de Firmware Pre-firmado por GitHub CI (No Firmado)

github action.png
  • Haz clic en el nombre del firmware en Artefactos para descargarlo (se requiere iniciar sesión en GitHub).

2.png

✔ Descargar Archivo de Firmware Firmado por el Equipo OneKey (Firmado)

  • Navega a la versión oficial de firmware de hardware de OneKey en GitHub: https://github.com/OneKeyHQ/firmware/releases

  • Encuentra la versión de firmware que deseas verificar.

  • Haz clic para descargar el archivo bin bajo Assets.

github release bin.png

✔ Descargar Archivo de Firmware Almacenado en la CDN Oficial de OneKey (Firmado)

  • Navega al archivo CDN de OneKey: https://data.onekey.so/config.json

  • Encuentra la versión de firmware que deseas verificar.

  • Copia el enlace bajo el campo "url".

  • Abre en una nueva ventana del navegador para descargar automáticamente el archivo bin.

3.png

✔ Descargar Archivo de Firmware Bluetooth Pre-firmado por GitHub CI (No Firmado)

pro-bluetooth-firmware-github-ci.png
  • Haz clic en el nombre del firmware en Artefactos para descargarlo (se requiere iniciar sesión en GitHub).

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

✔ Descargar Archivo de Firmware Bluetooth Firmado por el Equipo OneKey (Firmado)

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

✔ Descargar Archivo de Firmware Bluetooth Almacenado en la CDN Oficial de OneKey (Firmado)

  • Navega al archivo CDN de OneKey: https://data.onekey.so/config.json

  • Encuentra la versión de firmware que deseas verificar.

  • Copia el enlace bajo el campo "ble" - "webUpdate".

  • Abre en una nueva ventana del navegador para descargar automáticamente el archivo bin.

pro-ble-firmware-cdn.png

✔ Descargar e Instalar Python

Pasos

A continuación se detallan los pasos de verificación para los dos objetivos establecidos previamente:

Firmware del Sistema Firmware Bluetooth

Proceso de Verificación con firmware pre-firmado por GitHub CI (Sistema)

  • Abre la Terminal.

  • Ejecuta el siguiente comando (Archivo de Firmware Firmado por el Equipo OneKey):

    • tail -c +1024 /path/to/(ruta del archivo) | shasum -a 256

  • Ejecuta el siguiente comando (Archivo de Firmware Pre-firmado por GitHub CI):

    • tail -c +1024 /path/to/(ruta del archivo) | shasum -a 256

  • Compara las sumas de comprobación generadas por los dos comandos. Si los resultados coinciden, se puede confirmar que el "Archivo de Firmware Firmado por el Equipo OneKey" se deriva del "Archivo de Firmware Pre-firmado por GitHub CI" en el repositorio de código abierto de OneKey.

7.png

Para el firmware del sistema, se agrega un resultado de firma de 1024 bytes a la versión CI del firmware, que es verificado por el gestor de arranque al iniciar el dispositivo.

Proceso de Verificación con Archivo de Firmware Almacenado en la CDN Oficial de OneKey (Sistema)

  • Abre la Terminal.

  • Ejecuta el siguiente comando (Archivo de Firmware Firmado por el Equipo OneKey):

    • shasum -a 256 (ruta del archivo)

  • Ejecuta el siguiente comando (Archivo de Firmware Almacenado en la CDN Oficial de OneKey):

    • shasum -a 256 (ruta del archivo)

  • Compara las sumas de comprobación generadas por los dos comandos. Si los resultados coinciden, se confirma la consistencia del código de los dos archivos de firmware.

6.png

Proceso de Verificación con firmware pre-firmado por GitHub CI (Bluetooth)

  • Encuentra el archivo ota.bin en tu carpeta de firmware Bluetooth pre-firmado por GitHub CI descargada.

  • Abre una terminal en la misma carpeta que ota.bin.

  • Invoca Python con el comando: python3

  • Ejecuta el siguiente comando para obtener la suma de comprobación del firmware Bluetooth pre-firmado por 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
  • Ejecuta el mismo comando con el Archivo de Firmware Bluetooth Firmado por el Equipo OneKey.

    • Nota: por favor, cambia ota.bin en el comando al nombre del Archivo de Firmware Bluetooth Firmado por el Equipo OneKey.

checksum-github-release.png
  • Compara las sumas de comprobación generadas por los dos comandos. Si los resultados coinciden, se puede confirmar que el "Archivo de Firmware Firmado por el Equipo OneKey" se deriva del "Archivo de Firmware Pre-firmado por GitHub CI" en el repositorio de código abierto de OneKey.

Proceso de Verificación con Archivo de Firmware Almacenado en la CDN Oficial de OneKey (Bluetooth)

  • Abre una terminal en la misma carpeta con el Archivo de Firmware Bluetooth Firmado por el Equipo OneKey.

  • Invoca Python con el comando: python3

  • Copia el siguiente comando:

    • 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""")

  • Cambia ota.bin al nombre de tu Archivo de Firmware Bluetooth Firmado por el Equipo OneKey descargado.

  • Ejecuta el comando para obtener la suma de comprobación.

  • Repite los pasos anteriores con tu Archivo de Firmware Bluetooth Almacenado en la CDN Oficial de OneKey descargado.

  • Compara las sumas de comprobación generadas por los dos comandos. Si los resultados coinciden, se confirma la consistencia del código de los dos archivos de firmware.

compare-ble-checksum.png
¿Ha quedado contestada tu pregunta?