shim 是一个简单的 EFI 应用程序,它在运行时会尝试打开并执行另一个应用程序。它最初会尝试通过标准 EFI
LoadImage()和StartImage()调用来执行此操作。如果这些失败(例如,因为启用了安全启动并且二进制文件未使用适当的密钥签名),它将根据内置证书验证二进制文件。如果此操作成功并且二进制或签名密钥未列入黑名单,则 shim 将重新定位并执行二进制。
我一直在阅读以了解启用安全启动选项时验证过程是如何发生的:
vmlinuz *-generic 和 *-generic.efi.signed 的区别
我现在可以说程序是这样的:
Shim 首先由机器的固件运行。现在 shim 必须运行引导加载程序。我不明白的是 shim 如何验证二进制文件?例如,上面引用的段落指出 shim 尝试通过标准 EFILoadImage()和StartImage()调用启动另一个应用程序,如果失败,shim 尝试从内置证书验证二进制文件。那么这个内置证书属于 shim 吗?本质上,为什么 shim 被称为 Machine Owner Key Manager (MOK)?因为它有自己的密钥数据库来验证二进制文件。
简单地说,机器的固件在 NVRAM 中有自己的密钥数据库来验证二进制文件,而 shim 有自己的密钥数据库来验证二进制文件?
在验证并执行引导加载程序后,引导加载程序在哪里查找需要引导的已签名内核的密钥,例如从固件的密钥数据库中?