1、0x84服务(加密数据传输服务)
Purpose:
0x84服务(加密数据传输服务)用于保护传输可能威胁到数据安全的数据时,免受第三方的攻击。
如果客户端打算在安全诊断服务,那么加密数据传输服务就派上用场了。它可以保证客户端和服务端在安全模式下,符合应用层协议,来传输外部数据。安全模式意味着输出的数据受到了加密方法的保护。
Security sub-layer:
下图展示安全子层的示意图,为了在安全模式下实现一些诊断服务,在服务端和客户端应用程序之间添加了Security sub-layer。在客户端与服务端之间进行诊断服务数据传输有两种方法:
——非安全模式下数据传输
应用程序使用诊断服务(diagnostic Services)和应用层服务原语(Application Layer Service Primitives)在客户端和服务端进行数据交换,安全子层直接传输(“Pass-Thru”) “Application” and "Application Layer"之间数据。
——安全模式数据传输
应用程序使用诊断服务(diagnostic Services)或者外部服务和应用层服务原语(Application Layer Service Primitives)在客户端和服务端进行数据交换,安全子层使用0x84服务(加密数据传输服务)来接/收加密数据,安全连接必须是点到点的通讯,因此只有是物理寻址被允许,这就意味着只有一个ECU牵涉其中。
安全子层(security sub-layer)的接口是根据ISO/OSI模型约定,有以下四种安全子层(SS)服务原语:
——SS_SecuredMode.req: Request
——SS_SecuredMode.ind: Indication
——SS_SecuredMode.resp: Response
——SS_SecuredMode.conf: Confirmation
在安全模式下,只有被确认的服务才允许被使用(suppressPosRspMsgIndicationBit = FALSE),以下的诊断服务不允许在安全模式执行:
——事件响应服务(0x86)
——请求服务器数据定期传输服务(0x2A)
——测试工具保持连接服务(0x3E)
确认服务confirmed services (suppressPosRspMsgIndicationBit = FALSE)使用四种应用层服务原语即Request、Indication、Response、Confirmation,当以安全模式执行已确认的诊断服务(confirmed services)时,它们被映射到四个安全子层服务原语,反之亦然。
在安全模式下执行诊断服务时,安全子层的任务是对“应用程序_Application”提供的数据进行加密,对“应用层_Application _Layer”提供的数据进行解密,并添加、检查和删除与安全相关的数据元素。安全子层使用应用层(Application Layer)的SecuredDataTransmission (0x84)服务,根据外部协议(请求和响应),发送和接收整个诊断消息或消息,并以安全的方式进行交换。
为了诊断服务的安全执行,安全子层(Security Sub_Layer)给应用程序提供了"SecuredServiceExecution"服务。
安全子层(Security Sub_Layer)"SecuredServiceExecution"服务中的请求(Request)和显示(Idication)原语,详细格式定义如下:
SS_SecuredMode.request (
SA,
TA,
TA_type
[,RA]
[,parameter 1, ...]
)
SS_SecuredMode.indication (
SA,
TA,
TA_type
[,RA]
[,parameter 1, ...]
)
安全子层(Security Sub_Layer)"SecuredServiceExecution"服务中的应答(Response)和确认(Confirm)原语,详细格式定义如下:
SS_SecuredMode.response (
SA,
TA,
TA_type
[,RA,]
Result
[,parameter 1, ...]
)
SS_SecuredMode.confirm (
SA,
TA,
TA_type
[RA,]
Result
[,parameter 1, ...]
)
安全子层服务原语中显示的寻址信息,会直接映射到应用层(Application Layer)的寻址信息,反之亦然。
Security sub-layer access:
安全服务执行过程中访问安全子层的概念类似于文档中描述的应用层接口,安全子层利用了应用层(Aplication Layer)服务原语。在安全模式下confirm诊断服务的执行过程具体描述如下:
——客户端应用程序(Application)使用安全子层SecuredServiceExecution服务请求,来运行安全模式下的诊断服务。安全子层执行与服务器建立连接所需的动作,添加特定的安全相关参数,如果需要,将诊断服务的服务数据加密以安全方式执行,并使用应用层SecuredDataTransmission服务请求,将安全数据传输给服务器。
——服务器接收应用层(Application Layer) secureddatatranssion服务指示,该指示由服务器的安全子层(Security sub layer)处理。服务器的安全子层检查特定于安全的参数,解密加密的数据,并通过安全子层(Security sub layer) SecuredServiceExecution服务指示将服务的数据以安全模式呈现给应用程序。应用程序执行服务,并使用安全子层SecuredServiceExecution服务响应以安全模式响应服务。服务器的安全子层添加特定的安全相关参数,如果需要对响应消息数据进行加密,并使用应用层(Aplication Layer) SecuredDataTransmission服务响应将响应数据传输给客户端。
——客户端接收应用层(Aplication Layer) SecuredDataTransmission服务确认原语,该原语由客户端的安全子层处理。客户端的安全子层检查安全特定参数,解密加密的应答数据,并通过安全子层SecuredServiceExecution确认将数据呈现给应用程序。
下图以图形方式,显示了在安全模式下执行已确认的诊断服务(confirmed diagnostic service)时,安全子层、应用层和应用程序之间的交互。
2、请求报文格式
安全子层(security sub-layer)生成应用层(Application Layer) SecuredDataTranssion 请求报文参数。
请求消息的格式定义:
字节序号 | 参数值 | 约定 | 字节值 |
---|---|---|---|
#1 | SecuredDataTransmission Request SID | M | 0x84 |
#2 . . #n | securityDataRequestRecord[] = [ securityDataParameter#1 . . securityDataParameter#m ] | M | 0x00 – 0xFF . . 0x00 – 0xFF |
请求报文中子函数参数定义说明:
此服务不使用子函数参数。
请求消息中数据参数定义说明:
该服务在请求报文中的数据参数定义如下表所示:
定义 |
---|
securityDataRequestRecord 该参数包含了安全子层(Security Sub-Layer)处理的数据 |
3、肯定应答报文
肯定应答报文格式定义如下:
字节序号 | 参数值 | 约定 | 字节值 |
---|---|---|---|
#1 | SecuredDataTransmission Response SID | M | 0xC4 |
#2 . . #n | securityDataResponseRecord[] = [ securityDataParameter#1 . . securityDataParameter#m ] | M | 0x00 – 0xFF . . 0x00 – 0xFF |
肯定应答报文数据参数定义:
Definition |
---|
securityDataResponseRecord 该参数包含了安全子层(Security Sub-Layer)处理的数据 |
4、支持的否定应答码(NRC_)
本服务应执行以下否定响应代码。下表记录了每个应答代码发生的情况,应答代码总是不加密地发送,即使根据请求A_PDU中的配置文件,应答A_PDU必须加密。如果服务器在错误场景使用了该服务,则应使用如下列出的否定响应。
NRC | 描述 |
---|---|
0x13 | incorrectMessageLengthOrInvalidFormat 表示请求的A_PDU不正确,会发送该NRC |
0x38 - 0x4F | reservedByExtendedDataLinkSecurityDocument 扩展数据链路安全文档保留 |
备注:上面列出的应答代码适用于SecuredDataTransmission (0x84)服务。如果在安全模式下执行的诊断服务需要否定应答,则该否定应答将通过SecuredDataTranssion肯定应答消息以安全模式发送给客户端。
返回UDS诊断服务功能单元介绍目录