Estou tentando proteger alguns trabalhos, que é um cartão SD inicializável, inicializando um kernel Linux no dispositivo ARM (Raspberry Pi). Estou usando esta abordagem:
- A abordagem usa um initrd para montar um sistema de arquivos raiz criptografado.
- O initrd gera a senha do sistema de arquivos de acordo com o CID do cartão SD. (uma função hash é usada, ainda não decidiu sobre md5 ou sha1). O Initrd tentará montar o sistema de arquivos usando a senha gerada.
- Agora, aqui está a parte mais interessante / suspeita: O initrd em si é criptografado usando uma função C personalizada, basicamente cada byte é XOR usando um gerador pseudo-aleatório personalizado. O kernel é modificado para ter a mesma função de criptografia, que funciona como decodificador.
- O sistema em si é simplificado, portanto não há como usar um teclado ou armazenamento externo. Um único aplicativo é executado em tela cheia.
Portanto, depois que o carregador de inicialização carrega o kernel e o initrd, o kernel descriptografa o initrd e executa seu script init, que irá gerar a senha e montar o sistema de arquivos raiz.
Minha pergunta é: Quão fácil seria interromper essa configuração (descriptografar o sistema de arquivos raiz e inicializá-lo a partir de qualquer cartão SD)? Quais são as partes mais fracas? Quão fácil é descompilar o kernel e encontrar essas funções de criptografia personalizadas?
EDIT: Aqui estão algumas correções para que você não perca tempo com as coisas óbvias:
- O dispositivo raiz será criptografado com LUKS (aes256) e a chave será gerada por alguma função HMAC usando o CID do cartão SD e um pouco de sal.
- O algoritmo pseudo-aleatório para criptografia initramfs será de fato RC4, apenas a chave será gerada usando alguma função personalizada, porque se eu apenas armazenar a chave em uma matriz de bytes, será mais fácil recuperá-la (sim, isso é segurança através da obscuridade) mas parece não haver outro caminho).
- Entendo que, se estiver usando um emulador de cartão SD, alguém pode iniciar uma cópia deste sistema, mas tudo bem comigo, porque é muito difícil e ninguém pode fazer isso. (Também ninguém quer lidar com emuladores)