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

06-01 1724阅读

注意:

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

更新秘钥例程

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

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

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

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

测试第3个例程

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

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

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

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

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

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

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

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

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

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

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

刷加载秘钥的代码

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

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

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

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


随机数的生成

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

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

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

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

CSE_DRV_InitRNG();; 初始化RNG

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

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

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

CSE_DRV_GenerateRND(RNG); 初始化RND

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

生成了一个128bit的随机数

调用的RNG是个空的值

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

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

用指令把RNG读出来

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

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

CSE_DRV_ExtendSeed(RNG); 扩展RNG

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

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

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

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

CSE_DRV_GenerateRND(RNG); 再计算RND

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

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

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

再看看PRNG和RNG的区别

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

第一次加载秘钥

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

秘钥的计算

再看下秘钥计算过程

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

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

用KeyID去计算M1

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

用第一个数组去计算M2

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

用M1和M2来计算M3

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

CBC计算M4

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

计算M5

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

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

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

对秘钥的理解

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

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

再返回秘钥管理看看

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

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

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

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

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

更新秘钥

上面的例程没更新成功

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

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

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

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

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

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

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

加载失败

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

恢复出厂,成功

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

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

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

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

重新初始化

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

失败

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

修改为2之后更新成功

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

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

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

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

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

ECB计算

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

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

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

调用接口即可

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

CBC计算

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

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

一样的调用接口即可

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

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。

目录[+]

取消
微信二维码
微信二维码
支付宝二维码