一、背景:
在汽车ECU软件中,如果需要依靠汽车总线(如CAN)刷新CPU里面的程序时,必须要通过安全访问,从而防止非法刷新操作危及车辆安全(例如,黑客攻击)。在车联网以前,车辆总线是一个自封闭的网络,黑客通过远程电脑控制汽车在物理上是不可能的,除非亲自在汽车里操作或者首先在汽车的OBD接口上安装无线设备再远程操控。随着车联网时代的到来,越来越多的车辆会选择远程云端刷新程序,实现快捷修复程序Bug,但这也为黑客远程攻击车辆程序提供了渠道。

二、ISO14229安全访问规范分析:
对于传统汽车,虽然黑客远程攻击汽车软件的可能性很低,但是ISO14229规范也多少考虑了恶意刷新软件的可能性。因此在安全访问方面还是考虑比较多的:
1.算法固化在ECU和上位机程序里,不通过总线传输。
2.每个Seed只能使用一次,如果Key计算错误。重新访问返回新的Seed,防止黑客对一个Seed玻璃破解。
3.连续2次安全访问尝试失败后启动读Seed延时机制,比正常2ms响应一次的时间被延长5000倍,大大缩短黑客随机碰撞Seed-Key的次数。

三、ISO14229安全访问漏洞分析:
1.Seed-Key是可重复使用的。虽然黑客可能获取不到Seed-Key的算法,但是可以获取到有限的Seed-Key的数对。这个在车辆开发阶段,整车厂或供应商测试时,每次刷新时有效的Seed-Key都在CAN网络上保留着。虽然测试人员也不知道算法,但不能防止有人监听网络报文提取每次安全访问Seed-Key的样本,为破解使用。
2. ISO14229只规定Seed生成方法是伪随机的,但是没有提出测试标准。有的软件工程师会用简单的Seed生成算法,如图示,Seed是Cnt取样值的函数,Seed=F(Cnt取样值),最简单的函数就是Seed=Cnt取样值。

由于取样时刻是任意的(实际是OS中取样任务周期的整数倍+OS调度波动值,例如2ms*N+△T),取样出的CNT是随机的。随便测几下没问题,但是整体上统计就显示出规律性。如下图是对一个120MHz的16位定时器在一个2ms任务的统计结果。显然,1000ms内看起来是随机的,但是从2000ms开始就体现出宏观的规律性。

有的程序员会引入非线性计算(如下图Seed=Cnt * Cnt+offset,或更复杂的)让统计结果看起来均匀分布。但是会使虚假Seed数量增多(即有的Seed永远取不到),减小了Seed的样本空间,也就减少了黑客随机碰撞攻击的次数。

3. ISO14229只要求解锁成功后Seed就变成0但是没有限制解锁成功前可以获取Seed的次数,很多整车厂的Spec也没有该要求。这意味着ECU上电后只要上位机不请求解锁,就可以无限次的获取Seed。这样黑客用上位机以固定周期(如2ms)一直取读Seed,就可以获取Seed的统计特性,从而破解出Seed的生成算法。根据第1条风险,只要知道一个Seed-Key值,让ECU在期望的采样时刻做风险2的碰撞试验。通过有限次试验,就能获取期望的Seed,安全访问就被攻破了。
根据上述分析,传统安全访问风险的根源在于Seed可以重复出现

四、车联网条件下ISO14229安全访问的基本条件:
1. Seed的产生依然是伪随机数,这个和传统车一样不可改变,因为给车上安装真随机数发生器成本太大。
2. Seed的产生是不可重复的。
3.一个驾驶循环内Seed的产生次数是有限(如3次)。且ECU上电后10秒内不返回Seed,防止黑客连续获取Seed做随机碰撞攻击。

五、Seed的生成方案:

根据第四节描述,可以参考网上银行的OTP动态口令,用HMAC算法生成不可重复的Seed。方案如下:

  1. ECU上电后EEPROM初始化完成,读出上次Seed计算的次数N,然后用公式Seed[i]=HMAC(key,N+i)连续计算三个Seed[0,1,2]存储在RAM里。
    此处key是一个任意固定值的参数。
  2. ECU上电超过10S后,上位机有一次读Seed请求,就返回一个Seed[i],同时立即存储N=N+1到EEPROM。一个驾驶循环上位机最多只能获取3个Seed。
  3. 测试阶段限制N的范围为[0,Nt),量产出厂时N的初始值写Nt,保证测试阶段的Seed在量产车里不会出现。

六、综合Seed-key安全访问方案
上面方案只保证了Seed的不可重复。如果只为了满足这一条,HMAC算法中的参数key都没有用,完全可以初始化为0,这显然浪费了这个算法的价值。
如果把公式Seed=HMAC(key,N)中的key作为整车安全访问的秘钥,只要ECU里的key和上位机的key’完全一样,用相同的HMAC算法对N做数字签名就可以获得一样的口令,从而安全访问通过。因为HMAC是Hash散列函数,不可能根据已知口令推算出key。在EEPROM作用下,可以保证N连续增长不重复,从而不会产生重复的口令。虽然N是可预测的,但是黑客在不知道key的情况下,不可能对N做出正确的签名。
ECU里的key和HMAC算法完全分离,只有在整车下线时由工厂在安全的网络环境下写入,与测试阶段的key完全不一样。这样key的保密性和访问过程的安全性就完全掌握在整车厂手里。

七,小结:
传统安全访问策略的缺点:

  1. 整车厂要自己设计算法或委托供应商提供算法,且算法都不一样,使得刷新工具的兼容性差。同时,软件开发阶段底层软件工程师要考虑不同客户项目的差异,这种低效率重复工作量比较大。
  2. 有的整车厂的安全访问策略都是自己制定的,出于保密又不能公开被认证机构检验,其安全性不一定可靠。
  3. 有的整车厂的安全访问策略算法与秘钥是一体的,算法升级困难。
  4. 一个厂家的同一车型或很多车型都共用一个算法,风险的范围很大。

基于HMAC算法安全访问策略的优点:

  1. 由于采用OTP技术,Seed永不重复,使针对一个Seed的暴力破解也无效。整车厂只要保管好自己的秘钥就可以保证安全。
  2. 由于算法是统一的,避免低效率重复性开发及测试安全访问算法,软件成本大大降低。
  3. 由于算法是统一的,刷新工具可以兼容所有采样HMAC算法的车辆。
  4. 由于key可以灵活配置,就能实现一个秘钥配一台车,大大缩小风险范围。
  5. 如果不是在出厂时写入key, 而是在4S店售出时写入key,那么掌握软件刷新的权限就流车主自己手里,后续整车厂想升级程序就要问车主请求key,这种出让安全访问权限的技术可以成为一个吸引消费者的卖点。

八、OTP技术简介:

以下内容请参考链接了解详情:
https://www.cnblogs.com/loveyou/p/6989064.html

动态口令(OTP,One-Time Password)又称一次性密码,是使用密码技术实现的在客户端和服务器之间通过共享秘密的一种认证技术,是一种强认证技术,是增强目前静态口令认证的一种非常方便技术手段,是一种重要的双因素认证技术,动态口令认证技术包括客户端用于生成口令产生器的,动态令牌,是一个硬件设备,和用于管理令牌及口令认证的后台动态口令认证系统组成。

otp从技术来分有三种形式, 时间同步、事件同步、挑战/应答。

(1) 时间同步

原理是基于 动态令牌和 动态口令验证服务器的时间比对,基于 时间同步的 令牌,一般每60秒产生一个新口令,要求服务器能够十分精确的保持正确的时钟,同时对其令牌的晶振频率有严格的要求,这种技术对应的终端是硬件令牌。

(2)事件同步

基于事件同步的令牌,其原理是通过某一特定的事件次序及相同的种子值作为输入,通过HASH算法中运算出一致的密码。

(3)挑战/应答

常用于的网上业务,在网站/应答上输入 服务端下发的 挑战码, 动态令牌输入该挑战码,通过内置的算法上生成一个6/8位的随机数字,口令一次有效,这种技术目前应用最为普遍,包括刮刮卡、短信密码、动态令牌也有挑战/应答形式。

汽车软件刷新——当前安全访问策略的缺陷及改进方案相关推荐

  1. 浅谈汽车软件Boot的五种自刷新方式

    背景: 汽车软件Boot程序的主要作用是刷新App程序.在在一个具体客户项目中,Boot也是客户需求的一部分,跟随项目也有软件开发计划(有的为了和其它Boot区分,把项目上的Boot称作CB, Cus ...

  2. 软件的接口设计图_面向服务架构(SOA)的汽车软件分析和设计

    --后台回复"资料",领取特斯拉专利技术解析报告-- 文章转自:联合电子 本文将先重温下SOA架构的核心要素与优势,并重点讨论话题"面向服务架构(SOA)的汽车软件分析和 ...

  3. 服务架构(SOA)的汽车软件

    文章目录 一文聊聊面向服务架构的汽车软件分析和设计 联合电子:面向服务架构(SOA)的汽车软件三部曲 汽车SOA架构 **SOA是什么** SOA Benefits SOA == Some/IP? 服 ...

  4. 【Zeekr_Tech】汽车软件敏捷开发和分支管理

    极氪软件及电子中心Filip 经过十多年的发展,敏捷软件开发已经从一种前卫的开发方式转变成为在各大软件公司中被广泛应用的主流技术,变成了互联网行业的一种潮流,而随着软件定义汽车等概念的兴起,软件在一辆 ...

  5. 汽车电子行业开发者的内功心法:汽车软件开发V模型

    目录 1.V模型概述 2.V模型实施 2.1.系统需求分析 2.2.软件需求分析 2.3.软件架构设计 2.4.软件单元设计和软件实现 2.5.软件单元测试 2.6.软件集成测试 2.7.软件系统测试 ...

  6. 汽车软件开发:目前还存在几大方面的痛点亟待解决?

    http://www.evinchina.com/newsshow-1370.html 通过对不同的汽车软件开发者的访谈,以及软件开发管理过程中的经验教训,@爱索咨询认为,除去组织架构的独立性之外,汽 ...

  7. 谈谈汽车软件中间件(Autosar为例)

    文章目录 操作系统,中间件,应用软件-各司其职分工不同 什么是汽车软件中间件? 汽车软件中间件有什么好处? 中间件的明星方案-AUTOSAR AUTOSAR-Adaptive拯救AUTOSAR 技术细 ...

  8. 汽车软件开发者的内功心法:V模型

    已剪辑自: https://mp.weixin.qq.com/s/v0QyyZfz-hHpulIxHyT2_A 做开发除了需要高效的编码能力,同样也离不开编程思维的指导.作为刚刚进入汽车电子行业的开发 ...

  9. canoe的dela_一种基于CANoe的ECU软件刷新方法及装置的制造方法

    一种基于CANoe的ECU软件刷新方法及装置的制造方法 [技术领域] [0001]本发明涉及汽车电子技术领域,尤其涉及一种基于CANoe的ECU软件刷新方法及 目-ο [背景技术] [0002]随着汽 ...

最新文章

  1. 谈谈WEB开发中的苦大难字符集问题
  2. SWAP使用情况以及muma介绍
  3. 洛谷 P2704 [NOI2001]炮兵阵地
  4. 用 docker secrets 保存 appsettings.Production.json
  5. 83998 连接服务器出错_服务端 TCP 连接的 TIME_WAIT 问题分析与解决
  6. 评分9.3,你想要的那本书,来了!
  7. 魔域为什么服务器更新还显示状态有很多人登陆,《魔域》常见问题
  8. hdu-5495 LCS(置换)
  9. linux常用查看磁盘空间大小的命令
  10. 编码的奥秘:电筒密谈
  11. 【不忘初心】Win10 20H2 19042.964_X64_四合一太阳谷图标_[纯净精简版][2.83G](2021.5.1)
  12. linux系统文件夹
  13. pvr图片格式如何打开
  14. java后台导出pdf,基础用法和样例
  15. 【笔记】python中常见的函数(一)
  16. Jetson AGX Xavier刷机+安装opencv+使用TensorRT加速推理yolo全过程+心路历程
  17. qt5.13.2版本安装+qt官网下载地址
  18. LDAP 协议入门(轻量目录访问协议)
  19. 使用EJS脚本实现花生壳动态域名更新服务(一)
  20. 如何获取MIPS汇编对应的机器码

热门文章

  1. HTML代码转word!亲测!可用!!!
  2. 时间序列预测的8种常用方法简介
  3. 诺基亚的驱动力:研发与产业族群
  4. 黑莓行货手机是否都有运营商(移动,电信,联通)的logo?
  5. web服务启动不了解决流程
  6. 太赫兹通信芯片关键技术与系统发展浅析
  7. R计算已知 总体标准差 ,均值 , N 求 置信区间
  8. 约瑟夫环算法(JAVA)
  9. 看到记忆的印迹:神经科学家们如何定位、唤醒甚至偷换记忆
  10. HBuilder 代码格式化时清除空行