苹果|嵌入式开发:保护嵌入式系统的要素2—信任根 (RoT)

苹果|嵌入式开发:保护嵌入式系统的要素2—信任根 (RoT)

在嵌入式开发中 , 当我们启动嵌入式系统并开始启动过程时 , 我们希望确保我们的嵌入式系统使用合法软件启动 。 许多系统面临的问题是确定设备上运行的第一个代码是否真的是他们的代码并且是真实的 。 当然 , 系统可以成功启动 , 但如果首先运行的是某个恶意软件 , 而其他软件都信任该代码 , 会发生什么情况?信任根确保从执行重置向量的那一刻起 , 我们正在运行正确的软件 。
定义信任根
信任根是一个不可变的过程或身份 , 用作信任链中的第一个实体 。 因此 , 没有祖先实体可以为信任根的初始代码和数据状态提供可信任的证明(以摘要或其他方式) 。 换句话说 , 嵌入式开发人员的信任根是一个不可更改的身份和最小的软件集 , 可以成功地验证自己并促进系统上的安全操作 。
我们应该考虑上述定义中的几个关键点 。 首先 , 不可变的过程或身份是无法改变的 。 在为我们的产品选择微控制器时 , 我们必须确保我们可以永久“burn-in”信任根使用的重要信息 , 例如公司私钥 , 一旦进入微控制器 , 我们不希望这些信息是可变的 。
其次 , 我们希望能够证明系统 。 证明允许我们向系统发送要执行的操作 , 然后它将使用其私钥进行签名 。 通过访问公钥 , 我可以验证操作结果并识别设备 。
【苹果|嵌入式开发:保护嵌入式系统的要素2—信任根 (RoT)】为什么要使用信任根?
信任根从系统引导确定授权软件正在系统上运行 。 它充当基础可信软件 , 然后验证和验证加载的下一个软件 , 从而建立信任链 。 如果没有信任根 , 系统很容易受到攻击 , 因为没有任何东西可以验证加载的固件 。
建立信任根可能有点棘手 。 例如 , 如果合同制造商建立了一个典型的漏洞 , 则可能会出现这种漏洞 。 但是 , 他们完全有可能绕过嵌入式开发人员的密钥并将他们的信任根放在微控制器上 , 允许他们对系统做任何他们想做的事情!

信任根能够防止以下活动:
设备克隆
加载未经授权的固件
加载恶意软件
建立信任根
为了避免这些类型的问题 , 创建一个基于硬件的信任根就很重要 。 如果可能 , 让正在使用的微控制器供应商首先建立信任根 。 假设信任根是由微控制器供应商在微控制器发货时设置的 。 在这种情况下 , 它已经有一个不可变的信任根 , 可以证明它的身份并且它来自那个制造商!信任根也帮助避免假冒微控制器!
使用供应商建立的信任根 , 我们可以使用现有的信任根将我们的信任根转移到设备 。 此外 , 当我们将信任根转移到我们公司时 , 我们可以为微控制器提供描述系统应该如何运行的安全策略和密钥!
建立信任根至关重要 , 因为它将在安全设置中燃烧 , 例如:
启用或禁用调试端口
允许或不允许固件更新
加密固件更新或未加密
启用或禁用固件回滚
安全设置还将建立允许信任链中的各种软件组件运行的安全上下文 。
通过这些初始设置 , 嵌入式开发人员可以确保他们在系统上运行的第一个代码是安全的、不可变的 , 并且能够验证之后加载的所有软件 。
建立信任根对嵌入式系统至关重要 。 信任根用于验证系统上加载的所有附加软件 , 它是信任链中成功启动嵌入式系统的第一个基础链接 。 信任根应该是基于硬件且不可变的 , 信任根不能被篡改 , 然后允许系统检测以后加载的软件是否可以信任 。 开发人员应该寻找内置基于硬件的信任根的微控制器解决方案 。