本帖最后由 stm1024 于 2021-10-21 11:38 编辑
LPC55Sxx是一款基于ArmCortex® M33 的微控制器,可用于嵌入式 应用。其中一个重要特性支持公钥签名映象安全启动功能,详细理论知识请参考AN12283, 此应用笔记内容比较丰富,对于初次接触安全启动的用户,也许无从下手,一不小心容易锁死芯片。所以本文主要针对首次接触安全启动的用户,只讲述步骤,严格按照此步骤操作,就可以了解安全启动的应用过程。关于签名和加密原理,可以网上搜索学习。
注:本文使用LPC55s69 1B芯片,0A版本不适用,请看考AN12283(但本人不建议使用0A版)。 对于LPC55Sxx 其它系列,比如LPC55s1x/LPC55S0x, CMPA和CPFA地址不同,具体请查看手册,初学者,建议用LPC55s69 1B跟着步骤操作。
所需工具:
主要步骤: 一. 制作SB2.1 文件 二. 配置硬件 三. 烧写SB2.1 四. 测试结果
一. 制作SB2.1 文件 安全启动需要使用SB2.1文件格式,所以首先将应用工程的Image做成此格式。 SB2.1文件=原始.bin文件+signed+SBKEK
1. 准备证书和钥匙: sign image 需要证书和秘钥,所以先生成四把钥匙和四个证书,用openssl 工具。 注意:openssl 时,需要需要使用管理员权限。 将生成证书时用到的文件x509_v3.ext(此文件具体功能可查看AN12283或者网上搜索生成证书相关内容.)放在 openssl文件夹下(OpenSSL-Win64\bin),执行命令:(命令也可参考附件中certificates_example.cmd) ::Generate4 private keys using OpenSSL openssl.exegenrsa -out private_key_1_2048.pem 2048 openssl.exegenrsa -out private_key_2_2048.pem 2048 openssl.exegenrsa -out private_key_3_2048.pem 2048 openssl.exegenrsa -out private_key_4_2048.pem 2048
::Createcertificate signing request openssl.exereq -new -key private_key_1_2048.pem -out certificate_1_2048.csr -extensionsv3_ca openssl.exereq -new -key private_key_2_2048.pem -out certificate_2_2048.csr -extensionsv3_ca openssl.exereq -new -key private_key_3_2048.pem -out certificate_3_2048.csr -extensionsv3_ca openssl.exereq -new -key private_key_4_2048.pem -out certificate_4_2048.csr -extensionsv3_ca
::Selfsigncertificates ::x509_v3.extfile contain: ::authorityKeyIdentifier=keyid,issuer ::basicConstraints=CA:FALSE ::keyUsage= digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment openssl.exex509 -req -days 365 -in certificate_1_2048.csr -signkey private_key_1_2048.pem-sha256 -outform der -out certificate_1_2048.der.crt -extfile x509_v3.ext-set_serial 0x3cc30000babadeda openssl.exex509 -req -days 365 -in certificate_2_2048.csr -signkey private_key_2_2048.pem-sha256 -outform der -out certificate_2_2048.der.crt -extfile x509_v3.ext-set_serial 0x3cc30000babadeda openssl.exex509 -req -days 365 -in certificate_3_2048.csr -signkey private_key_3_2048.pem-sha256 -outform der -out certificate_3_2048.der.crt -extfile x509_v3.ext-set_serial 0x3cc30000babadeda openssl.exex509 -req -days 365 -in certificate_4_2048.csr -signkey private_key_4_2048.pem-sha256 -outform der -out certificate_4_2048.der.crt -extfile x509_v3.ext-set_serial 0x3cc30000babadeda
生成四把钥匙和四本证书如下:
2. 开始sign: 下载完成后,点击elftosb-gui(win).cmd 打开GUI界面: -选择芯片型号,LPC55s69; -点击Image 选项卡,NEW按钮,Image file处选择应用工程编译生成的.bin文件,使用之前确保此文件烧写到芯片后,程序正常运行。 -选择 Internal flash(XIP), Signed, DisableTZ-M,如上图所示。也可根据情况自行修改配置。 -Signature 一栏需要添加之前生成的四本证书和一把钥匙。 -Output添加输出signed image名字。 -点击Process,就完成image 的Sign.
-注意,保存右侧process log 中的RKTH,后面还会用到。
3. 利用SBKEK加密 使用elftosb.exe command 命令生成SB2.1文件。 此处需要说明,LPC55s59 0A版本芯片支持SB2.0,LPC55s69 1B版本支持SB2.1,不同版本的SB文件格式是不一样的,现在基本都是1B版本芯片,所以此处用SB2.1。 命令: C:\Users\nxa13777\Desktop\Secure_boot_cn\elftosb_gui_1.0.12\bin\elftosb\win>elftosb.exe-f lpc55xx -k "sbkek.txt" -c "commandFile.bd" -o "lpcxpresso55s69_hello_world_singed_secured.sb2"-s private_key_1_2048.pem -S certificate_1_2048.der.crt -Rcertificate_1_2048.der.crt -R certificate_2_2048.der.crt -Rcertificate_3_2048.der.crt -R certificate_4_2048.der.crt -h"RKTH.bin" "lpcxpresso55s69_hello_world_signed.bin"
备注: >"lpcxpresso55s69_hello_world_signed.bin"- 注意此文件必须是signed文件,否则程序启动不起来。 > 命令中设计的到文件最好都放到elftosb.exe同目录下。 >sbkek.txt – SB Key,可以直接用附件中的。 >commandFile.bd – 配置文件,可以直接用附件中的。 >pcxpresso55s69_hello_world_singed_secured.sb2- 生成的SB2.1文件。 >RKTH.bin – Sign时输出的RKTH。
二.配置硬件 1. 配置CMPA,使用elftosb-gui工具。 将芯片进入ISP-UART模式,配置如下: 备注: >千万不能选在”Seal securityconfiguration!!”,一旦选择,CMPA无法再更改,如果配置错误,芯片就废掉了。 如果没有使能Seal,可以通过烧写空的CPMA.bin更改配置: blhost -p COM14 write-memory 0x9E400 CMPA_empty.bin >此处的RKTH是前文sign文件时生成的。
点击运行。 CMPA配置完成,处理过程可以从GUI右侧log中查看。
2. 配置CFPA 进入ISP 模式,将CFPA.bin烧到芯片CFPA地址,使用blhost工具。 烧写命令: blhost -p COM13 write-memory 0x9DE00 CFPA.bin
3. 烧写SBKEK到芯片 进入ISP模式,使用elftosb-gui和芯片连接,烧写SBKEK文件。
SB 密钥文本文件示例: AC801E99BD3592E419B757EADC0985B3D3D0BC0FDB6B057AA88252204C2DA732 注:此秘钥需要牢记,以后更新image时都需要用到。 至此,硬件配置完成。
三. 烧写SB2.1 命令:
blhost -p COM13receive-sb-file lpcxpresso55s69_led_blinky.sb2
四. 测试结果 烧写完成后,关闭blhostcommand窗口,打开串口调试助手,波特率设置115200,重启开发板,可以看到hello world打印到了串口助手。从串口助手发送字符给开发板,可以收到回显。说明程序正常运行,安全启动成功。
以后需要更新image时,只需参考步骤一中的2,3,和步骤三, 证书和SBKEK保存好,每次更新都需要用到。
|