• 412查看
  • 0回复

[Autosar] AUTOSAR CryptoStack--CSM Job夹带了哪些私货

[复制链接]


该用户从未签到

发表于 21-1-2024 10:02:43 | 显示全部楼层 |阅读模式

汽车零部件采购、销售通信录       填写你的培训需求,我们帮你找      招募汽车专业培训老师


目录
1.认识CSM特性

1.1 密码服务

1.2 队列

2.Job夹带了哪些私货

3.小结

之前,有一篇文章详细描述了CSM模块里几个关键类型,例如JobType、ConfigType。
但是CSM Job到底关联了哪些东西?用户调用CSM服务接口,Crypto Stack是如何传递到HSM中?我们今天再次来仔细看看。
1.认识CSM特性

在AUTOSAR CSM文档7.2.2.2章节详细描述了密码服务的使用方法和服务出现资源竞争的处理方法。1.1 密码服务

根据HSM内部本身特性,我们在分块处理数据时,需要对硬件加密引擎发送START\UPDATE\FINISH指令来完成数据的处理。因此在AUTOSAR规范里,它把这些指令叫做运行模式,如下:
AUTOSAR CryptoStack--CSM Job夹带了哪些私货w1.jpg
同时,状态机定义如下:
AUTOSAR CryptoStack--CSM Job夹带了哪些私货w2.jpg
需要注意的是,根据加密算法的特性,在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。如下图:
AUTOSAR CryptoStack--CSM Job夹带了哪些私货w3.jpg
需要注意的是,CSM Queue的大小是可以配置的,例如OEM规范中要求SecOC校验的报文有15个,那么AES_CMAC_VERIFY驱动对应的CSM Queue大小就配置15个,从软件实现角度来看,如果用index的方式来表示每个报文的JobRequest,那么该CSM Queue就应该是15 bytes。既然Queue有大小限制,那么肯定就存在队列已经满了,用户还在发送请求的情况,因此在软件设计时我们需要考虑这些情况的处理。2.Job夹带了哪些私货

既然用户端均使用CSM jobRequest来完成各种密码服务,那这个job应该携带了丰富的信息以支撑不同加密算法的要求。首先,job肯定包含了服务类型(对称、非对称、摘要)、使用哪种算法(AES128\SHA3_256等等)、job优先级,还会有对应密码服务所需要的密钥索引。所以根据AUTOSAR CSM规范,我们定义了job的结构体类型如下:/*[SWS_Csm_01013] Crypto_JobType */typedefstruct {uint32jobId;Crypto_JobStateTypejobState;Crypto_JobPrimitiveInputOutputTypejobPrimitiveInputOutput;constCrypto_JobPrimitiveInfoType* jobPrimitiveInfo;Crypto_JobRedirectionInfoType*jobRedirectionInfoRef;uint32cryptoKeyId;uint32targetCtyptoKeyId;constuint32 jobPriority;}Crypto_JobType;
其中,



    jobPrinmitiveInfo用于保存上述提到的加密原语相关信息和密钥索引;

    jobPrinmitiveInputOut很明显就是用来保存输入数据和HSM返回的数据,例如如果是MAC_VERIFY,就是原始数据+MAC值存入inputPtr,outPtr保存HSM返回的mac值等等。

根据上面描述,针对Job的理解就有如下示意图:

AUTOSAR CryptoStack--CSM Job夹带了哪些私货w4.jpg



    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的大小。

快速发帖

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|Archiver|汽车工程师之家 ( 渝ICP备18012993号-1 )

GMT+8, 5-3-2025 01:04 , Processed in 0.418314 second(s), 36 queries .

Powered by Discuz! X3.5

© 2001-2013 Comsenz Inc.