Как скрыть код на питоне на мини-компьютере от пользвователя?
Ситуация: Есть проект, написанный на питоне. Проект крутится на мини-компьютере, который размещается среди прочих контроллеров и устройств в шкафу. Проект коммерческий, и мы не хотим, чтобы пользователь, которому мы продадим шкаф, смог бы украсть код, либо внести туда изменения. Вопрос, как защитить код?
У нас есть идея зашифровать весь диск SSD мини-компьютера инструментами linux. Насколько это надежно?
не передавать код вообще)))) сделать комп клиентом для вашего личного удалённого сервера, где и будет крутиться код, а клиент будет просто гонять запросы.
Решение, которое позволит поднять стоимость реверса Вашего приложения до неприличного значения:
1. Обфусцируем код через https://github.com/dashingsoft/pyarmor .
2. Перегоняем п1. через https://github.com/Nuitka/Nuitka в сишный код.
3. Компилим п2. в машинный код.
4. Запускаем п3. exe-шник на клиенте.
Получаем:
1. Увеличение производительности.
2. Exe-шник из машинного кода.
0. Поведение засушенного таким образом кода в нештатных ситуациях непредсказуемо, и никакой информации для выяснения причин возникших проблем и исправления багов не будет.
Зато коммерческие интересы соблюдены, да.
Полное шифрование диска - надёжно. При условии, что у клиента не будет доступа внутрь по SSH и консоль. Но тогда встаёт вопрос - как расшифровывать при ребуте? Есть некоторые варианты (1, 2), но они довольно гемороечные.
Для начала было бы интересно - а этот код - он имеет ценность в отрыве от шкафа? Если нет - то идея его скрывать - так себе идея, потому что оборудование имеет свойство ломаться, в особенности если вы еще и гарантию даете на что-то.
Тут все очевидно просто. RSA-1024 бита рулит! Шифруем Python скрипт, компилим ROOTFS образ линукса. Компилим ядро линукса, со встраимаевой проверкой ROOTFS по хэшу MD5, прогнанного через RSA-1024. Хэш файла с расшифрованным совпадает? Идет комманда на запуск файла. ROOTFS модифицирован? Хэш не совпадает? Комманда на запуск не дается.
Человек при всем желании сможет только узнать публичный RSA ключ, а им можно только расшифровывать. Приватный ключ дает право защифровывать, он и не нужен юзеру как раз.
Викентий, фигня написанна там. Я кучу раз работал с системами, где есть RSA шифрование. И у всех ПУБЛИЧНЫЙ ключ расшифровывает, но не шифрует. ПРИВАТНЫЙ ключ шифрует, но не расшифровывает.