A carteira de hardware OneKey possui firmware totalmente de código aberto. Você pode visualizar o código do firmware de código aberto para produtos relevantes no repositório GitHub da OneKey. Antes que os arquivos de firmware destinados à produção em massa sejam oficialmente lançados, a equipe OneKey usa as ferramentas de compilação automatizadas do GitHub (GitHub CI) para compilar e empacotar o código fonte do firmware dos respectivos repositórios de firmware. Os arquivos são então assinados pelo pessoal interno da OneKey antes de serem oficialmente lançados.
Este artigo fornece um método de autoverificação, comparando os Checksums dos arquivos antes e depois da Multi-Sig da equipe oficial, para verificar a consistência entre os arquivos de firmware e o código de código aberto.
Para métodos de como verificar a consistência dos dados de origem de diferentes arquivos usando a função de hash criptográfica SHA-256 (comparando Checksums), consulte este artigo.
Repositórios de Firmware de Código Aberto
OneKey Pro
⚙ Firmware Padrão: github.com/OneKeyHQ/firmware-pro
Firmware Bluetooth: github.com/OneKeyHQ/bluetooth-firmware-pro
OneKey Classic 1S
⚙ Firmware Padrão: github.com/OneKeyHQ/firmware-classic1s
Firmware Bluetooth: github.com/OneKeyHQ/bluetooth-firmware-classic
OneKey Classic
⚙ Firmware Padrão: github.com/OneKeyHQ/firmware/tree/bixin_dev
Firmware Bluetooth: github.com/OneKeyHQ/bluetooth-firmware-classic
OneKey Touch
⚙ Firmware Padrão: github.com/OneKeyHQ/firmware (branch: touch)
Firmware Bluetooth: github.com/OneKeyHQ/bluetooth-firmware-touch
OneKey Mini
⚙ Firmware Padrão: github.com/OneKeyHQ/firmware/tree/mini
Processo de Lançamento do Firmware
Quando o firmware padrão oficial ou o firmware Bluetooth está pronto para lançamento, a equipe OneKey executará a Action do repositório correspondente para compilar o código de código aberto. Após a compilação bem-sucedida, os arquivos são carregados no armazenamento de artefatos do GitHub, aguardando a conclusão da Multi-Sig interna da equipe antes de serem colocados no CDN da OneKey. Após a atualização do arquivo config.json, as notificações de atualização são enviadas através do aplicativo OneKey e do site de atualização de firmware OneKey, solicitando aos usuários que atualizem seu firmware. Consulte o diagrama abaixo para o processo específico.
Alvos de Verificação
Verifique se o "Arquivo de Firmware Assinado pela Equipe OneKey" é derivado do "Arquivo de Firmware Pré-Assinado pelo GitHub CI" no repositório de código aberto OneKey.
Verifique a consistência entre o "Arquivo de Firmware Assinado pela Equipe OneKey" e o "Arquivo de Firmware Armazenado no CDN Oficial OneKey".
Pré-requisito de Verificação
Firmware Padrão Firmware Bluetooth
✔ Baixe o Arquivo de Firmware Pré-Assinado do GitHub CI (Não assinado)
Navegue até o lançamento oficial do firmware de hardware OneKey no GitHub: https://github.com/OneKeyHQ/firmware/releases
Encontre a versão do firmware que você deseja verificar e clique no link da Ação do GitHub.
Clique no nome do firmware em Artifacts para baixar (é necessário fazer login no GitHub).
✔ Baixe o Arquivo de Firmware Assinado pela Equipe OneKey (Assinado)
Navegue até o lançamento oficial do firmware de hardware OneKey no GitHub: https://github.com/OneKeyHQ/firmware/releases
Encontre a versão do firmware que você deseja verificar.
Clique para baixar o arquivo bin em Assets.
✔ Baixe o Arquivo de Firmware Armazenado no CDN Oficial da OneKey (Assinado)
Navegue até o arquivo CDN OneKey: https://data.onekey.so/config.json
Encontre a versão do firmware que você deseja verificar.
Copie o link sob o campo "url".
Abra em uma nova janela do navegador para download automático do arquivo bin.
✔ Baixe o Arquivo de Firmware Pré-Assinado do GitHub CI (Não assinado)
Navegue para o lançamento oficial do firmware de Bluetooth do OneKey no GitHub:
OneKey Classic & Classic 1S: https://github.com/OneKeyHQ/bluetooth-firmware-classic/releases
Encontre a versão do firmware que deseja verificar e clique no link da ação do GitHub.
Clique no nome do firmware em Artifacts para baixar (é necessário fazer login no GitHub).
✔ Baixe o Arquivo de Firmware Assinado pela Equipe OneKey (Assinado)
Navegue para o lançamento oficial do firmware de Bluetooth do OneKey no GitHub:
OneKey Classic & Classic 1S: https://github.com/OneKeyHQ/bluetooth-firmware-classic/releases
Encontre a versão do firmware que deseja verificar.
Clique para baixar o arquivo bin em Assets.
✔ Baixe o Arquivo de Firmware Armazenado no CDN Oficial da OneKey (Assinado)
Navegue para o arquivo CDN do OneKey: https://data.onekey.so/config.json
Encontre a versão do firmware que deseja verificar.
Copie o link no campo "ble" - "webUpdate".
Abra em uma nova janela do navegador para baixar automaticamente o arquivo bin.
✔ Baixar e Instalar o Python
Navegue para: https://www.python.org/downloads/
Baixe e instale a versão mais recente do Python.
Passos de Verificação
Abaixo estão os passos de verificação para os dois alvos definidos anteriormente:
Firmware Padrão Firmware Bluetooth
Processo de Verificação com firmware pré-assinado do GitHub CI
Abra o Terminal.
Execute o comando abaixo (Arquivo de Firmware Assinado pela Equipe OneKey):
tail -c +1024 /caminho/para/(caminho do arquivo) | shasum -a 256
Execute o comando abaixo (Arquivo de Firmware Pré-Assinado do GitHub CI):
tail -c +1024 /caminho/para/(caminho do arquivo) | shasum -a 256
Compare os Checksums gerados pelos dois comandos. Se os resultados coincidirem, pode-se confirmar que o "Arquivo de Firmware Assinado pela Equipe OneKey" é derivado do "Arquivo de Firmware Pré-Assinado pelo GitHub CI" no repositório de código aberto OneKey.
Para o firmware padrão, um resultado de assinatura de 1024 bytes é adicionado à versão de firmware do CI, que é verificado pelo bootloader na inicialização do dispositivo.
Processo de Verificação com arquivo de firmware armazenado no CDN oficial da OneKey
Abra o Terminal.
Execute o comando abaixo (Arquivo de Firmware Assinado pela Equipe OneKey):
shasum -a 256 (caminho do arquivo)
Execute o comando abaixo (Arquivo de Firmware Armazenado no CDN Oficial da OneKey):
shasum -a 256 (caminho do arquivo)
Compare os Checksums gerados pelos dois comandos. Se os resultados coincidirem, a consistência do código dos dois arquivos de firmware é confirmada.
Processo de Verificação com firmware pré-assinado do GitHub CI (Bluetooth)
Encontre o arquivo ota.bin na pasta do firmware Bluetooth pré-assinado do GitHub CI que você baixou.
Abra um terminal na mesma pasta com ota.bin.
Invoque o Python com o comando:
python3
Execute o comando abaixo para obter o checksum do firmware Bluetooth pré-assinado do 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""")
Execute o mesmo comando com o Arquivo de Firmware Bluetooth Assinado pela Equipe OneKey.
Nota: por favor, altere ota.bin no comando para o nome do Arquivo de Firmware Bluetooth Assinado pela Equipe OneKey.
Compare os checksums gerados pelos dois comandos. Se os resultados coincidirem, pode-se confirmar que o "Arquivo de Firmware Assinado pela Equipe OneKey" é derivado do "Arquivo de Firmware Pré-assinado do GitHub CI" no repositório de código aberto do OneKey.
Processo de Verificação com arquivo de firmware armazenado no CDN oficial da OneKey (Bluetooth)
Abra um terminal na mesma pasta com o Arquivo de Firmware Bluetooth Assinado pela Equipe OneKey.
Invoque o Python com o comando:
python3
Copie o comando abaixo:
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""")
Altere ota.bin para o nome do Arquivo de Firmware Bluetooth Assinado pela Equipe OneKey que você baixou.
Execute o comando para obter o checksum.
Repita os passos acima com o Arquivo de Firmware Bluetooth Armazenado no CDN Oficial do OneKey que você baixou.
Compare os checksums gerados pelos dois comandos. Se os resultados coincidirem, a consistência do código dos dois arquivos de firmware é confirmada.