博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
RT600之OTFAD
阅读量:4591 次
发布时间:2019-06-09

本文共 2890 字,大约阅读时间需要 9 分钟。

目录

OTFAD(On the fly decryption)是针对QSPI flash的一个解密模块。板子上电后,OTFAD自动解密。

OTFAD的加密使用SB命令完成,SB的操作请参见博客RT600之SB。
OTFAD支持PUF跟OTP key两套解密操作。
加密过程:
OTFAD kek ==>加密得到加密的image,key==>对OTFAD kek加密得到加密的OTFAD kek,加密的OTFAD kek存储到固定位置
解密过程:
key ==> 解密OTFAD kek ==> 解密image
key使用PUF或者OTP key管理。

BD file解析

options {

}
sources {
myQspiConfile = "Image/unsigned_0xc000.bin"; #需要加密的image,使用LED demo
key_store = "Key_store/key_store_otfad.bin"; #如果使用PUF管理key,此处需要填入SB/OTFAD key对应的key store
}
keyblob(0){
(
start = 0x08001000, #加密起始地址
end = 0x080013ff, #加密结束地址
key = "000102030405060708090A0B0C0D0E0F",
counter = "0123456789ABCDEF"
)
}
keyblob(1){
(
start = 0x08001400,
end = 0x080033ff,
key = "000102030405060708090A0B0C0D0E0F",
counter = "0123456789ABCDEF"
)
}
keyblob(2){
(
start = 0x08005000,
end = 0x080063ff,
key = "000102030405060708090A0B0C0D0E0F",
counter = "0123456789ABCDEF"
)
}
keyblob(3){
(
start = 0x08007000,
end = 0x080083ff,
key = "000102030405060708090A0B0C0D0E0F",
counter = "0123456789ABCDEF"
)
}
section (0) {
load 0xc0000003 > 0xC000;
enable qspi 0xC000; #enable QSPI flash
erase 0x8000000..0x8010000; #擦除QSPI flash
load 0xf000000f > 0xd000;
enable qspi 0xd000; #写入FCB
load key_store > 0x08000800; #写入key store,使用master key的话不需要写入key store
encrypt(0){
load myQspiConfile > 0x08001000; #写入image,由于写入的区域是加密的,image会使用key blob0加密后存储到flash中
}
keywrap (0) {
load {
{0102030405060708090a0b0c0d0e0f00}} > 0x08000000; #使用key对key blob 0加密后写入QSPI offset 0x0
}
keywrap (1) {
load {
{0102030405060708090a0b0c0d0e0f00}} > 0x08000040;
}
keywrap (2) {
load {
{0102030405060708090a0b0c0d0e0f00}} > 0x08000080;
}
keywrap (3) {
load {
{0102030405060708090a0b0c0d0e0f00}} > 0x080000C0;
}
}

OTFAD key使用PUF管理

  1. 生成key store
    blhost -p COM5 -- key-provisioning enroll
    blhost -p COM5 -- key-provisioning set_user_key 2 Key_store/otfadkek.bin OTFAD kek key store,用于解密加密的OTFAD blok
    blhost -p com5 -- key-provisioning set_user_key 3 Key_store/SBKEK.bin SB用于receive-sb
    blhost -p com5 -- key-provisioning set_user_key 11 Key_store/userkey.bin 如果image签名,用于计算HMAC
    blhost -p com5 -- key-provisioning read_key_store Key_store/key_store_otfad.bin
  2. 生成SB,SB里面包含了如何配置OTFAD区域,OTFAD kek的存储,参考如上的bd file详解
    elftosb.exe -d -V -k Key_store\SBKEK.txt -f rt6xx -c BD_file\26_OTFAD_PUF_XIP_unsigned.bd -o encrypt.sb2
  3. 烧写shadow register
    jlink.write_register(0x40130180, 0x201) 开启PUF,设置QSPI启动
    jlink.write_register(0x401301AC, 0x1) enable OTFAD
  4. receive-sb后jlink reset,OTFAD解密成功后会boot

OTFAD使用master key管理

  1. 生成加密的SB
    elftosb.exe -d -V -k key/SBKEK.txt -f rt6xx -c BD_file/32_Unsigned_XIP_MasteKey_OTP.bd -o encrypt.sb2
  2. 根据bd文件中的OTFAD kek,计算得到写入fuse中的OTFAD key,使用如下的算法
    OTFAD_KEK = AES256_ENCRYPT(MASTERKEY256, OTFAD_key[127:0] fuse )
    也就是 OTFAD_key[127:0] fuse = AES256_DECRYPT(MASTERKEY256, OTFAD_KEK)
  3. 将master key,OTFAD key写入shadow register,使能OTFAD,烧写boot device为QSPI
  4. receive-sb后reset,OTFAD成功后会boot

转载于:https://www.cnblogs.com/richard-xiong/p/9924649.html

你可能感兴趣的文章
LET IT BE
查看>>
在线帮助你修改图片背景的工具 - Clipping Magic
查看>>
BizTalk动手实验(十三)EDI解决方案开发配置
查看>>
初学github
查看>>
iOS开发拓展篇—UIDynamic(重力行为+碰撞检测)
查看>>
extjs 下载文件 关键前后端代码
查看>>
.NET 4.0 兼容 .NET 2.0 的方法
查看>>
1001 Maximum Multiple(2018 Multi-University Training Contest 1)
查看>>
对Java对象的认识与理解
查看>>
python——父类与子类的一些说明
查看>>
2019年3月3日 2018-2019-2 20189205《移动平台应用开发实践》第二周作业
查看>>
MySQL 性能优化--优化数据库结构之优化数据类型
查看>>
软件工程之软件需求分析
查看>>
Electron简介和安装使用
查看>>
Improving Visual C++ Debugging with Better Data Display
查看>>
JDBC
查看>>
workspace 配置
查看>>
C# 针对特定的条件进行锁操作,不用lock,而是mutex
查看>>
Spring归纳
查看>>
MyEclipse Web Project导入Eclipse Dynamic Web Project,无法部署到tomcat问 题
查看>>