为什么嵌入式系统将服务器的公共证书存储在 ROM 中?

信息安全 tls 证书 公钥基础设施
2021-08-28 19:30:10

在家庭自动化场景中,智能网关可以将众多智能设备与互联网连接起来。在许多情况下,服务器的公共证书在制造期间存储在嵌入式系统的 ROM 中。

例如,在AlertMe网关的情况下,每个网关设备都制造有唯一的 ID。此外,它还持有 ROM 中的 AlertMe 服务器的公共证书。首次启动时,网关设备生成一个随机 RSA 密钥对,连接到 AlertMe 服务器,验证服务器的身份(使用 ROM 公共证书),并为服务器提供其随机公钥。

我的问题是,由于在 SSL/TLS 连接中服务器会将其证书发送到网关,为什么网关必须在首次启动之前将公共证书存储在 ROM 中。如果如其所说,是为了验证目的,那么网关如何验证服务器的身份呢?它是否只是将 ROM 中的网关证书与 SSL 握手时发送的服务器证书进行比较?嵌入式系统不能联系CA,验证服务器的身份吗?

此外,在首次启动时,网关将生成 RSA 密钥对,然后生成证书。在基于 Linux 的网关/嵌入式系统中存储密钥的最安全位置在哪里?

2个回答

对于您的问题,为什么将服务器证书保存在 ROM 中:

保存的证书将根据服务器发回的证书进行检查。这是您的正确假设。因此,此时只有一个服务器是受信任的。

您问为什么设备不简单地连接到 CA。这将是另一种工作方式。但即便如此,CA 根证书也必须嵌入 ROM 中。这是必需的,因为否则您将如何连接到 CA?您还需要 SSL/TLS 来连接到 CA,否则所有 PKI 都将毫无意义。因此,至少一个证书必须嵌入 ROM 中。

所有关于证书的业务都是关于一个独特的目标:确保对等方的公钥是正确的。如果设备可以“天生”(即从 ROM)知道服务器的公钥,那就更好了;设备甚至不必查看服务器发送的证书。更通用但更复杂的模型是当设备知道“根”CA 公钥并执行X.509 证书验证时。这就是基本 PC 所发生的情况:操作系统和/或浏览器带有一组先验已知的根 CA 公钥,并且每个证书都从这些根 CA 进行验证。

不管你怎么说,设备必须从某个地方开始。信任不是凭空实现的;它通过签名传输,从知道签名者的公钥到已经签名的公钥。必须有一些初始信任,对于设备来说,就是它的 ROM。这被恰当地称为信任锚将预期服务器的公钥作为信任锚是最不灵活的模型(因为这会阻止服务器更改其公钥,以免新密钥不被现有设备接受),但也是最简单的(客户端的证书解码代码赢得如果客户端甚至不尝试解码任何证书,则没有任何错误)。


至于私钥的存储,设备会放在可以的地方大多数设备没有太多选择:该密钥必须在板上生成(因此它不能进入​​ ROM)并且必须抵抗断电(因此它不能只留在 RAM 中)。这指向一些 EEPROM 或 Flash 芯片。无论存储在何处,都必须可以从设备软件中读取,因此如果该软件被黑客入侵,关键是 toast。

具有强大安全要求的设备(例如支付终端)通常会嵌入一个防篡改芯片,如果检测到入侵,该芯片将进行数字自杀(一个带有锂电池的小型静态 RAM 芯片,始终开启)。这种存储对逻辑入侵没有任何作用,但它至少可以防止物理攻击中的密钥盗窃。