嵌入式系统中的加密

信息安全 加密 C
2021-09-10 22:31:28

接受我之前问题的答案后,我开始怀疑。

我想通过插入具有新定价的 SD 卡来更新自动售货机中的定价信息。

我必须加密文件,因为任何可以更改它的人都可以获得一分钱的饮料。当有新的定价时,库存机器的人会交换卡片。他们是最低工资,通常不是著名的黑客,但我想,他们可以通过一张卡片。

SD 卡将在一个锁定的外壳后面,任何打开它的人都可以清理现金箱并且可能不太可能刷卡。

机器中的代码很少更改,但会有固件升级选项(通过同一张 SD 卡),所以我想如果密钥被泄露,我可以通过这种方式更新密钥并将它们存储在非易失性内存中。

每台机器都有一个唯一的 CPU ID,并且知道其型号类型“饮料、糖果等”,其中所有相同类型的机器具有相同的定价结构——如果这对播种等有任何用途的话

问题:当我在 Windows 上用 Delphi 编写并在低内存 (128kB) 嵌入式系统上用 C 读取时,使用什么好的算法(文件可能不是 512 到 1,024 字节的顺序)?在这种情况下如何处理密钥?硬编码到软件中?

还有其他意见或建议吗?

1个回答

我必须加密文件,因为任何可以更改它的人都可以获得一分钱的饮料。

加密用于保密 - 以防止未经授权的各方读取文件。由于您的目标是防止人们更改文件,因此您需要的是数字签名。

有两种数字签名:非对称签名和对称签名。

当使用对称签名时,检查签名的一方需要与签名者使用相同的密钥。在您的情况下,这意味着密钥需要驻留在机器的固件中,该固件与您尝试保护的文件位于同一 SD 卡上。不是很安全。

当使用非对称签名时,检查签名的一方(即自动售货机)有一个公钥,而没有签名文件所需的私钥,这就解决了上述问题。

但这对于攻击者来说仍然是微不足道的。由于固件在 SD 卡上,并且我们假设攻击者可以修改 SD 卡,因此攻击者可以简单地修改固件,使其不检查签名。

理想的解决方案是自动售货机的硬件(例如 BIOS)在加载固件之前验证固件上的签名。世界上有嵌入式设备可以做到这一点(例如游戏机、移动设备),但自动售货机不是其中之一。

由于缺乏固件签名检查,因此无法实现真正​​的安全性。你能做的最好的事情就是混淆代码,这样黑客就更难进行逆向工程和修改。

如果您有充分的理由相信攻击者无法修改固件,那么您需要做的就是使用带有 PKCS#1 填充的 RSA 对文件进行签名(这足以满足您的需求)。可以在TurboPower LockBox中找到 Delphi 代码;OpenSSL 有 C 代码。


说了这么多,这里似乎没有太大的威胁。如果操作员降低特定机器的价格,那么您应该能够确定该机器放入机器的饮料量与您从中取出的金额之间的差异。无论如何,您都需要检查这一点,以确保机器操作员不只是简单地拿(这显然比偷几杯饮料更严重)。