我正在尝试对某些工作进行复制保护,这是一个可引导SD卡,用于在ARM设备(Raspberry Pi)上引导Linux内核。我正在使用这种方法:
- 该方法使用initrd挂接加密的根文件系统。
- initrd根据SD卡的CID生成文件系统的密码。(使用了哈希函数,尚未决定是否通过md5或sha1)。Initrd将尝试使用生成的密码来挂载文件系统。
- 现在,这是最有趣/可疑的部分:initrd本身使用自定义C函数加密,基本上每个字节都使用自定义伪随机生成器进行XOR运算。内核被修改为具有相同的加密功能,可以用作解密程序。
- 系统本身已被精简,因此无法使用键盘或外部存储器。单个应用全屏运行。
因此,在引导加载程序加载内核和initrd之后,内核解密initrd并执行其init脚本,这将生成密码并挂载根文件系统。
我的问题是:破坏此设置(解密根文件系统并使其从任何SD卡启动)有多容易?最薄弱的部分是什么?反编译内核并找到那些自定义的加密函数有多容易?
编辑:这是一些更正,所以您不会在明显的事情上浪费时间:
- 根设备将使用LUKS(aes256)进行加密,并且密钥将由某些HMAC功能使用SD卡的CID和一些盐生成。
- 实际上,用于initramfs加密的伪随机算法将是RC4,只是使用某些自定义函数生成密钥,因为如果我仅将密钥存储在字节数组中,则将其检索变得非常简单(是的,这是通过默默无闻来实现的安全性)但似乎没有其他方法)。
- 我知道如果使用SD卡仿真器,某人可以复制该系统,但这对我来说是可以的,因为这样做很困难,而且没有人可以做到这一点。