secure boot简介
secure boot
是基于数字签名认证。在启动流程中,第一部分去认证第二部分,以此类推,从而建立信任链。每个组件都使用其数字签名
和public key
验证前面一部分的有效性。
以下使用i.MX平台进行说明。public key
可以存到One-Time-Programmable (OTP) fuses
里面,或者也可以将public key
hash化后(srk fuse)使其size减小并存到OTP
中。在boot启动的时候,ROM code
将存在bootloader中未hash化(srk table)的public key
hash化,然后与OTP
中hash化过的public key
进行比较(因为hash不可逆),如果相等,使用bootloader中未hash化的public key
对已签名的bootloader进行校验。以此类推。如下是i.MX6(i.MX8没有CSF)平台安全启动的流程:
在上图中:
1、在安全的环境中对SW Image
内容hash化生成摘要A
,然后使用private key
对摘要A
进行签名(采用RSA算法),得到SW Image
和Signature
;
2、将该SW Image
和Signature
烧录到flash中后去启动;
3、在启动的时候会将SW Image
内容hash化生成摘要B
(如果SW Image
没有被修改过,摘要A
和摘要B
肯定相等),使用Fuse中的public key
进行对Signature
进行验签得到摘要C
,如果摘要B
和摘要C
相等,表示认证成功,就去启动OS。
注意,这里i.MX处理器中芯片存储的是SRK
,而不是hash化后的值,所以该SRK
可以直接进行验签。
encryption加密概念
加密是为了防止信息被偷看。public key
是每个人都可以持有的,经过该public key
加密的数据,只能由持有private key
的人去解密获得最终数据。既然是加密,肯定是要我自己一个人才能解出来的,那解密肯定是私有的,也就是private key
解密。
signature签名概念
签名是为了防止信息被冒充。
经过private key
签名的数据,所有持有与之对应public key
的人都可以进行验签,如果验签通过,表示该数据没有被修改过。既然是签名,不想别人冒充我发送消息,肯定是要我自己一个人签名的才算是我发送的信息,也就是private key
签名。
上述两者的区别是:
加密的概念中,public key
负责加密数据,private key
负责解密数据,只能唯一的解密;
签名的概念中,private key
负责签名,public key
负责verify,只能唯一的签名。
数字签名概念
将内容hash化,生成摘要digest
,然后用private key
签名,生成数字签名
,用于验证数据是否被修改过。关于这部分的内容,可以详细参考数字签名是什么?
数字证书概念
在CA
中心用自己的private key
对他人的public key
和一些信息进行签名,生成数字证书
。
在证书中心(Certificate Authority,简称CA)
,为public key
做认证。CA用自己的private key
对public key
和一些相关信息一起签名,生成数字证书
(Digital Certificate)。这样就可以防止手上的public key
被修改,保证一致性。数字证书(Digital Certificate)
也可称之为公钥证书(public key certificate)
,使用CA
CA
主要是对public key
处理,保证public key
是经过认证的。