在嵌入式系统中加密文件(私钥等)

Oli*_*ier 8 security embedded

我正在研究在 Linux 上运行的嵌入式设备。该设备与服务器通信并使用证书和私钥向其发送数据。

当我们分发设备时,我担心某些邪恶的人可能会通过入侵嵌入式设备的文件系统来窃取该私钥,并试图篡改我们服务器上的数据。

即使我对该私钥进行加密,由于正在运行的程序需要解密该密钥,他们仍然可以在文件系统的某处找到解密密钥。

更改文件的权限不是解决方案,因为我们必须固有地分发设备,因此,任何人都可以物理访问它。

我很高兴听到任何保护私钥而不阻止正在运行的程序使用它的建议。谢谢你。

编辑:我们使用在英特尔 Edison 上运行的 Yocto。

Gil*_*il' 6

如果您的硬件在物理上不安全,那么您在软件中所做的任何事情都不会为您提供物理安全。

除非您有一个单独的、安全的密钥位置,否则不要打扰加密。当有人在启动时键入(派生密钥的密码)时,计算机上的全盘加密非常有用。如果密钥位于单独的、受物理保护的存储区域(例如 TPM 或智能卡)上,也可以进行全盘加密。

据我所知,Intel Edison 没有这样的独立存储区域。此外,爱迪生板可以从 SD 卡或 USB 记忆棒启动,因此任何可以物理访问 USB 端口的人都可以从 eMMC 中提取所有数据。

USB 启动似乎依赖于 U-Boot,因此用禁用 USB 的自定义映像替换官方 U-Boot 映像可能会强制从 eMMC 上的操作系统启动。我实际上不知道这是否有可能,我只是没有足够的信息来反驳它。

即使使用自定义引导加载程序,也可以通过 USB 连接重新刷新电路板。这会覆盖 eMMC 的一部分,但不会覆盖整个内容,至少在闪存中断的情况下是这样。无论您尝试将密钥放在 eMMC 的哪个位置,小心的攻击者都可以避免覆盖它。

如果您的服务器需要信任来自设备的数据,您正在寻找的功能称为“安全启动”(或“可信启动”或“验证启动”或其他一些名称,术语未标准化)。对于英特尔处理器,这是通过 TPM 实现的(但嵌入式主板很少有 TPM)。对于 ARM 处理器,这是通过 TrustZone 加上一些制造商相关工具来实现的。两种技术都无法抵御可以花费大量资金的对手,但破解它们至少需要一个烙铁,而不仅仅是一个 U 盘。