【车载开发系列】AutoSar当中的DcmDspSecurity容器

【车载开发系列】AutoSar当中的DcmDspSecurity容器

AutoSar当中的DcmDspSecurity容器

  • 【车载开发系列】AutoSar当中的DcmDspSecurity容器
    • 一. DcmDspSecurity容器位置
    • 二. 关于对安全等级理解
    • 三. 关于安全等级的定义
      • 1)Extendedsecuritylevel
      • 2)Programmingsecuritylevel
      • 3)Immobilizersecuritylevel
      • 4)systemSupplierSpecificlevel
    • 四. DLS子模块功能
    • 五. DcmDspSecurity容器
      • 1)DcmDspSecurityBypassEnabled
      • 2)DcmDspSecurityResetAttemptCounterOnTimeout
      • 3)DcmDspSecuritySingleInstanceAttemptMonitor
      • 4)DcmDspSecuritySingleInstanceDelayTimer
    • 六. DcmDspSecurityRow的配置项目
      • 1)DcmDspSecurityAttemptCounterEnabled
      • 2)DcmDspSecurityCompareKeyFnc
      • 3)DcmDspSecurityDelayTime
      • 4DcmDspSecurityDelayTimeOnBoot
      • 5)DcmDspSecurityDelayTimeOnFailedGetAttemptCounter
      • 6)DcmDspSecurityGetAttemptCounterFnc
      • 7)DcmDspSecurityGetSeedFnc
      • 8)DcmDspSecurityKeySize
      • 9)DcmDspSecurityLevel
      • 10)DcmDspSecurityNumAttDelay
      • 11)DcmDspSecuritySeedSize
      • 12)DcmDspSecuritySetAttemptCounterFnc
      • 13)DcmDspSecurityUsePort
    • 七. 关于AttemptCounter
      • 1)Dcm_Svc27WriteAttemptCounter
      • 2)Dcm_Svc27UtiGetAttemptCntr
    • 八. 安全访问延时机制

一. DcmDspSecurity容器位置

在AUTOSAR架构中,Dcm(Diagnostic Communication Manager)模块位于通信服务层。Dcm模块是独立于具体的网络的(不依赖于具体的CAN,Lin,Eth,Flexray等网络来实现)。用于获取或者设置安全等级的管理安全等级功能,就存在于DCM当中,我们称呼它叫:DLS子模块。

二. 关于对安全等级理解

DCM模块的每个诊断服务可以配置安全访问等级,一般有无需通过安全访问、需要通过安全等级1访问、需要通过安全等级2访问三种等级。比如对于0x2E下的服务都设定为需要过安全访问等级1后,我们在请求0x2E的服务时需要通过特定的安全校验后才能通过安全访问等级1,这样才能得到0x2E服务的积极响应。

三. 关于安全等级的定义

DLS子模块应该保存当前激活的安全等级状态。DLS模块提供两个接口用来设置和获取当前安全等级:
获取当前激活的安全等级:Dcm_GetSecurityLevel()
设置新的安全等级:DslInternal_SetSecurityLevel()
SecurityLevel安全级别定义一般可以有以下这四种。

1)Extendedsecuritylevel

它是扩展安全级,使用subfunction是$01$02。它是必须要定义的。

2)Programmingsecuritylevel

它是刷新安全级。是可配置选项。用subfunction是$09$0A。

3)Immobilizersecuritylevel

它是防盗安全级,使用subfunction是$11$12。

4)systemSupplierSpecificlevel

它是供应商自定义安全级。

四. DLS子模块功能

DCM模块初始化完后,安全等级设置为0x00(DCM_SEC_LEV_LOCKED,使能安全访问功能)。
如果我们通过安全校验算法后使得安全等级不为0,当发生以下任意事件后,安全等级状态将回到初始状态0x0(DCM_SEC_LEV_LOCKED)。
1)诊断会话(session)从非缺省会话(0x0, default session)切换到非缺省会话,包括从当前非缺省会话切换到本身自己。
2)诊断会话(session)从非缺省会话(0x0, default session)切换到缺省会话。由DiagnosticSessionControl(0x10) 或 S3Server 超时启动)。一次只能激活一个安全级别。

五. DcmDspSecurity容器

该容器包含安全级别配置(DSP参数)(每个安全级别)描述该容器包括DcmDspSecurityRow的行。DcmDspSecurityRow是DcmDspSecurity的子容器。具体的配置项目如下:
在这里插入图片描述

1)DcmDspSecurityBypassEnabled

安全访问是否支持Bypass模式。

2)DcmDspSecurityResetAttemptCounterOnTimeout

延时计时器到期时Dcm是否复位安全尝试计数器。

3)DcmDspSecuritySingleInstanceAttemptMonitor

安全访问是否使用同一个尝试计数器。若位置true,所有的DcmDspSecurityRows共用一个安全尝试计数器;反之,每个DcmDspSecurityRows都单独使用一个安全尝试计数器。

4)DcmDspSecuritySingleInstanceDelayTimer

安全访问是否使用同一个计时器。

六. DcmDspSecurityRow的配置项目

在这里插入图片描述

1)DcmDspSecurityAttemptCounterEnabled

安全尝试计数是否支持外部存储。若设置true,Dcm调用读写尝试计数器的API接口(
调用Xxx_GetSecurityAttemptCounter函数获得AttemptCounter)获得每个这些DcmDspSecurityRow条目的。
反之,Dcm在初始化的时候清空这个安全访问等级的尝试计数器。

2)DcmDspSecurityCompareKeyFnc

秘钥比较函数。当DcmDspSecurityUsePort设置为USE_ASYNCH_FNC时,Dcm会调用该函数。

3)DcmDspSecurityDelayTime

安全访问延迟时间。在延迟期间,Dcm不会接收任何安全访问请求。Dcm只有在失败尝试次数达到设置次数之后才会配置该时间。

4DcmDspSecurityDelayTimeOnBoot

Dcm在上电周期内的延迟时间。在延迟期间,Dcm不会接收任何安全访问请求。若设置非0,Dcm从初始化后的这段时间会拒绝任何安全访问请求。

5)DcmDspSecurityDelayTimeOnFailedGetAttemptCounter

设置获取尝试次数失败后的延迟时间。若不设置,Dcm获取失败后直接将计数清0,接收安全访问请求。

6)DcmDspSecurityGetAttemptCounterFnc

获取尝试次数的函数名。Dcm初始化时重载尝试计数器。

7)DcmDspSecurityGetSeedFnc

获取种子函数。当DcmDspSecurityUsePort设置为USE_ASYNCH_FNC时,Dcm会调用该函数。

8)DcmDspSecurityKeySize

安全访问密钥长度。

9)DcmDspSecurityLevel

安全访问等级。

10)DcmDspSecurityNumAttDelay

安全访问尝试次数。若设置大于0,尝试失败的次数超过该值时返回NRC36;若设置等于0,不限失败尝试次数。

11)DcmDspSecuritySeedSize

安全访问种子长度。

12)DcmDspSecuritySetAttemptCounterFnc

修改安全访问尝试次数的函数。当DcmDspSecurityUsePort设置为USE_ASYNCH_FNC时,Dcm会调用该函数。

13)DcmDspSecurityUsePort

它是安全访问类型。有两个选项。USE_ASYNCH_CLIENT_SERVER:Dcm使用P-port接口(SecurityAccess_{SecurityLevel}函数)访问;
USE_ASYNCH_FNC:Dcm直接调用DcmDspSecurityGetSeedFnc和DcmDspSecurityCompareKeyFnc自定义函数访问。

七. 关于AttemptCounter

SID27服务有个特殊需求,上电或者复位前安全访问失败时,上电的10s内需要启用安全延时,回复0x37。
对应两个callout 函数:
Dcm_Svc27ReadAttemptCounter
Dcm_Svc27WriteAttemptCounter
这两个函数都在Dcm_Svc27Task中被调用。

1)Dcm_Svc27WriteAttemptCounter

Dcm_Svc27WriteAttemptCounter函数对应完成的是下电前的couter存储。
当应用层的key比较失败时,传到底层后,会调用上层的SetAttmptCounter函数,将当前的值告诉应用层,如果大于1,则存储EEPROM,供上电后读取。

2)Dcm_Svc27UtiGetAttemptCntr

Dcm_Svc27UtiGetAttemptCntr函数中,通过函数指针访问应用层callout函数,获取应用层设置的安全访问错误计数器,并启用延时机制。

八. 安全访问延时机制

在一般在默认的模式下,连续3次请求安全访问失败后,需等待10s之后才能接受下一次的安全访问请求“RequestSeed”。

  1. 当测试工具发送一个无效的秘钥,ECU将返回NRC35“InvalidKey”。同时, 安全访问错误计数器加1。该计数器必须存储在非易失性存储单元中, 初始值为0。
  2. 当安全访问错误计数器达到3 (即收到3次无效密钥),ECU将返回NRC36且需要等待10s才可以接受下一次的安全访问请求“Request Seed”。期间任何安全访问请求“Request Seed”都会被ECU反馈NRC37。

当10s等待时间结束后,安全访问错误计数器将减1(或清零),并允许尝试安全访问请求“RequestSeed” , 如果此次请求失败(由于发送了一个无效的秘钥),安全访问错误计数器将加1,到了MAXAttemptCounter之后并再次开启10s等待时间。

  • 20
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

进击的横打

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值