RT600之SB

SB(secure binary)文件是从kinetis ROM沿用下来的一项功能。目的是将一些ROM支持的操作以SB的形式脚本话,ROM识别到SB文件然后进行数据的处理。
RT600支持PUF以及master key两种方式对SB进行处理。

使用PUF处理SB

  1. Generate SB key store
    1. 准备SBKEK.bin文件,数据如下
    2. 生成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
  2. Generate encrypted SB file
    1. 准备SBkek.txt,数据内容如下.可以发现SBKEK.txt跟SBKEK.bin的数据是倒序的
    2. 准备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出写入数据
  3. Decrypt and execute SB file
    1. 配置shadow register。使能key store
      jlink.write_register(0x40130180, 0x200)
    2. 写入key store
      blhost -p com5 -j -- key-provisioning write_key_store key_store_SBkek.bin
    3. 执行SB,成功后会返回success。查看0xd000,0xc000发现成功写入bd file中的数据
      `blhost -p com5 -j -- receive-sb-file 1_use_keystore.sb2'

我们来回顾下使用PUF处理SB的流程

  1. 调用PUF生成key store,key store的目的是解密SB
  2. 使用key生成加密的SB file。这里使用的key跟生成key store的key是倒叙的。
  3. 写入shadow register使能PUF。执行receive-sb的时候,ROM会自动调用key store去解密SB并执行。

使用master key处理SB

  1. 生成加密的SB file
    1. 准备SBKEK.txt, 数据如下
      000102030405060708090a0b0c0d0e0f00112233445566778899aabbccddeeff
    2. 获取derived key
       SBKEK=AES256(MASTERKEY256,0300000000000000000000000000000004000000000000000000000000000000)
      使用如下的网址,根据上面的算法得到derived key
      http://aes.online-domain-tools.com/
    3. 将derived key写入SBkek.derived.txt,生成SB file
      elftosb.exe -V -f rt6xx -c "commandFile.bd" -k "SBkek_derived.txt" -o "test00.sb2"
  2. 将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)
  3. 执行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的复杂性。

原文地址:https://www.cnblogs.com/richard-xiong/p/9916762.html