Я намагаюся захистити від копіювання певну роботу, яка є завантажувальною SD-картою, яка завантажує ядро Linux на пристрої ARM (Raspberry Pi). Я використовую такий підхід:
- Підхід використовує initrd для монтажу зашифрованої кореневої файлової системи.
- Інітдр генерує пароль файлової системи відповідно до CID картки SD. (використовується хеш-функція, ще не визначившись над md5 або sha1). Initrd спробує змонтувати файлову систему за допомогою створеного пароля.
- Тепер ось найцікавіша / підозріла частина: Сам initrd шифрується за допомогою користувацької функції C, в основному кожен байт XOR'ed, використовуючи створений на замовлення псевдо випадковий генератор. Ядро модифіковане так, щоб мати ту саму функцію шифрування, яка працює як дешиптор.
- Сама система знімається, тому немає можливості використовувати клавіатуру або зовнішнє сховище. Одне додаток працює на весь екран.
Отже, після завантаження завантажувача ядра та initrd, ядро розшифровує initrd та виконує його скрипт init, який створить пароль та змонтує кореневу файлову систему.
Моє питання: Наскільки легко було б порушити цю установку (розшифрувати кореневу файлову систему та зробити її завантаженням із будь-якої SD-карти)? Які найслабкіші частини? Наскільки легко декомпілювати ядро та знайти ці власні функції шифрування?
EDIT: Ось деякі виправлення, щоб ви не витрачали час на очевидні речі:
- Кореневий пристрій буде зашифровано LUKS (aes256), і ключ буде згенерований деякою функцією HMAC, використовуючи CID SD-карти та трохи солі.
- Псевдослучайний алгоритм шифрування initramfs буде насправді RC4, просто ключ буде генерований за допомогою якоїсь спеціальної функції, тому що якщо я просто зберігаю ключ у масиві байтів, це робить його мертвим простим його отримання (так, це безпека через неясність але іншого способу, здається, немає).
- Я розумію, що за допомогою емулятора SD-карти хтось може зробити копію цієї системи, але це зі мною все в порядку, оскільки це досить складно, і ніхто не може це зробити (також ніхто не захоче мати справу з емуляторами)