汽车信息安全系列-2.NXP CSE开发笔记

本文介绍了SHE标准及其在汽车网络安全中的作用,重点解析了NXP CSE3模块的功能,包括密钥安全存储、加密解密、认证、安全启动等特性,并详细阐述了CSE中的密钥管理和安全特性,以及安全启动流程。
摘要由CSDN通过智能技术生成

SHE(Secure Hardware Extension) 是外接硬件,通过硬件加密来保护软件攻击。HIS 联合会在2009年发布了SHE的标准。SHE把密匙从MCU隔离出来并且提供认证,加密和解密等服务。SHE在算法层面支持AES 128,CMAC 和Miyaguchi-Preneel compression function。SHE也可以用来做MCU安全启动。

SHE是一个简单的标准。相比于HSM,SHE更容易整合而且使用相对简单的加密认证算法,但是价格会相对便宜。

NXP-CSE3 (Cryptographic Service Engine V3)

CSE模块是完全兼容SHE规范的,有以下features:

密钥的安全储存

AES-128 加密解密

AES-CMAC 认证

RNG

安全启动

系统总线主接口

支持50个用户密匙

低电模式(没用过)

命令结束后生成中断

调试模式下密匙使用控制

CSE用到了系统的一次性可编程存储器(efuse),有下面5个:

秘密密钥(secret key):用来CSE里的rng密钥和次要密匙生成,用户接触不到

初始身份验证密钥(Initial Authentication Key):

用户身份证明(UID):

Flash Key:用来加解密密匙镜像和固件,用来生成辅助认证密钥

安全计数器(Secure Counter):每次更新密匙镜像时+1,用来防止被回退到老的密匙镜像,因为老密匙镜像有被盗取的风险。一共有42组OTP,可用值为0-42

一共55把密匙:

secret key:efuse里面的 介绍过了

Master Ecu Key:用来更新除了Secret Key的其他Key

Boot Mac Key:Secure Boot时来验证软件

Boot Mac:Secure Boot时和计算出来的MAC值对比来判断Secure Boot是否成功

50把user key,用来做软件中加密加密和认证

密钥属性:

Write protection:如果置位密匙将无法通过指令清除

Boot protection:如果置位密匙在secure boot没通过的情况下将被锁定,secure boot实现的一部分,保证软件在被篡改的情况下相关服务将无法使用(0x27,0x29,SecOC等)

Debug protection:如果置位密匙在debugger自从上次重置后连接到MCU将被锁定

Key usage:加解密和认证模式切换

Wildcard protection:如果置位密匙将不会被其他UID更新,保证其MCU指令的独立性

Verify only:在Key uage = 1时 如果置位密匙将不能用来generate mac

 BootROM第一个读取的时镜像向量表,CSE镜像地址应该填到CSEKeyAddr0里面,appImagePrimary填入需要验证的内存开始地址,cmac填入IVT正确的计算出来的mac值

/* IVT header configuration */
const ivt_image_t IVT_Image __attribute__((section(".ivt"))) =
{
    .header = IVT_HEADER,
    .reserved1 = {0xFF, 0xFF, 0xFF, 0xFF},
    .selfTestDCDPrimary = NULL,
    .selfTestDCDBackup = NULL,
    .DCDPrimary = NULL,
    .DCDBackup = NULL,
    .CSEKeyAddr0 = CSE_KEY_IMAGE0_ADDR,
    .CSEKeyAddr1 = CSE_KEY_IMAGE0_ADDR,
    .appImagePrimary = APP_HEADER_START_ADDR,
    .appImageBackup = NULL,
    .bootConfigWord = IVT_BOOT_CONFIG_WORD,
    .cmac = {0x7D, 0x2D, 0xFA, 0x37, 0xAE, 0x5C, 0xD7, 0x83, 0x15, 0x9E, 0x5C, 0xBA, 0xED, 0xDB, 0x7A, 0x31}
};

ramStart填入需要校验的app开始地址,length填入app校验长度(不过更改这两个值会导致boot起不来,不知道为什么,可能跟cmac值有关)。

/* App header configuration */
const app_image_t APP_Image __attribute__((section(".app_primary"))) =
{
    .header = APP_HEADER,
    .ramStart = __app_header_start,
    .ramEntry = Reset_Handler,
    .length = (uint32_t)__user_app_length,
    .ivpr = __IVPR_VALUE
};

Secure boot mode 有一个2 bits 的 efuse,当值不为11时 bootrom会自己触发secure boot 命令,只要有效密匙镜像写入IVT表内就可以进行secure boot 并初始化完成

一般的实现流程:

OTP写入flash key

用Fimware镜像和默认的密匙镜像启动软件,这时secure boot mode应该为0,secure boot在初始化阶段都是被执行,debug看CSE寄存器显示安全启动失败,之后初始化rng,写入各种key和对应的key flag,mackey,还有mac,当写完之后publish key 到一个地址,然后通过外部flash写到CSE镜像地址上覆盖掉原来的默认值。写各种key应该只运行一次,之后会执行另一套代码,而且外部flash写入只需要一次。为了保持前后计算mac的值一致,可以用rom或者flash来做一个只执行一次的flag。最后再把secure counter efuse +1。但是把secure counter efuse从0写到1的时候,软件debug会出错误

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值