在设计嵌入式系统时,考虑安全性已经成为许多行业的需要。将设备连接到互联网的驱动器允许对系统进行远程攻击。想要构建安全嵌入式系统的嵌入式开发人员必须确保他们的设备实现信任链。在这篇文章中,我们将探讨什么是信任链,以及嵌入式系统信任链中的关键元素。

  什么是信任链?

  信任链是一系列身份验证和完整性检查,可确保只有经过批准的软件才能在系统上运行——对于嵌入式系统,开发信任链需要开发人员分阶段启动他们的系统。每个阶段都使用加密密钥、证书和哈希来验证以下加载的软件组件未被修改(完整性)以及它们来自开发人员(身份验证)。

  多年来,在运行Linux的应用处理器上工作的嵌入式软件开发人员一直采用多阶段引导过程。然而,使用微控制器、实时操作系统或裸机系统的嵌入式开发人员最初可能会发现这非常不同。一般来说,建立信任链看起来像下图:

  

  信任根——The Root of Trust (RoT)

  每个系统都必须有一个锚,形成信任的基础。然后,该锚点用于验证系统上加载的每一个软件。RoT是用作信任链中第一个实体的不可变过程或身份。一个好的RoT利用硬件来建立信任锚。例如,加密PUF是从微控制器的RAM中生成安全密钥对的软件算法。

  一般来说,RoT是密钥和证书的集合,它们验证运行在系统上的软件是完整的和经过认证的。RoT通常还会为系统提供安全服务,如安全存储、证明和应用程序分区。

  当系统首次启动时,它会建立RoT。接下来,RoT将认证和验证安全引导加载程序的完整性。首先,引导装载程序有公司创建的数字签名。接下来,嵌入式开发人员使用在引导装载程序上计算的散列来验证应用程序签名。成功的验证表明,引导加载程序是由该公司未经修改就放在那里的。

  安全引导加载程序——Secure Bootloaders

  安全引导加载程序有几个用途。首先,它们用于认证和验证在它之后加载的安全和用户应用程序的完整性。如果身份验证或完整性失败,引导加载程序将不会加载这些应用程序。该设备将不会正常运行,而是将在安全引导加载程序中保持安全状态。通常,安全和用户应用将被验证并加载到存储器中以执行它们的主要功能。

  其次,引导加载程序也用于更新安全和用户应用程序代码。当软件更新时,引导装载程序检索新版本,存储它,然后验证和确认它。例如,如果新的应用程序来自公司并且有效,引导装载程序将执行固件更新。

  

  安全应用程序(安全代码域)——Secure App

  有几种方法可以创建硬件隔离的执行环境。首先,嵌入式开发人员可以使用多核微控制器。一个核心用于安全执行环境,而另一个核心是用户应用程序。接下来,开发人员可以使用单核微控制器,这些微控制器使用Arm的Trustzone等技术。最后,开发人员可以利用内存保护单元(MPU)在其应用中提供不同的隔离级别。

  用户应用程序(非安全代码域)——User App

  在大多数嵌入式设备的信任链实现中,用户应用程序区域是最后一个环节。用户应用程序通常在引导期间被验证和认证,但是是不安全的。用户应用程序是通常与外界交互的代码,遵循嵌入式开发人员常用的软件模型。如果发生安全事故,预计会发生在用户应用程序代码中。虽然有人可能会立即认为这是不可接受的,但理解用户代码中的确切内容是非常重要的。

  用户数据、密钥和任何需要保护的东西都不会放在用户应用程序区域。用户应用是与安全执行环境分离的硬件隔离的执行环境。如果有人设法注入代码或进入这个区域,他们将无法访问设备的任何秘密。

  结论

  安全性对于各种各样的嵌入式系统已经变得至关重要。在大多数情况下,公司不能再忽视设备的安全性需求。虽然安全性初看起来令人望而生畏,但是有各种各样的工具和示例可供嵌入式开发人员用来保护他们的嵌入式系统。每个安全系统的一个关键组件是建立信任链,该信任链利用信任根、安全引导加载程序,并将应用程序分为安全和非安全执行空间。

嵌入式开发:嵌入式应用程序中的信任链简介相关推荐

  1. 如何从新开发的程序中提炼服务

    现在已确写在SOA的开发中也不就是将所有的功能都开发为公开的服务,而只是将与其它软件会发生交互的部分才设计为服务. 通过这样的一种方式,就必须从新开发的程序中提炼出服务.那么这里应当怎么的提炼出来服务 ...

  2. 使用TS开发小程序中遇到的问题

    在使用ts开发小程序的过程中,遇到了一些开发工具和关于ts的使用上的一些问题,并记录解决方法 1. ts开发过程中类型指定问题 Type 'number | undefined' is not ass ...

  3. 分享嵌入式开发使用过程中遇到的几个问题(MQX4.2,IAR,Kinetis K66)

    一段题外话 这几天一直在忙着公司的任务,趁着有机会总结一下最近工作中遇到的一些问题,一来希望给遇到这类问题的童鞋提供一点思路,同时也作为一种记录,提倡互联网的分享精神. 正篇开始 问题1:IAR 编译 ...

  4. 嵌入式开发 | 软件项目中 Debug 和 Release 版本的差异

    关注+星标公众号,不错过精彩内容 作者 | strongerHuang 微信公众号 | strongerHuang 很多集成开发环境(IDE),比如VS(VC).IAR等,在创建工程时都会自动生成有D ...

  5. 嵌入式开发之赛灵思 xilinx Zynq芯片简介---Zynq-7000 EPP (XC7Z010 and XC7Z020)

    (1)企业简介 作为DSP 和视频应用领域的头号 FPGA 供应商,赛灵思致力于通过其目标设计平台提供业内领先的 DSP 开发工具.方法.IP 和技术支持.赛灵思面向 DSP 的目标设计平台将这些元素 ...

  6. 嵌入式开发(S5PV210)——u-boot中开启MMU

    1.MMU介绍 在uboot阶段并不是必须要开启MMU(内存管理单元),在没开启MMU前使用的是物理地址,开启MMU后使用的是虚拟地址. MMU就是在物理内存和应用程序之间添加了一个层次,专门用来管理 ...

  7. python开发的程序中以电子表格显示数据_使用 Python 读取电子表格中的数据实例详解...

    Python 是最流行.功能最强大的编程语言之一.由于它是自由开源的,因此每个人都可以使用.大多数 Fedora 系统都已安装了该语言.Python 可用于多种任务,其中包括处理逗号分隔值(CSV)数 ...

  8. uni-app开发小程序中的历史记录

    1.首先,你要把你搜索道的内容存到本地 2.然后在页面取出来 3.渲染页面即可 4.重复搜索过的会把之前的删除,添加最新的 5.这里还包括一键清空所有 注意这里的搜索历史记录是真实项目中的的案例包括细 ...

  9. 简历中linux内核开发,Linux内核中DMI实现简介

    1. 配置 在配置内核时,如果选择了CONFIG_DMI选项,会将DMI(Desktop Management interface)功能添加到内核中.此功能代码在drivers/firmware/Dm ...

最新文章

  1. 拼音开头有什么字_excel查找函数应用:如何提取姓名的拼音首字母
  2. 每个人眼中都有一个哈姆雷特
  3. startservice方式启动服务
  4. python写乘法口诀-如何用python编写乘法口诀表
  5. Linux学习笔记(一):常用命令(2)
  6. Windows Phone播放视频流
  7. Algorithm:C++语言实现之字符串相关算法(字符串的循环左移、字符串的全排列、带有同个字符的全排列、串匹配问题的BF算法和KMP算法)
  8. elasticsearch给IK分词器添加自定义词汇
  9. EMC之对象参考1 -- 对象基本知识
  10. 基于SSM的医学健康网站
  11. 考研政治——马克思主义唯物论之物质观
  12. 浅谈feature-based 和 fine-tune
  13. Python基础:函数
  14. 投资:铁矿石研究框架
  15. win7、win10安装Microsoft Loopback 接口
  16. 02《区块链财富指北》私钥篇(2):百行Python代码演示一私钥生成多公链公钥原理。
  17. 在 stm32CubeMX下生成程序完成流水灯以及完成STM32的USART串口通讯程序实现STM32系统给上位机(win10)连续发送“hello windows”
  18. kafka-4.进阶,ISR,OSR,AR,LW,HW,LEO,ACK原理理论
  19. HDU6152-Friend-Graph(拉姆齐(Ramsey)定理)
  20. 【第1131期】对于网络爬虫技术的攻与防

热门文章

  1. nginx正向代理的配置及实现
  2. C++大学教程(第二版)c++how to program Second Edition --电子工业出版社【美】harvey M.Deitel and paul James Deitel(更新中)
  3. 一个序列的子序列个数
  4. Alink(02) 情感分析(官网案例)详细解析(注释详细版)
  5. 如何快速查看Linux系统上的Shell类型
  6. Mac OSX 好用的解压软件
  7. OpenOffice源文件中的文件扩展
  8. urllib库学习 - 京东商城手机图片爬虫
  9. MFC基于对话框上插入MENU菜单栏并点击菜单弹出新窗口
  10. ISP—图像调试实习生(第七天)