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
|