Как я могу защитить код своего робота?

Как я могу защитить код своего робота?

Я хочу построить робота, используя несколько мини-компьютеров, таких как Raspberry-Pi, и используя ОС Linux. Я думаю, что эти платы (RPi, NanoPi и т. д.) имеют внешнюю SD-карту для загрузки ОС, и мой код будет там (на SD-карте). Так как я могу защитить свой код от того, кто захочет его скопировать?

Под моим кодом я подразумеваю мои программы, написанные с использованием CMUsphinx, Opencv и т. д.

Есть ли возможность указать каждую SD-карту для одной указанной платы? Я имею в виду, что SD-карта nom.1 работает только на плате nom.1.

Или, может быть, поместить скрытый код на платы и SD-карты, которые используют один алгоритм и должны совпадать для запуска?

решение1

Вы не можете защитить того, кто имеет физический доступ к устройству, от копирования вашего кода. Если плата может прочитать ваш код, то и любой другой может.

Чтобы защитить код от копирования, вам нужно использовать устройство, которое имеет защищенное от несанкционированного доступа хранилище. Такое оборудование существует, но оно стоит дороже.

Вы можете поместить тест в свой код для проверки некоторого идентификатора оборудования и отказаться от запуска, если он запущен на другом аппаратном устройстве. Это делает невозможным запускточныйкопировать напрямую, но все еще легко либо изменить код, чтобы обойти проверку, либо запустить его в виртуализированной среде, которая снабжает ваш код ожидаемой им идентификацией оборудования. По сути, это способ сохранить честность честных людей, но он не остановит никого, кто захочет скопировать код.

решение2

Чтобы защитить свои данные, вам нужен ключ, любого вида, который вы можете охранять и контролировать физически и который будет отделен от ваших секретных данных. Пароль в ваших мозгах является примером такого решения - он физически охраняется владельцем, запоминающим его.

В качестве пароля может быть некий визуальный токен для вашего суперробота, например, листок бумаги со штрихкодом, который расшифровывает ваше программное обеспечение и позволяет ему работать таким образом. Стоит рассмотреть этот вариант, поскольку тот же листок бумаги может быть использован для выключения вашего творения, с помощью OpenVC и скриптов, конечно.

Менее практичный, но более простой способ реализации — иметь 2 SD-карты, одна из которых содержит ключ и используется для загрузки системы, ждет, пока вы смените SD-карту, после чего продолжит загрузку.

Вам следует рассмотреть, какinitramfsиспользуется для загрузки всей системы. Вам следует посмотреть, как создатьпользовательский initramfsи иметь возможность изменять сценарий инициализации для ожидания и расшифровки при монтировании второй карты с основной системой.

Система не идеальна, но грязна и дешева.

Это также не обязательно должно быть решение initramfs, вы можете использовать такие решения, как копирование исполняемых кодов на ramdisk с какого-нибудь usb-накопителя, который вы вставляете только для запуска своего творения, и удаляете его, когда оно начинает оживать.

Когда у вас есть секрет и ключ на одном носителе (это хитрый трюк, что-то спрятано и т. д.), его можно подвергнуть реверс-инжинирингу.

Как по мне, то решение initramfs требует меньше усилий для создания, есть много информации о том, как создавать собственные initramfs.

Связанный контент