我想使用一些小型计算机(例如 Raspberry-Pi)并使用 Linux 操作系统来构建一个机器人。我认为这些板(RPi、NanoPi 等)有外部 SD 卡来启动操作系统,我的代码将放在那里(在 SD 卡上)。那么,如何保护我的代码免遭他人复制呢?
从我的代码来看,我的意思是使用 CMUsphinx、Opencv 等编写的程序。
有没有办法为一个指定的板指定每个SD卡?我的意思是 SD 卡 nom.1 只能在 nom.1 板上运行。
或者也许在使用一种算法并且应该匹配运行的主板和 SD 卡上放置一个隐藏代码?
答案1
您无法防止对设备有物理访问权限的人复制您的代码。如果董事会可以读取您的代码,那么其他人也可以。
为了防止代码被复制,您需要使用具有防篡改存储功能的设备。此类硬件是存在的,但价格范围较高。
您可以在代码中进行测试来验证某些硬件标识符,如果在不同的硬件设备上运行,则拒绝启动。这使得无法运行精确的直接复制,但仍然很容易更改代码以绕过检查或在虚拟化环境中运行它,该环境为您的代码提供其所需的硬件标识。基本上,这是一种让诚实的人保持诚实的方法,但它不会阻止任何想要复制代码的人。
答案2
为了保护您的数据,您必须拥有任何类型的密钥,您可以物理地保护和控制该密钥,并与您的秘密数据分开。您大脑中的密码就是这种解决方案的一个例子 - 它由所有者通过记住它来物理保护。
作为密码,您的超级机器人可能有一些视觉令牌,例如一张带有条形码的纸,它可以解密您的软件并允许其以这种方式运行。这可能值得考虑,因为同一张纸可能会被用来关闭你的创作,当然还有 openvc 和脚本的帮助。
不太实用但更容易实现的方法是有 2 个 SD 卡,其中一个包含密钥,用于启动系统,并等到您更换 sdcard 后继续启动。
你应该看看如何初始化文件系统用于启动整个系统。你应该看看如何创建自定义 initramfs,并能够修改初始化脚本以等待和解密安装您的第二张卡与主系统。
系统并不完美,但肮脏且廉价。
它也不一定是 initramfs 解决方案,您可以使用诸如将可执行代码从某个 USB 驱动器复制到 ramdisk 之类的解决方案,您插入这些 USB 驱动器只是为了启动您的创建,并在它开始活动时将其删除。
当你在一种媒体上拥有秘密和密钥(是聪明的技巧,隐藏的东西等)时,它可以被逆向工程。
对于我来说,initramfs 解决方案需要较少的精力来制作,有大量信息如何制作自定义 initramfs。