Firmware é o software que controla um dispositivo, como uma Hardware Wallet. A sua compilação é reproduzível quando o mesmo código-fonte, o ambiente definido e as instruções geram ficheiros previamente especificados e exatamente iguais. Não basta o programa funcionar da mesma forma: comparam-se os próprios dados. Numa publicação assinada, também é necessário definir como se trata a assinatura.
O fabricante pode publicar código que um programador consegue ler. Contudo, o que normalmente se instala na carteira é um ficheiro terminado em formato de máquina, chamado binário. A compilação liga estas duas formas. Uma pessoa independente pode repeti-la e comparar o resultado com a publicação. Procura bytes idênticos, ou seja, as mesmas unidades de dados, frequentemente através de um hash criptográfico: uma impressão calculada a partir do conteúdo. A verificação abrange resultados definidos, como o ficheiro de firmware, e não automaticamente todos os ficheiros de trabalho e registos. [1] [4]
Imagine dois programadores a verificar uma atualização. O nome do projeto não chega: precisam do mesmo commit, isto é, uma revisão exata do código. Também precisam das versões das bibliotecas usadas e do compilador, a ferramenta que converte o código para formato de máquina. As suas opções, as definições relevantes do ambiente e o modelo da carteira fazem igualmente parte do procedimento. Estes dados devem ser definidos antecipadamente ou registados durante a compilação. Caso contrário, ambos podem trabalhar corretamente e obter resultados diferentes. [1] [2]
Uma diferença não significa necessariamente que alguém alterou o funcionamento do programa. O compilador pode incluir o caminho da pasta de trabalho na informação usada para investigar erros. Se cada programador guardar o projeto num local diferente, os ficheiros podem diferir. Um caminho prescrito ou uma forma suportada de uniformizar os caminhos pode resolver o problema. Essa regra tem de ser uma parte conhecida do procedimento. Apagar diferenças inexplicadas depois de uma verificação falhada, apenas para obter uma correspondência, retira sentido à verificação. [3]
Uma assinatura digital permite verificar se um ficheiro corresponde a uma assinatura criada com a chave relevante. Associar essa chave ao fabricante é outra parte da confiança envolvida. A compilação reproduzível responde a uma pergunta diferente: corresponde o ficheiro ao código-fonte definido? As duas verificações complementam-se. Porém, a atualização oficial pode conter dados de assinatura ausentes da compilação local. Comparar os ficheiros completos sem conhecer o formato pode, por isso, revelar uma diferença mesmo quando o programa foi compilado corretamente. [5]
A documentação Trezor descreve a seleção da versão e do modelo, a compilação do firmware e a comparação com o ficheiro oficial. Como o resultado local não está assinado da mesma forma que a publicação do fabricante, o procedimento começa por colocar a zero campos de assinatura rigorosamente definidos. Os formatos antigos também diferem nos cabeçalhos, as partes iniciais dos ficheiros com informações sobre eles. A estrutura depende do modelo e da versão: não se pode aplicar a outro dispositivo uma instrução sem primeiro verificar a sua adequação. A assinatura original verifica-se separadamente; comparar cópias ajustadas não substitui esse controlo. [5]
Primeiro é necessário confirmar que foram comparados a mesma revisão, o mesmo modelo e a mesma variante de firmware. Seguem-se as ferramentas, bibliotecas e transformações prescritas para o ficheiro. Os originais e o registo das diferenças devem ser preservados. A causa pode ser um erro do ambiente ou das instruções, mas também uma alteração do programa distribuído. A divergência, por si só, não identifica responsáveis nem causas. Até ser explicada e a verificação repetida, não se deve declarar a compilação verificada. [1] [4]
Se o código publicado já tiver um erro, cada nova compilação pode reproduzi-lo fielmente. Um compilador comum não fiável também pode inserir a mesma alteração maliciosa em todos os resultados; voltar a usá-lo não equivale a verificá-lo de forma independente. Componentes binários fechados limitam o que pode ser reconstruído a partir do código disponível. E um ficheiro coincidente no computador não prova que uma carteira concreta é autêntica ou executa aquele firmware. Verificar a origem do ficheiro é uma parte importante da segurança, não uma prova completa. [6] [1]
Um relatório que diz «verificado» torna-se útil quando identifica quem fez a verificação, que revisão compilou, para que modelo e segundo que procedimento. Deve indicar os ficheiros comparados, a função de hash, os resultados e o tratamento exato dos dados de assinatura. Outras pessoas podem então examinar ou repetir o trabalho. Mais compilações independentes reduzem a dependência de um único distribuidor. Continua a ser necessário analisar o código, o processo de atualização e o próprio dispositivo. [2] [4]
Dois resultados iguais e um hash diferente
Dois programadores compilam firmware da mesma revisão para o mesmo modelo e no mesmo ambiente. Os hashes SHA-256 dos seus ficheiros coincidem, mas a versão oficial assinada tem outro. Se a documentação definir rigorosamente os campos de assinatura, aplicam a transformação prescrita a cópias e voltam a comparar. A correspondência abrange então esse conteúdo definido. A assinatura original continua a precisar de verificação própria; outras diferenças inexplicadas não podem ser simplesmente removidas.
Para ter uma visão mais completa, leia este verbete junto com Hardware Wallet, Private Key, Cold Storage, Secure Element. Também há referências a este verbete em COLDCARD RNG Incident (2026).
01Tenho de compilar pessoalmente o firmware?+
Não precisa de ser programador para compreender o resultado. Confirme, contudo, se o relatório independente identifica a versão, o modelo e os ficheiros comparados. Um hash igual não prova a ausência de erros: o mesmo código malicioso ou compilador pode produzir ficheiros iguais. Analisar o código e decidir se se confia no dispositivo continuam a ser questões distintas.
02Um hash diferente numa atualização assinada significa um ataque?+
Não automaticamente. O ficheiro pode conter dados de assinatura ou cabeçalhos diferentes que o procedimento já prevê. É necessário verificar a versão, o modelo e as instruções exatas. Uma diferença inexplicada não é, porém, uma verificação bem-sucedida e não pode ser contornada apagando dados arbitrariamente.