之前研究了下crypto stack以及初步了解了下配置,
[Classic AUTOSAR学习] 简单理解Crypto Stack的配置以及执行流程
[Classic AUTOSAR学习] 如何理解Crypto Stack中的Job/Key/Queue?
不过在crypto模块(这里以EB crypto software为例)里,AUTOSAR定义的Key/KeyType/KeyElement的关系以及Element是如何在加密过程中被使用的,没法一下子理解。今天抽空再次阅读了下AUTOSAR规范,理了下思路。
规范中的解释
我们先来看下规范中对于这几个术语是如何解释的:
Key: 可以被Csm的job关联;在Crypto驱动模块中,Key会关联到一个Key Type。
Key Type: 包含Key Element的关联信息;一般由Crypto驱动提供商做好预配置。
Key Element: 用来存储数据,这个数据既可以是Key Material,也可以是AES加密的初始向量;Key Element也可以用来配置密钥管理功能的行为。
如何理解?
简单来说,就是Csm在请求加密处理时需要一个密钥,这个密钥对应于某一种类型的密钥,而这个类型的密钥分别包含了不同信息。
它们的关系呢,我们可以这样来理解,每一种不同的Key Type,是不同的类型定义,这个类型包含了Key Element这些成员,而Key就是对某一个具体Key Type的实例。Key Type最少包含一个Key Element,一个Key Element可以被包含在不同的Key Type中。
举个栗子
我们以上图的随机数为例,它包含三个Element:Seed State/Seed Count/Algorithm。
同时,我们还有一个Job ID为2的CsmJob:
上层应用可以通过Csm_RandomGenerate接口进行随机数生成的请求,
在通过一系列参数等检查之后,请求最后会传递到Crypto_AL_RANDOMGENERATE_AES_CTRDRBG_SyncSingleCall()接口(注:函数名因提供商不同,可能会有变化)。
首先会获取Key状态,此状态值由CryptoKeyElement SEED_STATE决定。如果状态为Valid,则继续进行处理。
然后获取Seed Count,判断是否合法(比如,是否已到Seed Count类型的最大值)
然后,开始进行随机数算法,并将结果存入调用Csm_RandomGenerate时的resultPtr指向的空间。然后将Seed Count +1, 更新Seed Count对应的Key Element。
原文始发于微信公众号(车载嵌入式软件开发):[Classic AUTOSAR学习] Crypto模块里的Key/KeyType/KeyElement