嵌入式系统与单片机|技术阅读
登录|注册

您现在的位置是:嵌入式系统与单片机 > 技术阅读 > [Classic AUTOSAR学习] Crypto模块里的Key/KeyType/KeyElement

[Classic AUTOSAR学习] Crypto模块里的Key/KeyType/KeyElement

之前研究了下crypto stack以及初步了解了下配置,



不过在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。