• 212查看
  • 0回复

[底层软件] UDS 0x27服务 安全访问

[复制链接]

  • TA的每日心情
    无聊
    1-7-2015 18:46
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 27-4-2024 09:15:31 | 显示全部楼层 |阅读模式

    汽车零部件采购、销售通信录       填写你的培训需求,我们帮你找      招募汽车专业培训老师


    在《ISO14229-1》文档中已经详细阐述了 UDS 中安全访问(0x27 服务)的基本原理,这里回顾一下。

    安全访问有两个重点要素:


      SecurityAccess(0x27)服务

      种子(Seed)和密钥(Key)的关系


    UDS 0x27服务 安全访问w1.jpg

    如果Tester想执行受保护的服务,需要解锁ECU的安全模式(通常称为级别),如:

      WriteDataByldentifier(0x2E)服务(写入VIN)

      InputOutputControlByldentifier(0x2F)

      服务RequestDownload(0x34)服务(ECU刷写)

    UDS 0x27服务 安全访问w2.jpg

    种子(Seed)和密钥(Key)的关系

      Step1:Tester请求Seed

      Step2:ECU发送Seed

      Step3:Tester发送Key(根据收到的Seed)

      Step4:若Tester发送的Key有效,ECU响应并解锁

      如果在收到RequestSeed消息时服务器已经解锁,则ECU应响应具有种子值0x00的肯定响应消息

      注:Seed的字节长度由OEM制定,Seed&Key安全算法。

    UDS 0x27服务 安全访问w3.jpg

    上图安全等级为m时的安全访问,在一般情况下,在cdd文件创建安全访问时默认为m=2n-1。

    安全访问一般分为 4个步骤:

      第一步:由Tester 向 ECU 发送 27 服务请求种子(Seed),这个 2n-1 表示 ECU 需要解锁的安全等级

      第二步:ECU 向 Tester 发送种子(Seed),这个种子一般为随机数。

      第三步:Tester 接收到种子后,根据 Seed&Key DLL 安全算法来计算 Tester 端的密钥 Key1,并将它发送给 ECU。

      第四步:ECU 根据安全算法,结合自己本地的种子(Seed)计算 ECU端的密钥 Key2,如果Key1=Key2,则 ECU 解锁。当 Key1 不等于 Key2,Tester 想暴力破解访问 ECU 时,Tester 会被延迟。

    注意:如果在收到 RequestSeed 消息时服务器(ECU)已经解锁,则 ECU 应回复包含种子值为0的肯定响应消息。此外,这个种子的字节长度由 OEM 制定,可以是2 个字节、3 个字节、4 个字节。

    主要为了确认访问数据是否合法,因为数据是无价的,各主机厂都针对一些特有数据进行保密,为了鉴别是否授权获取保密数据、写入数据,出现了安全访问服务,只有正确解锁对应的安全锁级,才能访问该安全等级的数据,否则无法访问。

    例如软件设计使用AEC128-CMAC的加密,其原理是在诊断仪发送27 01 给到ECU之后,ECU会产生一串随机数后反馈给诊断仪,诊断仪接着根据固定的KEY对随机数进行加密,得到加密后的数据Encrypt,诊断仪通过27 02 Encrypt发送给ECU,ECU则对发送出去的随机数同样进行ASE128-CMAC的加密得到Encrypt1,之后Encrypt1与27 02的Encrypt进行对比,成功则返回67 02 ,失败则返回NRC 35 36等。
    服务格式:Tester:2701ECU:6701 seed(4byte)Tester: 2702 key(4byte)ECU:6702

    快速发帖

    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    QQ|手机版|小黑屋|Archiver|汽车工程师之家 ( 渝ICP备18012993号-1 )

    GMT+8, 27-12-2024 11:21 , Processed in 0.264913 second(s), 31 queries .

    Powered by Discuz! X3.5

    © 2001-2013 Comsenz Inc.