SB(secure binary)文件是从kinetis ROM沿用下来的一项功能。目的是将一些ROM支持的操作以SB的形式脚本话,ROM识别到SB文件然后进行数据的处理。
RT600支持PUF以及master key两种方式对SB进行处理。
使用PUF处理SB
- Generate SB key store
- 准备SBKEK.bin文件,数据如下
- 生成SB key store
blhost -p com5 -- key-provisioning enroll
blhost -p com5 -- key-provisioning set_user_key 3 SBkek.bin
blhost -p com5 -- key-provisioning read_key_store key_store_SBkek.bin
- 准备SBKEK.bin文件,数据如下
- Generate encrypted SB file
- 准备SBkek.txt,数据内容如下.可以发现SBKEK.txt跟SBKEK.bin的数据是倒序的
- 准备commandFile.bd文件,这里面的内容就是ROM可以识别的脚本。制作成SB文件的命令如下
elftosb.exe -d -V -k SBkek.txt -f rt6xx -c commandFile.bd -o test_use_keystore.sb2
commandFile.bd内容如下,其功能是对0xd000,0xc000出写入数据
- 准备SBkek.txt,数据内容如下.可以发现SBKEK.txt跟SBKEK.bin的数据是倒序的
- Decrypt and execute SB file
- 配置shadow register。使能key store
jlink.write_register(0x40130180, 0x200)
- 写入key store
blhost -p com5 -j -- key-provisioning write_key_store key_store_SBkek.bin
- 执行SB,成功后会返回success。查看0xd000,0xc000发现成功写入bd file中的数据
`blhost -p com5 -j -- receive-sb-file 1_use_keystore.sb2'
- 配置shadow register。使能key store
我们来回顾下使用PUF处理SB的流程
- 调用PUF生成key store,key store的目的是解密SB
- 使用key生成加密的SB file。这里使用的key跟生成key store的key是倒叙的。
- 写入shadow register使能PUF。执行receive-sb的时候,ROM会自动调用key store去解密SB并执行。
使用master key处理SB
- 生成加密的SB file
- 准备SBKEK.txt, 数据如下
000102030405060708090a0b0c0d0e0f00112233445566778899aabbccddeeff
- 获取derived key
SBKEK=AES256(MASTERKEY256,0300000000000000000000000000000004000000000000000000000000000000)
使用如下的网址,根据上面的算法得到derived key
http://aes.online-domain-tools.com/
- 将derived key写入SBkek.derived.txt,生成SB file
elftosb.exe -V -f rt6xx -c "commandFile.bd" -k "SBkek_derived.txt" -o "test00.sb2"
- 准备SBKEK.txt, 数据如下
- 将SBKEK写入shadow register,写入shadow register中的key跟SBKEK.txt中的key是按word倒序的。
jlink.write_register(0x401301c0, 0xccddeeff)
jlink.write_register(0x401301c4, 0x8899aabb)
jlink.write_register(0x401301c8, 0x44556677)
jlink.write_register(0x401301cc, 0x00112233)
jlink.write_register(0x401301d0, 0x0c0d0e0f)
jlink.write_register(0x401301d4, 0x08090a0b)
jlink.write_register(0x401301d8, 0x04050607)
jlink.write_register(0x401301dc, 0x00010203)
- 执行SB文件,返回success后。查看0xc000,0xd000发现数据已经填入,SB执行成功
blhost -p com5 -j -- receive-sb-file test00.sb2
回顾下使用master key对SB的处理过程。
相比于使用PUF解密,使用master key去解密SB,我们不需要写shadow register去使能master key。ROM默认使用master key。
第一步,我们需要准备SBKEK,将SB kek根据1.2中的算法加密,使用加密后的key生成加密的SBfile
第二步,我们将SBKEK按照word倒序写入master key对应的shadow register。
receive-sb的时候,ROM识别到使用master key来处理SB。首先ROM会从master key的shadow register中获取key,然后使用步骤1.2中的算法得到derived key,然后对SB进行解密运行。
总结,使用PUF我们将key直接交给PUF管理,key的呈现方式是key store。
使用Master key,我们会对master key进行加密处理后对SB进行加密,解密亦是如此。增加了key的复杂性。