Como proteger a memória flash dos MCUs RA (ARM Cortex M33) contra leitura
Introdução
Durante a produção do produto eletrônico, é desejável que, após a gravação do firmware (binário) no microcontrolador, que haja uma proteção na memória contra leitura. Assim, o programa desenvolvido e gravado não fica acessível a concorrentes e/ou hackers mal intencionados.
Para proteger a memória dos microcontroladores da família RA da Renesas, mais especificamente os que embarcam um core Arm Cortex-M33, é necessário usar o Device Lifecycle Management (DLM). Tanto a capacidade de debug quanto a interface de programação serial dependem das configurações dele [1]. É possível verificar os estados de Device Lifecycle abaixo [2]:
As transições de um estado para o outro são descritas a seguir:
Veja que é possível fazer transições reversas, como passar do estado DPL
(Deployed) de memória protegida contra leitura, de volta para o SSD
(Secure Software Development) com acesso de leitura de memória, via um processo de autenticação por chaves [3] [4]. Se não tiver feito o processo de autenticação por chaves, ainda é possível recuperar o acesso de escrita e leitura (revertendo a transição), mas toda a memória do MCU é apagada. Assim, protegendo o conteúdo do programa.
Exemplo
Veja abaixo um passo a paso de como fazer a gravação de um firmware de exemplo e fazer a proteção da memória sem injeção de chaves. Para isso vamos usar o Renesas Flash Programmer para:
- Gravar o firmware de exemplo
- Verificar que é possível fazer a leitura do programa gravado
- Fazer a transição de
SSD
paraNSECSD
e ainda paraDPL
- Verificar a proteção de memória
- Reveter para o estado
SSD
e verificar que a memória foi apagada
Gravar o firmware de exemplo
Siga os passos do artigo Primeiros passos com o Renesas Flash Programmer para fazer a gravação do firmware de exemplo que pisca os LEDs da placa EK-RA4M2.
Verificar que é possível fazer a leitura do programa gravado
Siga os passos do artigo Como ler a memória do microcontrolador com o Renesas Flash Programmer para fazer a leitura do programa gravado.
Fazer a transição de SSD
para NSECSD
e ainda para DPL
Vá em Target Device
» Read Device Information
, e verifique que o microcontrolador está no estado inicial SSD
(ou CM
).
Vá em Target Device
» DLM Transition...
, e escolha NSECSD
.
Veja agora com o Read Device Information
que o dispositivo está em NSECSD
:
Seguindo o mesmo processo, vá em Target Device
» DLM Transition...
, e agora escolha DPL
. E verifique também com o Read Device Information
:
Verificar a proteção de memória
Apesar de ser possível fazer a leitura das informações gerais do dispositivo com o Read Device Information
, não é mais possível fazer a leitura do firmware que foi programado. Assim como feito anteriormente, vá em Target Device
» Read Memory...
e tente fazer a leitura dos primeiros 8KB (0x2000) da Code Flash. E, como esperado, não é possível fazer a leitura do programa gravado:
Error(E100000E): A protection error occurred in the device. (Command: 15, Response: D5) Operation failed
Reveter para o estado SSD
e verificar que a memória foi apagada
Já que não configuramos o processo de autenticação por chaves, para voltarmos para o estado inicial SSD
, é necessário ir em Target Device
» Initialize Device
:
Após esse processo, os LEDs param de piscar, indicando que a memória do dispositivo foi apagada. E, ao fazermos um último Read Device Information
, verificamos que o dispositivo voltou ao estado SSD
, podendo ser programado de novo.