Ich versuche, einige Arbeiten kopiergeschützt zu machen, bei denen es sich um eine bootfähige SD-Karte handelt, die einen Linux-Kernel auf einem ARM-Gerät (Raspberry Pi) bootet. Ich benutze diesen Ansatz:
- Der Ansatz verwendet eine initrd, um ein verschlüsseltes Root-Dateisystem bereitzustellen.
- Der initrd generiert das Kennwort des Dateisystems gemäß der CID der SD-Karte. (eine Hash-Funktion wird verwendet, hat sich noch nicht für md5 oder sha1 entschieden). Initrd versucht, das Dateisystem mit diesem generierten Kennwort bereitzustellen.
- Hier ist der interessanteste / verdächtigste Teil: Die initrd selbst wird mit einer benutzerdefinierten C-Funktion verschlüsselt. Grundsätzlich wird jedes Byte mit einem benutzerdefinierten Pseudozufallsgenerator XOR-verknüpft. Der Kernel wurde so geändert, dass er dieselbe Verschlüsselungsfunktion hat, die auch als Entschlüsseler fungiert.
- Das System selbst ist reduziert, sodass keine Tastatur oder kein externer Speicher verwendet werden kann. Eine einzelne App wird im Vollbildmodus ausgeführt.
Nachdem der Bootloader Kernel und initrd geladen hat, entschlüsselt der Kernel den initrd und führt sein Init-Skript aus, das das Kennwort generiert und das Root-Dateisystem bereitstellt.
Meine Frage ist: Wie einfach wäre es, dieses Setup zu brechen (um das Root-Dateisystem zu entschlüsseln und es von einer beliebigen SD-Karte booten zu lassen)? Was sind die schwächsten Teile? Wie einfach ist es, den Kernel zu dekompilieren und diese benutzerdefinierten Verschlüsselungsfunktionen zu finden?
EDIT: Hier sind einige Korrekturen, damit Sie keine Zeit mit den offensichtlichen Dingen verschwenden:
- Das Root-Gerät wird mit LUKS (aes256) verschlüsselt und der Schlüssel wird von einer HMAC-Funktion unter Verwendung der CID der SD-Karte und etwas Salz generiert.
- Der Pseudozufallsalgorithmus für die Initramfs-Verschlüsselung ist in der Tat RC4, nur der Schlüssel wird mit einer benutzerdefinierten Funktion generiert, denn wenn ich den Schlüssel nur in einem Byte-Array speichere, ist es absolut einfach, ihn abzurufen (ja, das ist Sicherheit durch Dunkelheit aber es scheint keinen anderen Weg zu geben).
- Ich verstehe, dass bei Verwendung eines SD-Kartenemulators jemand eine Kopie dieses Systems starten kann, aber das ist für mich in Ordnung, da es ziemlich schwierig ist und niemand dies tun kann (auch wird niemand mit Emulatoren umgehen wollen).