英飞凌 TC3XX单片机HSM内核开发-Secure Boot(六)

HSM UCB配置

UCB_HSM_ORIGUCB_HSM_COPY配置描述
  • UCB_HSM_ORIGUCB_HSM_COPY 用于配置HSM接口保护,这些配置仅在启用了HSM的设备中使用。

  • 如果启用了HSM调试模式,那么Cerberus(可能是某种安全相关的接口或实体)将拥有与HSM相同的访问权限;否则,Cerberus将被视为普通的片内总线主设备。

  • UCB_HSM_ORIGUCB_HSM_COPY 的内容在UCB(User Configuration Bus,用户配置总线)章节中有描述。
    - 表202 调试保护和密码安装

    • 保护和密码安装有几种状态:
      • UNREAD(未读取):重置值,未安装密码。
      • UNLOCKED(未锁定):从 UCB_DBG_ORIG 安装保护。从 UCB_DBG_ORIG 安装密码。
      • CONFIRMED(已确认):从 UCB_DBG_ORIG 安装保护。从 UCB_DBG_ORIG 安装密码。
      • ERRORED(错误):有两种情况,
      • 一种是 UNLOCKED 状态,从 UCB_DBG_COPY 安装保护和密码;
      • 另一种是 CONFIRMED 状态,同样从 UCB_DBG_COPY 安装。
      • ERRORED ERRORED(错误错误):安装了默认保护,未安装密码,SSW(Software Security Workshop,软件安全工作坊)退出并报错。
  • UCB_HSM_ORIG 确认状态由 DMU_HF_CONFIRM1.PROINHSMO 指示。

  • UCB_HSM_COPY 确认状态由 DMU_HF_CONFIRM1.PROINHSMC 指示。

  • HSM配置安装

    • 保护安装依赖于 UCB_HSM_ORIGUCB_HSM_COPY 的确认状态。
  • UCB_HSM_ORIGUCB_HSM_COPY 访问保护

    • 如果满足以下任一条件,UCB_HSM_ORIGUCB_HSM_COPY 将受到非HSM总线主设备的编程和擦除保护:
      • UCB_HSM 确认状态为 CONFIRMED(已确认)。
      • UCB_HSM 确认状态为 ERRORED(错误)。
    • UCB_HSM_ORIGUCB_HSM_COPY 可以被任何片内总线主设备读取。
地址寄存器在这里插入图片描述
寄存器配置
/**
 * @brief UCB_HSM_ORIG 和 UCB_HSM_COPY 的结构体定义
 * 内容      范围      描述
 */
typedef struct
{
    Ifx_UCB_PROCONHSM_t PROCONHSM; /**< @brief 0x000: HSM接口保护配置 */
    unsigned int reserved[123];    /**< @brief 0x010: 保留区域,从偏移0x010到0x1F0 */
    unsigned int confirmation;      /**< @brief 0x1F0: 32位代码,(始终相同) */
} Ifx_UCB_HSM_ORIG_t;

在这个结构体中:

  • Ifx_UCB_PROCONHSM_t 是一个先前定义的结构体类型,用于HSM接口保护配置,它位于结构体的起始位置(偏移量0x000)。
  • reserved 是一个整型数组,包含123个元素,用作保留区域,从偏移量0x010开始,直到0x1F0。这个区域通常不使用,可能用于对齐或者其他目的。
  • confirmation 是一个无符号整型变量,用作32位的代码确认,位于偏移量0x1F0的位置。

在这里插入图片描述

/**
 * @brief HSM接口保护配置的结构体定义
 */
typedef struct
{
    unsigned int HSMDBGDIS : 1;  /**< @brief HSM调试禁用,当设置为1时,禁用HSM调试 */
    unsigned int DBGIFLCK  : 1;  /**< @brief 调试接口锁定,当设置为1时,锁定调试接口 */
    unsigned int TSTIFLCK  : 1;  /**< @brief 测试接口锁定,当设置为1时,锁定测试接口 */
    unsigned int HSMTSTDIS : 1;  /**< @brief HSM测试禁用,当设置为1时,禁用HSM测试功能 */
    unsigned int HSMTRDIS  : 2;  /**< @brief HSM跟踪禁用,2位用于控制是否禁用HSM跟踪功能 */
    unsigned int HSMTRTYPE : 1;  /**< @brief HSM跟踪类型,用于定义HSM的跟踪模式 */
    unsigned int res       : 25; /**< @brief 保留位,用于将来可能的扩展,当前应保持为0 */
} Ifx_PROCONHSM_Bits;

在这个结构体中,每个成员都使用位域(bit-field)来表示,它们共同组成了一个无符号整型(unsigned int)变量。每个成员后面的冒号和数字表示该成员在位域中所占的位数。例如,HSMDBGDIS 占用第1位,DBGIFLCK 占用第2位,依此类推。保留位(res)占用最后的25位,通常在当前版本中不使用,为将来可能的功能保留。

/**
 * @brief UCB配置保护的状态枚举定义
 */
typedef enum
{
    ERASED = 0x00000000,     /**< @brief 擦除状态:行为与ERRORED状态相同 */
    UNLOCKED = 0x43211234,   /**< @brief 交付状态:UCB确认码被编程为UNLOCKED值 */
    CONFIRMED = 0x57B5327F,  /**< @brief 运行状态:UCB确认码被编程为CONFIRMED值 */
    ERRORED,                 /**< @brief 错误状态:存储的UCB确认码既不是CONFIRMED值也不是UNLOCKED值 */
} IfxUCBConfigureProtection_t;

在这个枚举类型中:

  • ERASED 表示擦除状态,其行为与 ERRORED 状态相同,数值为 0x00000000
  • UNLOCKED 表示解锁状态,此时UCB(User Configuration Bus,用户配置总线)的确认码被设置为 0x43211234
  • CONFIRMED 表示运行状态,UCB的确认码被设置为 0x57B5327F
  • ERRORED 表示错误状态,此时存储的UCB确认码既不是 CONFIRMED 值也不是 UNLOCKED 值。这通常表示存在某种配置错误或不一致。

总结

const Ifx_UCB_HSM_ORIG_t ucb_hsm_orig =
{
    /**< \brief 0x000: DF1用户模式配置 */
    .PROCONHSM.B.HSMDBGDIS = 0,  /**< \brief HSM调试禁用 */
    .PROCONHSM.B.DBGIFLCK = 0,   /**< \brief 调试接口锁定 */
    .PROCONHSM.B.TSTIFLCK = 0,   /**< \brief 测试接口锁定 */
    .PROCONHSM.B.HSMTSTDIS = 0,  /**< \brief HSM测试禁用 */
    .PROCONHSM.B.HSMTRDIS = 0,   /**< \brief HSM跟踪禁用 */
    .PROCONHSM.B.HSMTRTYPE = 0,  /**< \brief HSM跟踪类型 */
    .confirmation = UNLOCKED,    /**< \brief 确认状态为未锁定 */
};
  • 25
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

美好生活丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值