智能网联汽车基础软件信息安全需求分析
目录
1.安全启动
2.安全升级
3.安全存储
4.安全通信
5.安全调试
6.安全诊断
7.小结
1.安全启动
- 对于MCU,安全启动主要是以安全岛BootROM为信任根,在MCU启动后,用户程序运行前,硬件加密模块采用逐级校验、并行校验或者混合校验的方式,对Flash中的用户关键程序进行数据完整性和真实性进行校验,确认程序没有被篡改。
- 对于SOC,安全启动主要是同样以安全岛BootROM为信任根,通常采用逐级校验的方式对manifest中定义的image镜像文件进行校验。常见顺序为BootROM -> SecureBL-> Application。BootROM用于验签和解压SecureBL程序,确保SecureBL是可信软件后将其加载到RAM中进行运行;SeucreBL负责对存放在Flash中的App进行解密、数据完整性和真实性的验证,确保没有被篡改后,从Flash拷贝至RAM中运行,或者直接在Flash运行。
2.安全升级
随着汽车智能网联的迅猛发展,汽车升级技术引入OTA(Over-the-Air Technology)的方式。
通常意义下,汽车OTA分为SOTA和FOTA两种:
- SOTA:Software over the Air,即对车载IVI运行在Linux、IOS或Android系统上的应用软件升级,例如对导航地图信息的升级、音乐播放软件的升级等;
- FOTA:Firmware over the Air,即对整车偏控制类的ECU进行固件升级,通常包括制动系统、动力系统等。
OTA升级的抽象模型如下:

T-Box(或者带有T-Box功能的座舱域)接收到来自云端的升级包后,对升级包进行验签解密,完成数据包的拆分,同时作为OTA Master对车内所有ECU进行差分升级。
除OTA之外,线下4S店或工厂通过OBD对特定ECU进行升级的方式也需要进行数据的真实性和完整性的校验。
综上,为保证上述两种升级包的发布来源有效、数据完整不被篡改、升级内容不被恶意截获,一方面需要为升级包进行签名,保证数据来源可靠,数据完整没有被篡改;另一方面还需要对升级包进行加(OBD方式除外),传输数据过程通过密文传输,从而降低软件更新时数据暴露的风险。
3.安全存储
安全存储通常是有两种方式实现。
- Flash某些Sector通过设置访问权限,从而防止非法访问或篡改;
- OTP:eFuse,只能被烧写一次。
4.安全通信
安全通信分为车内网络通讯和车云网络通讯。
- 车内网络通讯,目前常见的是CAN通信,以明文的方式在整车内部进行交互,攻击者可随意伪造报文对车辆控制器特别是动力、制动系统进行控制。因此,需要在关键报文上做PDU级别的身份验证机制,以防止数据被篡改或是被重放攻击。常见的是对CAN使用SecOC模块,对以太帧使用MACsec模块等。
- 车云网络通讯安全主要是TLS(Transport Layer Security)/SLS(Secure Socket Layer)进行保护。
5.安全调试
安全调试通常是指产品下线后对MCU进行片上debug,一般使用基于挑战\响应的身份验证机制来限制调试器访问。只有授权的调试设备(具有正确响应的设备)才能访问调试端口
在生产或者下线阶段,必须要禁用或者锁定相关的调试接口,禁用意味着无法与硬件调试接口建立连接,锁定意味着硬件调试接口受到保护,只能根据安全调试解锁来访问。
以某中央网关芯片的安全调试为例,其挑战-响应机制如下:

6.安全诊断
车载诊断时,读取特定内存位置、执行特定例程、下载数据等服务时需要进行身份认证;下载数据服务即上述提到的基于UDS安全升级,需要对数据或者程序进行身份认证。读取特定内存位置的服务也需要进行身份认证,以防数据通过OBD口泄露。
安全诊断就是是通过某种认证算法来确认Client的身份,并决定Client端是否被允许访问。可以通过对随机数种子生成的非对称签名进行验证或者通过基于对称加密算法的消息校验码来验证其身份。
ISO 14229-2020版本就提出了0x29服务(Authentication Service),如下:

具体步骤如下:
- 客户端(通常是诊断仪)发送证书至服务器,证书中一般包含客户端的公钥
- 服务器接着确认证书的有效性,验证客户端是否合法;若不合法则停止认证流程,返回否定响应,合法则继续认证流程
- 服务器继续对证书发起挑战,请求客户端对所发证书的所有权证明,通常挑战中包含认证所需随机数
- 客户端接收到挑战信息后使用私钥对接收到的随机数进行计算得到签名,放入响应消息中发给服务器
- 服务器使用客户端的公钥解密并验证应答消息中的签名信息,与挑战消息比较,向客户端回复认证结果
对于支持安全诊断通信的客户端和服务器,在认证过程中同步使用Diffie-Hellman算法生成密钥。
7.小结
本文主要是在梳理当前项目security方案的需求时,顺便整合了下车-管-端的需求分析,虽然我们用不到这么多需求。这里分享给大家。
相关文章:
智能网联汽车基础软件信息安全需求分析
目录 1.安全启动 2.安全升级 3.安全存储 4.安全通信 5.安全调试 6.安全诊断 7.小结 1.安全启动 对于MCU,安全启动主要是以安全岛BootROM为信任根,在MCU启动后,用户程序运行前,硬件加密模块采用逐级校验、并行校验或者混合校…...
《QT从基础到进阶·十八》QT中的各种鼠标事件QEvent
1、界面标题栏事件: NonClientAreaMouseButtonPress 标题栏点击事件 NonClientAreaMouseButtonRelease 标题栏释放事件 bool CustomPopDialog::event(QEvent* event) {switch (event->type()){case QEvent::MouseButtonRelease://Event of mouse releasing wind…...
CSDN中调整图片和文本样式
1.调整图片比例 插入图片后,觉得图片比例不协调,想改小点。只需要在文件后缀加个参数即可:?pic_center 60x。 NOTE:等号左边一定要加个空格,否则格式不生效 2.修改字体颜色 如上 NOTE:等号左边一定要…...
社区团购商品数据抓取
爬虫程序的实现需要使用到C#编程语言以及相关爬虫框架,如Scrapy、WebScraper等。以下是一个简单的示例,展示了如何使用C#爬取网站上的商品数据: using System; using System.Net; using System.IO; using HtmlAgilityPack;class Program {st…...
Nginx用做sip代理
https://www.jianshu.com/p/14d134cbf8d3?tdsourcetags_pcqq_aiomsg 看了这篇文章的方案一,我专门试了试,记录如下: 测试环境为: fs1(5080 --- nginx --- fs2(5060) 局域网同一个网段&…...
C# set的一些使用方法
在C#应用中,使用set监控值的改变触发事件是一种非常常见的编程模式。 比如下面一些应用。 1、属性更改通知:当某个属性的值发生变化时,可以使用set监控属性的改变,并触发一个事件来通知其他部分代码。这在MVVM(Model…...
机器学习——回归
目录 一、线性回归 1、回归的概念(Regression、Prediction) 2、符号约定 3、算法流程 4、最小二乘法(LSM) 二、梯度下降 梯度下降的三种形式 1、批量梯度下降(Batch Gradient Descent,BGD)ÿ…...
JAVA代码视频转GIF(亲测有效)
1.说明 本次使用的是JAVA代码视频转GIF,maven如下: <dependency><groupId>ws.schild</groupId><artifactId>jave-nativebin-win64</artifactId><version>3.2.0</version></dependency><dependency&…...
挑战100天 AI In LeetCode Day03(热题+面试经典150题)
挑战100天 AI In LeetCode Day03(热题面试经典150题) 一、LeetCode介绍二、LeetCode 热题 HOT 100-52.1 题目2.2 题解 三、面试经典 150 题-53.1 题目3.2 题解 一、LeetCode介绍 LeetCode是一个在线编程网站,提供各种算法和数据结构的题目&am…...
【手写模拟Spring底层原理】
文章目录 模拟Spring底层详解1、结合配置类,扫描类资源1.1、创建需要扫描的配置类AppConfig,如下:1.2、创建Spring容器对象LyfApplicationContext,如下1.3、Spring容器对象LyfApplicationContext扫描资源 2、结合上一步的扫描&…...
代码随想录训练营Day1:二分查找与移除元素
本专栏内容为:代码随想录训练营学习专栏,用于记录训练营的学习经验分享与总结。 文档讲解:代码随想录 视频讲解:二分查找与移除元素 💓博主csdn个人主页:小小unicorn ⏩专栏分类:C 🚚…...
回归预测 | Matlab实现PCA-PLS主成分降维结合偏最小二乘回归预测
回归预测 | Matlab实现PCA-PLS主成分降维结合偏最小二乘回归预测 目录 回归预测 | Matlab实现PCA-PLS主成分降维结合偏最小二乘回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 Matlab实现PCA-PLS主成分降维结合偏小二乘回归预测(完整源码和数据) 1.输…...
高效的测试覆盖率:在更短的时间内最大化提高测试覆盖率
软件测试在敏捷开发生命周期中至关重要,而测试覆盖率又是软件测试的一个重要指标,有效的测试覆盖率对软件测试来说永远是重中之重。测试覆盖率确保所有关键功能和特性都经过彻底测试,减少最终产品中出现错误和错误的可能性(取决于…...
Qt 项目实战 | 音乐播放器
Qt 项目实战 | 音乐播放器 Qt 项目实战 | 音乐播放器播放器整体架构创建播放器主界面媒体对象状态实现播放列表实现桌面歌词添加系统托盘图标 资源下载 官方博客:https://www.yafeilinux.com/ Qt开源社区:https://www.qter.org/ 参考书:《Q…...
JavaScript使用Ajax
Ajax(Asynchronous JavaScript and XML)是使用JavaScript脚本,借助XMLHttpRequest插件,在客户端与服务器端之间实现异步通信的一种方法。2005年2月,Ajax第一次正式出现,从此以后Ajax成为JavaScript发起HTTP异步请求的代名词。2006…...
Python爬虫实战-批量爬取美女图片网下载图片
大家好,我是python222小锋老师。 近日锋哥又卷了一波Python实战课程-批量爬取美女图片网下载图片,主要是巩固下Python爬虫基础 视频版教程: Python爬虫实战-批量爬取美女图片网下载图片 视频教程_哔哩哔哩_bilibiliPython爬虫实战-批量爬取…...
uniapp+uview2.0+vuex实现自定义tabbar组件
效果图 1.在components文件夹中新建MyTabbar组件 2.组件代码 <template><view class"myTabbarBox" :style"{ backgroundColor: backgroundColor }"><u-tabbar :placeholder"true" zIndex"0" :value"MyTabbarS…...
opencv 任意两点切割图像
目录 opencv python直线切割图像,把图像分为两个多边形 升级版,把多边形分割抠图出来,取最小外接矩形:...
rust变量绑定、拷贝、转移、引用
目录 一,clone、copy 1,基本类型 2,类型的clone特征 3,显式声明结构体的clone特征 4,类型的copy特征 5,显式声明结构体的clone特征 5,变量和字面量的特征 6,特征总结 二&am…...
Java多种方式向图片添加自定义水印、图片转换及webp图片压缩
给个创建水印的示例: /*** 获取水印** param watermarkText 水印文字* return 水印bufferimage*/public static BufferedImage getWatermark(String watermarkText) {BufferedImage measureBufferdImage new BufferedImage(100, 100, BufferedImage.TYPE_INT_ARGB…...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...
《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》
在注意力分散、内容高度同质化的时代,情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现,消费者对内容的“有感”程度,正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中࿰…...
【单片机期末】单片机系统设计
主要内容:系统状态机,系统时基,系统需求分析,系统构建,系统状态流图 一、题目要求 二、绘制系统状态流图 题目:根据上述描述绘制系统状态流图,注明状态转移条件及方向。 三、利用定时器产生时…...
C++使用 new 来创建动态数组
问题: 不能使用变量定义数组大小 原因: 这是因为数组在内存中是连续存储的,编译器需要在编译阶段就确定数组的大小,以便正确地分配内存空间。如果允许使用变量来定义数组的大小,那么编译器就无法在编译时确定数组的大…...
Python Ovito统计金刚石结构数量
大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...
【Linux】Linux 系统默认的目录及作用说明
博主介绍:✌全网粉丝23W,CSDN博客专家、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...
STM32---外部32.768K晶振(LSE)无法起振问题
晶振是否起振主要就检查两个1、晶振与MCU是否兼容;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容(CL)与匹配电容(CL1、CL2)的关系 2. 如何选择 CL1 和 CL…...
Vue 模板语句的数据来源
🧩 Vue 模板语句的数据来源:全方位解析 Vue 模板(<template> 部分)中的表达式、指令绑定(如 v-bind, v-on)和插值({{ }})都在一个特定的作用域内求值。这个作用域由当前 组件…...
DeepSeek源码深度解析 × 华为仓颉语言编程精粹——从MoE架构到全场景开发生态
前言 在人工智能技术飞速发展的今天,深度学习与大模型技术已成为推动行业变革的核心驱动力,而高效、灵活的开发工具与编程语言则为技术创新提供了重要支撑。本书以两大前沿技术领域为核心,系统性地呈现了两部深度技术著作的精华:…...
华为OD最新机试真题-数组组成的最小数字-OD统一考试(B卷)
题目描述 给定一个整型数组,请从该数组中选择3个元素 组成最小数字并输出 (如果数组长度小于3,则选择数组中所有元素来组成最小数字)。 输入描述 行用半角逗号分割的字符串记录的整型数组,0<数组长度<= 100,0<整数的取值范围<= 10000。 输出描述 由3个元素组成…...


