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(自缩减生成器),梅森旋转算法等。
