打印
[AURIX™]

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

[复制链接]
401|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tpgf|  楼主 | 2024-8-12 15:27 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
HSM UCB配置
UCB_HSM_ORIG和UCB_HSM_COPY配置描述
UCB_HSM_ORIG 和 UCB_HSM_COPY 用于配置HSM接口保护,这些配置仅在启用了HSM的设备中使用。

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

UCB_HSM_ORIG 和 UCB_HSM_COPY 的内容在UCB(User Configuration Bus,用户配置总线)章节中有描述。



保护和密码安装有几种状态:
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_ORIG 和 UCB_HSM_COPY 的确认状态。
UCB_HSM_ORIG 和 UCB_HSM_COPY 访问保护

如果满足以下任一条件,UCB_HSM_ORIG 和 UCB_HSM_COPY 将受到非HSM总线主设备的编程和擦除保护:
UCB_HSM 确认状态为 CONFIRMED(已确认)。
UCB_HSM 确认状态为 ERRORED(错误)。
UCB_HSM_ORIG 和 UCB_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 确认状态为未锁定 */
};
————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/qq_36750998/article/details/140844041

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1931

主题

15611

帖子

11

粉丝