杰发科技AC7840——CSE硬件加密模块使用(2)

注意:

不要随便修改主秘钥,本次跑代码过程中,对主秘钥进行修改,导致无法对cse模块恢复出厂设置

更新秘钥例程

第2个例程主要是把cse的key加载到cse安全区域中

这里刚看到加载秘钥并不是直接把明文加载到cse模块

测试第3个例程

复位之后异常,查看说明是更新失败,说明这个代码只能更新一次

重新烧录后,异常一样,说明烧录不影响秘钥加载

再刷一遍第2个例程后重新刷更新秘钥代码

没有变化,秘钥只能更新一次?

刷了恢复出厂的代码之后再刷更新秘钥的代码

刷加载秘钥的代码

刷完加载秘钥的再刷更新秘钥的

后面我们会带着问题来进行分析,为什么更新会失败


随机数的生成

从下图可以看出,加载Key不是直接简单的load就可以

CSE_DRV_InitRNG();; 初始化RNG

没有对RNG进行操作,看样子是用指令初始化了伪随机数生成器

CSE_DRV_GenerateRND(RNG); 初始化RND

生成了一个128bit的随机数

调用的RNG是个空的值

然后把伪随机数写到RNG里面

用指令把RNG读出来

CSE_DRV_ExtendSeed(RNG); 扩展RNG

用之前的随机数扩展成随机数种子

CSE_DRV_GenerateRND(RNG); 再计算RND

最后把二次生成的随机数读出来,这个作为真随机数使用(这个作为真随机数,实际上通过算法生成的,应该也是伪随机数)

再看看PRNG和RNG的区别

第一次加载秘钥

从这个图里面看出来,最终计算结果是M4/M5。

请教了大佬,第一个和最后三个是固定的key

通过空白秘钥来计算M1-M5

通过计算的M1-M5来加载主密钥CSE_MASTER_ECU

通过这个数据看到其实只是把数组放进去计算???

通过剩下两个对比,说明确实是把数组放在里面做了计算

秘钥的计算

再看下秘钥计算过程

用KeyID去计算M1

用第一个数组去计算M2

用M1和M2来计算M3

CBC计算M4

计算M5

对秘钥的理解

再返回秘钥管理看看

更新秘钥

上面的例程没更新成功

通过以上的学习再试试更新秘钥

期间对主秘钥进行修改过,后面的更新秘钥都失败了,恢复出厂设置也不生效。

换一块开发板之后先加载秘钥

进行更新,更新时候需要counter++,2的28次方个,uint32_t范围可以随便设置,如果在不知道是多少的情况下往大设置即可。

加载失败

恢复出厂,成功

在出厂状态更新,报错405,秘钥空,符合状况

重新初始化

失败

修改为2之后更新成功

仔细检查是秘钥ID写错,改为11之后更新成功

因此可以确定,更新秘钥就是修改这几个数据即可,实际上就是重新加载秘钥

ECB计算

调用接口即可

CBC计算

一样的调用接口即可

相关推荐
嵌入式老菜鸟qq1252427739 小时前
关于S2-LP休眠
单片机·嵌入式硬件·mcu·射频工程
学嵌入式的小杨同学14 小时前
STM32 进阶封神之路(十八):RTC 实战全攻略 —— 时间设置 + 秒中断 + 串口更新 + 闹钟功能(库函数 + 代码落地)
c++·stm32·单片机·嵌入式硬件·mcu·架构·硬件架构
学嵌入式的小杨同学14 小时前
STM32 进阶封神之路(十七):RTC 实时时钟深度解析 —— 从时钟源到寄存器配置(底层原理 + 面试重点)
c++·stm32·单片机·嵌入式硬件·mcu·硬件架构·pcb
EVERSPIN1 天前
32位MCU副屏方案
mcu·32位mcu
学嵌入式的小杨同学1 天前
STM32 进阶封神之路(十五):DHT11 单总线实战 —— 温湿度检测从时序解析到代码落地(库函数 + 寄存器)
vscode·stm32·单片机·嵌入式硬件·mcu·智能硬件·pcb工艺
学嵌入式的小杨同学2 天前
STM32 进阶封神之路(十六):PWM 波深度实战 —— 定时器输出 + LED 调光 + 电机调速(库函数 + 寄存器)
stm32·单片机·嵌入式硬件·mcu·硬件架构·硬件工程·智能硬件
liu_endong3 天前
RTOS基于7840——任务创建、启动、切换、删除
mcu·rtos·杰发科技·autochips·车规芯片
豆豆饿啦4 天前
【瑞萨AI挑战赛】#01 快速开始
嵌入式硬件·mcu·物联网·iot
进击的小头4 天前
第8篇:PI控制器设计实战演练
c语言·python·mcu·算法
豆豆饿啦4 天前
【瑞萨AI挑战赛】#02 DL任务说明及训练
人工智能·嵌入式硬件·mcu·物联网·iot