作者:Menglu,修改:Echo、Ma
应之前网友的要求,发一篇针对29服务安全认证的文章。相信大家看过前面27服务的文章之后,对27服务应该有个深刻的理解。27服务主要通过Seed&key的方式对设置不同的Level进行解锁,从而进行不同层级的保护,经常使用对称加密的方式;29服务定义在ISO 14229的2020版本中,它提供了一种Client和Server之间身份认证的方法,除了Server端对Client的认证之外,有些时候也需要Client端对Server身份的合法性进行确认,以满足不同的安全性要求。因此,29服务是用来认证,可对不同的诊断仪进行不同的认证,是一种在物理层面的认证,它不受不同会话的影响,主要使用PKI证书的方式进行认证。
下图展示的是29服务支持的两种安全概念,左侧APCE使用的是基于PKI证书交换程序的非对称加密认证,右侧ACR使用的是基于确认的对称或非对称加密认证 (对称加密即通信双方加密和解密使用相同的密钥;非对称加密即通信双方各有一对密钥,分别是公钥和私钥,报文的加密使用的是公钥,解密使用的是私钥,公钥是双方共享的,而私钥只有自己知道)。
u PKI证书格式应使用符合ISO 7816-8的CVC和符合ISO/IEC 9594-8,RFC 5755或IEEE 1609.2的X.509。 |
APCE
APCE是基于PKI证书的,协议中对于认证流程如下图所示:
我们使用下面的例子来对APCE单向认证的成功认证流程做简单说明:
Step 1. Client端会先使用29 08对Server端进行询问,询问支持哪种认证方式;支持APCE的认证方式会以69 08 02中的02这部分来指代,02即支持APCE认证。
Step 2.Client紧接着使用29 01发送自己的PKI证书(证书中包含了公钥,签名等信息) 以及向Server端发送挑战数据的内容;Server此时对Client的签名认证成功之后会继续要求对证书的所有权进行验证的要求,其中挑战信息需要使用到Client的私钥,回复中Server会将自己的公钥发送给Client。
Step 3.Client会使用29 03将自己的私钥和接收到的Server的挑战数据计算出来一个签名发送给Server,紧接着Server使用Client的公钥来验证接收到的签名,正确则认证结束。当然了,APCE也是支持双向认证的。
ACR
ACR的认证功能的定义是由主机厂来完成的。协议中介绍的ACR的认证流程和APCE类似,流程如图3:
流程大致如下:
Step 1.Client请求验证。
Step 2.Server创建Challenge数据并发送给Client。
Step 3.Client计算所有权证明。
Step 4.Client发送所有权证明。
Step 5.Server验证所有权证明,成功则发送访问权限。
同样地,ACR也可以进行双向认证。
29服务的子功能
我们在认证服务中常用的一些29服务的子功能简单释义如下,具体的使用方法以及格式可以参考ISO 14229-1协议:
29 00--DeAuthenticate--主动结束认证状态
29 01--VerifyCertificateUnidirectional--启动单向身份验证过程,仅针对Server对Client进行身份验证。
29 02--VerifyCertificateBidirectional--启动双向身份验证过程,针对Server和Client互相验证。
29 03--ProofOfOwnership--用于将所有权证明数据传输给Client。
29 04--TransmitCertificate--独立地或者在先前地认证之后传输证书。
29 08--AuthenticationTask-身份验证服务用于身份验证,去身份验证和显式证书传输
了解了大致的认证机制之后,我们通过CANoe来进行简单的配置和操作,以便大家可以更好的理解整个认证过程。
CANoe 示例工程
CANoe中包含了一个关于UDS 29服务使用的示例工程,此工程是基于CAN总线,使用APCE认证方式;我们可以通过如下路径找到,按照标号顺序,在圈2处双击即可打开;圈3指示此示例工程的文件路径:
打开工程之后可以看到示例工程使用的29服务的过程是通过面板触发的,其中包含了认证使用的场景,单向/双向认证的选择,认证方式选择以及传输证书等等。
下图是在Supplier场景下使用单向认证的结果,从Trace中可以很清楚的看到此过程就是APCE的流程:
Security Manager 配置
在使用29服务的时候,比较重要的部分就是认证证书的配置,目前CANoe关于证书的配置都在Security Manager中完成,此插件会随着安装CANoe的时候一并安装在电脑中。
具体配置过程如下:
1)打开Security Manager 窗口,选中“Authentication according to UDS service 0x29”模板点击“Add”选项,可基于此模板创建UDS $29服务使用的Security Profile:
1)选中Profile 中的“X509 Certificates”,点击“Add”选项,可添加使用的证书文件:
1)打开Security Configuration 配置窗口,在SecOC and Diagnostics 页面激活“Use Security”选项,并选择在Security Manager 中为诊断服务配置的Profile 文件:
1)配置完成之后可通过ECU Control 窗口手动配置$29 服务的发送,关联的安全机制会自动调用:
也可以配合CAPL函数来启动认证过程,具体的使用方法可以在CANoe中点击F1进入帮助文档,搜索对应函数进行查看:
下面是关于此函数使用的一个简单CAPL示例,使用的是仅认证且单向的认证方式;diagStartAuth和diagStartAuthGeneric两个函数任选其一使用即可,启动CANoe工程之后按下按键“1”即开启认证流程:
以上就是针对0x29服务的简单介绍,如有疑问可以留言,如果您觉得该文章能够帮到更多的同仁,也欢迎各位转发~~也欢迎关注公众号。