请选择 进入手机版 | 继续访问电脑版
查看: 1098|回复: 2

[原创] 使用J-LINK实现i.MX RT10xx 加密量产

[复制链接]

该用户从未签到

22

主题

50

帖子

0

高级会员

Rank: 4

积分
650
最后登录
2024-4-13
发表于 2022-2-23 14:45:56 | 显示全部楼层 |阅读模式
本帖最后由 lszisgood 于 2022-2-23 14:48 编辑

i.MX RT10xx 加密量产方案
    i.MX RT10xx使用外置Flash的方案,客户不用担心加密后的程序有被窃取的风险。兼顾考虑代码安全与客户大规模量产时的效率,介绍下面一种代码加密解决方案:用户自定义Key单引擎BEE解密XIP执行。
1.    BEE安全机制
通过BEE(Bus Encryption Engine) 使用的AES-128算法对FlexSPI Flash上的加密代码动态解密,XIP(Execute-In-Place)执行解密后的代码。
考虑产线的量产效率,采用用户自定义AES-128秘钥SW-GP2(Software General Purpose Key2)加密方式。保存在FlexSPI Flash的加密代码只与SW-GP2秘钥相关。产线在PCBA加工过程中可以采用“先烧后贴”的离线烧录方式,把已经AES-128加密的代码烧录到Flash芯片。也可以通过SWD调试接口下载烧写Flash,或者其他第三方工具烧写Flash。
2.    如何生成用户自定义Key的加密Image
现在有多种工具可供用户生成加密Image。例如可以使用NXP-MCUBootUtility(https://github.com/JayHeng/NXP-MCUBootUtility)开源工具。
参考网上的操作说明文档,在软件界面【Secure Boot Type】选择“BEE Encrypted ImageBoot” ,然后点击【Browse】按钮选择一个原始用户代码image文件,【Key Storage Region】选择“Flexible User Keys”后点击【Advanced Key Settings】按钮配置BEE加密的参数,关键参数是16字节的用户秘钥,最后点击【Encrypt Bootable Image】按钮即可生成加密后的烧写Flash文件。

选择“Flexible User Keys”
设定AES-128加密秘钥。这个秘钥需要妥善保存,避免泄露。
NXP-MCUBootUtility可以生成加密的Image文件,供后续烧写到Flash芯片。
3.    如何保护用户自定义Key秘钥
从上述操作过程可以知道,BEE加密代码的安全核心是如何保护用户自定义Key秘钥不被泄露。如果黑客拿到这个Key,就可以破解存在外部Flash里的image密文。
将用户自定义的Key烧录进了RT10xx的eFuseSW_GP2(Fuse 0x690 - 0x6c0)区域里。并对相关区域设置Fuse区域访问权限(读保护,写保护,覆盖保护)。这些区域一经烧录,不能被更改,也不能被回读。从而保证了秘钥的安全性,保证代码不会被破解。
4.    如何烧写eFuse
eFUSE初始状态下为 0,编程烧写后可以将 bit 从 0 改成 1,一旦某 bit 被烧写成 1 后便再也无法被修改。除了 OTP 特性外,还有 Lock 控制特性, WP,即写保护,被保护的 eFUSE 区域只可读,不可写;OP,是覆盖保护,被保护的 eFUSE 区域只能被写一次; RP(WP+OP+RP),是访问保护,被保护的 eFUSE 区域及其对应的 shadow register 均不能被读写。
RT10xx内部有一个硬件 IP 模块叫OCOTP_CTRL。通过OCOTP 控制器对 eFUSE实现烧写eFuse。例程SDK_2_10_0_EVK-MIMXRT1020\boards\evkmimxrt1020\driver_examples\ocotp演示了如何烧写eFuse。用户可以在这个例程的基础上,实现烧写SW_GP2秘钥、Lock区域保护功能。
用户也通过Flashloader 配套的 blhost.exe 上位机工具实现 eFUSE 的烧写。在RT10xx的SerialDownload模式下引导启动 Flashloader 并且使用 blhost 与 Flashloader 通信,通过efuse-program-once 这个命令实现eFuse烧写。
5.    如何使用J-Link实现量产
要实现量产编程烧写,主要是下面二个步骤。
5.1  如何使用J-Link烧写Flash
Sergger JLINK/JFlash已经提供了Flash烧写算法。如果需要适配其他QSPI Flash型号,请到github下载第三方Flash下载算法:https://github.com/jicheng0622/All-in-One-Flash-Algorithm-for-RT1050-RT1020
5.2  如何使用J-Link烧写eFuse
参考例程driver_examples\ocotp,增加SW_GP2秘钥烧写,Lock读写保护,JTAGDisable等功能。eFuse烧写程序运行在ITCM内存,由J-LINK脚本命令“loadbin“加载代码到ITCM内存,“g”命令跳到指定地址执行。
6.    如何实现产品升级维护
如果需要更新升级Flash的代码,只需要用相同的AES-128秘钥加密新的用户代码,然后通过J-LINK或者其他方式重新烧写到QSPI Flash中即可。

i.MX RT10xx 加密量产方案.pdf (886.05 KB, 下载次数: 38)
回复

使用道具 举报

  • TA的每日心情
    开心
    2024-4-10 22:38
  • 签到天数: 1335 天

    [LV.10]以坛为家III

    88

    主题

    4292

    帖子

    12

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    9049
    最后登录
    2024-4-13
    发表于 2022-2-23 15:54:10 | 显示全部楼层
    jlink 就是嵌入式开发的神器啊

    量产工具这操作也不复杂的
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2024-4-10 22:38
  • 签到天数: 1335 天

    [LV.10]以坛为家III

    88

    主题

    4292

    帖子

    12

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    9049
    最后登录
    2024-4-13
    发表于 2022-2-23 15:55:41 | 显示全部楼层
    pdf文档里面有更加详细的操作说明。
    大家不要忘记下载保存

    谢谢楼主了
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2024-4-18 17:24 , Processed in 0.114522 second(s), 21 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

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