车载以太网MACsec
1.概述
MACsec(Media Access Control Security)定义了基于 IEEE 802 局域网络的数据安全通信的方法。MACsec 可为用户提供安全的 MAC 层数据发送和接收服务,包括用户数据加密(Confidentiality)、数据帧完整性检查(Data integrity)、数据源真实性校验
(Data origin authenticity)及重放保护(Replay protection)。
MACsec 主要涉及 IEEE802.1AE 和 802.1X 两个协议规范:IEEE802.1AE-2006 定义了数据封装、加密和认证的帧格式;802.1X-2010 中的 MKA(MACsec Key Agreement) 定义了密钥管理协议,提供了 Peer-to-Peer 方式或Group 方式的密钥建立机制,使用MKA 协议协商生成的密钥对已认证的用户数据进行加密和完整性检查,可以避免端口处理未认证设备的报文或者未认证设备篡改的报文。
MACsec 不是对现有端到端IPSec、TLS 等三层安全技术的替代,而是它们的互补技术。MACsec 使用二层加密技术,提供逐跳设备的数据安全传输,适用于政府、军队、金融等对数据机密性要求较高的场合,如局域网两台交换机设备之间经过光传输设备,通过MACsec 加密技术可保证数据在中间传输设备上安全传输。
2.MACsec技术原理
2.1 MACsec 组网模式
MACsec 常用的组网模式有:面向主机点到点模式、面向设备点到点模式。
车载以太网MACsec 不支持面向主机点到点模式,支持面向设备点到点模式,本文描述内容为面向设备点到点模式。
面向设备点到点模式
2.2 MACsec 基本概念
MKA
MKA(MACsec Key Agreement protocol)用于 MACsec 数据加密密钥的协商协议。
CA
CA(Secure Connectivity Association,安全连接关联)指通过一个 LAN 互连的支持
MACsec 的全连接的端口集合。CA 由 MKA 创建和维护,CA 成员称为 CA 的参与者。
CAK
CAK(Secure Connectivity Association Key,安全连接关联密钥)不直接用于数据报文的加密,由它和其他参数派生出数据报文的加密密钥。CAK 可以在 802.1X 认证过程中下发,也可以由用户直接静态配置。
CKN
CKN(Secure Connectivity Association Key Name,安全连接关联密钥名称)是对应CAK 的名称。
SC
SC(Secure Channel,安全通道)是 CA 参与者之间用于传输MAC 安全数据的安全通道。每个 SC 提供单向点到点或点到多点的通信。如对于点对点的两台设备 A 和设备 B, A 到 B 单向数据转发链路可认为一个 SC(a) ,B 到 A 单向数据转发链路可认为另外一个 SC(b) 。
SCI
SCI(Secure Channel Identifier,安全通道标识符)是由 6 字节的 MAC 地址和 2 字节的 Port Identifier 组成,唯一标识系统内的安全通道。
SA
SA(Secure Association,安全关联)是 SC 安全通道的安全参数集合。包括对数据进行加密算法套件、进行完整性检查的密钥等。一个安全通道中可包含多个 SA,每一个SA 拥有一个不同的密钥,这个密钥称为 SAK。
SAK
SAK(Secure Association Key,安全关联密钥)由 CAK 根据算法推导产生,用于加密安全通道间传输的数据。MKA 对每一个 SAK 可加密的报文数目有所限制,当使用某SAK 加密的 PN 耗尽,该 SAK 会被刷新。例如,在 10Gbps 的链路上,SAK 最快 4.8 分钟刷新一次。
ICV
ICV(Integrity Check Value,完整性校验值)是报文完整性检验值,在报文发送端,通过某种算法对报文数据单元计算产生一个检验值,将此检验值放在报文的尾部,报文接收端通过相同算法得到 ICV 值与报文携带的 ICV 进行比对,如果这两个 ICV 相同说明报文没有被修改,否则该报文被丢弃,保证了报文的数据完整性。
ICK
ICK(ICV Key,ICK 密钥)由 CAK 根据算法推导产生,只用于计算 MKA 协议层面报文的 ICV 值,而数据层面没有专门的 ICK。
KEK
KEK(Key Encrypting Key,密钥加密密钥)由 CAK 根据算法推导产生,用于加密 SAK, 通过 MKA 密钥协议报文将 SAK 密钥发送给同一个 CA 内的参与者,防止用于数据加密的 SAK 在传输过程中被窃取。
PN
PN(Packet Number,报文编号)对应 SECTAG 中的一个字段,发送方发报文每次按1 递增,用于接收方进行重放保护,当SA 的 PN 达到 0xFFFFFFFF 时,SAK 必须要进行切换,以 10GE 链路为例,最快 4.8 分钟 PN 就会耗尽,一般 PN 即将耗尽时(假设PN 达到 0xC0000000),也可以对 SAK 进行切换。
Key Server
Key Server 决定加密方案和进行密钥分发的 MKA 实体。
Supplicant
选举出 Key Server 之后,Supplicant 是确定为非 Key Server 的实体。
Confidentiality Offset
指加密偏移,取值{0, 30, or 50},SECTAG 后面的Confidentiality Offset 个字节不加密,目的是为了适应某些需要识别 IPv4/v6 头的应用(比如负载均衡)。
MACsec Mode
指加密模式,包含 None(即不加密,不校验,不封装)、Normal(即既加密又校验), Integrity-only(只做完整性验证、不加密),默认为 None。
2.3 MACsec 运行机制
MACsec 运行机制主要分为三个阶段:CAK 获取、MKA 密钥协商、MACsec 数据加解密。
如图所示,面向设备点到点 MACsec 组网运行机制,两台设备上预配置相同的CAK,两台设备会通过 MKA 协议选举出一个 Key Server,Key Server 决定加密方案,Key Server 会根据 CAK 等参数使用某种加密算法生成 SAK 数据密钥,由 Key Server 将 SAK 分发给对端设备,这样两台设备拥有相同的 SAK 数据密钥,可以进行后续MACsec 数据报文加解密收发。
面向设备点到点 MACsec 运行机制图
2.4 MACsec 密钥体系
2.4.1 密钥体系结构
基于静态 CAK 的MACsec 密钥体系结构图:
如图 所示,基于静态 CAK 的 MACsec 密钥体系结构,生成 SAK 密钥流程如下:
1、在同一个安全链接关联 CA 成员 CA(a)和 CA(b)上,用户静态配置相同的(CKN,CAK) 产生的(ICK,KEK)是一样的,用于后续发布 SAK 对其本身进行加密,防止 SAK 明文传递过程中泄密;
2、在 Key Server 基于用户配置的(CKN,CAK)会生成 SAK,并且在本地安装 SAK, 用于 Key Server 端收发数据报文的加解密;
3、Key Server 将 SAK 发布给对端 Supplicant 时,通过 KEK 加密 SAK 密钥本身,由ICK 通过某种算法生成 ICVs 用于校验报文的完整性,在 Key Server 上将 ICVs 值放在MKA 协议报文尾部,将经过KEK 加密的SAK 一起通过MKA 协议报文发送给Supplicant;
4、Supplicant 接收到 MKA 协议报文时,根据其中的 CKN 查找 CAK 和 ICK,如果没有查找到则认为不是来自相同的 CA 并丢弃,查找到之后对 MKA 报文主体进行 ICV 计算得到 ICVc,如果与报文中的 ICVs 不相同,则认为报文被修改(MKA 报文中的 CKN 和ICVs 没有经过 KEK 加密);
5、经过ICV 校验通过之后,使用 KEK 解密出 SAK,Supplicant 进行 SAK 安装,用于Supplicant 端收发数据报文的加解密。
2.4.2 密钥派生关系
密钥派生关系图
如图 所示,CKN、CAK 采用 KDF 算法生成 SAK、KEK、ICK、ICV,该图展示了它们之间的派生关系。
Key Server 和 Supplicant 两边配置(CKN,CAK)生成 KEK、ICK、ICV,Key Server 同时生成 SAK 并且在本地安装,然后 Key Server 将 SAK 用 KEK 加密,将加密后的SAK 通过 MKA 协议报文发送给 Supplicant,MKA 协议报文中尾部包含 ICV 字段。Supplicant 收到协议报文通过 ICV 检验之后,将 SAK 密钥解密并在 Supplicant 上安装,这样 Key Server 和 Supplicant 两边转发层面都用相同的 SAK 密码,可以对收发的数据报文进行加解密通信。
2.5 MKA 密钥协商交互流程
MKA 协议协商流程图
如图 所示,SAK 密钥协商交互流程如下:
1、选举 Key Server
CA 成员之间通过 EAPOL-MKA 协议报文交互选举出一个 Key Server,负责加密套件的选择、密钥管理及分发。CA 成员可以设置 Key Server Priority 优先级用于 Key Server 角色的协商,Key Server Priority 值越小,优先级越高。如果 Key Server Priority 相等, 则选择安全通道标识 SCI(即 MAC 地址+端口 ID)小的为 Key Server。
2、SAK 密钥协商
Key Server 由 CKN 和 CAK 计算生成 SAK 密钥后,先在本地转发层面安装 SAK,同时使能允许接收方向数据解密,然后将加密SAK 通过EAPOL-MKA 发布给对端Supplicant; Supplicant 接收到 SAK 解密之后在本地安装,同时使能数据双向收发加解密;接着Supplicant 再发送消息通知 Key Server 打开发送方向的数据加密,Key Server 再给Supplicant 应答一个确认消息,这样 CA 成员之间完成密钥协商能够开始正常转发数据。
MI(Member Identifier)是成员标识符,MN(Message Number)是消息编号,
(MIA,MN=i)代表成员标识符 A 的设备当前发送报文消息编号为 i。如(MIA,MN=2)
(MIB,MN=1)表示当前 A 向 B 发送消息编号为 2 的报文时,最新收到过对端 B 报文编号是 1 的协商报文。
3、会话Hello 探测
CA 成员之间完成密钥协商之后,就进入正常数据转发阶段,成员互发 Hello 报文维护会话状态,MKA Life Time 内如果收不到 hello 报文,就会导致协议重新协商。MKA Hello Time 一般为 2s,MKA Life Time 对端生存时间一般为 6s,MKA Life Time 可配置。
4、外界条件变化触发密钥切换或重新协商
外部条件发生变化会触发 SAK 密钥切换或重新协商,外界触发条件可能如下:
<C.1> MKA Life Time 超时,会导致 SAK 切换(仅在 Key Server 上生效);
<C.2> Key Server 转发层面上报报文编号 PN 即将或已经耗尽;
<C.3> 如果是非 MN 翻转导致的 MI 变化,会导致协议重新协商;
<C.4> Key Server 接收到对端 Supplicant 的报文编号 PN 即将或已经耗尽;
<C.5> 用户配置 CAK、Confidentiality Offset(只在 Key Server 侧生效,由 Key Server
通知系统内其他成员)、MACsec Mode 等配置;
<C.6> 用户配置 Key Server Priority 需要重新启动 Key Server 选举。
2.6 MACsec 数据结构
如图 所示,CA 成员之间完成 SAK 密钥协商和密钥安装之后就开始数据报文的转发。在数据报文的发送端,可以采用加密算法 GCM-AES-128 对原始数据报文的MSDU 部分和 SAK 一起加密变成密文(Secure Data),对源/目的 MAC、SEC TAG、密文(Secure Data)与 SAK 一起进行加密计算输出 ICV 放在报文尾部,这样组装成一个完整的MACsec 加密报文发送给对端。在数据的接收端,将密钥 SAK 和密文经过算法 GCM- AES-128 计算得到明文,同时采用加密算法计算出 ICV 与报文携带的ICV 作比较,如果一致表明报文合法没有被修改,组装成原始报文进行后续的 LAN 转发,否则会丢弃该报文。
MACsec 支持重放保护功能,MACsec 封装的数据帧在网络中传输时,可能出现报文顺序的重排。MACsec 重放保护机制允许数据帧有一定的乱序,这些乱序的报文序号在两边约定的窗口范围内可以被合法接收,超出窗口的报文会被丢弃。SecTAG 中的报文编号 PN 字段可用于重放保护机制,发送方在每发送一个报文会 PN 计数会加一,接收方会记录已接收报文的编号,报文编号PN 在重放窗口范围内的报文都允许接收。
MACsec 数据报文格式如下:
ICV 格式:
SECTAG 格式:
TCI 字段:
3.AUTOSAR MACsec协议栈
AUTOSAR 模块之间依赖关系图
3.1 与AUTOSAR 模块之间依赖关系
EthIf
配置、控制和监控MACsec实体(按SW或HW)。
CSM:
1.保护发出的MKA消息并验证接收的MKA消息。
2.生成、加密和解密会话密钥(SAKs)。
3.1.1.EthIf通信接口
MKA模块和EthIf通信的目的是:
接收并发送MKA消息。
向底层提供MACsec的具体参数。
协调上层接口的Link-Up和Link-Down信令(即通过EthSM)。
如果以太网接口受MACsec保护,它将使用特定的MKA模块应用实例来配置MACsec实体(HW或SW)进行发送和接收。
如果EthSM激活受MACsec保护的以太网接口,在收发器或交换机端(ETH_MODE_ACTIVE)发出物理连接的信号之后,EthIf会将通过配置的MKA应用实例与通信对等体建立至少一条安全通道。
一旦建立了MACsec安全通道,并且两个参与者都可以成功地接收和发送,以太网接口将发出信号与上层连接(例如,通过Ethernet State Manager)。
在已建立的SCs的生命周期内,MKA模块将通过EthIf与MACsec实体通信来维护他们。既更新MACsec实体(Phy、Switch或SW实体)中的SC特定参数。
触发MKA模块建立MACsec SC是在EthTrcv或EthSwt模式切换到ACTIVE之后,向EthSM指示此状态之前完成的(即EthSM将保持在ETHSM_STATE_WAIT_TRCVLINK状态,因为在这种状态下,EthSM和底层EthIf正在启动物理网络接口,但上层协议(例如,TCP/IP中)尚未启动)。
一旦触发,MKA模块可以启动所需的操作,通过提供的端口建立MACsec安全通道。如果端口中没有配置MACsec, MKA模块调用将被跳过。
3.1.2.与EthDriver、EthSwitchDriver和Eth-TransceiverDriver的间接通信
当MACsec实体下载到HW设备时,MKA模块通过EthIf与EthDriver、EthSwitchDriver、ethtranceverdriver间接相连去建立、配置和管理所需的MACsec安全通道。在EthDriver、EthSwitchDriver和EthTransceiverDriver接口中有相应的接口函数。
建立安全通道是通过MACsec密钥协商协议完成的,MKA模块将处理所有协议步骤。这些特定的协议数据报是由MKA模块设置和组织的。因此,MKA模块通过现有的函数调用向以太网接口提供数据报,以太网接口再将数据报发送给通信的对端。这种行为是通过特定的一对EtherType和message类型处理的,是通过接口设置的。以太网接口使用此EtherType处理Rx和Tx链路上的数据报。
3.1.3.CSM (Crypto Service Manager)通信接口
MKA模块需要连接到AUTOSAR的BSW Crypto模块。
运行MKA模块通过[5,IEEE-802.1X-2020]和[4,IEEE-802.1AE-2018]中指定的加密算法来派生和使用所需的密钥
MKA模块需要BSW crypto提供以下支持:
1.KDF(如[5,IEEE-802.1AE-2018]第6.2.1章所述)从CAK推导出ICK和KEK。
2.AES-CMAC,使用AES CMAC 128位,使用ICK生成和验证MKA消息ICVs。
3.一个生成随机数据的函数(用于SAK和成员标识符)。
4.AES-KEY WRAP基于[6,RFC 3394]加密传输密钥。
3.1.4.通信初始化流程图
通信初始化流程图说明了通信协议栈的预期行为,MKA模块如何参与以太网协议栈的启动,包括上层模块和下层模块。
MACsec保护EthIf通信初始化流程图
MACsec保护EthIf和Switch通信初始化流程图
参考文件:
1.智简园区交换机MACsec技术白皮书
2.AUTOSAR_SWS_MACsecKeyAgreement