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
⚙ Firmware del Sistema: github.com/OneKeyHQ/firmware-pro
Firmware Bluetooth: github.com/OneKeyHQ/bluetooth-firmware-pro
OneKey Classic 1S
⚙ Firmware del Sistema: github.com/OneKeyHQ/firmware-classic1s
Firmware Bluetooth: github.com/OneKeyHQ/bluetooth-firmware-classic
OneKey Classic
⚙ Firmware del Sistema: github.com/OneKeyHQ/firmware/tree/bixin_dev
Firmware Bluetooth: github.com/OneKeyHQ/bluetooth-firmware-classic
OneKey Touch
⚙ Firmware del Sistema: github.com/OneKeyHQ/firmware (rama: touch)
Firmware Bluetooth: github.com/OneKeyHQ/bluetooth-firmware-touch
OneKey Mini
⚙ Firmware del Sistema: github.com/OneKeyHQ/firmware/tree/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.
Objetivos
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.
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)
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 y haz clic en el enlace de GitHub Action.
Haz clic en el nombre del firmware en Artefactos para descargarlo (se requiere inicio de sesión en GitHub).
✔ 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.
✔ 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.
✔ Descargar Archivo de Firmware Bluetooth Pre-Firmado por GitHub CI (Sin Firmar)
Navega hasta la Versión Oficial del Firmware Bluetooth de OneKey en GitHub
OneKey Classic & Classic 1S: https://github.com/OneKeyHQ/bluetooth-firmware-classic/releases
Busca la versión de firmware que deseas verificar y haz clic en el enlace de GitHub Action.
Haz clic en el nombre del firmware en Artefactos para descargarlo (se requiere inicio de sesión en GitHub).
✔ Descargar Archivo de Firmware Bluetooth Firmado por el Equipo de OneKey (Firmado)
Navega hasta la Versión Oficial del Firmware Bluetooth de OneKey en GitHub
OneKey Classic & Classic 1S: https://github.com/OneKeyHQ/bluetooth-firmware-classic/releases
Busca la versión de firmware que deseas verificar.
Haz clic para descargar el archivo bin bajo Assets.
✔ 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.
✔ Descargar e Instalar Python
Navega a: https://www.python.org/downloads/
Descarga e instala la última versión de 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.
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.
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""")
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.
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.
