查看: 1367|回复: 0

[分享] LPC55Sxx Debug Authentication

[复制链接]
  • TA的每日心情
    开心
    2024-3-26 15:16
  • 签到天数: 266 天

    [LV.8]以坛为家I

    3298

    主题

    6545

    帖子

    0

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    32003
    最后登录
    2024-4-9
    发表于 2020-11-18 14:39:49 | 显示全部楼层 |阅读模式
    LPC55Sxx Debug Authentication


    1引言
    LPC55Sxx系列器件包括多种配置可能性调试端口以及调试固件的可能性。基本面调试原理,需要访问系统状态和系统信息,与安全原则冲突,需要限制资产的获取。因此,许多产品在部署产品之前完全禁用了调试访问。这导致产品设计团队进行适当的退货分析(RMA)面临的挑战。
    为了应对这些挑战,LPC55Sxx提供调试验证协议(DAP)作为一种机制来对具有以下功能的调试器(外部实体)进行身份验证:在授予对设备的调试访问权限之前,产品制造商批准的凭据。图1显示了一个示例调试身份验证的用法。 OEM是根密钥对的所有者。根密钥哈希已编程到设备中,在制造过程中。当最终客户遇到问题时,设备将被运送到维修中心。现场技术人员可以向OEM发送请求以提供调试证书证书(DC),该证书由私有根密钥签名。技术人员使用此DC提供调试访问权限。
    11.png
    2概述
    调试端口使用单线调试(SWD)连接。 ARMv8-M扩展指定了一种保护调试端口,可以选择打开已锁定设备上的调试端口。恩智浦提供调试身份验证
    基于不同大小的加密密钥的协议。
    1.0版使用RSASSA-PKCS1-v1_5签名验证,该签名验证使用具有2048位模数和32位指数的RSA密钥。
    1.1版使用RSASSA-PKCS1-v1_5签名验证,该签名验证使用具有4096位模数和32位指数的RSA密钥。
    LPC55Sxx上的调试身份验证方案可确保拥有所需调试凭据的调试器可以
    通过调试接口和设备的访问受限部分成功进行了身份验证。
    12.png
    •DAP:调试访问端口具有串行线端口(SWJ-DP),该端口可解释传入的数据并将其路由到适当的访问端口(AP)。
    •CPU0 AP:Cortex®的调试访问端口-M33核心实例化为CPU0。
    •CPU1 AP:用于实例化为CPU1的Cortex-M33内核的调试访问端口。 CM33的这个实例没有安全扩展(用于Armv8-M的TrustZone)。
    •DM-AP:调试邮箱(DM)的调试访问端口。 DM用于与从以下位置执行的代码进行通信通过发送/接收消息的ROM。
    —始终启用此端口,并且外部环境可以向ROM发送数据或从ROM接收数据。
    —此端口用于实施NXP调试身份验证协议。
    始终可以通过SWD接口访问SWJ-DP和DM-AP块。其余块(CPU0和CPU1 AP)在硬件状态机和软件控制下启用/禁用。CPU0的DAP在上电复位或复位引脚置位期间被禁用,并且如果/当遵循正确的调试启动过程。如果未使用DAP,则可以使用调试启用协议来启动调试会话。调试身份验证过程允许控制DBGEN,NIDEN,SPIDEN和SPNIDEN.如下所述,由Cortex-M33生成信号。
    DBGEN:对Arm8-M定义的非安全域进行TrustZone的侵入式调试。

    •断点和监视点,以使处理器停止特定的活动。
    •调试连接,用于检查和修改寄存器和内存,并提供单步执行。NIDEN:Arm8-M定义的非安全域的TrustZone的非侵入式调试。
    •有关指令执行和数据传输的信息的集合。
    •实时向芯片外提供跟踪,以将数据与开发工作站上的源代码合并在一起的工具,以供将来使用分析。
    SPIDEN:对Arm8-M定义的安全域的TrustZone进行侵入式调试。
    SPNIDEN:Arm8-M定义的安全域的TrustZone的非侵入式调试。
    默认情况下,CPU1处于复位模式,并且必须由CPU0释放复位才能使CPU1 AP可以访问。调试访问复位时禁用CPU1(Cortex-M33内核)的端口,并由硬件状态机启用。
    此端口具有附加控制,以启用/禁用以下所述的不同功能,这些功能可通过DEBUG_FEATURES寄存器(SYSCON中的偏移量0xFA4)和DEBUG_FEATURES_DP寄存器(SYSCON中的偏移量0xFA8)。
    调试器邮箱(DM)AP是基于寄存器的邮箱,可通过CPU0和设备的调试端口(DP)访问。
    单片机该端口始终处于启用状态,并且通过SWD接口进行通信的外部主机可以交换消息和数据引导代码从CPU0上的ROM执行。此端口用于实施NXP调试身份验证协议。
    13.png
    3示例示例应用程序
    3.1环境
    3.1.1硬件环境
    •董事会:
    — LPC55S69EVK-具有1B硅的Rev. A2。

    •调试器:
    —板上集成了CMSIS-DAP调试器。
    •杂项:
    — 1条Micro USB电缆。
    — PC。
    •板卡设置:
    —将微型USB电缆连接到PC和板上的P6链接之间,以加载和运行演示。
    3.1.2软件环境
    •工具链:
    — MCUXpresso IDE 11.1.1或更高版本
    — Python 3.6或更高版本
    -SPSDK 0.2.1-https://github.com/NXPmicro/spsdk
    • 软件包:
    — SDK_2.8.2_LPCXpresso55S69
    3.2步骤
    以下过程描述了如何安装SPSDK以及如何使用LPC55S69器件的示例配置来启用调试身份验证作为一项功能。在此示例中,所有调试端口都启用了调试身份验证,但系统内编程(ISP)模式。始终启用ISP模式。在以下情况下,ISP模式用于测试目的:
    加载了错误的配置。有可能重新加载配置。最终客户最终不希望这样做组态。可以在本应用笔记的相关软件包中找到该示例。
    小心设备配置。将SHA-256摘要写入CMPA或加载错误的配置时,无法回去解锁设备。
    3.2.1安装SPSDK
    1.在笔记本电脑中安装Python 3.6或更高版本。
    2.建议在工作区中创建一个Python虚拟环境:
    python -m venv nxp_env \ venv(该示例使用C:\ nxp路径作为根文件夹)。
    启用您的Python虚拟环境:
    venv \ Scripts \ activate
    有效激活虚拟环境后,您将在命令行中看到(venv)C:\ nxp>)。
    3.将SPSDK安装到VENV中:
    点安装-U https://github.com/NXPmicro/spsdk/archive/master.zip

    4.检查SPSDK是否正确安装在VENV中:


    它需要具有四个信任根(RoT)密钥对和一个调试凭据密钥(DCK)对。
    14.png
    3.2.2加载/生成密钥
    RSA密钥对用于身份验证。私钥用于签署调试凭证证书和Root的哈希值信任公钥(RoTK)的一部分存储在MCU(PFR)的非易失性存储器中。需要找到已创建和使用的加密密钥或生成用于保护设备的密钥对或生成
    设备配置和安全性的新密钥对:
    openssl genrsa -out rotk0_rsa_2048.pem 2048

    openssl rsa -in rotk0_rsa_2048.pem -pubout> rotk0_rsa_2048.pub
    15.png


    否则,请使用NXPKEYGEN工具在VENV中生成密钥对:
    16.png
    3.2.3创建设备配置
    LPC55系列设备具有称为“受保护的闪存区域(PFR)”的特殊存储器。PFR包括客户制造可编程区域(CMPA)和客户现场可编程区域(CFPA)。最初,有可能生成示例配置文件:
    pfr用户配置-d lpc55s6x -t cmpa -o键\ cmpa_config.json
    pfr用户配置-d lpc55s6x -t cfpa -o keys \ cfpa_config.json
    对于调试身份验证,以下是最重要的寄存器:
    CMPA:
    CC_SOCU_PIN:指定每个调试域的调试访问限制的配置。在PIN码中,您可以设置0-访问由调试身份验证控制或1-访问限制始终固定。
    CC_SOCU_DFLT:指定每个调试域的调试访问限制的配置。如果固定访问限制在选择PIN,然后选择1启用和0-禁用。如果在PIN中选择了调试身份验证,则唯一正确的设置DFLT为0。
    PIN / DFLT位域设置:
    •1/1-始终启用调试访问(固定)
    •1/0-始终禁用调试访问(固定)
    •0/0-使用调试身份验证启用调试访问
    CC_SOCU_PIN和CC_SOCU_DFLT寄存器中的以下位域为MCU配置了不同的安全性设置:
    NIDEN:控制CPU0的TrustZone非安全域的非侵入式调试
    DBGEN:控制CPU0的TrustZone非安全域的侵入式调试
    SPNIDEN:控制CPU0的TrustZone安全域的非侵入式调试
    SPIDEN:控制CPU0的TrustZone安全域的侵入式调试
    TAPEN:控制TAP(测试访问点)控制器
    CPU1_DBGEN:控制CPU1的侵入式调试
    ISP_CMD_EN:控制是否可以发布ISP启动流
    FA_CMD_EN:控制是否可以发出“设置FA模式”命令
    ME_CMD_EN:控制是否可以发出批量擦除命令
    CPU1_NIDEN:控制CPU1的非侵入式调试
    UUID_CHECK:在DC中的DAR值指定的UUID期间启用检查
    VENDOR_USAGE:在调试身份验证响应(DAR)处理期间,设备将检查在调试凭据证书的“供应商使用情况”字段与“ VENDOR_USAGE”中编程的值完全匹配设备配置字段。来自CMPA.VENDOR_USAGE的高两个字节,来自CFPA.VENDOR_USAGE的低两个字节。
    RKTH:MCU支持多达四个RoT密钥,用于安全启动和调试身份验证。后来,这些单独的RoT密钥可以撤销。根密钥表哈希(RKTH)是CMPA中编程的值,它是RoT的SHA-256哈希公钥。
    17.png
    CFPA:
    版本:CFPA更新机制会在每次更新时检查版本的值。新版本必须高于前一个。
    ROTKH_REVOKE:MCU中编程的RoT密钥以后可以撤消。该字段指定撤销哪些键并且仍然可以用于调试身份验证和安全启动。
    VENDOR_USAGE:在调试身份验证响应(DAR)处理期间,设备将检查在调试凭据证书的“供应商使用情况”字段与“ VENDOR_USAGE”中编程的值完全匹配设备配置字段。来自CMPA.VENDOR_USAGE的高两个字节,来自CFPA.VENDOR_USAGE的低两个字节。
    DCFG_CC_SOCU_PIN / DCFG_CC_SOCU_DFLT:这些可以进一步限制在CMPA中配置的调试访问。因为如果CMPA是在制造过程中编程的,则CFPA设置可以在以后更新以加强限制。 CFPA设置可以编程为与CMPA相同,以保持相同的限制。以下是可能的组合,其中CFPA与CMPA不同,它加强了调试访问限制:
    CMPA.DCFG_CC_SOCU-> CFPA.DCFG_CC_SOCU
    •启用固定(1/1)->通过调试身份验证启用(0/0)
    •启用固定(1/1)->禁用固定(1/0)
    •通过调试身份验证(0/0)启用->禁用固定(1/0)
    修改配置JSON文件后,可以生成二进制文件。 “ pfr生成”的输入
    命令是CMPA / CFPA JSON配置输入文件-c,在需要时计算逆寄存器-i,信任密钥的根-f(具有正确的RoT密钥顺序很重要)或-e(如果使用ELFTOSB配置文件)以及BIN的输出名称文件-o。例如,附加了cmpa_example_config.json和cfpa_example_config.json文件(请注意,是LPC55S69的类似CFPA的版本的更新规则,它必须高于以前的CFPA内容,依此类推)设备。对于cmpa.bin,仅使用以下选项之一。


    3.2.4创建调试身份验证证书
    恩智浦提供了调试身份验证协议,这是一种质询-响应机制。调试器发送调试信息时
    通过调试邮箱向设备发送身份验证启动命令,设备会生成调试身份验证质询

    (DAC)。 DAC消息包含以下元素,这些元素在MCU用户手册的“调试身份验证挑战”部分中有进一步说明。


    未完......
    点击查看完整版>>>

    签到签到
    回复

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2024-4-20 04:16 , Processed in 0.109242 second(s), 20 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

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