热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

安卓车机Secureboot原理与实现

一、SecureBoot概述1、相关术语Secureboot:安全启动efuse:一次性可编程熔丝技术。有些SoC集成了一个efuse电编程熔丝作为

一、Secure Boot概述


1、相关术语


  • Secure boot:安全启动
  • efuse:一次性可编程熔丝技术。有些SoC 集成了一个efuse 电编程熔丝作为OTP(One-Time programmable,一次性可编程)存储器。efuse 内部数据只能从0 变成1,不能从1 变成0,所以只能写入一次。
  • CA:Certificate authority,证书颁发机构。
  • 非对称加密算法:指加密和解密使用不同密钥的加密算法,也称为公私钥加密。可用于加密交换数据或者数字签名。常见的非对称加密算法:RSA、DSA(数字签名用)、ECC(移动设备用)、Diffie-Hellman、El Gamal。
  • RSA:One public-key cryptosystems,由 RSA 公司发明,是一个支持变长密钥的公共密钥算法,需要加密的文件块的长度也是可变的;
  • Hash:它是一种单向算法,用户可以通过Hash算法对目标信息生成一段特定长度的唯一的Hash值,却不能通过这个Hash值重新获得目标信息。因此Hash算法常用在不可还原的密码存储、信息完整性校验等。
  • SHA:Secure hash algorithm,可以对任意长度的数据运算生成一个160位的数值;

2、背景和需求

近年来,全球各地不断涌现出具有网络互联、汽车共享、自动驾驶等车联网概念的智能汽车,标志着车联网大发展时代已经到来。然而,车联网在实现汽车智能化的同时,由于网络的开放性,导致出现在互联网等领域的传统安全问题也开始对汽车带来威胁。在没有网络安全充分保障的情况下,智能网联汽车带来的可能就是灾难。近几年,国内外已经先后出现了不少针对智能网联汽车的破解与攻击事件。

车机作为车联网的重要枢纽,在提供信息娱乐、智能控制等便利功能的同时,也存在诸多信息安全隐患。当前不管是国产还是合资车企,对车机安全方面越来越重视。Secure boot作为保护固件免遭恶意纂改的方案,是整个系统安全的基础。


3、安全加密基础


3.1、加密和解密算法


  • 对称和非对称加密算法

       加密就是使用相关算法将原始数据变换成另外一种形态。解密是一个加密反过程,使用相同算法将加密后的数据还原成原始数据。

       如果光有算法的话,别人知道你使用的加密算法就能将你的数据还原,所以还需要秘钥的存在,我们只有同时知道秘钥和加密算法,才能对数据进行还原。加密秘钥和解密秘钥可以相同也不可能不同。如果相同,则使用的算法称为对称加密算法;如果不同,则使用的算法称为非对称加密算法,加密秘钥称为私钥,解密秘钥称为公钥,有些特殊的算法则可以私钥和公钥同时可以进行加密和解密。安全启动采用的是非对称加密算法,OEM用私钥对要保护的数据进行加密。


  • Hash算法

       一种摘要算法,把一笔任意长度的数据通过计算得到固定长度的输出,但不能通过这个输出得到原始计算的数据。


3.2、数字签名

数字签名是通过一些密码算法对数据进行签名,以保护源数据的做法。也就是将输入数据和密钥通过加密算法得到一段数据,这段数据就是数字签名。

签名过程(signing):

Data表示要签名对象,首先计算Data的hash值,然后再用私钥加密得到签名(signature),最后把签名和Data打包到一起得到数字签名后的数据。

验证过程(verification):

签名后的数据由原始Data和signature组成,通过公钥解析数字签名得到Data的hash,对比Data的hash,即可确认Data是否完整。

签名者通过私钥对数据进行签名并发给接收者,接收者再用公钥解析,可保证数据是由签名者发出的,并且文件没有被修改过。

举个简单的例子:A想发送一段数据给B,这个时候A需要:

      1、生成公钥和私钥对(一对一的关系),发布公钥,私钥保密

      2、使用相关摘要算法针对原始数据计算摘要,得到摘要。

      3、使用私钥通过加密算法对摘要进行签名,得到数字签名。

      4、把原始数据和数字签名一起打包发送给B

这个时候,B接收A发送的数据后,需要:

      1、知道A发布的公钥;

      2、使用相同算法计算原始数据的摘要;

      3、使用A的公钥对数字签名进行解密得到A原始的摘要;

      4、对比自己算出的摘要和解密数字签名后的摘要,如果一致,则说明数据合法。

如果接收数据不完整,则双方计算出的摘要肯定不一致,而且因为公钥和私钥是钥匙对,也就是说全世界只有一对,私钥全世界又只有A知道,所以B可以通过签名和公钥可以确定数据来源于A,A也不能否认数据不是自己发的。

综上所述,典型的数字签名方案包括以下三个算法:


  • 密钥生成算法,用来输出公钥和私钥,私钥用于签名,公钥用于验证。
  • 签名算法,用私钥对给定数据进行加密来生成签名。
  • 签名验证算法,用公钥对加密过的消息进行解密验证。

3.3、数字证书

数字证书是一个经证书授权中心数字签名的包含公钥拥有者信息以及公钥的文件,是一种权威性的电子文档。数字证书结构如下:


4、Secure boot实现原理


4.1、Secure boot签名过程


  • 生成签名密钥对(公钥+私钥)

       方法:此处省略,涉及机密,具体的请询问硬件平台供应商。

       生成签名密钥对会生成许多文件,其中有一个叫做rotpk.bin的文件。rotpk.bin包含了根证书公钥的hash值,它将被烧录到efuse中,用于验证根证书的公钥。注意,只有在烧录了安全固件的样机中才能烧录rotpk.bin。otpk.bin中其他内容为用于给固件签名的私钥,一个车机的固件有很多个部分组成,每个部分都需要单独的私钥进行签名。


  • 打包签名固件

       利用pack工具打包,一般平台供应商会提供。

签名后的固件包含了原始的固件文件和签名,其中签名中包含了公钥和加密的hash值,即:签名后的固件 = 原始固件+签名(加密的固件hash值)+证书(公钥)。每个固件的RSA公钥保存在前一级用私钥签名的image中。而第一级的公钥HASH保存在soc的efuse中,以防止公钥被修改。RSA私钥是Secure boot的保障,必须妥善保存。


4.2、Secure boot验证过程


  • 证书链式校验

       Efuse保存了根证书公钥的hash,用来验证根证书是否合法。根证书中保存了其他固件的证书公钥的hash,用来验证这三个证书的公钥是否合法。公钥通过验证后,再解密固件签名得到固件的hash值,此hash值即可用来和固件实际的hash进行比较,如果相等则可证明该固件没有被纂改可以信任并被执行。


  • 系统启动过程

       车机使能Secureboot之后,系统的启动流程如下:

              工具烧录安全固件到emmc;

              烧录rotpk.bin到efuse;

              系统上电启动,利用efuse中保存的根证书公钥的hash值验证根证书合法性;

              根证书保存了子固件的证书公钥hash,可以验证子固件的证书是否合法;

              子固件的证书内包含有子固件对应的公钥,此公钥即可用来解密固件的签名,并跟真实的子固件签名进行比较,确认子固件是否被纂改;

              如果通过验证,则可以正常开机。

注意事项:

①、rotpk只能烧录一次,烧录后不可再修改。

②、烧录过安全固件后,芯片每次上电都会对固件进行安全性检查,这时候烧录普通固件,会因为无法通过检查而不能启动。故安全固件和普通固件不可混合使用。

③、芯片未烧录rotpk时,根证书的合法性检查跳过,默认是合法的。这种情况下,样机可以刷用不同密钥签名过的固件。反之,只能刷对应rotpk.bin这个密钥签名过的固件。

④、即使没有烧录rotpk.bin,也不要随便下载安全版本,否则先刷会导致efuse里面的secureboot bit位置为1,此机子只能刷安全启动版本启动。


推荐阅读
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • 本文讨论了微软的STL容器类是否线程安全。根据MSDN的回答,STL容器类包括vector、deque、list、queue、stack、priority_queue、valarray、map、hash_map、multimap、hash_multimap、set、hash_set、multiset、hash_multiset、basic_string和bitset。对于单个对象来说,多个线程同时读取是安全的。但如果一个线程正在写入一个对象,那么所有的读写操作都需要进行同步。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 加密世界下一个主流叙事领域:L2、跨链桥、GameFi等
    本文介绍了加密世界下一个主流叙事的七个潜力领域,包括L2、跨链桥、GameFi等。L2作为以太坊的二层解决方案,在过去一年取得了巨大成功,跨链桥和互操作性是多链Web3中最重要的因素。去中心化的数据存储领域也具有巨大潜力,未来云存储市场有望达到1500亿美元。DAO和社交代币将成为购买和控制现实世界资产的重要方式,而GameFi作为数字资产在高收入游戏中的应用有望推动数字资产走向主流。衍生品市场也在不断发展壮大。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • Google在I/O开发者大会详细介绍Android N系统的更新和安全性提升
    Google在2016年的I/O开发者大会上详细介绍了Android N系统的更新和安全性提升。Android N系统在安全方面支持无缝升级更新和修补漏洞,引入了基于文件的数据加密系统和移动版本的Chrome浏览器可以识别恶意网站等新的安全机制。在性能方面,Android N内置了先进的图形处理系统Vulkan,加入了JIT编译器以提高安装效率和减少应用程序的占用空间。此外,Android N还具有自动关闭长时间未使用的后台应用程序来释放系统资源的机制。 ... [详细]
  • 如何提高PHP编程技能及推荐高级教程
    本文介绍了如何提高PHP编程技能的方法,推荐了一些高级教程。学习任何一种编程语言都需要长期的坚持和不懈的努力,本文提醒读者要有足够的耐心和时间投入。通过实践操作学习,可以更好地理解和掌握PHP语言的特异性,特别是单引号和双引号的用法。同时,本文也指出了只走马观花看整体而不深入学习的学习方式无法真正掌握这门语言,建议读者要从整体来考虑局部,培养大局观。最后,本文提醒读者完成一个像模像样的网站需要付出更多的努力和实践。 ... [详细]
  • GreenDAO快速入门
    前言之前在自己做项目的时候,用到了GreenDAO数据库,其实对于数据库辅助工具库从OrmLite,到litePal再到GreenDAO,总是在不停的切换,但是没有真正去了解他们的 ... [详细]
  • macOS Big Sur全新设计大版本更新,10+个值得关注的新功能
    本文介绍了Apple发布的新一代操作系统macOS Big Sur,该系统采用全新的界面设计,包括图标、应用界面、程序坞和菜单栏等方面的变化。新系统还增加了通知中心、桌面小组件、强化的Safari浏览器以及隐私保护等多项功能。文章指出,macOS Big Sur的设计与iPadOS越来越接近,结合了去年iPadOS对鼠标的完善等功能。 ... [详细]
  • 恶意软件分析的最佳编程语言及其应用
    本文介绍了学习恶意软件分析和逆向工程领域时最适合的编程语言,并重点讨论了Python的优点。Python是一种解释型、多用途的语言,具有可读性高、可快速开发、易于学习的特点。作者分享了在本地恶意软件分析中使用Python的经验,包括快速复制恶意软件组件以更好地理解其工作。此外,作者还提到了Python的跨平台优势,使得在不同操作系统上运行代码变得更加方便。 ... [详细]
  • 本文介绍了在Android开发中使用软引用和弱引用的应用。如果一个对象只具有软引用,那么只有在内存不够的情况下才会被回收,可以用来实现内存敏感的高速缓存;而如果一个对象只具有弱引用,不管内存是否足够,都会被垃圾回收器回收。软引用和弱引用还可以与引用队列联合使用,当被引用的对象被回收时,会将引用加入到关联的引用队列中。软引用和弱引用的根本区别在于生命周期的长短,弱引用的对象可能随时被回收,而软引用的对象只有在内存不够时才会被回收。 ... [详细]
author-avatar
梦魇漂鸟的心之一方老窝
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有