UDS协议定义了一套标准的诊断服务,包括会话控制、诊断请求、诊断响应和ECU编程等功能。通过UDS协议,诊断工具可以向ECU发送特定的请求,获取ECU的状态信息和故障码,诊断和解决故障问题。UDS是ISO 14229标准定义的一种通信协议,可以在CAN、LIN等多种总线上进行通信。
本文针对SO 14229-1 2020的29安全认证进行介绍。
一.背景知识
在了解29服务之前需要了解几个标准中提到的信息安全概念:
- 对称加密:通信双方加密和解密使用相同的密钥
- 非对称加密:通信双方各有一对密钥,分为公钥和私钥,信息的加密使用公钥,解密使用私钥,公钥双方共享,私钥只有自己知道,以此避免消息泄露
- PKI 是Public Key Infrastructure的首字母缩写,翻译过来就是公钥基础设施;PKI是一种遵循标准的利用公钥加密技术为电子商务的开展提供一套安全基础平台的技术和规范。PKI技术是一种遵循既定标准的密钥管理平台,它的基础是加密技术,核心是证书服务,支持集中自动的密钥管理和密钥分配,能够为所有的网络应用提供加密和数字签名等密码服务及所需要的密钥和证书管理体系。通俗理解:PKI就是利用公开密钥理论和技术建立提供安全服务的、具有通用性的基础设施,是创建、颁发、管理、注销公钥证书所涉及的所有软件、硬件集合体,PKI可以用来建立不同实体间的"信任"关系,它是目前网络安全建设的基础与核心。PKI的主要任务是在开放环境中为开放性业务提供基于非对称密钥密码技术的一系列安全服务,包括身份证书和密钥管理、机密性、完整性、身份认证和数字签名等。因此,用户可利用PKI平台提供的服务进行电子商务和电子政务应用。 PKI详解 - 运维-小松松 - 博客园 (cnblogs.com)
- X.509 是密码学里公钥证书的格式标准。X.509证书里含有公钥、身份信息(比如网络主机名,组织的名称或个体名称等)和签名信息(可以是证书签发机构CA的签名,也可以是自签名)。对于一份经由可信的证书签发机构签名或者可以通过其它方式验证的证书,证书的拥有者就可以用证书及相应的私钥来创建安全的通信,对文档进行数字签名
- 证书的组成结构(参考):
- 证书
- ...
- 公钥算法
- 主体公钥 [1]
- 此日期前无效
- 此日期后无效
- 版本号
- 序列号
- 签名算法
- 颁发者
- 证书有效期
- 主体
- 主体公钥信息
- 颁发者唯一身份信息(可选项)
- 主体唯一身份信息(可选项)
- 扩展信息(可选项)
- 证书签名算法
- 数字签名
- 证书
- Diffie-Hellman密钥协商算法 一个用于解决秘钥配送问题的算法,本身并非用来加密,在标准中用于为ECU之间的加密通信传输密钥 Diffie-Hellman密钥协商算法 - Rookie丶flying - 博客园 (cnblogs.com)
- 挑战确认(Challenge-Response)认证流程:1) 客户端向服务器发出认证请求;
2) 认证服务器判定用户是否合法,若不是,则不做进一步的处理;
3) 认证服务器内部产生一个随机数,作为Challenge,发送给用户;
4) 客户将口令和随机数合并,使用单向哈希函数 ( 例如MD5算法 ) 生成一个字节串作为Response;
5) 认证服务器将Response与自己的计算结果比较,如两者相同,则通过一次认证,反之认证失败;
6) 认证服务器通知客户端认证成功或失败。
二.服务概述
此服务的目的是为客户提供一种证明其身份的方法,允许其访问数据和/或诊断服务,这些数据和/或诊断服务由于安全、排放或安全等原因而受到限制。 用于将例程或数据下载/上传到服务器以及从服务器读取特定内存位置的诊断服务可能需要身份验证。 不正确的程序或下载到服务器的数据可能会潜在地损害电子设备或其他车辆部件,或危及车辆的排放、安全或安全标准的遵守。 另一方面,当从服务器检索数据时,可能会违反数据安全性。
该服务支持两个安全概念:
概念 1 :基于使用非对称密码的 PKI 证书交换过程。
概念 2 :基于不带 PKI 证书的挑战 – 应答过程,使用带有软件身份验证令牌或对称密码的非对称加密算法
三.基于PKI 证书交换的认证Authentication with PKI Certificate Exchange (APCE)
子功能定义:
•“ deAuthenticate ”,此子功能参数有效地结束认证状态。
•“ VerfyCertificateUnidirectional ”,此子功能参数启动单向身份验证过程,仅针对 ECU 对测试仪进行单向身份验证。
• “verifyCertificateBidirectional”, 这个SubFunction参数启动双向身份验证过程,客户端对服务器进行身份验证,服务器对客户端进行身份验证。
•“ proofOfOwnership ”,此子功能参数用于将所有权证明数据传输到测试仪。
•“ TransmitCertificate ”,此子功能参数独立或在先前的身份验证之后传输证书
认证准备:
双方拥有对应的私钥和证书:
——在单向身份验证的情况下,客户端需要一个带有其私钥的证书,这允许客户端将自己标识为合法的客户端。根据PKI的信任模型,服务器可能需要由颁发和签署客户端证书的颁发机构(CA) 颁发和签署的证书。
—— 双向认证时,客户端需要一个带有私钥的证书,以证明客户端是合法的。此外,服务器还需要一个带有私钥的证书,这允许服务器将自己标识为合法。根据公PKI的信任模型,客户端和服务器可能需要证书颁发机构(CA)颁发的证书,CA颁发并签署了客户端证书和服务器证书。
上图既包含单向认证(对client的认证)也包含双向认证的过程,除此以外还包含认证成功后的安全诊断通信(secure diagnostic communication)所需的密钥传递过程。
单向认证:
1、client发送证书至server,证书中包含client的公钥
2、server收到证书后确认证书的有效性(使用PKI提供的证书有效性检查功能),验证client是否合法,若不合法则停止认证流程,返回否定响应,合法则继续认证流程
3、server发送针对证书的challenge消息,请求client对所发证书的所有权证明(proof of ownership),消息中包含认证所需随机数
4、client接收到challenge后使用私钥对接收到的随机数进行计算得到签名,放入响应消息中发给server
5、server使用client的公钥解密并验证应答消息中的签名信息,与challenge消息比较,向client回复认证结果
双向认证:
1、双向认证请求:证书(含客户端公钥) + challenge1(对ECU的challenge)
2、ECU验证证书有效性后 创建对客户端的challenge2 通过challenge1和私钥计算出所有权证明 公钥 服务器证书
响应为:challenge2 + 服务器证书和证书所有权证明 + 服务器公钥
3、客户端验证根据所得临时公钥验证服务器证书和其证书所有权证明是否有效 有效之后根据challenge2和客户端私钥计算客户端证书所有权证明
请求为 :客户端证书所有权证明
4、服务器验证客户端证书所有权证明,返回响应
四、基于ACR认证
ACR认证流程与APCE相似,且相对更简单,其中计算所有权证明的方法如下:
1、对于非对称加密来说与APCE流程类似,需要建立包含challenge数据,令牌授权,认证,以及可选的附加信息等令牌内容,并使用私钥计算得到令牌内容签名,生成的认证令牌包含令牌内容及签名。接收方使用公钥解密并使用相同方法计算令牌内容,验证计算结果是否一致,从而完成对认证结果的判断。令牌的生成推荐基于ISO/IEC 9798-2 或 ISO/IEC 9798-4 (mutual, three pass authentication),或与之相当的认证令牌。
2、对于对称加密来说,需要基于先前共享的对称密钥来计算签名信息,对方也根据相同的密钥进行解密,计算及比对完成验证。令牌的生成推荐基于ISO/IEC 9798-2 或 ISO/IEC 9798-4 (mutual, three pass authentication),或与之相当的认证令牌。
使用ACR方式时,前一次认证中激活的诊断访问权限可以由新的ACR认证流程代替
五、认证服务支持的子功能
SID | Name | Description |
---|---|---|
00 | deAuthenticate | Request to leave the authenticated state无其他请求参数 |
01 | verifyCertificateUnidirectional | Initiate Authentication by verifying the Certificate 请求包含: - 通信配置-对通过认证以后的安全诊断通信如何进行的配置说明,与安全诊断通信直接联系,该参数的格式以及后续密钥(session key)的生成和proof value的计算均由OEM定义 - 证书长度 - 证书内容 - challenge长度 - challenge内容(仅在challenge长度不为0时有效) |
02 | verifyCertificateBidirectional | Initiate Authentication by verifying the Certificate and generating a Proof of Ownership from the server 参数同上 |
03 | proofOfOwnership | Verify the Proof of Ownership from the client. 请求包含: - 长度 - 所有权证明 - 临时公钥长度 - 临时公钥(ephemeral Public Key) |
04 | transmitCertificate | Verify Certificate and extract information from Certificate to handle it according to its contents. 请求包含: - 证书ID:certificateEvaluationId,用于识别证书的评估类型,由OEM自定义 - 证书长度 - 证书数据 |
05 | requestChallengeForAuthentication | Initiate the Authentication process by requesting server to output a challenge. 请求包含: - 通信配置 - 算法标识符 |
06 | verifyProofOfOwnershipUnidirectional | Request server to verify the POWN for unidirectional authentication. 请求包含: - 算法标识符 - 指示用于验证所有权证明的算法,也决定了算法需要用到的参数及加密诊断通信的密钥生成方法,该值是左对齐的 并以0为单位向右填充,最多16个字节。 - 所有权证明的长度 - 所有权证明 - client challenge长度 - client challenge - 格式由OEM自定义或是随机数 - 附加参数长度 - 附加参数 |
07 | verifyProofOfOwnershipBidirectional | Request server to verify the client side POWN and provide server-side POWN for bidirectional authentication. 参数同上 |
08 | authenticationConfiguration | Indicates the provided authentication configuration of the server. 无请求参数 |
六、报文格式
报文详情参考ISO 14229-1 2020