Autosar-SecOC功能详解(三)
前言关于SecOC的新鲜度值我们前面已经完整搞明白了。那么接下来我们就开始进入报文加密的步骤。在我们汽车行业SecOC功能主流采用的是AES-128-CMAC 算法。朋友们我们不要把这些加密算法想的这么复杂我们开发的时候又不可能去手写这些算法。即便是简单的CRC校验我们也不用管具体怎么实现车企要求我们用什么算法一般车企都会提供算法代码我们直接调接口实现就行。因此什么AES-128-CMAC听着高级实际上对于我们开发来说就把他当成CRC校验算法看就好。这篇文章我们一起简单看一下AES-128-CMAC算法以及SecOC功能在Autosar架构中涉及的相关模块。AES-128-CMAC算法在SecOC中的应用首先我们要知道AES-128-CMAC算法是一个固定的标准算法。因此当我们开发完SecOC功能要测试验证就可以使用CANoe工具写测试脚本在CAPL脚本中直接调用CANoe自带的AES-128-CMAC算法接口函数。好了我们看看AES-128-CMAC算法的接口可以看到总共又4个参数①Key②InputData③DataLen④CmacOut1、Key密钥听着高大上实际就是一串固定16Byte的数据。在实际项目中一般车企都会对这个Key又加一层额外操作比如车企会要求最终的Key是通过原始Key、VIN码以及另外的算法算出来的。具体什么算法我们不用管车企会直接给算法代码通过这样的方式使得Key更加复杂、强度更高。2、InputData输入数据就是会参与CMAC计算的数据。①对于SecOC的安全报文来说InputData组成如下②对于SecOC的同步报文来说InputData组成如下需要注意的是DataID一般是报文的CANID。3、DataLen即数据长度它指的是InputData的总长度。4、CmacOut即AES-128-CMAC计算输出结果。需要注意的是这个算法的计算结果长度固定是16Byte。对称加密与非对称加密在了解了AES-128-CMAC算法的参数的Key之后。我们就能分辨网上常看到的什么对称加密、非对称加密的意思了。所谓对称加密就是加密和解密用同一把密钥。对于AES-128-CMAC算法来说加密和解密就必须使用同一个Key否则两边计算出来的CMAC就对不上了。所以AES-128-CMAC算法就是对称加密。如下图所示确实很对称对吧。对于什么是非对称加密。如果你用过git的ssh密钥就知道有个私钥和公钥。对于Git的私钥我们就保存在自己的电脑公钥就传到 Git服务器。这就是非对称加密具体细节我们就不展开研究了。Autosar架构中SecOC涉及的相关模块以CAN总线报文为例。对于普通无SecOC功能的应用报文我们知道BSW的相关模块链路非常简单而对于有SecOC功能的应用报文它的BSW相关链路是这样的对于完全没接触过SecOC的工程师第一次看SecOC功能的链路图可能就会被吓到了“SecOC功能也太复杂了吧涉及这么多加密的模块这怎么搞”朋友们不要慌到现在为止我们现在已经抓住了SecOC的本质了获取完整新鲜度值、算出CMAC。因此理解上图的那些模块就很简单①获取完整新鲜度值由FVM模块实现这个是SWC模块实现的也就是完全由软件工程师手写代码去实现的这个没啥问题。②CMAC由加密相关模块实现也就是说对于SecOC功能图中右边这么多加密相关的模块目的只有一个计算CMAC。当然了如果深入研究加密相关模块、涉及HSM就会稍微复杂一些这里我们就不展开了SecOC报文相关Autosar配置我们以如下这条报文举例该报文的相关SecOC功能配置项如下关键配置如下SecOCAuthInfoTxLength即在报文截取的CMAC长度从报文Layout图可见CMAC截取的长度是8Byte64bitSecOCFreshnessValueLength新鲜度值的完整长度此处我们的是8Byte64bitSecOCFreshnessValueTxLength即在报文截取的新鲜度值长度从报文Layout图可见CMAC截取的长度是2Byte16bitSecOCSecuredTxPduLength报文中安全数据长度如报文Layout所示长度为6ByteSecOC报文在各个模块中的长度最后需要注意的是安全报文在各个模块的长度。此处我们以发送报文为例。由于新鲜度值、CMAC是在SecOC模块进行处理并组装至CAN报文中的。因此在Com模块报文的长度是6Byte即不包含新鲜度值、CMAC的数据。SecOC报文在各个模块长度如下图所示。SecOC报文CAN总线数据举例如下图所示为某条安全报文。报文中从左到右依次为安全数据长度6Byte、报文中截取的新鲜度值长度2Byte、报文中截取的CMAC8Byte这里我们解析一下截取的新鲜度值数据解析截取的新鲜度值的MsgCnt低14Bit、ResetCnt低2Bit如下可见MsgCnt是不断在累加的且当ResetCnt1后MsgCnt又会从0开始重新计数。结语好了朋友们当你看到这里相信关于整个SecOC的功能你基本明白得七七八八了。当然了当你真正去开发SecOC功能还是会有很多细节我们这里没有提及。但是相信在了解了我们所讲的这些内容后剩余的SecOC功能开发细节至少不会让你一头雾水了。返回目录Autosar BSW 开发笔记目录-CSDN博客