Android Security boot


一般来讲,移动设备主要用来实现以下安全特性:

1.      禁止烧写未经授权的官方固件;

2.      禁止运行非经授权的官方固件;

3.      禁止非法追踪和调试代码;

4.      对单个芯片设定IMEISIM保护和其他特性证书;

5.      禁止设备固件降级,禁止诸如A设备的固件烧写到B设备的交叉写入;

6.      运行时候,无法被观测的可信运行环境;

7.      安全测试和调试功能;

8.      DRM

       一般安全启动都会实现了上述的123457项安全特性。



    在实现安全特性时候,不能把大量数据解压缩到RAM,不应产生大的延迟。所以,

一般来说,对image等文件进行保护时候,一般会首先用hash算法,把image文件生成固定bit的信息摘要,然后使用数字签名技术对摘要进行签名,从而防止大量数据加密耗费时间。此步骤需要在pc端提供工具,比如sign,用来生成公钥和私钥,使用生成的私钥文件进行签名,最终生成image+签名+证书的image文件。其中,证书包括客户的公钥信息以及是否开启debug功能的字段。

对于特定客户来说,客户使用sign工具生成公私密钥对后,试用版hash算法把公钥信息hash化,然后发送给芯片公司,芯片公司在芯片出厂时候,把公钥或者其hash信息写入efuse相应字段。

上述加密工作是在pc端编译生成image文件的时候完成,一般在Makefile中调用命令实现。

一般芯片内部含有rom,开机启动时候自动运行,主要是把二级boot-loader(本文档中用SPL image代替)加载到内部ram运行。

    大数据的情况下,生成信息摘要的哈希算法耗费时间较多,所以应该选择安全性好,速度快,消耗内存少的hash算法,hash算法经过了MD5,SHA0, SHA1,SHA2等算法,目前已经进化到了BLAKE2 算法,此处使用Blake2 hash 算法。

    数字签名算法,应该选择安全性能高,速度快,所需内存少的算法,目前数字签名算法正越来越多的按照RSA->DSA->ECDSA->ED25519的顺序演进,诸如苹果等公司,在保护手机的私人数据时候,同样采用了ED25519算法,ssh也开始转向安全性能更高的ED25519。基于此,数字签名算法选择了ED25519.


在生成image文件的时候,使用sign工具,会生成包含公钥和安全debug标志的证书,证书同样会使用私钥进行加密,然后把证书添加在SPL image后面。

Secure boot步骤如下:

1.   Rom code读取SPL image;

2.   Rom code读取Efuse secure bit,如果不采用secure boot,则直接运行读取的SPL image(注意:安全模式选择不能通过pin管脚,因为太容易被改写);

3.   Rom code 读取附加在image后面的证书,然后通过证书的magic判断证书是否存在,如果不存在的话,直接返回错误,否则使用pub keyhash,和efuse中读取的hash值判断,如果不一致,返回错误,一致的话,使用证书中的pub key 验证证书是否位有效证书;

4.   如果证书无效,返回错误,否则使用证书中的pub key验证SPL image是否有效。如果有效,则运行。

secure boot流程如图所示:


你可能感兴趣的:(Android Security boot)