当前位置: 首页 > news >正文

汽车ECU实现数据安全存储(机密性保护)的一种方案

一、 综述

  在车辆ECU中总是有一些密钥或重要数据需进行机密性保护,但因产品选型、成本等考虑,导致一些ECU的芯片不支持硬件安全模块(例如HSM、TEE等)。此时,为保障数据的机密性,可考虑通过软件实现数据的安全存储:将需保护的数据加密后存储到NVM中。

二、方案

2.1 方案概述

  对业务数据使用AES-256算法(AES-256算法使用的密钥称为保护密钥)进行加密,随后将加密后的业务数据密文存储在NVM中。此时将对业务数据的保护转换对保护密钥的保护,后续只需保障保护密钥不被泄露和被篡改,即可保障业务数据的安全性。方案通过特定的密钥派生算法,基于种子,生成保护密钥。

  将种子拆分成多份的主要目的是提升攻击者通过逆向方法获取保护密钥的难度。在攻击者对编译后的Image进行静态分析时,可有效提升分析难度,避免通过扫描String字符串方式直接获取到保护密钥。

  • 密钥派生算法:可使用PBDKF2、Bcrypt、Scrypt等,实际可集合具体场景确定。本文后续以PBKDF2举例
  • 种子:可使用多种形式的种子或互相结合形成种子
      1. 保存在NVM中的随机数
      1. 硬编码在代码中的固定值
      1. 读取芯片特征值,例如芯片ID
      1. OTP中存储的值

  总体流程如下:
在这里插入图片描述

2.2 保护密钥生成

  将业务数据进行加密存储后,即可使用把对业务数据的保护转换为对保护密钥的保护。为提升保护密钥的安全性,需仅在需要保护密钥时,基于特定种子进行生成,避免保护密钥长期直接存在于ECU中。保护密钥生成流程如下:

  1. 通过第一个种子和salt(salt也可以理解为1个种子,salt值可使用和种子相同的方式选择),使用密钥派生算法PBKDF2-HMAC-SHA256生成32字节的派生密码;
  2. 以步骤1中生成的派生密码和第二个种子为基础,使用密钥派生算法PBKDF2-HMAC-SHA256进行运算,得到32字节的派生密码;
  3. 以步骤2中生成的派生密码和第三个种子为基础,使用密钥派生算法PBKDF2-HMAC-SHA256进行运算,得到32字节的派生密码,即为最终的保护密钥;

保护密钥生成过程应封装为一个函数,便于后续初始化和运行阶段直接调用。通过调用保护密钥生成函数,可直接获得保护密钥。

在这里插入图片描述

2.3 数据场景

  业务数据使用需考虑两种场景

    1. 数据预置且不修改:对于预置数据需手动在PC等环境中实现保护密钥生成和业务数据加密过程,得到业务数据明文。随后将此业务数据密文写入NVM或硬编号在代码中。ECU只需要执行解密过程即可
    1. 动态写入数据:通过产线或运行时写入,例如VIN、UDS 2E等服务。当ECU接收到此数据后,调用加密过程进行加密,得到业务数据密文并写入NVM。当ECU需要使用时,调用解密过程进行解密,即可得到业务数据明文以进行使用。此场景需考虑对写入前的默认值保护,若默认值无需保护,则默认值可明文写入NVM。否则需按照“数据预置且不修改”中方式在ECU外部先将业务数据明文转换为业务数据密文。

2.3.1 数据为预置且不修改

  此类数据需在ECU外部实现加密过程,ECU仅实现解密过程。加密后的业务数据密文可考虑硬编码在代码或写入NVM中。当ECU使用时,读取硬编码或NVM中的业务数据密文,随后生成保护密钥并调用AES解密,获得业务数据明文。总体流程如下图

在这里插入图片描述

2.3.2 动态写入数据

2.3.2.1 默认值无需保护

  当默认值无需保护时,NVM存储的默认值应为明文,当前业务数据应写入到1个结构体中,结构体可定义如下:

struct bussiness_data {unsigned int flag;// 指明bu_data数据是类型,0:明文存储,other:密文存储unsigned char bu_data[N];//具体长度需结合业务数据确定,需注意AES加密需填充,此处长度需为填充后的长度
};
    1. 写入默认值:当业务数据为默认值时,flag需置为0,bu_data中保存业务数据默认值的明文。默认值结构体跟随软件包等刷入ECU NVM特定区域。
    1. 写入有效数据:当需要写入有效的业务数据时,通过UDS、刷写等方式,此时ECU接收到的为业务数据的明文,ECU需调用AES加密算法,生成业务数据密文,生成业务数据密文后及时销毁保护密钥。设置存储结构体,flag值为1,bu_data为业务数据密文,并将结构提供更新到NVM中(覆盖默认值)。
    1. 当ECU使用业务数据时,首先读取NVM中存储的业务数据结构体,并判断flag值,若值为0,则直接读取bu_data用于业务场景使用。若flag值为1,读取bu_data后,使用AES进行解密,获得业务数据明文,用于业务操作场景,业务操作使用完成后,需立即销毁DDR中的保护密钥。

在这里插入图片描述

2.3.2.2 默认值需保护

  当默认值需保护时,NVM存储的默认值也需要为密文。总体流程如下:

    1. 写入默认值:当业务数据为默认值时,需在ECU外部环境中实现密钥保护和加密算法,将默认值转换为密文,并随软件包刷写等方式,同步存储到NVM特定区域中。
    1. 写入有效数据:当需要写入有效的业务数据时,通过UDS、刷写等方式,此时ECU接收到的为业务数据的明文,ECU需调用AES加密算法,生成业务数据密文,生成业务数据密文后及时销毁保护密钥。并将业务数据密文更新到NVM中(覆盖默认值)。
    1. 当ECU使用业务数据时,读取NVM中的存储的业务数据密文,使用AES进行解密,获得业务数据明文,用于业务操作场景,业务操作使用完成后,需立即销毁DDR中的保护密钥。

在这里插入图片描述

三、优化

  具体项目中需结合实际使用场景,确定业务数据明文是常驻内存还是每次使用时解密。若对使用频繁或对性能有要求(例如SecOC密钥等),则业务数据明文可常驻内存。否则,建议选择更安全的每次使用时解密。

四、扩展

4.1 AES算法

  本方案对业务密钥进行加解密的算法为AES-256,使用CBC模式。CBC的IV可和种子一样选择不同的方式。

4.2 PBKDF2算法

  本方案选择密钥派生算法PBKDF2。PBKDF2算法为一种密钥派生算法,PBKDF2算法主要用在防止暴力破解场景,通过增加单次迭代的时间,使暴力破解时间成倍增长,从而提升暴力破解成本。但本方案并不使用此特性,本方案主要目的在通过一组种子作为输入,生成一个关联的派生密钥,作为保护密钥。当种子固定时,通过PBKDF2算法生成的保护密钥必定固定。

在这里插入图片描述

  PBKDF2算法涉及参数如下:

  • 盐值:32字节长度,可预定义好并硬编码到代码中,也可像选择种子一样选择一个salt。
  • 迭代次数:2次。因本项目不使用防止暴力破解特性,故次数并不影响安全性,结合效率考虑。需集合实际项目性能,调整次数。
  • 伪随机函数:HMAC-SHA-256算法
  • 输出密钥长度:32字节

4.3 种子选择

  种子可以由多种来源,若从稳定性角度考虑,使用硬编码种子最稳定,若需要一机一密等场景,则可使用芯片ID或者随机数,实际使用选择种子时应结合具体场景选择合适的种子。

http://www.lryc.cn/news/626320.html

相关文章:

  • 【openssl】openssl CA.pl 签发证书操作步骤
  • Redis String全方位指南:命令、编码、时间复杂度与应用场景
  • RK-Android11-PackageInstaller安装器自动安装功能实现
  • KubeBlocks AI:AI时代的云原生数据库运维探索
  • 3D文档控件Aspose.3D实用教程:使用 C# 构建 OBJ 到 U3D 转换器
  • Origin将普通点线图升级为3D点线图
  • ETL 工具选型评测:2025 年 Top 5 工具优缺点对比(附评分表)
  • 【自记】Power BI 中FILTER、CALCULATE 和 CALCULATETABLE 三个函数详细说明
  • React框架超详细入门到实战项目演练【前端】【React】
  • React15.x版本 子组件调用父组件的方法,从props中拿的,这个方法里面有个setState,结果调用报错
  • 【Coze】Windows 环境下使用 Docker 部署 Coze Studio 的详细指南
  • 基于分布式环境的令牌桶与漏桶限流算法对比与实践指南
  • Day 40:训练和测试的规范写法
  • 008.Redis Cluster集群架构实践
  • RabbitMQ:SpringAMQP Topic Exchange(主题交换机)
  • Linux中Cobbler服务部署与配置(快速部署和管理 Linux 系统)
  • mac电脑软件左上角的关闭/最小化/最大化按钮菜单的宽度和高度是多少像素
  • Mac 4步 安装 Jenv 管理多版本JDK
  • Mac 上安装并使用 frpc(FRP 内网穿透客户端)指南
  • 第四章:大模型(LLM)】07.Prompt工程-(4)思维链(CoT, Chain-of-Thought)Prompt
  • 第四章:大模型(LLM)】07.Prompt工程-(5)self-consistency prompt
  • 编译安装 Nginx
  • 从AI小智固件到人类智能:计算技术的层级跃迁
  • Linux-----《Linux系统管理速通:界面切换、远程连接、目录权限与用户管理一网打尽》
  • JavaScript 检查给定的四个点是否形成正方形(Check if given four points form a square)
  • [特殊字符] 小豆包 API 聚合平台:让 AI 接入更简单、更高效
  • PyTorch API 7
  • Linux 文件系统权限管理(补充)
  • pinctrl和gpio子系统实验
  • 前后端联合实现文件上传,实现 SQL Server image 类型文件上传