01前言
我们在以往的分享中介绍了网络安全的相关技术在车载通信中的一些内容,包括E2E和SecOC等,但这些技术通常更多地是做数据校验,数据本身还是以明文进行传输。而随着网络安全级别的提高以及以太网在车载中更大规模的使用,我们迫切地需要数据加密的手段来防止数据被监听。同时由于车载通信对延迟性能的要求和部署的特点,MACsec可能是一个更容易被选择的方案。
02什么是MACsec
MACsec全称为Media Access Control Security,基于协议802.1AE和802.1X,主要功能是用于数据加密,同时还有认证、校验的功能。其保护的数据是以太网中二层以上的数据,即包括ARP在内的数据,都会被加密进而无法通过网络监听获取。
同时相比于其他加密手段,如TLS,MACsec由于可以基于硬件实现,因此可以做到更低的延时和更高的性能。并且对于上层应用来说,MACsec是在二层进行加密,因此对于上层来说是无感的,这意味着上层不需要做任何改动就可以进行加密的部署。这对于当前无加密系统切换加密系统来说有着很大的优势。03MACsec工作流程
MACsec使用对称加密,其密钥生成分发过程为EAPOL-MKA(EAP是Extensible Authentication Protocol,EAPOL即EAP over LANs,MKA即MACsec Key Agreement protocol ,见IEEE Std 802.1X),标准的MACsec的EAPOL-MKA流程会先进行密钥服务器的选举,但在车载网络中,更可能的情况是预先定义好密钥服务器,因此本文就不赘述密钥服务器选举流程(可以参考IEEE 802.1X),直接看一下密钥服务器如何生成和分发密钥。
首先所有的MACsec设备中会预先配置好一个密钥,称为CAK(Secure Connectivity Association Key),由于其是预先定义的密钥,因此也叫做Pre-Shared-Key。需要注意的是,CAK并不是能直接参与数据加密的密钥,实际用于数据加解密的密钥是SAK(Secure Association Key),SAK是通过CAK进行派生,SAK的生成过程如下所示:
预配置密钥
除了预先配置CAK外,还需要配置密钥标识CKN(Connectivity Association Key Name)。CKN就是额外的一个数据参数,CAK+CKN共同用于密钥派生函数KDF(Key Derivation Function)。
密钥派生
CAK通过不同的派生函数(派生函数参考AUTOSAR AUTOSAR_SWS_MACsecKeyAgreement、IEEE 802.1X、NIST 800-108)和参数生成3个密钥:ICK(Integrity Check Value Key,即校验的密钥)、KEK(Key Encryption Key,即加密SAK的密钥)、SAK(Secure Association Key,即实际加密数据的密钥)。其中ICK和KEY是通过CAK+CKN生成固定的密钥,可以认为MACsec设备均已预先得知。ICK用于流程校验,KEK用于SAK的加密。SAK是由CAK+RNG(Random Number Generator,即随机数生成)生成的随机密钥,用于实际数据的加密。
加密SAK
使用KEK加密SAK(加密算法参考rfc3394中AES Key Wrap algorithm),将加密SAK传输到以太网总线中。
获取解密后的SAK
伙伴节点使用相同的KEK解密后获取SAK,将SAK用于实际数据的加解密。在SAK成功分发到MACsec节点后,MACsec中的二层以太网报文就都可以用加密的方式进行数据的交互。
04MACsec报文格式
MACsec的报文格式如下图所示:
其中DMAC即目标MAC,SMAC即源MAC,CRC即帧校验,这部分都是以太网帧中原有的内容。802.1Q+payload即原有以太网中携带的数据(包含以太网帧类型),这部分数据会以GCM-AES-128(也允许支持GCM-AES-256)的加密算法进行加密(密钥为上一章节中分发的SAK)。ICV(Intergrity Check Value)为校验码。SecTAG为加密头,用于识别MACsec相关信息,其结构如下:
MACsec EtherType为固定值0x88E5,表示MACsec报文;
TCI(TAG Control Informatin)为控制信息;
AN(Association Number)为关联号;
SL(Short Length)为短数据长度(小于48字节才会使用,见IEEE 802.1AE);
PN(Packet Number)为包的序号,用来防止重放攻击;
SCI(Secure Channel Identifier)中还包含PI(Port Identifier),即通道和端口的标识,对简单网络来说应该是固定值。
SecTAG的解析见如下示例:
另外对于GCM-ASE算法来说,有3个参数:nonce(即加密向量IV)、add(附加消息)、tag(消息认证码)和MACsec中字段有映射关系。Nonce对应SCI+PN,add对应DMAC+SMAC+SecTAG,tag对应ICV(参考IEEE 802.1AE)。
05 CANoe MACsec示例
在CANoe中我们建立多个节点:ChatClient1和ChatClient2以TCP的连接与ChatServer建立会话关系,他们的通信不需要关注MACsec。实际在总线的数据由Switch_1的Port1与Switch_2的Port2进行以太网数据的发送接收,拓扑关系如下所示:
环境启动后,Port1和Port2就进行MACsec的SAK分发过程,分发完成后,Port1和Port2就可以正常以MACsec进行加密通信,如下所示:
当我们在ChatClient1发送会话数据“Polelink”,ChatClient2响应会话“YES”时,对于ChatClient1和ChatClient2来说数据的收发是原封不动的明文,如下所示:
而对于实际以太网数据而言,Port1和Port2的收发数据就全是密文数据,如下所示:
06总结
北汇信息专注于汽车电子测试、与众多OEM合作,在总线网络诊断测试开发相关领域积累了丰富的经验。本次为大家简单介绍了MACsec,但很多细节还有待商榷,后续我们也会带来更多关于网络安全的测试开发内容,也欢迎大家共同探讨。