Sto cercando di proteggere dalla copia un po 'di lavoro, che è una scheda SD avviabile che avvia un kernel Linux su un dispositivo ARM (Raspberry Pi). Sto usando questo approccio:
- L'approccio utilizza un initrd per montare un filesystem di root crittografato.
- Initrd genera la password del filesystem in base al CID della scheda SD. (viene utilizzata una funzione hash, non ha ancora deciso su md5 o sha1). Initrd proverà a montare il filesystem usando quella password generata.
- Ora ecco la parte più interessante / sospetta: lo stesso initrd è crittografato usando una funzione C personalizzata, praticamente ogni byte è XOR usando un generatore pseudo casuale personalizzato. Il kernel viene modificato per avere la stessa funzione di crittografia, che funziona come decryptor.
- Il sistema stesso è ridotto quindi non è possibile utilizzare una tastiera o una memoria esterna. Una singola app viene eseguita a schermo intero.
Quindi dopo che il bootloader carica kernel e initrd, il kernel decodifica initrd ed esegue il suo script init, che genererà la password e monterà il filesystem di root.
La mia domanda è: quanto sarebbe facile interrompere questa configurazione (per decrittografare il filesystem di root e farlo partire da qualsiasi scheda SD)? Quali sono le parti più deboli? Quanto è facile decompilare il kernel e trovare quelle funzioni di crittografia personalizzate?
EDIT: Ecco alcune correzioni in modo da non perdere tempo con le cose ovvie:
- Il dispositivo root verrà crittografato con LUKS (aes256) e la chiave verrà generata da alcune funzioni HMAC utilizzando il CID della scheda SD e un po 'di sale.
- L'algoritmo pseudo casuale per la crittografia di initramfs sarà in realtà RC4, solo la chiave verrà generata utilizzando una funzione personalizzata, perché se memorizzo semplicemente la chiave in un array di byte, è molto semplice recuperarla (sì, questa è sicurezza attraverso l'oscurità ma non sembra esserci altro modo).
- Capisco che se si utilizza un emulatore della scheda SD qualcuno può avviare una copia di questo sistema, ma per me va bene, perché è piuttosto difficile e non tutti possono farlo. (Inoltre, nessuno vorrà gestire gli emulatori)