Я пытаюсь защитить от копирования некоторую работу - загрузочную SD-карту, загружающую ядро Linux на устройстве ARM (Raspberry Pi). Я использую этот подход:
- Подход использует initrd для монтирования зашифрованной корневой файловой системы.
- Initrd генерирует пароль файловой системы в соответствии с CID SD-карты. (используется хеш-функция, еще не определилась с md5 или sha1). Initrd попытается смонтировать файловую систему, используя этот сгенерированный пароль.
- Теперь вот самая интересная / подозрительная часть: сам initrd зашифрован с помощью пользовательской функции C, в основном каждый байт XOR-кодируется с помощью специального генератора псевдослучайных данных. Ядро модифицировано, чтобы иметь ту же функцию шифрования, которая работает как расшифровщик.
- Сама система урезана, поэтому нет возможности использовать клавиатуру или внешнее хранилище. Одно приложение работает в полноэкранном режиме.
Таким образом, после того, как загрузчик загрузит ядро и initrd, ядро дешифрует initrd и выполняет свой скрипт init, который сгенерирует пароль и смонтирует корневую файловую систему.
Мой вопрос: насколько легко было бы сломать эту настройку (расшифровать корневую файловую систему и заставить ее загрузиться с любой SD-карты)? Какие самые слабые места? Насколько легко декомпилировать ядро и найти эти пользовательские функции шифрования?
РЕДАКТИРОВАТЬ: Вот некоторые исправления, чтобы не тратить время на очевидные вещи:
- Корневое устройство будет зашифровано с помощью LUKS (aes256), а ключ будет сгенерирован некоторыми функциями HMAC с использованием CID SD-карты и некоторого количества соли.
- Псевдослучайный алгоритм для шифрования initramfs на самом деле будет RC4, просто ключ будет сгенерирован с помощью некоторой пользовательской функции, потому что если я просто сохраню ключ в байтовом массиве, это сделает его чрезвычайно простым для извлечения (да, это безопасность через неизвестность) но другого пути, похоже, нет).
- Я понимаю, что если с помощью эмулятора SD-карты кто-то может запустить копию этой системы, это нормально для меня, потому что это довольно сложно, и никто не может этого сделать (также никто не захочет иметь дело с эмуляторами)