对于受信任的引导(或经过身份验证的引导或安全引导,或者您想怎么称呼它),您需要一个受完整性保护的信任根。它不需要是“超级机密”扇区,它需要是“超级屏蔽”扇区。ROM 符合要求。
实际上,设备制造商喜欢在 ROM 中放置尽可能少的代码,因为他们不希望在设备发货前几个月停止更新代码。因此,该代码通常只是初始化一些核心设备(例如,使 MMU 成型),从存储介质加载前几个扇区,根据存储在 ROM 中的公钥验证它们的加密签名,然后将执行转移到该代码. 如果签名不匹配,ROM 代码可能允许用户上传备用启动映像(通常通过 USB)。
第一个非 ROM 引导代码通常比 ROM 代码复杂得多:它通常需要知道如何管理内存、访问各种存储设备、可能读取文件系统、至少具有基本的用户界面等等。因此,在实践中,所有这些代码错误,以及(或在启动链中的后期)是 iPhone 越狱的方式。一些制造商,例如苹果,确实非常关心控制启动映像;这并不意味着他们在一个坚定的社区中取得了成功。
此外,即使已签名的引导映像已保存,操作系统本身也过于复杂,无法承受很长时间的攻击。签署整个操作系统是不切实际的,因为除了最基本的手机和 PDA 之外的所有用户都希望能够安装他们自己的应用程序(操作系统往往有根漏洞)。操作系统通常可以做它想做的几乎所有事情,除了如果它天真地覆盖启动映像,设备将无法启动。如果您想运行不同的操作系统,您可以使用原始操作系统作为启动真实操作系统的起点。
速度是另一个因素:验证 100kB 引导加载程序的真实性在现代智能手机上只是一个小问题,但验证多 GB 操作系统的真实性或完整性太慢,无法立即完成。增量验证还会减慢磁盘读取速度,并且需要目前尚未广泛使用的文件系统支持。