Protegendo código em um AVR / Arduino e entregando atualizações

9
  1. Qual é a melhor maneira de proteger o código em qualquer dispositivo baseado em AVR contra engenharia reversa?
  2. Qual é uma maneira fácil de fornecer atualizações para os usuários finais piscarem por conta própria sem divulgar o código? (É com um carregador de inicialização que descriptografa uma imagem criptografada?)

Não me chame por promover o DRM, sou a favor de plataformas abertas - só estou curioso para saber como isso funcionaria.

stbtra
fonte
Não. Há NO WAY para inteiramente evitar a possibilidade de uma pessoa mal intencionada engenharia reversa seu hardware / software. Tudo o que as medidas anti-ER fazem é levar mais tempo para reverter.
Connor Lobo

Respostas:

9

Primeiro:

Existem fusíveis no chip que podem ser configurados para impedir que ferramentas externas leiam o código do chip. Procure os fusíveis de proteção na folha de dados e / ou na documentação do programador.

Não é perfeito, mas protege você contra ataques simples.

Segundo:

Você não pode baixar o firmware com segurança. O AVR não pode auto-programar áreas protegidas:

http://www.atmel.com/dyn/resources/prod_documents/doc1644.pdf

O melhor que você pode fazer é usar uma linguagem de token criptografada (como básica ou mais) e proteger o intérprete no chip com um gerenciador de inicialização que pode programar os tokens criptografados em uma área aberta. Durante a execução, o chip descriptografaria e executaria as instruções rapidamente.

Adam Davis
fonte
3
Se os fusíveis não são perfeitos, que tipo de attact pode contorná-lo?
11
@Anonymous - Gravando quimicamente a tampa do chip e usando microscópios eletrônicos, lasers e microssondas para visualizar, interagir e editar o silício. Custa pelo menos US $ 500, mas pode ser mais barato do que qualquer trabalho que a stbra esteja colocando no dispositivo.
Kevin Vermeer
@KevinVermeer Você quis dizer $ 500? Parece-me que seria muito mais caro que isso.
NickHalden
Adam, houve um erro, então eu apaguei o meu comentário
hulkingtickets
3

Se isso é importante e você está particularmente preocupado com os concorrentes que roubam seu código, adquira proteção IP em seus segmentos de código. Você deve analisar isso se quiser tentar ganhar dinheiro com um projeto de qualquer maneira.

Certos elementos do código podem ser patenteados (para métodos de processamento específicos e novos algoritmos) ou registrados como desenhos industriais (a aparência, o layout e a aplicação do seu código em um dispositivo). Você pode consultar um advogado de PI sobre isso.

Esboçado Fletchy
fonte
1

Se você escreveu seu próprio carregador de inicialização que aceitou dados criptografados pela porta serial, descriptografou-os e os armazenou na área de armazenamento de código, você pode ter uma atualização segura do firmware do código. Cada dispositivo pode até ter sua própria chave de descriptografia exclusiva no seu carregador de inicialização personalizado.


fonte
11
Acho que o que Adam Davis está dizendo é que, se você usa um gerenciador de inicialização (mesmo que você escreveu), não pode programar áreas protegidas por bit. Portanto, se você escreveu seu próprio gerenciador de inicialização criptografado, não poderia impedir a leitura do chip (edição 1). Parece que é isso que estou recebendo do link e da folha de dados.
Lou
se o gerenciador de inicialização e o código forem criptografados, resolveria o segundo problema, o primeiro problema será quase resolvido se ele usar uma criptografia segura o suficiente. (a velocidade do uC pode ser um gargalo).
Rick_2047
Verdade. @Adam Davis sugeriu uma linguagem de token criptografada acima.
Lou