汽车网络信息安全技术
下图很好的展示了目前我们智能汽车上的一些主流的网络安全的技术。我在后面会写一些学习笔记,一一讲一下这些网络安全技术。
今天我们主要关注一下 SecOC。
AUTOSAR 中SecOC与其他模块的交互
SecOC是在AUTOSAR软件包中添加的信息安全组件,该特性增加了加解密运算,密钥管理,新鲜值管理和分发等一系列功能和新要求。SecOC模块在PDU级别上为关键数据提供有效可行的身份验证机制。
Figure 1 展示了SecOC模块在Autosar 里面和其他模块的交互:
PduR负责将进出安全相关的I-PDU路由到SecOC模块。
SecOC模块随后添加安全相关信息,并将结果以I-PDU的形式传播回PduR。
然后,PduR负责进一步路由I-PDU。
此外,SecOC模块利用CSM(Crypto Service Manager)提供的加密服务并与Rte交互以允许密钥和计数器管理。
Note:CSM具体怎么调用底层加密模块,提供加密服务,可以看我另外一篇文章笔记,有详细解释及代码展示:
Autosar CyberSecurity之CSM, CryIf,Crypto Driver学习笔记,由浅入深详细,理论讲解软件配置_爱思考的发菜_汽车网络信息安全的博客-CSDN博客
或者
Autosar CyberSecurity之HSM和CSM, CryIf,Crypto Driver之间的关系,科普分享,理论讲解软件配置_爱思考的发菜_汽车网络信息安全的博客-CSDN博客
详细SecOC通讯过程图
先来看一张整个SecOC通信加密的流程图,后面会详细解释:
从这张图中,我们可以总结出SecOC功能的核心就是“安全报文”:
-
ECU发送报文时需要:构建出“安全报文”,然后发送出去
-
ECU接收报文时需要:解析“安全报文”,认证接收的报文是安全可信任的,然后再接收做进一步处理
安全报文介绍
那我们就来看一下安全报文由哪些部分组成:
安全报文由一下组成:
**报头(header):**可用来指明安全PDU的长度
**真实的I-PDU(Authentic I-PDU):**需要被保护的数据
**新鲜度值(Freshness Value)**和
**身份验证器(Authenticator):**通常使用消息认证码,即Message Authentication Code,简称MAC
由于SecOC机制需要占用总线带宽,因此一般适用于CANFD通讯网络。而在实际使用中,新鲜度值和MAC可能会使用较多长度的数据来提高安全性,但这又会消耗大量的带宽等资源,所以常使用截取的方式做平衡处理。
新鲜度值和MAC都按照完整的值来生成,但是在发送和认证的时候只会截取一部分。
由上面的分析可以看出,除了真实报文外,组成“安全报文”比较重要的两部分就是:
1. 新鲜度值(Freshness Value)
2. 身份验证器(Authenticator)
新鲜度值
在Autosar SecOC中,给出了多种新鲜度值管理方案:
- 基于Counter的递增,即包含了原有方案的机制
- 基于全局时间戳,源于时间戳的唯一性
- 基于同步的复合Counter
这里我们主要谈一下第三种方案。
新鲜度值的构成:基于同步的复合Counter
在此方案中,完整的新鲜度值包括
同步计数器(Trip Counter: TripCnt)、
重置计数器(Reset Counter: RstCnt)、
消息计数器(Message Counter: MsgCnt):消息计数器又分为高值(MsgCntUpper)和低值(MsgCntLower)
重置标志值(Reset Flag)
我们上文提到,为了降低带宽等资源的消耗,构建的“安全报文”中不会包括完整的新鲜度值和MAC,而是会截取一部分。
从上图Figure21 可看出,真正在报文中新鲜度值只包含消息计数器的低值(MsgCntLower)和重置标志值(Reset Flag)。如下图所示:
而同步计数器和重置计数器会由同步报文发出。如下图所示:
看到这里,我们回顾一下,我们前面讲了两种报文:
一种是安全报文:真实报文+裁剪过的新鲜度值+裁剪过的MAC值
安全报文的目的:报文真实性认证保护,防止重放攻击
一种是同步报文:新鲜度值中的Trip Conter+新鲜度值中的Reset Conter+MAC值
同步报文的目的:节点之间的新鲜度值计数器,可能会由于各种原因存在一定的差异,误差,这种时候就需要同步报文,来帮助节点新鲜度值计数器的重新构建,进行节点之间新鲜度值的同步处理。
具体新鲜度值怎么同步,怎么构建,接下来会讲到。
新鲜度值的管理
采用一主多从通讯模式实现新鲜值同步报文收发,如下图所示。
主节点:发送新鲜值同步报文的ECU为主节点,在车载网络中主节点一般是Gateway。
从节点:接收新鲜值同步报文的ECU为从节点。
Tips:不管主节点还是从节点,都可以作为发送节点或者接受节点。
新鲜度值中每个计数器详解
MsgCnt达到最大值:维持最大值
RstCnt达到最大值:维持最大值
TripCnt达到最大值:重置
TripCounter和ResetCounter由主ECU发送,其他ECU接收,保持此值。
MessageCounter每个ECU发送的一次I-PDU加1,当ResetCounter变化时,MessageCounter变为初始值0,到达最大值时保持最大值发送ResetFlag与ResetCounter完成同步,并保持ResetCounter的低位。
上图讲解:
Master ECU 主节点:
通过周期性发送同步报文,给从节点分发TripCnt, RstCnt。
TripCnt: 每次上电+1
RstCnt: 周期性+1,TripCnt更新时, RstCnt重置
Slave ECU从节点:
TripCnt: 根据同步报文更新
RstCnt: 根据同步报文更新
MsgCnt Lower: 每发送一个报文,+1
MsgCnt Upper: MsgCnt Lower溢出出时,+1
Reset Flag:RstCnt的低2位
新鲜度值的构建
从前文可知,安全报文里的新鲜度值是被裁剪过的,那么怎么才能得到完整的新鲜度值呢?
Tips:为什么要得到完整的新鲜度值?
因为安全报文中的MAC值的计算是要用到完整的新鲜度值的
首先我们来了解一下下面几个名词:
**1. Latest value:**最新的值,来自于主节点的同步消息,包括: TripCnt, RstCnt
**2. Previous value:**先前的值,成功发送和成功接收安全报文时维护的新鲜度值
3. Receive value:接收的安全报文的值,包括: MsgCnt Lower, Reset Flag
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数网络安全工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上网络安全知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注网络安全获取)
写在最后
在结束之际,我想重申的是,学习并非如攀登险峻高峰,而是如滴水穿石般的持久累积。尤其当我们步入工作岗位之后,持之以恒的学习变得愈发不易,如同在茫茫大海中独自划舟,稍有松懈便可能被巨浪吞噬。然而,对于我们程序员而言,学习是生存之本,是我们在激烈市场竞争中立于不败之地的关键。一旦停止学习,我们便如同逆水行舟,不进则退,终将被时代的洪流所淘汰。因此,不断汲取新知识,不仅是对自己的提升,更是对自己的一份珍贵投资。让我们不断磨砺自己,与时代共同进步,书写属于我们的辉煌篇章。
需要完整版PDF学习资源私我
一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!
AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算
需要完整版PDF学习资源私我
一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!
AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算