SecOC¶
目标¶
本集成手册用于指导用户进行SecOC模块集成,文档主要包括的内容为:SecOC模块集成指导、基于示例应用的集成讲解。
由于各项目的需求不同,集成示例不会针对于特定的商业项目做详细讲解。
缩写词和术语¶
缩写词/术语 |
描述 |
SecOC |
Security On board Communication安全板载通信 |
MCAL |
Microcontroller Abstraction Layer微控制器抽象层 |
CryIf |
Crypto Interface Crypto接口 |
Csm |
Crypto ServiceManager Crypto服务管理 |
MAC |
Message Authentication Code消息认证码 |
参考文档¶
[1]《参考手册_CryIf.pdf》
[2]《参考手册_CSM.pdf》
[3]《参考手册_Crypto.pdf》
[4]《参考手册_SecOC.pdf》
SecOC集成¶
项目交付的内容为:SecOC源码和ORIENTAIS Studio配置工具。
SecOC相关配置模块的功能介绍,参见表 SecOC相关配置模块介绍。
使用SecOC源码和配置工具,进行SecOC的集成的步骤,参见表 SecOC集成的步骤。
模块名 |
功能 |
Can |
提供SecOC所需要的邮箱 |
CANIf |
CANIf模块主要处理上层模块与底层驱动的之间PDU的传递,为上层模块提供统一的接口来管理不同的CAN硬件模块 |
EcuC |
用于辅助配置工具完成配置的模块。主要提供PDU的定义,其它模块通过关联EcuC中PDU,相互关联起来。 |
PduR |
PDU Router主要为通讯接口模块(CANIf)、传输协议模块(CAN TP、J1939 TP)、诊断通讯管理模块(DCM、J1939DCM)以及通讯模块(COM、LDCOM)以及IPDUM、SECOC等模块提供基于I-PDU的路由服务。 |
Com |
COM模块主要提供I-PDU和信号相关管理功能 |
Crypto |
为SecOC提供底层加密驱动程序 |
Csm |
Csm模块为Crypto进行抽象并为上层提供标准化接口 |
SecOC |
SecOC模块主要管理参与信息安全收发的PDU及相关属性 |
步骤 |
操作 |
说明 |
1 |
ORIENTAIS Studio配置工具工程搭建和SecOC相关模块加载 |
若配置工具已经搭建,则仅需进行SecOC相关模块的加载操作。 |
2 |
模块配置及配置文件生成 |
NA |
3 |
代码集成 |
现有工程、SecOC相关模块源代码和配置生成文件的集成。 |
4 |
验证测试 |
NA |
Note
SecOC模块集成之前,用户须确保已经有基础工程。
新建ORIENTAIS Studio配置工程及模块加载¶
安装ORIENTAIS Studio软件后,双击软件图标打开软件。
图 新建工程-1
菜单栏File🡪New🡪Project,新建工程。
图 新建工程-2
在弹出的新建窗口中选择Autosar下的 [BSW Project],选择Next。
图 新建工程-3
在弹出的窗口中输入工程名,选择Finish。
图 新建工程-4
在弹出的窗口中选择Yes。
图 新建工程-5
选择[Bsw_Builder],右键单击,选择New ECU Configuration。
图 新建工程-6
在弹出的窗口中输入ECU名,然后选择Next。
图 新建工程-7
在弹出的窗口中勾选需添加的模块,点击Finish。
图 新建工程-8
新建工程如下所示,上一步添加的模块已经被加入到工程中。
图 新建工程-9
MCAL配置导入,BSW模块需要依赖MCAL生成的CAN模块
模块配置及生成代码¶
该章节主要介绍SecOC模块的配置参数,列举配置项在配置界面显示的名称、可能的取值、默认的取值、参数描述及依赖关系,旨在指导用户如何使用配置工具进行SecOC模块参数的配置。
目标:配置一组报文进行SecOC的正常收发
类型 |
CANID |
Date |
新鲜度长度 |
MAC值长度 |
SecOCID |
TX |
0x3E0 |
6Bytes |
2Bytes |
16Bytes |
2Bytes |
RX |
0x2E0 |
6Bytes |
2Bytes |
16Bytes |
2Bytes |
表格名词解析如下表介绍
UI名称 |
该配置项在配置工具界面显示的名称 |
取值范围 |
该配置项允许的取值区间 |
默认取值 |
该配置项默认的配置值 |
参数描述 |
该配置项在标准的AUTOSAR_EcucParamDef.arxml文件中的描述 |
依赖关系 |
该配置项与其他模块或配置项的关系 |
Ecuc配置¶
一帧SecOC报文对应于四组ECUC和PDUR的两组路由组,分别对应于CANIf和COM使用。
EcucConfigSet¶
如表 配置目标,示例中使用CANFD,数据整体长度是24Bytes(此长度不包含SecOCID)。
配置Ecuc包含的发送、接收信息
COM -> SecOC_Authentic_Tx -> SecOC_Secured_Tx -> SecOC_Tx
SecOC_Rx -> SecOC_Secured_Rx -> SecOC_Authentic_Rx -> COM
图 EcucConfigSet
配置COM发送、接收信息:
COM_CAN1_Rx_0x2E0_SecOC/COM_CAN1_Tx_0x3E0_SecOC,长度为6
配置CANIf的发送、接收信息:
CANIF_CAN1_Rx_0x2E0_SecOC/CANIF_CAN1_Tx_0x3E0_SecOC,长度为24
配置SecOC的加密、真实的发送、接收信息:
加密数据:
CAN1_Tx_0x3E0_SecOC_Authentic/CAN1_Rx_0x2E0_SecOC_Authentic,长度为6
安全数据:
CAN1_Tx_0x3E0_SecOC_Secured/CAN1_Rx_0x2E0_SecOC_Secured,长度为24
CanIf的配置¶
CanIfRx¶
CanIf主要是对报文属性的定义,包含了CANID和DLC以及帧类型等重要数据。
图 CanIfInitCfgRX配置
配置接收报文的ID 0x2E0这个信息和底层的邮箱信息相匹配。
配置帧类型是STANDARD_FD_CAN。
DLC的长度,接收数据为24字节。
填写接收报文的ID,确定数据帧的类型以及数据长度,选择此数据的PDUHrH,以及CanIfRxPduRef。
表 CanIfRx界面配置说明
UI名称 |
描述 |
|||
CanIfRxPduCanId |
取值范围 |
0-0x7FF |
默认取值 |
0x00 |
参数描述 |
报文的ID |
|||
依赖关系 |
无 |
|||
CanIfRxPduCanIdType |
取值范围 |
无 |
默认取值 |
STABDARD_CAN |
参数描述 |
帧类型 |
|||
依赖关系 |
无 |
|||
CanIfRxPduDlc |
取值范围 |
0-32 |
默认取值 |
8 |
参数描述 |
报文长度 |
|||
依赖关系 |
无 |
|||
CanIfRxPduUserRxIndicationUL |
取值范围 |
无 |
默认取值 |
PDUR |
参数描述 |
接收报文所属的规范类型 |
|||
依赖关系 |
无 |
|||
CanIfRxPduHrhIdRef |
取值范围 |
无 |
默认取值 |
HRH |
参数描述 |
Rx L-PDU所属的HRH通过该参数引用 |
|||
依赖关系 |
无 |
|||
CanIfRxPduRef |
取值范围 |
无 |
默认取值 |
|
参数描述 |
引用“全局”Pdu结构,以允许协调com堆栈中的句柄id |
|||
依赖关系 |
无 |
CanIfTx¶
图 CanIfInitCfgTX配置
配置发送报文的ID 0x3E0这个信息和底层的邮箱信息相匹配。
配置帧类型STANDARD_FD_CAN。。
填写发送报文的ID,确定数据帧的类型,选择此数据的PDUHrH,以及CanIfTxPduRef。
表 CanIfTx界面配置说明
UI名称 |
描述 |
|||
CanIfTxPduType |
取值范围 |
0-0x7FF |
默认取值 |
0x00 |
参数描述 |
报文的ID |
|||
依赖关系 |
无 |
|||
CanIfTxPduCanIdType |
取值范围 |
无 |
默认取值 |
STABDARD_CAN |
参数描述 |
帧类型 |
|||
依赖关系 |
无 |
|||
CanIfTxPduType |
取值范围 |
无 |
默认取值 |
STATIC |
参数描述 |
是否可以更改CANID |
|||
依赖关系 |
无 |
|||
CanIfTxPduUserRxIndicationUL |
取值范围 |
无 |
默认取值 |
PDUR |
参数描述 |
接收报文所属的规范类型 |
|||
依赖关系 |
无 |
|||
CanIfTxPduBufferRef |
取值范围 |
无 |
默认取值 |
|
参数描述 |
对CanIf缓冲区配置的可配置引用 |
|||
依赖关系 |
无 |
|||
CanIfTxPduRef |
取值范围 |
无 |
默认取值 |
|
参数描述 |
引用“全局”PDU结构,以允许协调com堆栈中的句柄id |
|||
依赖关系 |
无 |
PDUR¶
PduRBswModules¶
图 PduRBswModules配置
打开发送确认(PduRTxConfirmation)。
Module引用SecOC模块。
此界面包含函数接口的宏开关以及PDU路由器模块应使用传输协议接口指定的API参数。PduRBswModuleRef需要在添加SecOC模块之后才可出现选择项。
表 PduRBswModules界面配置说明
UI名称 |
描述 |
|||
PduRCancelTransmit |
取值范围 |
True / False |
默认取值 |
False |
参数描述 |
取消发送函数的宏开关 |
|||
依赖关系 |
无 |
|||
PduRTxConfirmation |
取值范围 |
True / False |
默认取值 |
False |
参数描述 |
发送确认函数的宏开关 |
|||
依赖关系 |
无 |
|||
PduRBswModuleRef |
取值范围 |
无 |
默认取值 |
无 |
参数描述 |
这是对一个BSW模块配置的引用 |
|||
依赖关系 |
无 |
PduRRoutingTables¶
在界面配置路由表,包含在ECUC里面配置的句柄信息以及数据流向,本文档中在此只关注SecOC报文。
图 路由表配置
如上述的章节(Ecuc配置)里面已经描述SecOC配置的ECUC的分组信息,在此配置发送是两组,接收是两组,分别在CanIf和COM里面进行传输,普通报文仅只有COM和CanIf两者之间传输而已,并不包含SecOC的附加信息。
发送路由表¶
发送的数据信息的传输如下图所示:
图 发送数据流
分析路由表的配置以下:
一、真实数据发送PduR组
源发送数据(此数据和下面的数据为一组,在COM往下发的时候传输使用,和安全的数据不一样,此为真实数据组8Bytes)。
图 COM发送数据流Src
启动传输需要打开,否则无法传输。
目的PDU参考为COM来的PDU,选择COM_CAN1_Tx_0x3E0_SecOC发送的时候数据从COM源发送真实数据到真实数据配置的ECUCPduRSrcPdus -> PduRDestPdus
表 PduRSrcPdus界面配置说明TxCom
UI名称 |
描述 |
|||
PduRSrcPduUpTxConf |
取值范围 |
True / False |
默认取值 |
True |
参数描述 |
启动传输 |
|||
依赖关系 |
无 |
|||
PduRSrcPduRef |
取值范围 |
无 |
默认取值 |
无 |
参数描述 |
源PDU参考;引用唯一的PDU标识符,应使用用于请求的PDU路由器操作 |
|||
依赖关系 |
无 |
目的发送数据(此数据和上面的数据为一组6Bytes)
图 COM发送数据流Dest
选择数据的传输方式为直接传输。
此路由和TP无关报文走的是If,不需勾选PduRTpThreshold。
目的PDU参考为真实PDU,选择CAN1_Tx_0x3E0_SecOC_Authentic。
表 PduRSrcPdus界面配置说明TxCom
UI名称 |
描述 |
|||
PduRDestPduDataProvision |
取值范围 |
无 |
默认取值 |
无 |
参数描述 |
指定如何提供数据:direct(作为传输调用的一部分)或via |
|||
依赖关系 |
无 |
|||
PduRTpThreshold |
取值范围 |
0…255 |
默认取值 |
0 |
参数描述 |
此参数仅与TP路由相关。 |
|||
依赖关系 |
无 |
|||
PduRTransmissionConfirmation |
取值范围 |
True / False |
默认取值 |
True |
参数描述 |
此参数仅用于通信接口。传输协议模块将始终调用TxConfirmation函数 |
|||
依赖关系 |
无 |
|||
PduRDestPduRef |
取值范围 |
无 |
默认取值 |
SecOC_Authentic_Tx0 |
参数描述 |
目的地PDU参考;当调用目标模块的相关函数时,由PDU路由器引用唯一的PDU标识符应使用而不是源PDU标识符 |
|||
依赖关系 |
无 |
二、安全数据PduR组
CAN1_Tx_0x3E0_SecOC_Secured -> CANIF_CAN1_Tx_0x3E0_SecOC为PduR的数据流向
安全PduR源目的的数据如下:
源发送数据(此数据和下面的数据为一组,在CanIf往外发的时候传输使用,和真实的数据不一样,此为安全数据组24Bytes)。
图 CanIf发送数据流Src
启动传输需要打开,否则无法传输。
PDU参考为安全的PDU,选择CAN1_Tx_0x3E0_SecOC_Secured
表 PduRSrcPdus界面配置说明TxCanIf
UI名称 |
描述 |
|||
PduRSrcPduUpTxConf |
取值范围 |
True / False |
默认取值 |
True |
参数描述 |
启动传输 |
|||
依赖关系 |
无 |
|||
PduRSrcPduRef |
取值范围 |
无 |
默认取值 |
无 |
参数描述 |
源PDU参考;引用唯一的PDU标识符,应使用用于请求的PDU路由器操作 |
|||
依赖关系 |
无 |
安全PduR目的数据如下:
目的发送数据(此数据和上面的数据为一组24Bytes)
图 CanIf发送数据流Dest
选择数据的传输方式为直接传输。
和TP无关报文走的是If,填写0.
目的PDU参考为CanIf的PDU,选择CANIF_CAN1_Tx_0x3E0_SecOC
表 PduRSrcPdus界面配置说明TxCom
UI名称 |
描述 |
|||
PduRDestPduDataProvision |
取值范围 |
无 |
默认取值 |
无 |
参数描述 |
指定如何提供数据:direct(作为传输调用的一部分)或via |
|||
依赖关系 |
无 |
|||
PduRTpThreshold |
取值范围 |
0…255 |
默认取值 |
0 |
参数描述 |
此参数仅与TP路由相关。 |
|||
依赖关系 |
无 |
|||
PduRTransmissionConfirmation |
取值范围 |
True / False |
默认取值 |
True |
参数描述 |
此参数仅用于通信接口。传输协议模块将始终调用TxConfirmation函数 |
|||
依赖关系 |
无 |
|||
PduRDestPduRef |
取值范围 |
无 |
默认取值 |
SecOC_Authentic_Tx0 |
参数描述 |
目的地PDU参考;当调用目标模块的相关函数时,由PDU路由器引用唯一的PDU标识符应使用而不是源PDU标识符 |
|||
依赖关系 |
无 |
Note
如果已在DBC里面配置SecOC报文,需要删除工具里生成的这一层的PduR,手动的去配置。因为目前DBC需求中没有明确信息表明是SecOC报文,所以会按照非加密报文生成通信栈里面的信息,需要按照本文档写的配置说明去手动更改配置的信息(Ecuc-CanIf-PduR-COM-SecOC的顺序配置)或者在DBC中删除多余信号。
接收路由表¶
接收数据信息的传输如下图所示:
图 接收数据流
路由表的配置如下:
一、加密数据接收PduR组
源发送数据(此数据和下面的数据为一组,在Can接收的时候传输使用,和真实的数据不一样,此为安全数据组24Bytes)。
图 CanIf接收数据流Src
启动传输需要打开,否则无法传输。
源PDU参考为CanIf的PDU,选择CANIF_CAN1_Rx_0x2E0_SecOC
表 PduRSrcPdus界面配置说明RxCanIf
UI名称 |
描述 |
|||
PduRSrcPduUpTxConf |
取值范围 |
True / False |
默认取值 |
True |
参数描述 |
启动传输 |
|||
依赖关系 |
无 |
|||
PduRSrcPduRef |
取值范围 |
无 |
默认取值 |
无 |
参数描述 |
源PDU参考;引用唯一的PDU标识符,应使用用于请求的PDU路由器操作 |
|||
依赖关系 |
无 |
接收时,安全数据从CanIf源接收外部的数据,路由到SecOC安全的数据配置的ECUC。
图 CanIf接收数据流Dest
选择数据的传输方式为直接传输。
和TP无关报文走的是If,填写0.
目的PDU参考为安全的PDU,选择CAN1_Rx_0x2E0_SecOC_Secured
表 PduRSrcPdus界面配置说明RxCanIf
UI名称 |
描述 |
|||
PduRDestPduDataProvision |
取值范围 |
无 |
默认取值 |
无 |
参数描述 |
指定如何提供数据:direct(作为传输调用的一部分)或via |
|||
依赖关系 |
无 |
|||
PduRTpThreshold |
取值范围 |
0…255 |
默认取值 |
0 |
参数描述 |
此参数仅与TP路由相关。 |
|||
依赖关系 |
无 |
|||
PduRTransmissionConfirmation |
取值范围 |
True / False |
默认取值 |
True |
参数描述 |
此参数仅用于通信接口。传输协议模块将始终调用TxConfirmation函数 |
|||
依赖关系 |
无 |
|||
PduRDestPduRef |
取值范围 |
无 |
默认取值 |
无 |
参数描述 |
目的地PDU参考;当调用目标模块的相关函数时,由PDU路由器引用唯一的PDU标识符应使用而不是源PDU标识符 |
|||
依赖关系 |
无 |
二、真实数据接收PduR组
这是PduR源目的的数据如下:
源发送数据(此数据和下面的数据为一组,在COM接收的时候传输使用,和安全的数据不一样,此为安全数据组6Bytes)。
图 COM接收数据流Src
启动传输需要打开,否则无法传输。
源PDU参考为真实的PDU,选择CAN1_Rx_0x2E0_SecOC_Authentic
表 PduRSrcPdus界面配置说明RxCom
UI名称 |
描述 |
|||
PduRSrcPduUpTxConf |
取值范围 |
True / False |
默认取值 |
True |
参数描述 |
启动传输 |
|||
依赖关系 |
无 |
|||
PduRSrcPduRef |
取值范围 |
无 |
默认取值 |
无 |
参数描述 |
源PDU参考;引用唯一的PDU标识符,应使用用于请求的PDU路由器操作 |
|||
依赖关系 |
无 |
真实PduR目的的数据如下:
目的接收数据(此数据和上面的数据为一组6Bytes)
图 COM接收数据流Dest
选择数据的传输方式为直接传输。
和TP无关报文走的是If,填写0.
目的PDU参考为COM的PDU,选择COM_CAN1_Rx_0x2E0_SecOC
表 PduRDestPdus界面配置说明RxCom
UI名称 |
描述 |
|||
PduRDestPduDataProvision |
取值范围 |
无 |
默认取值 |
无 |
参数描述 |
指定如何提供数据:direct(作为传输调用的一部分)或via |
|||
依赖关系 |
无 |
|||
PduRTpThreshold |
取值范围 |
0…255 |
默认取值 |
0 |
参数描述 |
此参数仅与TP路由相关。 |
|||
依赖关系 |
无 |
|||
PduRTransmissionConfirmation |
取值范围 |
True / False |
默认取值 |
True |
参数描述 |
此参数仅用于通信接口。传输协议模块将始终调用TxConfirmation函数 |
|||
依赖关系 |
无 |
|||
PduRDestPduRef |
取值范围 |
无 |
默认取值 |
无 |
参数描述 |
目的地PDU参考;当调用目标模块的相关函数时,由PDU路由器引用唯一的PDU标识符应使用而不是源PDU标识符 |
|||
依赖关系 |
无 |
COM¶
DBC的配置¶
TX(信号只需要定义有效数据即可,本文档采用大端法)
图 TX_DBC的定义
RX(信号只需要定义有效数据即可,本文档采用大端法)
图 RX_DBC的定义
附加的信息不必要占用任何的DBC里面的信息,描述包含:新鲜度、MAC、SecOCID。
ComConfig¶
Tx信号的配置¶
CAN1_Tx_0x3E0_Sig_1_U48_CAN1_Tx_0x3E0_SecOC信号的定义
图 TX信号
数据的起始位和位长度可以根据DBC的导入获得,或者根据大端和小端的方式来确定,本示例使用大端配置。
信号类型采用:大端法。
信号的初始值:此处可人为填写,也可以在测试的时候更改这个值,验证功能,示例按照图所示字节填写即可。
信号类型:这个很重要,后面的测试转发报文的需要信号的类型相匹配,此选项是48Bits,选择UINT64。
表 ComConfig界面配置说明
UI名称 |
描述 |
|||
ComBitPosition |
取值范围 |
0..4294967295 |
默认取值 |
无 |
参数描述 |
I-PDU内的起始位置该参数指的是I-PDU中的位置,而不是影子缓冲区中的位置如果将字节序转换配置为不透明,则参数ComBitPosition应定义第一个字节的bit0,如小端字节顺序 |
|||
依赖关系 |
无 |
|||
ComSignalEndianness |
取值范围 |
BIG_ENDIAN LITTLE_ENDIAN OPAQUE |
默认取值 |
无 |
参数描述 |
定义信号网络表示的字节顺序 |
|||
依赖关系 |
无 |
|||
ComSignalInitValue |
取值范围 |
与信号类型有关 |
默认取值 |
0 |
参数描述 |
此信号的初始值在UINT8_N的情况下,默认值是一个长度为ComSignalLength的字符串,所有字节都设置为0x00在UINT8_DYN的情况下,初始大小应为0 |
|||
依赖关系 |
在UINT8_N的情况下,ComSignalInitValue的长度必须与ComSignalLength的长度相同。 |
|||
ComTransferProperty |
取值范围 |
PENDING TRIGGERED TRIGGERED_ON_CHANGE TRIGGERED_ON_CHANGE_WITHOUT_REPETITION TRIGGERED_WITHOUT_REPETITION |
默认取值 |
PENDING |
参数描述 |
定义对此信号的写访问是否可以触发相应I-PDU的传输如果I-PDU被触发,则还取决于相应I-PDU的传输模式 |
|||
依赖关系 |
无 |
|||
ComUpdateBitPosition |
取值范围 |
0..4294967295 |
默认取值 |
无 |
参数描述 |
更新位在I-PDU内的位位置 |
|||
依赖关系 |
无 |
|||
ComGwIPduRef |
取值范围 |
引用[ComIPdu] |
默认取值 |
无 |
参数描述 |
引用Signal Gateway源或目的地描述的I-PDU |
|||
依赖关系 |
无 |
Rx信号的配置¶
CAN1_Rx_0x2E0_Sig_1_U48_CAN1_Rx_0x2E0_SecOC的定义
图 RX信号
数据的起始位和位长度可以根据DBC的导入获得,或者根据大端和小端的方式来确定,在这里采用大端法。
信号类型采用:大端法。
信号的初始值:接收数据无需配置,默认即可。
信号类型:这个很重要,后面的测试转发报文的需要信号的类型相匹配,此选项是48Bits,选择UINT64。
表 ComConfig界面配置说明R
UI名称 |
描述 |
|||
ComBitPosition |
取值范围 |
0..4294967295 |
默认取值 |
无 |
参数描述 |
I-PDU内的起始位置该参数指的是I-PDU中的位置,而不是影子缓冲区中的位置如果将字节序转换配置为不透明,则参数ComBitPosition应定义第一个字节的bit0,如小端字节顺序 |
|||
依赖关系 |
无 |
|||
ComSignalEndianness |
取值范围 |
BIG_ENDIAN LITTLE_ENDIAN OPAQUE |
默认取值 |
无 |
参数描述 |
定义信号网络表示的字节顺序 |
|||
依赖关系 |
无 |
|||
ComSignalInitValue |
取值范围 |
与信号类型有关 |
默认取值 |
0 |
参数描述 |
此信号的初始值在UINT8_N的情况下,默认值是一个长度为ComSignalLength的字符串,所有字节都设置为0x00在UINT8_DYN的情况下,初始大小应为0 |
|||
依赖关系 |
在UINT8_N的情况下,ComSignalInitValue的长度必须与ComSignalLength的长度相同。 |
|||
ComTransferProperty |
取值范围 |
PENDING TRIGGERED TRIGGERED_ON_CHANGE TRIGGERED_ON_CHANGE_WITHOUT_REPETITION TRIGGERED_WITHOUT_REPETITION |
默认取值 |
PENDING |
参数描述 |
定义对此信号的写访问是否可以触发相应I-PDU的传输如果I-PDU被触发,则还取决于相应I-PDU的传输模式 |
|||
依赖关系 |
无 |
|||
ComUpdateBitPosition |
取值范围 |
0..4294967295 |
默认取值 |
无 |
参数描述 |
更新位在I-PDU内的位位置 |
|||
依赖关系 |
无 |
|||
ComGwIPduRef |
取值范围 |
引用[ComIPdu] |
默认取值 |
无 |
参数描述 |
引用Signal Gateway源或目的地描述的I-PDU |
|||
依赖关系 |
无 |
Crypto¶
CryptoDriverObjects¶
CryptoKeyElements¶
CryptoPrimitives¶
CryIf¶
CryIfIncludes¶
CryIfChannel¶
CryIfKey¶
Csm¶
CsmJobs¶
添加密钥管理服务的任务设置
CsmJobPriority:设置任务优先级
CsmProcessingMode:设置任务处理模式,可选择同步或者异步
CsmJobKeyRef:设置参考的密钥,在后面的CsmKeys中配置
CsmJobPrimitiveRef:设置任务原型,在后面的CsmPrimitives中配置
CsmJobQueueRef:设置任务队列,在后面的CsmQueues中配置
图 Csm设置
CsmKeys¶
图 Csm设置
添加从If层设置的密钥
CsmPrimitives¶
设置加密原型
CsmMacGenerateAlgorithmFamily:设置加密服务的算法族
CsmMacGenerateAlgorithmKeyLength:设置MAC的长度16byte
CsmMacGenerateAlgorithmMode:设置加密算法服务
CsmMacGenerateResultLength:设置输出的MAC长度16bytes
图 Csm设置
CsmQueues¶
设置Csm序列大小、If层设置的参考通道
图 Csm设置
SecOC¶
Genernal¶
图 General
MainFunction所放置的周期,通常放在10ms里面,此处写0.01。
表 General界面说明
UI名称 |
描述 |
|||
SecOCDevErrorDetect |
取值范围 |
True / False |
默认取值 |
False |
参数描述 |
错误检查开关,表示是否打开DET错误检查机制 |
|||
依赖关系 |
无 |
|||
SecOCMainFunctionPeriodRx/Tx |
取值范围 |
0 .. 0.255 |
默认取值 |
无 |
参数描述 |
SecOC模块MainFunction的调度周期 |
|||
依赖关系 |
无 |
|||
依赖关系 |
无 |
|||
SecOCVersionInfoApi |
取值范围 |
True / False |
默认取值 |
False |
参数描述 |
用于配置SecOC_GetVersionInfo函数接口是否可用 |
|||
依赖关系 |
无 |
SecOCRxPduProcessing¶
图 SecOCRxPduProcessings
如上图,SecOCRxPduProcessings为SecOCRxPduProcessing对象的集合,在该对象的右键菜单中,可添加0 .. n个SecOCRxPduProcessing对象。
图 SecOCRxPduProcessing
SecOCAuthInfoTxLength:描述的是MAC的长度。
SecOCDataId :和发送的ID需要一致,接收和发送是一组,具有唯一性。
SecOCFreshnessCounterSyncAttempts:新鲜度的尝试次数,也许会出现偶然新鲜度失败,可以通过多次尝试依旧接收报文。
SecOCFreshnessValueId:和发送的ID需要一致,接收和发送是一组,具有唯一性。
SecOCFreshnessValueLength:新鲜度在加密信息里所占用的长度,单位:Bits。
SecOCFreshnessValueTxLength:和SecOCFreshnessValueId保持一致即可。
SecOCVerificationStatusPropagationMode:参数用于描述从SecOC模块到SWCs的每次验证尝试状态的传播,此处包含失败通知,成功通知,和不通知,为了提高代码的效率,选择NONE。
SecOCRxAuthServiceConfigRef:算法选择,根据在Csm模块中配置的算法进行选择。
SecOCSecuredPduBuffLength:大于等于所有信息的长度即可,数组缓存SecOC报文(此例程大于16即可,单位Bytes)。
表 SecOCRxPduProcessing参数说明
UI名称 |
描述 |
|||
SecOCAuthInfoTxLength |
取值范围 |
0 .. 64 |
默认取值 |
0 |
参数描述 |
定义了添加在Secured I-PDU后面的Authentication code的长度,单位为bit |
|||
依赖关系 |
无 |
|||
SecOCDataId |
取值范围 |
0 .. 65535 |
默认取值 |
0 |
参数描述 |
Secured I-PDU唯一的标识符 |
|||
依赖关系 |
无 |
|||
SecOCFreshnessCounterSyncAttempts |
取值范围 |
0 .. 65535 |
默认取值 |
0 |
参数描述 |
该参数定义了在校验Secured I-PDU失败后,尝试再校验的次数。 |
|||
依赖关系 |
无 |
|||
SecOCFreshnessTimestampTimePeriodFactor |
取值范围 |
无 |
默认取值 |
无 |
参数描述 |
该参数目前不可用,不可配置 |
|||
依赖关系 |
无 |
|||
SecOCFreshnessValueLength |
取值范围 |
0 .. 64 |
默认取值 |
0 |
参数描述 |
定义了Freshness Value的完整长度,单位为bit |
|||
依赖关系 |
无 |
|||
SecOCFreshnessValueTxLength |
取值范围 |
0 .. 64 |
默认取值 |
0 |
参数描述 |
定义了添加在Secured I-PDU后面的Freshness Value的长度,单位为bit |
|||
依赖关系 |
无 |
|||
参数描述 |
定义了用于认证和校验MAC时使用的key在本地的标识符 |
|||
依赖关系 |
无 |
|||
SecOCRxAcceptanceWindow |
取值范围 |
无 |
默认取值 |
无 |
参数描述 |
该参数目前未使用,不可配置 |
|||
依赖关系 |
无 |
|||
SecOCSecondaryFreshnessValueId |
取值范围 |
0 .. 65535 |
默认取值 |
0xFFFF |
参数描述 |
Secondary Freshness Value的Id |
|||
依赖关系 |
无 |
|||
SecOCUseFreshnessTimestamp |
取值范围 |
False |
默认取值 |
False |
参数描述 |
该参数固定为False,不可配置 |
|||
依赖关系 |
无 |
|||
SecOCVerificationStatusPropagationMode |
取值范围 |
BOTH FAILURE_ONLY NONE |
默认取值 |
NONE |
参数描述 |
用于定义在那种校验结果下,通知用户: BOTH: 在校验结果成功和失败时都通知用户 FAILURE_ONLY:只在校验失败时通知用户 NONE:任何结果都不通知用户 |
|||
依赖关系 |
无 |
|||
SecOCRxAuthServiceConfigRef |
取值范围 |
Csm模块选择 |
默认取值 |
|
参数描述 |
进行校验时使用的算法 |
|||
依赖关系 |
无 |
|||
SecOCAuthenticPduBuffLength |
取值范围 |
0 .. 65535 |
默认取值 |
0 |
参数描述 |
用于存储Authentic PDU的buffer的长度 |
|||
依赖关系 |
无 |
|||
SecOCSecuredPduBuffLength |
取值范围 |
0 .. 65535 |
默认取值 |
0 |
参数描述 |
用于存储Secured PDU的buffer的长度 |
|||
依赖关系 |
无 |
|||
参数描述 |
CSM或CAL模块中用于提供该PDU校验服务所配置的Id |
|||
依赖关系 |
无 |
|||
SecOCSameBufferPduRef |
取值范围 |
引用到配置的samebuffer对象 |
默认取值 |
无 |
参数描述 |
如果使用SameBuffer,则指向一个配置的SameBuffer对象 |
|||
依赖关系 |
无 |
SecOCRxAuthenticPduLayer¶
图 SecOCRxAuthenticPduLayer
SecOCPduType:选择所走的协议,此例程为If。
SecOCRxAuthenticLayerPduRef:SecOc_RxPduA。
表 SecOCRxAuthenticPduLayer参数说明
UI名称 |
描述 |
||||
SecOCPduType |
取值范围 |
SECOC_IFPDU SECOC_TPPDU |
默认取值 |
SECOC_IFPDU |
|
参数描述 |
表示PDU的类型是IF PDU还是TP PDU |
||||
依赖关系 |
无 |
||||
SecOCRxAuthenticLayerPduRef |
取值范围 |
ECUC中定义的PDU |
默认取值 |
无 |
|
参数描述 |
SecOCRxAuthenticPduLayer对应的PDU |
||||
依赖关系 |
无 |
SecOCRxSecuredPduLayer¶
SecOCRxSecuredLayerPduRef:SecOc_RxPduS。
图 SecOCRxSecuredPduLayer
表 SecOCRxSecuredPduLayer参数说明
UI名称 |
描述 |
|||
SecOCRxSecuredPduLayer |
取值范围 |
ECUC中定义的PDU |
默认取值 |
无 |
参数描述 |
SecOCRxSecuredPduLayer对应的PDU |
|||
依赖关系 |
无 |
SecOCTxPduProcessing¶
图 SecOCTxPduProcessings
如上图,SecOCTxPduProcessings为SecOCTxPduProcessing对象的集合,在该对象的右键菜单中,可添加0 .. n个SecOCTxPduProcessing对象。
图 SecOCTxPduProcessing
SecOCAuthInfoTxLength:描述的是MAC的长度。
SecOCDataId :和发送的ID需要一致,接收和发送是一组,具有唯一性。
SecOCAuthenticationBuildAttempts:新鲜度的尝试次数,也许会出现偶然新鲜度失败,可以通过多次尝试依旧接收报文。
SecOCFreshnessValueId:和发送的ID需要一致,接收和发送是一组,具有唯一性。
SecOCFreshnessValueLength:新鲜度在加密信息里所占用的长度,单位:Bits。
SecOCFreshnessValueTruncLength:和SecOCFreshnessValueLength保持一致即可。
SecOCAuthenticPduBuffLength:大于等于真实信息的长度即可,数组缓存SecOC报文(此例程大于8即可,单位Bytes)。
SecOCSecuredPduBuffLength:大于等于所有信息的长度即可,数组缓存SecOC报文(此例程大于16即可,单位Bytes)。
SecOCTxAuthServiceConfigRef:算法选择,从Csm中选择对应的CsmJob。
表 SecOCTxPduProcessing参数说明
UI名称 |
描述 |
|||
SecOCAuthInfoTxLength |
取值范围 |
0 .. 64 |
默认取值 |
0 |
参数描述 |
定义了添加在Secured I-PDU后面的Authentication code的长度,单位为bit |
|||
依赖关系 |
无 |
|||
SecOCAuthenticationRetries |
取值范围 |
0 .. 65535 |
默认取值 |
0 |
参数描述 |
定义了在生成认证信息失败后再次尝试的次数 |
|||
依赖关系 |
无 |
|||
SecOCDataId |
取值范围 |
0 .. 65535 |
默认取值 |
0 |
参数描述 |
Secured I-PDU唯一的标识符 |
|||
依赖关系 |
无 |
|||
SecOCFreshnessTimestampTimePeriodFactor |
取值范围 |
无 |
默认取值 |
无 |
参数描述 |
该参数目前不可用,不可配置 |
|||
依赖关系 |
无 |
|||
SecOCFreshnessValueLength |
取值范围 |
0 .. 64 |
默认取值 |
0 |
参数描述 |
定义了Freshness Value的完整长度,单位为bit |
|||
依赖关系 |
无 |
|||
SecOCFreshnessValueTxLength |
取值范围 |
0 .. 64 |
默认取值 |
0 |
参数描述 |
定义了添加在Secured I-PDU后面的Freshness Value的长度,单位为bit |
|||
依赖关系 |
无 |
|||
SecOCKeyId |
取值范围 |
0 .. 65535 |
默认取值 |
0 |
参数描述 |
定义了用于认证和校验MAC时使用的key在本地的标识符 |
|||
依赖关系 |
无 |
|||
SecOCUseFreshnessTimestamp |
取值范围 |
False |
默认取值 |
False |
参数描述 |
该参数固定为False,不可配置 |
|||
依赖关系 |
无 |
|||
SecOCAuthenticPduBuffLength |
取值范围 |
0 .. 65535 |
默认取值 |
0 |
参数描述 |
用于存储Authentic PDU的buffer的长度 |
|||
依赖关系 |
无 |
|||
SecOCSecuredPduBuffLength |
取值范围 |
0 .. 65535 |
默认取值 |
0 |
参数描述 |
用于存储Secured PDU的buffer的长度 |
|||
依赖关系 |
无 |
|||
SecOCCsmCalCfgId |
取值范围 |
0 .. 65535 |
默认取值 |
0 |
参数描述 |
Csm或CAL模块中用于提供该PDU校验服务所配置的Id |
|||
依赖关系 |
无 |
|||
SecOCRxAuthServiceConfigRef |
取值范围 |
SECOC_CALMAC SECOC_CALSIGNATURE SECOC_CSMMAC SECOC_CSMSIGNATURE |
默认取值 |
SECOC_CSMMAC |
参数描述 |
进行校验时使用的算法 |
|||
依赖关系 |
无 |
|||
SecOCSameBufferPduRef |
取值范围 |
引用到配置的samebuffer对象 |
默认取值 |
无 |
参数描述 |
如果使用SameBuffer,则指向一个配置的SameBuffer对象 |
|||
依赖关系 |
无 |
SecOCTxAuthenticPduLayer¶
图 SecOCTxAuthenticPduLayer
SecOCPduType:选择所走的协议,此例程为If。
SecOCTxAuthenticLayerPduRef:SecOc_TxPduA。
表 SecOCTxAuthenticPduLayer参数说明
UI名称 |
描述 |
|||
SecOCPduType |
取值范围 |
SECOC_IFPDU SECOC_TPPDU |
默认取值 |
SECOC_IFPDU |
参数描述 |
表示PDU的类型是IF PDU还是TP PDU |
|||
依赖关系 |
无 |
|||
SecOCTxAuthenticLayerPduRef |
取值范围 |
ECUC中定义的PDU |
默认取值 |
无 |
参数描述 |
SecOCTxAuthenticPduLayer对应的PDU |
|||
依赖关系 |
无 |
SecOCTxSecuredPduLayer¶
图 SecOCTxSecuredPduLayer
SecOCTxSecuredLayerPduRef:SecOc_TxPduS。
表 SecOCTxSecuredPduLayer参数说明
UI名称 |
描述 |
|||
SecOCTxSecuredPduLayer |
取值范围 |
ECUC中定义的PDU |
默认取值 |
无 |
参数描述 |
SecOCTxSecuredPduLayer对应的PDU |
|||
依赖关系 |
无 |
代码例程¶
代码结构¶
示例集成通讯安全模块代码框架如下:
图 代码框架
源代码调度集成¶
信息的加密和解密是下函数,放置在5ms周期里面,进行周期的处理发送和接收的SecOC报文。
图 周期处理函数
测试结果¶
发送测试¶
需要在Rte_SecOC.c的函数FreshnessManagement_GetTxFreshness中添加对入参freshnessValue的操作,作为观察周期发送的新鲜度值的依据,以下为一个简单的周期更新计算方法:
在CAN监测工具里面观察数据新鲜度的变化是否连续。新鲜度在本例程里占2Bytes,在真实数据的后面。
图 发送报文验证
接收测试¶
向对应的SecOC邮箱发送一条报文,检查是否可以进对应的SecOC_RxIndication。
收到校验通过的报文后,可进入COM配置中信号接收callout函数。
图 配置测试用callout函数
图 接收报文验证