查看: 2635|回复: 3

[分享] 快速入门LPC55Sxx安全启动( Secure Boot)

[复制链接]

该用户从未签到

656

主题

6312

帖子

0

超级版主

Rank: 8Rank: 8

积分
19990
最后登录
2024-4-23
发表于 2021-10-21 10:54:59 | 显示全部楼层 |阅读模式
本帖最后由 stm1024 于 2021-10-21 11:38 编辑

LPC55Sxx是一款基于ArmCortex® M33 的微控制器,可用于嵌入式 应用。其中一个重要特性支持公钥签名映象安全启动功能,详细理论知识请参考AN12283, 此应用笔记内容比较丰富,对于初次接触安全启动的用户,也许无从下手,一不小心容易锁死芯片。所以本文主要针对首次接触安全启动的用户,只讲述步骤,严格按照此步骤操作,就可以了解安全启动的应用过程。关于签名和加密原理,可以网上搜索学习。

注:本文使用LPC55s69 1B芯片,0A版本不适用,请看考AN12283(但本人不建议使用0A版)。
对于LPC55Sxx 其它系列,比如LPC55s1x/LPC55S0x, CMPA和CPFA地址不同,具体请查看手册,初学者,建议用LPC55s69 1B跟着步骤操作。

所需工具:
Openssl  elftosb-gui blhost

主要步骤:
一.  制作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

生成四把钥匙和四本证书如下:
1.png

2. 开始sign:
利用elftosb-gui工具,从NXP官网下载elftosb-gui
下载完成后,点击elftosb-gui(win).cmd 打开GUI界面:
2——1.png
-选择芯片型号,LPC55s69;
-点击Image 选项卡,NEW按钮,Image file处选择应用工程编译生成的.bin文件,使用之前确保此文件烧写到芯片后,程序正常运行。
-选择 Internal flash(XIP), Signed, DisableTZ-M,如上图所示。也可根据情况自行修改配置。
-Signature 一栏需要添加之前生成的四本证书和一把钥匙。
-Output添加输出signed image名字。
-点击Process,就完成image 的Sign.

-注意,保存右侧process log 中的RKTH,后面还会用到。
3_3.png

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模式,配置如下:
4.png
备注:
>千万不能选在”Seal securityconfiguration!!”,一旦选择,CMPA无法再更改,如果配置错误,芯片就废掉了。
如果没有使能Seal,可以通过烧写空的CPMA.bin更改配置:
blhost -p COM14 write-memory 0x9E400 CMPA_empty.bin
>此处的RKTH是前文sign文件时生成的。

点击运行。
5.png
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时都需要用到。
6.png
至此,硬件配置完成。

三. 烧写SB2.1
命令:
blhost -p COM13receive-sb-file lpcxpresso55s69_led_blinky.sb2
7.png

四. 测试结果
烧写完成后,关闭blhostcommand窗口,打开串口调试助手,波特率设置115200,重启开发板,可以看到hello world打印到了串口助手。从串口助手发送字符给开发板,可以收到回显。说明程序正常运行,安全启动成功。
8.png

以后需要更新image时,只需参考步骤一中的2,3,和步骤三, 证书和SBKEK保存好,每次更新都需要用到。


commandFile.zip

360 Bytes, 下载次数: 4, 下载积分: 威望 1

sbkek.zip

203 Bytes, 下载次数: 2, 下载积分: 威望 1

x509_v3.zip

276 Bytes, 下载次数: 3, 下载积分: 威望 1

certificates_example.zip

599 Bytes, 下载次数: 2, 下载积分: 威望 1

CMPA_empty.zip

178 Bytes, 下载次数: 3, 下载积分: 威望 1

cfpa.zip

179 Bytes, 下载次数: 2, 下载积分: 威望 1

回复

使用道具 举报

  • TA的每日心情
    开心
    2024-3-26 15:16
  • 签到天数: 266 天

    [LV.8]以坛为家I

    3298

    主题

    6545

    帖子

    0

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    32012
    最后登录
    2024-4-9
    发表于 2021-10-21 11:00:04 | 显示全部楼层
    感谢分享!
    签到签到
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2024-4-9 17:01
  • 签到天数: 1478 天

    [LV.10]以坛为家III

    203

    主题

    2万

    帖子

    64

    超级版主

    Rank: 8Rank: 8

    积分
    92616
    最后登录
    2024-4-22
    发表于 2021-10-21 11:39:55 | 显示全部楼层
    感谢分享,把“印象”修改为了“映象” TS1 - 副本 (3).jpg TS1 - 副本 (2).jpg TS1 - 副本 (4).jpg TS1 - 副本 (5).jpg TS1 - 副本 (6).jpg TS1 - 副本 (7).jpg TS1 - 副本 (8).jpg TS1 - 副本 (9).jpg TS1 - 副本 (10).jpg TS1.jpg
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    656

    主题

    6312

    帖子

    0

    超级版主

    Rank: 8Rank: 8

    积分
    19990
    最后登录
    2024-4-23
     楼主| 发表于 2021-10-21 13:30:40 | 显示全部楼层
    stm1024 发表于 2021-10-21 11:39
    感谢分享,把“印象”修改为了“映象”

    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-4-23 16:47 , Processed in 0.118712 second(s), 23 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表