0

据我了解,如果测试仪(客户端)返回的安全密钥是正确的,则 ECU 将以肯定的 UDS 响应进行响应。在此之后,测试人员将被授予所请求的安全级别的安全访问权限。

我的问题是:如果测试人员总是被授予所请求的安全级别的安全访问权限,那么安全级别的目的是什么?

4

2 回答 2

3

安全访问使用 ECU 和授权测试人员之间的共享秘密(秘密算法/私钥)工作。目的是限制未经授权的测试人员/工具(第 3 方)或缺乏某些访问权限的用户对某些服务/子功能的访问。

为了请求安全访问,测试仪将首先发送一个命令以从 ECU 请求一个随机种子(即0x27 01)。如果 ECU 在其当前状态下允许这样做,它可能会以包含种子的肯定响应来响应(即0x67 01 AA BB CC DD)。然后测试器应用程序需要获取这个种子(0xAA BB CC DD)并对其应用密钥生成算法(即使用只有 ECU 和授权测试器知道的私钥的加密函数) - 一旦计算出密钥,它需要被发送回 ECU(即0x27 02 66 77 88 99)。ECU 可以用肯定响应(即0x67 02)或否定响应代码(即0x7F 0x27 0x35)对此进行回复。

这意味着测试人员不会总是被授予所请求的安全级别的安全访问权限。ECU 可能会拒绝访问 - 常见原因有:

  • 无法从当前会话/安全级别过渡到此安全访问级别(即 NRC 0x7F serviceNotSupportedInActiveSession、NRC 0x22 conditionsNotCorrect、NRC 0x31 requestOutOfRange...)
  • 测试仪发送的密钥与 ECU 期望的密钥不匹配(NRC 0x35 invalidKey)
  • 测试人员多次尝试使用错误的密钥(NRC 0x36 超过NumberOfAttempts)
  • 由于之前的错误尝试过多,ECU 当前不允许解锁安全访问 - 测试人员需要先等待某个超时(NRC 0x37 requiredTimeDelayNotExpired)
于 2018-05-08T02:01:44.380 回答
1

UDS 不仅仅是 AUTOSAR 的概念,它在很久以前就被定义为 ISO-14229。

可以有多个安全级别。通常,它们也有点绑定到诊断会话。每个会话可以有一个单独的安全级别,具有不同的种子/密钥和/或安全算法:* ProgrammingSession -> SecurityLevel 1 * ExtendedSession -> SecurityLevel 3 * SupplierSpecific/User Session -> SecurityLevel 5 ...

如前所述,客户端必须请求种子并计算密钥,ECU 也是如此。然后客户端发送密钥,ECU 将与它自己计算的预期密钥进行比较。如果不匹配,则会有否定响应,并且不会达到安全级别。如果会话超时或会话更改,则安全级别将设置回锁定状态。可以通过分配给某些会话和安全级别来配置服务的可用性和执行。

于 2018-05-12T16:24:45.320 回答