Ir al contenido principal

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

Actualizado hace más de 2 semanas

La billetera de hardware OneKey cuenta con firmware completamente de código abierto. Puedes ver el código fuente abierto del firmware 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 desde los repositorios de firmware correspondientes. Luego, los archivos son firmados por el equipo de OneKey antes de ser lanzados oficialmente.

Este artículo proporciona un método de autoverificación, comparando las sumas de verificació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.

Para conocer los métodos sobre cómo verificar la consistencia de los datos fuente de diferentes archivos utilizando la función hash criptográfica SHA-256 (comparación de sumas de verificació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 correspondiente del repositorio para compilar el código fuente. Después de una compilación exitosa, los archivos se cargan en el almacenamiento de Artefactos de GitHub, a la espera de que el equipo complete su firma múltiple interna antes de colocarse 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, solicitando 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 de 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 de OneKey" y el "Archivo de Firmware Almacenado en la CDN Oficial de OneKey".

Requisitos Previos

Firmware del Sistema Firmware Bluetooth

✔ Descargar Archivo de Firmware Pre-Firmado por GitHub CI (Sin Firmar)

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

2.png

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

  • Navega hasta la Versión Oficial del Firmware de Hardware de OneKey en GitHub: https://github.com/OneKeyHQ/firmware/releases

  • Busca 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 hasta el archivo CDN de OneKey: https://data.onekey.so/config.json

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

  • Copia el enlace en el campo "url".

  • Ábrelo 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 (Sin Firmar)

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

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

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

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

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

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

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

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

  • Ábrelo 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 de OneKey):

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

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

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

  • Compara las sumas de verificación generadas por ambos comandos. Si los resultados coinciden, se puede confirmar que el "Archivo de Firmware Firmado por el Equipo de 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 añade un resultado de firma de 1024 bytes a la versión CI del firmware, que es verificado por el gestor de arranque al encender 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 de 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 verificación generadas por ambos comandos. Si los resultados coinciden, se confirma la consistencia del código de ambos archivos de firmware.

6.png

Proceso de Verificación con Firmware Pre-Firmado por GitHub CI (Bluetooth)

  • Busca el archivo ota.bin en la carpeta descargada de Firmware Bluetooth Pre-Firmado por GitHub CI.

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

  • Invoca Python con el comando: python3

  • Ejecuta el siguiente comando para obtener la suma de verificació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 de OneKey.

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

checksum-github-release.png
  • Compara las sumas de verificación generadas por ambos comandos. Si los resultados coinciden, se puede confirmar que el "Archivo de Firmware Firmado por el Equipo de 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 de 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 por el nombre de tu Archivo de Firmware Bluetooth Firmado por el Equipo de OneKey descargado.

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

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

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

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