网络安全开发测试 | CANoe解密车载TLS通信

应用层数据可以通过传输控制协议(tcp)在基于ip的网络上进行可靠交换,但是tcp无法保证数据传输的可靠性,应用数据的机密性及完整性。因此,实际应用中可以在tcp之上使用tls(transport layer security)建立服务器和客户端之间的安全通信(图1),从而保证数据的安全传输。
车内外通信中的下列应用层协议在安全通信时会采用tls/dtls加密通信:
>
doip (diagnostic communication over internet protocol)
>
some/ip (scalable service-oriented middleware over ip)
>
mqtt (message queuing telemetry transport)
>
https (hypertext transfer protocol secure)
>
scc (smart charging communication)
图1:osi参考模型
随着tls在载数据通信过程中的广泛应用,给oem和零部件供应商的开发测试工程师在开发测试分析过程中需要面临tls服务器和客户端之间加密通信的考验。毫无疑问,作为车载产品开发验证平台的核心工具canoe需要支撑从单板调试到实车验证中涉及tls安全通信应用的仿真与回放分析工作:
>
模拟tls服务器通信;
>
模拟客户端参与tls通信;
>
在线解密正在监听的真实服务器和客户端之间的tls通信(图2.1);
>
离线回放过程中解密记录文件中存储的tls数据(图2.2)。
图2.1:canoe解密tls通信场景(离线)
图2.2:canoe解密tls通信场景(在线)
canoe在线监听或离线回放tls通信的过程中,接收的是加密的tls应用数据,需要经过解密才能得到原始消息,图3为tls一组相同数据在trace窗口中解密前后的对比。解密前trace窗口只有密文信息,解密后trace窗口才能以系统变量的形式显示原始消息。如果observer支持原始消息所属的应用层协议(如doip协议),trace窗口中还会包含原始消息基于doip层面的解析。要完成解密的过程,需要在canoe中进行一系列配置,本文围绕tls observer中最常用的解密方式“基于主密码解密”就具体配置做说明。首先概述canoe基于主密码解密tls通信的机制,其次介绍解密工程的环境设置,最后分别对不同的主密码配置方式进行说明。
图3:tls数据解密前后对比
01/
canoe基于主密码解密tls通信的机制概述
canoe.ethernet工程会自动生成名为“_security::tlsmastersecret”的系统变量,用于存储tls会话的客户端随机数(client random,32bytes)和主密码(master secret,48bytes)。待解密的tls数据可能包含多个tls会话,每个tls会话都有唯一的主密码。当解密时,canoe首先根据客户端随机数识别正确的tls会话,然后基于主密码生成的密钥素材解密tls应用数据,因此正确配置主密码和客户端随机数是解密tls通信的关键。
02/
 解密工程环境设置
canoe支持多种配置主密码的方式,如通过capl/security manager/udp报文配置主密码或从canoe参与通信的tls记录文件中读取主密码。无论采用何种方式,都需要首先完成工程环境设置。
1.
激活tls应用数据的观测变量(图4)
点击canoe->options->general->file locations->location of application data的open按钮,打开文件夹中的can.ini文件,配置can.ini文件中的参数enabletlsappdatasv=1。
图4:激活tls应用数据的观测变量
>
配置tls/dtls通信的端口号(图5)
检查canoe option->bus system->protocol identification是否对用于tls/dtls通信的port进行正确定义,避免trace中可能出现无法解析tls协议的情况,影响解密tls通信的功能。
图5:tls/dtls通信端口设置
03/
基于capl配置主密码解密tls通信
基于capl配置主密码具有较高的灵活性,支持离线回放或在线监听tls数据时解密通信。当离线回放tls通信时,一般主密码是用户提供的静态数值,该值可以直接通过capl编程赋值给系统变量“_security::tlsmastersecret”,赋值代码如图6。当在线监听tls数据时,主密码是由真实服务器或客户端提供的动态数值,首先通过诊断、can报文或者其他接口传给canoe,然后基于capl编程赋值给系统变量“_security::tlsmastersecret”。
图6:capl代码示例
04/
基于security manager配置主密码解密tls通信
为了实现在离线回放过程中解密tls通信,除了可通过capl编程配置主密码之外,还可以在canoe->tools->security manager中手动输入主密码。具体流程如下:
1.
新建security profile(图7)
选中file based pki,点击add添加security profile,可按照需求自定义profile名称,如tls observer profile。
图7:新建security profile
2.
设置参数(图8)
在新建的tls observer profile主配置界面上选中tls observer,点击add打开参数设置对话框,选择参数类型为master secret并填写random bytes和master secret。
图8:master secret|参数设置
3.
security configuration配置
打开canoe->simulation->security configuration,在tls observer选项卡处关联新建的profile,如图9。
图9:security configuration配置
05/
通过udp报文传输主密码解密tls通信
为了实现在线监听tls数据过程中解密通信,除了基于capl配置主密码外,还可由通信参与者通过udp报文传入主密码。如果真实服务器或客户端在完成tls握手之后,支持从加密堆栈中读取主密码,并通过udp报文发送出来,就可以配置canoe接收该udp报文,获取主密码数值,解密正在监听的tls通信。与手动输入主密码配置过程类似,通过udp报文传输主密码也需要基于security manager配置,区别在于参数设置部分,参数类型需选择master secret source并配置udp通信双方的ip和port(图10)。
图10:master secret source|参数配置
注:此种方式要求master secret以nss key log的格式封装到udp报文中。nss key log的格式以及示例见表1。
表1:nsskeylogmastersecret格式示例
06/
离线回放canoe参与通信的tls记录文件
canoe参与tls通信时,经过tls握手阶段,可以自动计算出主密码并将该值存储到系统变量“_security::tlsmastersecret”中。tls数据可通过canoe logging功能进行记录,需将记录文件格式设置为blf/asc/mf4。这些格式的文件不仅可以保存通信数据,还可以保存系统变量(包括_security::tlsmastersecret)。后期离线回放时,canoe可以从记录文件中读取主密码来解密tls应用数据。
1.
在canoe 15/16中回放,只需将工程切换为offline模式,添加记录文件,点击回放按钮,canoe即可在回放过程中解密tls应用数据;
2.
在canoe 14中回放,还需在security configuration配置中关联security profile。
上述就canoe基于主密码解密tls通信的过程及多种主密码的配置方式:如capl、security manager、udp报文以及记录文件等。不同主密码配置方式的总结描述以及对canoe版本要求见图11。canoe为各种网络安全通信提供基础平台技术,使得开发和测试各阶段更好验证系统通信和功能,点击原文了解更多canoe对security的支持。
图11:主密码配置方式及版本要求

如何用废弃的电脑风扇做一个磁搅?
双表定时器(二)
基于L6562的高功率因数boost电路的设计
AR和VR在中小学教育中有哪些作用
Linus:为何选择非 GPL 许可而不是GPL
网络安全开发测试 | CANoe解密车载TLS通信
为什么串联谐振回路的带通特性要求信号源的内阻越低越好?
广东生益制造工厂全面上线新MES系统
24V单相工业无刷风扇12025控制板
华为P10怎么样?华为P10和华为mate9评测对比,该如何选择?
手机巨头诺基亚未来工厂曝光
WEBENCH Power Architect工具有效缩短多
重启大法好?如何让 iPhone使用更流畅
方波波形开关节点大受欢迎
半导体 | 三大NAND厂商开始减产:遏制供过于求!
2016年EDA/IC设计频道应用文章精选
浅谈信号分析仪的用途
直线电机模组加持的激光切割设备在5G商用手机中的应用
全自动智能锁价格相差这么大?有哪些因素
移动运营商在普及NBIoT方面取得良好的发展