其他
AUTOSAR CryptoStack--CSM Job夹带了哪些私货
目录
1.认识CSM特性
1.1 密码服务
1.2 队列
2.Job夹带了哪些私货
3.小结
之前,有一篇文章详细描述了CSM模块里几个关键类型,例如JobType、ConfigType。
但是CSM Job到底关联了哪些东西?用户调用CSM服务接口,Crypto Stack是如何传递到HSM中?我们今天再次来仔细看看。1.认识CSM特性
1.1 密码服务
根据HSM内部本身特性,我们在分块处理数据时,需要对硬件加密引擎发送START\UPDATE\FINISH指令来完成数据的处理。因此在AUTOSAR规范里,它把这些指令叫做运行模式,如下:那么从软件实现角度,可以得到如下代码:HASH,MACGENERATE,MACVERIFY,ENCRYPT,DECRYPT,AEAD_ENCRYPT,,AEAD_DECRYPT,SIGNATUREGENERATE,SIGNATUREVERIFY
/*#10 Confirm job state and operation mode */
Hsm_DispatchService(objectId, job, CRYPTO_OPERATIONMODE_START);
/*#20 Confirm job state and operation mode */
Hsm_DispatchService(objectId, job, CRYPTO_OPERATIONMODE_UPDATE);
/*#30 Confirm job state and operation mode */
Hsm_DispatchService(objectId, job, CRYPTO_OPERATIONMODE_FINISH);
针对其他密码服务,比如说SAVE_CONTEXT,mode选用SINGLE_CALL。1.2 队列
在CSM中提出了队列的概念,用于仲裁多个请求同时使用一个加密驱动,它根据每个请求(jobRequest)优先级进行排队。每个jobRequest排好队之后,就应该通过CryIf扔到对应的CryptoDriverObject,那么这条路径也有一个名称叫做channel;所以一个queue对应一个channel,这channel对应一个特定的DriverObject。如下图:2.Job夹带了哪些私货
既然用户端均使用CSM jobRequest来完成各种密码服务,那这个job应该携带了丰富的信息以支撑不同加密算法的要求。首先,job肯定包含了服务类型(对称、非对称、摘要)、使用哪种算法(AES128\SHA3_256等等)、job优先级,还会有对应密码服务所需要的密钥索引。所以根据AUTOSAR CSM规范,我们定义了job的结构体类型如下:/* [SWS_Csm_01013] Crypto_JobType */
typedef struct
{
uint32 jobId;
Crypto_JobStateType jobState;
Crypto_JobPrimitiveInputOutputType jobPrimitiveInputOutput;
const Crypto_JobPrimitiveInfoType* jobPrimitiveInfo;
Crypto_JobRedirectionInfoType* jobRedirectionInfoRef;
uint32 cryptoKeyId;
uint32 targetCtyptoKeyId;
const uint32 jobPriority;
}Crypto_JobType;
其中,
jobPrinmitiveInfo用于保存上述提到的加密原语相关信息和密钥索引;
jobPrinmitiveInputOut很明显就是用来保存输入数据和HSM返回的数据,例如如果是MAC_VERIFY,就是原始数据+MAC值存入inputPtr,outPtr保存HSM返回的mac值等等。
根据上面描述,针对Job的理解就有如下示意图:
CSM根据Job优先级放入Queue里面,通过CryIf给到CryptoDriver;
CryptoDriver识别Job中的原语信息,找到对应的密码算法并分配给HSM内部的密码算法模块,例如Job_a是使用AES128对数据进行解密,此时在CryptoDriver层会根据预定义的IPC通信协议将数据序列化传给HSM;
HSM获取数据后,通过Job中关联的keyId去密钥槽获取解密密钥Key_a,然后对Job携带的密文进行解密,完成后通知CryptoDriver取走明文。
3.小结
本文主要是对Host端的CSM的Job包含的信息进行了解析,因为在整个加密栈里,job是非常关键的一点,当然我们这里是讲了密码服务,涉及到密钥管理方面,我们知道它是有其他API的,这个我们后面单独再谈。通过本文,我们在配置工程的时候就要有这个思路,首先明确HSM提供了哪些密钥索引和密码算法,释放了哪些密码处理对象(CryptoDriverObject),这可以通过arxml交互;其次在Host侧,我们需要根据需求来配置CSM的job对应的queue大小、原语、密钥索引序号,这里必须和HSM所提供的一一对应。最后,根据需求配置每个job所需要的input和output的大小。往期回顾:
1.汽车标定精选
万字长文:汽车标定技术--XCP概述汽车标定技术--A2L格式分析
汽车标定技术--标定概念详解
汽车标定技术--A2L文件生成的方法
汽车标定技术--标定量与#pragma的趣事
汽车ECU标定的实现方式
英飞凌TC3xx-Overlay机制
2.AUTOSAR精选
AUTOSAR OS概述(一)AUTOSAR OS概述(二)
AUTOSAR 诊断栈分析(一)
AUTOSAR 诊断栈分析(二):DEM
AUTOSAR诊断栈分析(三):DTC状态位
3.汽车网络安全精选
汽车网络安全渗透测试概述汽车网络安全方案需求分析
汽车信息安全--常见车规MCU安全启动方案
车载信息安全场景概述
汽车网络安全--关于UN R155认证的思考
汽车网络安全--ISO\SAE 21434解读
4.汽车功能安全精选
5.汽车虚拟化精选
6.杂七杂八