27服务-安全访问状态转换

Posted 诊断协议那些事儿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了27服务-安全访问状态转换相关的知识,希望对你有一定的参考价值。

诊断协议那些事儿

诊断协议那些事儿专栏系列文章,本文将介绍安全访问状态图——作为UDS27服务的规范性附件。

可参考前两篇文章:
27服务-SecurityAccess
UDS - 深论Security Access Service

27服务的初衷就是防止无权限人员进行非法数据操作,用来确保车辆ECU的安全,如果任何持有诊断设备的人都可以通过诊断指令对车辆ECU进行操作,将存在较大的安全隐患。为了验证产线、售后的操作人员是否有权限操作,在对车辆ECU进行诊断检查时,需要验证其提供的密钥是否有效,而产生有效密钥的前提需要ECU反馈给诊断设备一个随机的种子Seed,如果Seed不具有随机性,不法分子将通过大量的重试来破解密钥,只有Seed具有随机性,才能确保每次产生的Key不同,因此诊断设备每次应发送不同的密钥来进行解锁。


文章目录


NRC判定策略

①服务通用规则NRC判断

②对于带有子功能的服务(除31服务)的NRC优先级

27服务测试用例

假设对应的Seed、Key都是4 Bytes

Step 1:Tester 发送10 03
           ECU 响应50 03
Step 2:Tester 发送27 01
           ECU 响应67 01 11 22 33 44
Step 3:Tester 发送27 02 22 33 44
          ECU 响应7F 27 13
Step 4: Tester 发送27 01
           ECU 响应67 01 12 34 56 78
Step 5:Tester 发送27 02 23 45 67 89
           ECU 响应67 02(表示解锁成功)
           
Step 6:Tester 发送 27 02 12 21 34
          ECU 响应7F 27 24

此时ECU为什么不回复长度不对(NRC 0x13)?而回复发送顺序不对(NRC 0x24)?
结合下图安全访问状态图线路7中查找具体的状态转换表,可得!

安全访问状态图

本文的目的是根据状态迁移图和状态转换条件、动作来描述ECU中的SecurityAccess服务处理。

状态转换参数概览

名称说明
Delay_Timer延时计时器如果支持,则此值表示安全访问尝试达到最大次数后的等待时间。(部分车厂会规定在每次开机、启动时会启动延时计时器),标准用例对于延时计时器有固定值,但特殊情况下也可能具有变量值【时间的长短取决于非易失性存储器中的错误访问尝试次数】
Att_Cnt如果支持,此值表示启动延时计时器之前的错误安访问尝试的次数(每个安全级别都需要计时器)
Static_Seed静态种子TRUE:表示根据表State transitions在某些条件下种子被存储并再次用于种子请求 ;FALSE:表示每次收到新的种子请求时使用一个随机种子
xx表示服务器收到的最后一个requestSeed securityAccessType
yy表示服务器接收到的当前sendKey securityAccessType

Delay_Timer延时计时器和Att_Cnt参数支持是可选项【由车辆制造商决定】,一般来说,对于较长的种子/密钥长度(如16个byte或更长),对于这些参数的支持将不再重要。

State transitions-状态转换表











说明:


总结

以上就是今天要讲的内容,欢迎各位评论,提出宝贵意见,小编也会持续更新,以提供更好的作品。

以上是关于27服务-安全访问状态转换的主要内容,如果未能解决你的问题,请参考以下文章

花生壳以及类似的服务安全吗?它是否只做了一个动态IP转换?

UDS - 深论Security Access Service

监控车辆的历史行驶轨迹有何意义?TSINGSEE车载监控平台助力运输安全监管

cookie和session页面随机数和防止重复提交

为 api 访问生成安全令牌

在Scala中的测试中访问私有变量而不进行强制转换