• 1、Efuse是什么
  • 2、OTP是什么
  • 3、什么是Secure Boot
  • 4、CPU内部安全机制
    • 4.1 bootROM
    • 4.2 iRAM
    • 4.3 eFUSE
    • 4.4 Security Engine
    • 4.5 First Stage Bootloader(FSBL)
    • 4.6 根信任建立

1、Efuse是什么

eFuse(electronic fuse):电子保险丝,熔丝性的一种器件,属于一次性可编程存储器。

之所以成为eFuse,因为其原理像电子保险丝一样,CPU出厂后,这片eFuse空间内所有比特全为1,如果向一位比特写入0,那么就彻底烧死这个比特了,再也无法改变它的值,也就是再也回不去1了。

一般OEMCPU厂商购买芯片后,一般都要烧写eFuse,用于标识自己公司的版本信息,运行模式等相关信息。
同时,由于其一次性编程的特性,我们又将其用在Secure Boot安全启动中。

2、OTP是什么

了解完eFuse后,我们就顺便了解一下OTP

OTP(One Time Programmable)是反熔丝的一种器件,就是说,当OTP存储单元未击穿时,它的逻辑状态为0;当击穿时,它的逻辑状态为1,也属于一次性可编程存储器

它的物理状态和逻辑状态正好和eFuse相反。

两者区别如下:

  • 从成本上讲,eFuse器件基本上是各个Foundry厂自己提供,因此通常意味着免费或者很少的费用,而OTP器件则通常是第三方IP厂家提供,这就要收费。
  • 从器件面积上讲,eFusecell的面积更大,所以仅仅有小容量的器件可以考虑。当然如果需要大容量的,也可以多个eFuse Macro拼接,但是这意味着芯片面积的增加,成本也会增加;OTPcell面积很小,所有相对来讲,可以提供更大容量的Macro可供使用。
  • OTPeFuse 安全性更好,eFuse的编程位可以通过电子显微镜看到,因此其存储的内容可以被轻易破解,但OTP在显微镜下无法区分编程位和未编程位,因此无法读取数据。
  • eFuse默认导通,存储的是"1",而OTP默认是断开,存储的是"0",因此OTP功耗也较eFuse小,面积也较eFuse

3、什么是Secure Boot

上面我们也了解过了,efuse主要用于记录一些OEM的产品信息,并且也会用于安全启动,那么安全启动是什么,为什么要做安全启动?

安全启动Secure Boot,其主要目的是:以限制消费者能力,防止消费者从软硬件层面,对产品的部分关键系统进行读写,调试等高级权限,达到对产品的商业保密,知识产权的保护。

安全启动的安全模型是建立在消费者是攻击者的假设之上,一般常见的操作有:

  • 刷机安装自定义的操作系统
  • 绕过厂家封闭的支付平台
  • 绕过系统保护,复制厂家保护的数字产品。

除此之外呢,有的比较专业的消费者,还可以:

  • 使用数字示波器监听 CPURAMeMMC 之间的数据传输来读取非常底层的数据传输。
  • 而且像 eMMC 这种芯片通常都是业界标准化的,攻击者甚至可以把芯片拆下来,然后用市面上现成的通用 eMMC 编程工具来读写上面的内容。

安全启动等级也有一个上限:这个上限通常是认为攻击者不至于能够剥离芯片的封装,然后用电子显微镜等纳米级别精度的显像设备来逆向芯片的内部结构。

简单来说:能成功攻破芯片安全机制的一次性投资成本至少需要在十万美元以上才可以认为是安全的。

4、CPU内部安全机制

4.1 bootROM

BootROM是集成在CPU芯片的一个ROM空间,其主要用于存放一小段可执行程序,出厂的时候被烧录进去写死,不可修改。

CPU在通电之后,执行的第一条程序就在BootROM,用于初始化Secure Boot安全机制,加载Secure Boot Key密钥,从 存储介质中加载并验证 First Stage Bootloader(FSBL);最后跳转进 FSBL 中。

4.2 iRAM

为了避免使用外部的RAM,支持Secure BootCPU都会内置一块很小的RAM,通常只有 16KB 到 64KB ,我们称之为 iRAM

这块iRAM上的空间非常宝贵,bootROM 一般会用 4KB 的 iRAM 作为它的堆栈。FSBL 也会被直接加载到 iRAM 上执行。

4.3 eFUSE

如上面所述,在Secure Boot中存放的是根密钥,用于安全启动的验证。

一般有两种根密钥:一个是加密解密用的对称密钥 Secure Boot Key,一般是 AES 128 的,每台设备都是随机生成不一样的;

另一个是一个 Secure Boot Signing Key 公钥,一般用的 RSAECC,这个是每个 OEM 自己生成的,每台设备用的都一样,有些芯片会存公钥的 Hash 来减少 eFUSE 的空间使用。

4.4 Security Engine

有些 CPU 中还会有一个专门负责加密解密的模块,我们称为 Security Engine。这个模块通常会有若干个密钥槽(Keyslots),可以通过寄存器将密钥加载到任意一个 Keyslot 当中,通过寄存器操作 DMA 读写,可以使用 Keyslot 中的密钥对数据进行加密、解密、签名、HMAC、随机数生成等操作.

4.5 First Stage Bootloader(FSBL)

FSBL 的作用是初始化 PCB 板上的其他硬件设备,给外部 RAM 映射内存空间,从 外部存储介质中加载验证并执行接下来的启动程序。

4.6 根信任建立

CPU上电后执行Boot ROM的程序,其这一小段程序用于初始化RAM,并加载Efuse上的内容,判断其所处的运行模式是不是生产模式。

如果在生产模式,开启Secure Boot功能,把Efuse上保存的Secure Boot Key加载到Security Engine加密模块中处理。

从外部存储介质中加载FSBLFSBL里面会有一个数字签名和公钥证书,bootROM 会验证这个签名的合法性,以及根证书的 Hash 是否和 eFUSE 中的 Signing KeyHash 相同。

如果验证通过,说明 FSBL 的的确确是 OEM 正式发布的,没有受到过篡改。

然后bootROM 就会跳转到 FSBL 执行接下来的启动程序。

Efuse介绍及安全启动浅析相关推荐

  1. 【NVMEM子系统】一、Efuse介绍及安全启动浅析

    个人主页:董哥聊技术 我是董哥,嵌入式领域新星创作者 创作理念:专注分享高质量嵌入式文章,让大家读有所得! 文章目录 1.Efuse是什么 2.OTP是什么 3.什么是Secure Boot 4.CP ...

  2. FNN 网络介绍与源码浅析

    FNN 网络介绍与源码浅析 前言 周五晚上分享 paper !!! 感动自己一把~

  3. NFM 网络介绍与源码浅析

    NFM 网络介绍与源码浅析 前言 OK, 周末继续肝!!! 昨晚完成了 FNN 网络介绍与源码浅析 广而告之 可以在微信中搜索 "珍妮的算法之路" 或者 "world44 ...

  4. Hadoop端口介绍及各种启动命令列表

    Hadoop端口介绍 9000 namenode的常用端口 给机子 8020 namenode的RPC调用端口(接收Client连接的RPC端口,用于获取文件系统metadata信息) 50070 n ...

  5. rc.local介绍(linux启动系列之一)

    摘自http://www.cnblogs.com/diyunpeng/ linux有自己一套完整的启动体系,抓住了linux启动的脉络,linux的启动过程将不再神秘. 本文中假设inittab中设置 ...

  6. linux基础命令介绍十三:启动流程

    固件(firmware)是指设备最底层的,让设备得以运行的程序代码.简单理解就是:固定在硬件上的软件.计算机中的许多设备都拥有固件(如硬盘.鼠标.光驱.U盘等),在计算机启动过程中,最先读取的就是位于 ...

  7. Content Provider启动浅析

    一.自己的理解 对于content provide的启动我是这样认为的,要用ContentResolver去获得一个contentProvider,在这的获得的过程中, 1.如果本应用之前有conte ...

  8. android培训讲师介绍,安卓培训讲师浅析android项目重点知识

    原标题:安卓培训讲师浅析android项目重点知识 在应用程序之前,必须创建一个相应的Android项目.如果你使用Eclipse开发的话,那就是创建一个Eclipse项目.这个项目用来保存所有源代码 ...

  9. tomcat服务器的安装、tomcat的目录介绍、如何启动tomcat

    tomcat服务器的安装 找到需要的Tomcat版本对应的zip压缩包,解压到需要安装的目录即可 tomcat的目录介绍 bin        专门用来存放tomcat服务器的可执行程序 conf  ...

最新文章

  1. java e次方_java基础知识
  2. Angular 中的依赖注入link
  3. 程序员的春天来了,赏花去!说走就走
  4. 238.除自身以外数组的乘积
  5. java. 三个人比赛怎么写_蓝桥杯——分组比赛(2017JavaB组第3题)
  6. 那年我学过的SpringBoot笔记
  7. 我的站(艾网---城市生活新门户)重新上线了
  8. SQL中自增(AUTO_INCREMENT)字段介绍
  9. 7-23 哥尼斯堡的“七桥问题”(25 分)
  10. 自定义http报头_http协议报头详解HTTP协议结构
  11. paip.使用泛型时未能找到类型或命名空间名称“T
  12. C/C++ 错误处理
  13. 蓝队应对攻击的常用策略一
  14. java权限是怎么做的_java如何做权限管理
  15. 2353410-03-2,TCO-PEG8-acid末端羧酸(CO2H)可在活化剂(例如EDC或HATU)存在下与伯胺基反应以形成稳定键
  16. 2020年最烂密码出炉!一秒钟就破解!
  17. 【前端基础知识】讲清楚正则表达式——第四期(4/5)
  18. 链路层--->ETH(以太网)协议
  19. 分布式限流的解决方案
  20. 威尔逊云室的一些知识

热门文章

  1. 【云开发案例】网络安全技能提升知识竞赛答题活动小程序
  2. python+云仓管理系统 毕业设计-附源码151458
  3. scrapy爬虫实战(二)-------------爬取IT招聘信息
  4. 视频会议电视终端网络部署场景与操作步骤
  5. 再谈:被遗忘的艺术—图思维方式
  6. Vertica 向 GBase8a 迁移指南之DECIMAL(P,S),NUMERIC(P,S)
  7. 应用JAVA进行密码加密的一种算法
  8. 创建3d人物模型并导入unity实现动画
  9. 忙碌了三个月的王师傅终于上岸了,靠着这份面试大纲我拿到了哈罗出行的offer!
  10. 08-ioctl控制LED软件实现(库函数操作)