We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Platform Key
Key Exchange Key
合规数据库
禁止数据库
db 及 dbx 存放的是记录以及由某个 KEK 对该记录进行签名的数据,记录可以是:
PK 由平台所有者持有,比如联想 KEK 由PK签名
db/dbx 数据进行更新时,bios需要进行授权验证,验证该更新数据是否是由某个 KEK 进行签名,若验证通过,则将该条记录及其对应的签名数据存入 db/dbx。
MSCApri 以及 UEFICApri 可以对厂商提供的驱动进行签名。
比如某个显卡厂商Card
使用自己的私钥 (Cardpri) 对自己的驱动进行签名生成 CardSign,(其证书为 CardCert)。
找 UEFICApri 对自己的数据(CardSign、CardCert)进行签名,生成 ((CardSign,UEFICApri_CardSign_Sign )(CardCert,UEFICApri_CardCert_Sign )) 。
调用bios接口进行更新,更新数据为 ((CardSign,UEFICApri_CardSign_Sign )(CardCert,UEFICApri_CardCert_Sign ))
bios 中有 UEFICApub 对应的 KEY (UEFIKEKpub)
bios 遍历 KEK,使用KEK对 ((CardSign,UEFICApri_CardSign_Sign )(CardCert,UEFICApri_CardCert_Sign ))进行验签
验签通过,将条目 (CardSign,UEFICApri_CardSign_Sign)、(CardCert,UEFICApri_CardCert_Sign)存入 db
按照上述校验流程,显卡厂商也可以不使用自己的私钥对驱动签名,而只是生成一个哈希值。 再使用 UEFICApri 对哈希值进行签名生成 (CardHash, UEFICApri_CardHash_Sign)。
要将该哈希及对应签名信息更新到 db 时,仍然要使用 KEK 验证 UEFICApri_CardHash_Sign。
使用hash值的efi文件在启动时,只需要验证该 efi 文件的hash 是否匹配 db/dbx 中的某个hash。
dbx内容与db中数据格式一致,匹配dbx中数据则认为验证失败
市面上已经有大量使用 MSCApri 以及 UEFICApri 签名的 efi。
要加入该体系,只需要,使用 PKpri 对 MSCApub 及 UEFICApub 进行签名,生成对应的两个 KEK: MSKEKpub UEFIKEKpub。
将该两个KEK 加入 bios ,即可以支持已签名的 efi。
比如grub
OS Loader 使用 MSCApri 签名,对应的 MSCApub 存储于 db,同时 MSKEKpub 也内置于 bios。
db/dbx 每条记录都是 数据以及使用 KEK 对该数据的签名。 bios 启动时,逐条遍历记录并验证签名。
通过使用分级密钥体系
The text was updated successfully, but these errors were encountered:
No branches or pull requests
uefi security boot 实现细节
密钥体系
PKpub
KEKpub
DB
DBX
KEY的生成过程
db 及 dbx 存放的是记录以及由某个 KEK 对该记录进行签名的数据,记录可以是:
PK 由平台所有者持有,比如联想
KEK 由PK签名
db/dbx 数据进行更新时,bios需要进行授权验证,验证该更新数据是否是由某个 KEK 进行签名,若验证通过,则将该条记录及其对应的签名数据存入 db/dbx。
MSCApri 以及 UEFICApri 可以对厂商提供的驱动进行签名。
驱动更新流程
比如某个显卡厂商Card
使用自己的私钥 (Cardpri) 对自己的驱动进行签名生成 CardSign,(其证书为 CardCert)。
找 UEFICApri 对自己的数据(CardSign、CardCert)进行签名,生成 ((CardSign,UEFICApri_CardSign_Sign )(CardCert,UEFICApri_CardCert_Sign )) 。
调用bios接口进行更新,更新数据为 ((CardSign,UEFICApri_CardSign_Sign )(CardCert,UEFICApri_CardCert_Sign ))
bios 中有 UEFICApub 对应的 KEY (UEFIKEKpub)
bios 遍历 KEK,使用KEK对 ((CardSign,UEFICApri_CardSign_Sign )(CardCert,UEFICApri_CardCert_Sign ))进行验签
验签通过,将条目 (CardSign,UEFICApri_CardSign_Sign)、(CardCert,UEFICApri_CardCert_Sign)存入 db
efi 文件无签名数据的情况
按照上述校验流程,显卡厂商也可以不使用自己的私钥对驱动签名,而只是生成一个哈希值。
再使用 UEFICApri 对哈希值进行签名生成 (CardHash, UEFICApri_CardHash_Sign)。
要将该哈希及对应签名信息更新到 db 时,仍然要使用 KEK 验证 UEFICApri_CardHash_Sign。
使用hash值的efi文件在启动时,只需要验证该 efi 文件的hash 是否匹配 db/dbx 中的某个hash。
驱动校验流程
dbx
dbx内容与db中数据格式一致,匹配dbx中数据则认为验证失败
MSCApri 与 UEFICApri
市面上已经有大量使用 MSCApri 以及 UEFICApri 签名的 efi。
要加入该体系,只需要,使用 PKpri 对 MSCApub 及 UEFICApub 进行签名,生成对应的两个 KEK: MSKEKpub UEFIKEKpub。
将该两个KEK 加入 bios ,即可以支持已签名的 efi。
OS Loader
OS Loader 使用 MSCApri 签名,对应的 MSCApub 存储于 db,同时 MSKEKpub 也内置于 bios。
db/dbx 防篡改
db/dbx 每条记录都是 数据以及使用 KEK 对该数据的签名。
bios 启动时,逐条遍历记录并验证签名。
概括
通过使用分级密钥体系
The text was updated successfully, but these errors were encountered: