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

您现在的位置是:嵌入式系统与单片机 > 技术阅读 > [Classic AUTOSAR学习]AUTOSAR定义的几种加密服务

[Classic AUTOSAR学习]AUTOSAR定义的几种加密服务

AUTOSAR规定了几种加密服务,我们在配置Primitive的时候会涉及到它,如果不记得Primitive是什么概念了,可以先回顾下:


服务有以下几种(以ASR4.3为例),我们分别来看看是每种服务用来做什么:


它们对应接口的输入输出参数要求如下(注:Secure Counter的内容在后续ASR版本中已删除,不在讨论范围之内)



Csm_Hash

哈希算法可以接收一组任意长度的输入数据,经过算法后返回固定长度的字符串输出。

哈希是单向的,只有“加密过程”,不可逆,即使输入数据只有一个字母不同,计算得出的哈希值也会完全不一样。所以使用哈希可以比较方便的比较传送数据的发送/接收的一致性。

常见的哈希算法有 MD5, SHA-1, SHA-2, SHA-3等。

对于接口调用,只需要输入原始数据。



Csm_MacGenerate & Csm_MacVerify

消息认证码(MAC)可以用来确认消息完整性,且同时进行认证。

运用消息认证码的双方需要共享一个密钥,消息认证码也是基于任意长度数据输出固定长度的MAC值,但是在这个过程和上述哈希不同点是,哈希不需要密钥,而消息认证码是需要密钥的。因此,只有拥有密钥的双方才能计算出正确的MAC值。

同样的,即使数据只有一个比特的改变,结果也会发生变化。这样,我们就可以通过这个方式完成消息的认证,以及完整性。



所以这里有一对接口,Csm_MacGenerate以及Csm_MacVerify,分别用来生成MAC值以及校验MAC值。

Csm_Encrypt & Csm_Decrypt

这一对接口可以用来做对称/非堆成加密和解密;甚至,也可以用来做压缩和解压缩。

具体算法支持看供应商能提供哪些,具体算法描述这里就不介绍了,典型的可以去了解AES/RSA等。

接口的输入输出很简单,Encrypt输入数据,输出密文,Decrypt输入密文,输出原始数据。



Csm_AEADEncrypt & Csm_AEADDecrypt

AEAD(Authenticated Encryption with Associated Data)在加密算法之上,加了一层验证手段,确认解密步骤是否正确。

例如,除了对原始数据进行加密输出密文,还会对密文用这个密钥进行一次MAC运算,接收方先验证MAC,如果验证通过,说明密钥正确,可以继续执行解密操作。

当然,上述流程是一个易于理解的例子,在实际操作当中,需要以算法具体标准为准,常用的AEAD算法有AES-GCM。



Csm_SignatureGenerate & Csm_SignatureVerify

电子签名是一种非对称加密算法,可以用来认证消息来源,同时还可以证明签名消息的完整性。

消息在发送前,需要先进性哈希运算得到摘要,然后基于私钥进行签名算法得到签名,随消息一起发送给接收方。在不考虑私钥泄露的场景下,只有私钥拥有者才能进行签名,因此可以认为这条消息就是来自于此发送方,且无法抵赖。

常用算法有RSA,DSA,ECDSA等。



Csm_RandomGenerate

随机值生成接口用来获取随机数,它既可以是硬件设备提供的真随机数,或者由软件提供的伪随机数。

如果是伪随机数,比如有CRT_DRBG(使用分组密码算法的计数器模式作为随机数生成的基础算法),SSG(自缩减生成器),梅森旋转算法等。