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 确认状态为未锁定 */
};