草庐IT

MCU 安全启动

Johnny 周 2025-01-03 原文

MCU 通用软件架构

HSM核端包括HSM Bootloader以及HSM Application。HSM Bootloader 提供系统初始化、升级HSM Application以及校验HSM Application完整性等功能;HSM Application 主要为Host 核端提供信息安全服务,如加密算法,哈希算法以及随机数生成算法等,HSM Application还支持安全启动、安全升级等应用,同时具备密钥证书管理等功能。

Host核端执行Boot Firmware,包含Boot Manager(BM)模块,具备系统初始化以及根据MCU状态跳转到相应模块,如MCU处于升级过程,BM会跳转到Flash Bootloader(FBL), FBL用于对MCU软件升级;如MCU处于正常启动状态,BM则跳转到Classic AUTOSAR(CP)。

安全启动流程


安全启动主要用于MCU启动之后,用户程序执行之前,对用户定义的Flash中的关键程序和程序进行完整性和真实性进行校验。
1.MCU 上电复位;

2。执行Boot Firmware(SSW),根据Boot Mode Headers(使能HSM),初始化HSM;

3.HSM 初始化完成,包括HSM 用户软件启动完成,触发bootloader检测;
a) HSM根据用户指定的bootloader存储空间首地址和大小,将需要验证的代码指针告诉HSM加密引擎;
b) HSM根据存储的BOOT_MAC_KEY,计算Bootloader数据块的CMAC,将其放在HSM安全 RAM中;
c) HSM将计算出来的CMAC值和Memory Slot中存储的CMAC值比较,如若一致则 bootloader合法,
Bootloader运行,BOOT_OK 置位。用户密钥被解锁。

4.Bootloader触发 Application校验,校验过程类似bootloader过程
备注:考虑到MCU启动时间的要求,目前安全启动的校验算法普遍选用对称CMAC算法

HSM 安全启动内存区域设置

安全启动组由一个或多个段组成。如果安全引导组中引用了密钥,则该密钥将用于CMAC计算。
如果安全启动组的key用于验证所有包含的段,则段的key不需要配置Key Element ID=1的KeyElement。所有其它的KeyElement仍然需要在段的keys中存在,比如Cmac、Address、Mode、Sanction,以及Size:

分段原则需要根据实际要求:
1.FBL +CMAC , APP+CMAC
2.FBL细分,APP细分
此外,校验方式采用串行,并行,还是混合方式可根据实际需求

安全启动异常处理


如果安全启动期间的验证失败,可能会触发相关的响应。可配置的措施有:
系统重置
如果启动期间验证失败,Hsm将对所有核执行系统重置。
自定义
当使用自定义措施时,HSM可反馈校验状态,HOST端根据校验状态进行下一步执行动作,如产生日志,记录故障,HOST复位,HOST发送命令HSM锁定Key等措施

启动时间要求
对于所有 CAN 节点, 从通讯控制电源通电时刻起到发送第一帧应用报文的最大时间为: 200ms;
对于所有 CAN 节点, 从通信控制电源通电时刻起到准备好 ACK 置位的时间的最大时间为: 130ms;
对于所有 CAN 节点, 应尽可能快地发出真实值, 且从通信控制电源通电时刻起到发送报文的所有信号值为真实值的最大时间为: 1000ms

以上仅为参考时间

有关MCU 安全启动的更多相关文章

  1. ruby - 如何使用 Ruby aws/s3 Gem 生成安全 URL 以从 s3 下载文件 - 2

    我正在编写一个小脚本来定位aws存储桶中的特定文件,并创建一个临时验证的url以发送给同事。(理想情况下,这将创建类似于在控制台上右键单击存储桶中的文件并复制链接地址的结果)。我研究过回形针,它似乎不符合这个标准,但我可能只是不知道它的全部功能。我尝试了以下方法:defauthenticated_url(file_name,bucket)AWS::S3::S3Object.url_for(file_name,bucket,:secure=>true,:expires=>20*60)end产生这种类型的结果:...-1.amazonaws.com/file_path/file.zip.A

  2. ruby-on-rails - 启动 Rails 服务器时 ImageMagick 的警告 - 2

    最近,当我启动我的Rails服务器时,我收到了一长串警告。虽然它不影响我的应用程序,但我想知道如何解决这些警告。我的估计是imagemagick以某种方式被调用了两次?当我在警告前后检查我的git日志时。我想知道如何解决这个问题。-bcrypt-ruby(3.1.2)-better_errors(1.0.1)+bcrypt(3.1.7)+bcrypt-ruby(3.1.5)-bcrypt(>=3.1.3)+better_errors(1.1.0)bcrypt和imagemagick有关系吗?/Users/rbchris/.rbenv/versions/2.0.0-p247/lib/ru

  3. ruby - 如何安全地删除文件? - 2

    在Ruby中是否有Gem或安全删除文件的方法?我想避免系统上可能不存在的外部程序。“安全删除”指的是覆盖文件内容。 最佳答案 如果您使用的是*nix,一个很好的方法是使用exec/open3/open4调用shred:`shred-fxuz#{filename}`http://www.gnu.org/s/coreutils/manual/html_node/shred-invocation.html检查这个类似的帖子:Writingafileshredderinpythonorruby?

  4. UE4 源码阅读:从引擎启动到Receive Begin Play - 2

    一、引擎主循环UE版本:4.27一、引擎主循环的位置:Launch.cpp:GuardedMain函数二、、GuardedMain函数执行逻辑:1、EnginePreInit:加载大多数模块int32ErrorLevel=EnginePreInit(CmdLine);PreInit模块加载顺序:模块加载过程:(1)注册模块中定义的UObject,同时为每个类构造一个类默认对象(CDO,记录类的默认状态,作为模板用于子类实例创建)(2)调用模块的StartUpModule方法2、FEngineLoop::Init()1、检查Engine的配置文件找出使用了哪一个GameEngine类(UGame

  5. ruby - 用 YAML.load 解析 json 安全吗? - 2

    我正在使用ruby2.1.0我有一个json文件。例如:test.json{"item":[{"apple":1},{"banana":2}]}用YAML.load加载这个文件安全吗?YAML.load(File.read('test.json'))我正在尝试加载一个json或yaml格式的文件。 最佳答案 YAML可以加载JSONYAML.load('{"something":"test","other":4}')=>{"something"=>"test","other"=>4}JSON将无法加载YAML。JSON.load("

  6. ruby-on-rails - 安全地显示使用回形针 gem 上传的图像 - 2

    默认情况下:回形针gem将所有附件存储在公共(public)目录中。出于安全原因,我不想将附件存储在公共(public)目录中,所以我将它们保存在应用程序根目录的uploads目录中:classPost我没有指定url选项,因为我不希望每个图像附件都有一个url。如果指定了url:那么拥有该url的任何人都可以访问该图像。这是不安全的。在user#show页面中:我想实际显示图像。如果我使用所有回形针默认设置,那么我可以这样做,因为图像将在公共(public)目录中并且图像将具有一个url:Someimage:看来,如果我将图像附件保存在公共(public)目录之外并且不指定url(同

  7. ruby - 使用 Capistrano 启动 sidekiq - 2

    我想用Capistrano启动sidekiq。下面是代码namespace:sidekiqdotask:startdorun"cd#{current_path}&&bundleexecsidekiq-c10-eproduction-Llog/sidekiq.log&"pcapture("psaux|grepsidekiq|awk'{print$2}'|sed-n1p").strip!endend它执行成功但sidekiq仍然没有在服务器上启动。输出:$capsidekiq:starttriggeringloadcallbacks*2014-06-0315:03:01executing`

  8. ruby - 使写入文件线程安全 - 2

    我在一个ruby​​文件中有一个函数可以像这样写入一个文件File.open("myfile",'a'){|f|f.puts("#{sometext}")}这个函数在不同的线程中被调用,使得像上面这样的文件写入不是线程安全的。有谁知道如何以最简单的方式使这个文件写入线程安全?更多信息:如果重要的话,我正在使用rspec框架。 最佳答案 您可以通过File#flock给锁File.open("myfile",'a'){|f|f.flock(File::LOCK_EX)f.puts("#{sometext}")}

  9. ruby-on-rails - fastercsv 的 Rails 3 服务器启动问题 - 2

    我有一个正在升级到Rails3的Rails2.3.5应用程序。我做了所有我需要做的升级以及当我使用启动Rails服务器时要做的事情railsserver它给了我这个PleaseswitchtoRuby1.9'sstandardCSVlibrary.It'sFasterCSVplussupportforRuby1.9'sm17nencodingengine.我正在使用ruby-1.9.2-p0并安装了fastercsv(1.5.3)gem。在puts语句的帮助下,我能够追踪到错误发生的位置。我发现执行在这一行停止了Bundler.require(:default,Rails.env)if

  10. 电脑启动后显示器黑屏怎么办?排查下面4个问题,快速解决 - 2

    电脑启动出现显示器黑屏是一个相当常见的问题。如果您遇到了这个问题,不要惊慌,因为它有很多可能的原因,可以采取一些简单的措施来解决它。在本文中,小编将介绍下面4种常见的电脑启动后显示器黑屏的原因,排查这些原因,快速解决! 演示机型:联想Ideapad700-15ISK-ISE系统版本:Windows10一、显示器问题如果出现电脑启动后显示器黑屏的情况。那么首先您需要检查一下显示器是否正常工作。您可以通过更换另一个显示器或将当前显示器连接到另一台计算机来检查显示器是否存在问题。如果问题仍然存在,那么您可以排除显示器故障的可能性。 二、显卡问题如果您的电脑配备了独立显卡,那么显卡故障也可能是导致电脑

随机推荐