[aviso: sou um profissional de segurança / criptografia e lido diariamente com questões de arquitetura de segurança.]
Você se deparou com o problema de armazenar credenciais de forma que um processo autônomo possa acessá-las, mas um invasor não. Este é um problema bem conhecido e muito difícil de resolver.
Se o seu dispositivo IoT tiver um keystore de hardware embutido na placa-mãe, como alguns TPMs, ou o equivalente ao Keystore suportado por hardware Android ou ao Apple Secure Enclave, você poderá usá-lo.
Nos servidores tradicionais, você pode usar HSMs ou cartões inteligentes, mas a única solução de software completa que eu conheço é derivar uma chave AES de algum tipo de "impressão digital de hardware" criada combinando números de série de todos os dispositivos de hardware. Em seguida, use essa chave AES para criptografar as credenciais. Um processo em execução no mesmo servidor pode reconstruir a chave AES e descriptografar as credenciais, mas depois que você extrai o arquivo do servidor, é essencialmente descriptografável.
A IoT lança uma chave nisso por dois motivos:
A suposição de que os números de série do hardware são únicos provavelmente não se sustenta e
Ao contrário dos servidores, os atacantes têm acesso físico ao dispositivo, portanto, provavelmente podem obter um shell no dispositivo para executar o programa de descriptografia.
Tanto a criptografia de hardware (TPMs) quanto a criptografia de "impressão digital de hardware" são ofuscação, na melhor das hipóteses, porque, fundamentalmente, se um processo local pode descriptografar os dados, um invasor capaz de executar esse processo local também pode descriptografá-lo.
Portanto, o truque padrão parece que não funciona aqui. A primeira pergunta que você precisa fazer é:
- Qual é o meu modelo de ameaça / onde esse projeto se situa
Secure <--> Convenient
?
Por fim, acho que você precisa decidir isso security > convenience
e solicitar que um humano insira as credenciais após cada inicialização (usando algo como a resposta de @ BenceKaulics ), ou você decide isso security < convenience
e apenas coloca as credenciais no dispositivo, talvez usando alguma ofuscação, se você sinto que faz a diferença.
Esse é um problema difícil, dificultado pela natureza dos dispositivos IoT.
Para ser completo, a solução industrial completa para esse problema é:
- Dê a cada dispositivo IoT uma chave pública RSA exclusiva no momento da fabricação. Grave essa chave pública em um banco de dados com o número de série do dispositivo.
- Armazene as credenciais confidenciais em um servidor adequado, vamos chamá-lo de "gateway".
- Quando um dispositivo IoT se autentica no gateway (usando sua chave RSA), o gateway abre uma sessão para ele usando as credenciais armazenadas e entrega o token da sessão de volta ao dispositivo.
- Para melhor segurança, o gateway é um gateway físico (ou VPN), para que todo o tráfego do dispositivo IoT passe pelo gateway e você tenha mais controle sobre as regras e outras coisas do firewall - idealmente impedindo que o dispositivo seja direto (sem VPN) acesso à internet.
Dessa forma, o invasor que compromete um dispositivo pode abrir uma sessão, mas nunca tem acesso direto às credenciais.