目录
7功能描述
https://mp.weixin.qq.com/s/E6Q5g-trHn_KkRuvXNbZgQ
7.1 Crypto keysubmodule
7.2 Certificate Submodule
7.2.1 通用行为
7.2.2初始化
7.2.3 Certificate 配置
7.2.4操作模式
7.3自定义处理
7.3.1处理自定义服务请求
7.4 Security Events
参考 Autosar CP-R24-11
7功能描述
密钥管理模块大致可以分为两个部分:加密密钥子模块和证书子模块。加密密钥子模块主要用于与密钥分发实体(密钥主控)交互,该实体负责生成密钥或直接提供密钥材料。这些密钥会分配给CSM的加密密钥,并存储在专用的NVM块中,或者可以存储为各自加密驱动的密钥。证书子模块允许配置证书链,提供存储和验证证书的接口。证书中包含的公钥还可以分配给CSM密钥,以便在加密任务中使用。
[SWS_KeyM_00001]
如果将 Key MCryptoKeyManagerEnabled 设置为 FALSE,则密钥管理器的加密密钥子模块应完全禁用。在这种情况下,不得提供任何功能,也不得分配其他操作不需要的资源。
[SWS_KeyM_00002] 上游需求:SRS_CryptoStack_00013, SRS_CryptoStack_00007
如果 KeyMCertificateManagerEnabled 设置为 FALSE,则密钥管理器中的证书子模块支持将被完全禁用。在这种情况下,与证书操作相关的功能将不可用,并且不会分配任何资源。
7.1 Crypto keysubmodule
加密密钥子模块用于初始化、更新和维护ECU的加密密钥材料。一个使用案例是为安全的车载通信提供密钥,这些密钥需要分发给相关的ECU。这些密钥应提供给CSM密钥,而CSM密钥分配给用于Secured I-PDU认证的加密任务。因此,从建模的角度来看,将key master 提供的密钥分配给用于相应Secured-I PDU的CSM密钥和任务是至关重要的。这是车辆中的一项整体任务,并以相同方式影响多个ECU。加密密钥子模块的一个目的就是支持这一操作。
key master 可以直接位于车辆内,以便内部协调密钥生成,例如作为某个特定的ECU。也可以使用云端的后端系统生成密钥材料,并以安全的方式将必要数据提供给ECU。通常,诊断命令用于密钥主控与加密密钥子模块之间的直接或间接通信。
[SWS_KeyM_00003] 上游需求:SRS_CryptoStack_00028, SRS_CryptoStack_00103
加密密钥子模块可以配置为以会话方式执行加密密钥操作。通过这种方式,诸如 KeyM_Prepare() 或 KeyM_Update() 的密钥操作仅在会话开启期间被接受。
[SWS_KeyM_00004] 上游要求:SRS_CryptoStack_00028
会话由调用 KeyM_Start() 启动。随后可以执行密钥操作,直到通过调用 KeyM_Finalize() 关闭会话。
[SWS_KeyM_00005] 上游要求:SRS_CryptoStack_00028 默认情况下,KeyM_Start() 函数不会考虑任何输入数据或长度信息,也不会提供任何输出数据,输出数据长度也不会被更改。
[SWS_KeyM_00006] 上游要求:SRS_CryptoStack_00115
如果配置选项 KeyMCryptoKeyHandlerStartFinalizeEnabled 设置为 TRUE,则可以选择调用密钥处理程序。KeyM_Start() 函数将依次调用 KeyM_KH_Start() 函数,并传入与 KeyM_Start() 相同的参数。KeyM_KH_Start() 的返回值将作为 KeyM_Start() 的返回值。
原理:KeyM_KH_Start() 函数可以执行 OEM 特定的检查,例如对任何输入数据进行签名验证,以证明密钥管理操作的真实性。注意:KeyMCryptoKeyHandlerStartFinalizeEnabled 的定义仅在 KeyMCryptoKeyStartFinalizeFunctionEnabled 设置为 TRUE 时才有效。
[SWS_KeyM_00007] 上游需求:SRS_CryptoStack_00013
如果配置选项 KeyMCryptoKeyStartFinalizeFunctionEnabled 设置为 FALSE,则密钥管理模块不会提供 KeyM_Start() 和 KeyM_Finalize() 函数。此时可以随时执行密钥更新操作。
[SWS_KeyM_00008] 上游需求:SRS_CryptoStack_00118
会话通过调用 KeyM_Finalize() 关闭。在调用过程中,任何在会话中更新过的密钥都将通过调用 Csm_KeySetValid() 设置为有效。在该函数完成其操作后,不再接受进一步的密钥更新操作。
[SWS_KeyM_00009] 上游需求:SRS_CryptoStack_00119, SRS_CryptoStack_00096
函数 KeyM_Finalize() 应验证所有已更新的密钥,即使其中一个密钥验证失败,也不应中止操作。
[SWS_KeyM_00010] 上游需求:SRS_CryptoStack_00013
如果配置选项 KeyMCryptoKeyPrepareFunctionEnabled 设置为 TRUE,则提供函数 KeyM_Prepare()。该函数目前没有任何功能性行为。如果配置选项设置为 FALSE,则不会提供功能接口。
[SWS_KeyM_00011] 上游需求:SRS_CryptoStack_00108、SRS_CryptoStack_00115、toStack_00118、SRS_CryptoStack_00110
如果配置选项 KeyMCryptoKeyHandlerPrepareEnabled 设置为 TRUE,则对 KeyM_Prepare() 的调用将依次传递给 KeyM_KH_Prepare(),并且参数和返回值将相应传递
其目的是在密钥更新会话启动后,在开始时调用一次 KeyM_Prepare()。调用的诊断服务可以向密钥处理程序提供执行后续密钥更新操作所需的特定数据。例如,它可用于提取密钥管理器所需的特定加密驱动程序信息,这些信息从(SHE)硬件中提取并再次在输出缓冲区中提供。或者,它可以启动一个 OEM 特定的密钥协商过程,其结果在之后的密钥更新过程中是必要的。另一种可能性是,在准备过程中密钥管理器提供一个(加密的)公共密钥。特定的密钥处理程序能够将密钥(解密后)存储到 CSM 中。这会生成一个分配给 CSM 密钥的公共密钥,并且可以进一步用于从中派生其他密钥。