Skip to main content

4.8 组成员操作 (Group Member Operations)

组成员是参与群组通信的实体,它们通过GDOI协议获取和维护群组安全关联。本节描述组成员执行的关键操作。

初始化和注册

组成员在加入群组时必须 (MUST):

  1. 建立第1阶段SA: 与GCKS建立ISAKMP第1阶段安全关联
  2. 执行GROUPKEY-PULL: 发起GROUPKEY-PULL交换以获取群组SA
  3. 接收KEK和TEK: 从GCKS接收重密钥SA(KEK)和数据安全SA(TEK)
  4. 安装SA: 在本地安全数据库中安装接收到的SA
  5. 配置数据安全协议: 使用接收到的TEK配置数据安全协议(如IPsec ESP)

接收GROUPKEY-PUSH消息

组成员必须 (MUST) 准备接收和处理GROUPKEY-PUSH消息:

消息接收

  1. 监听多播地址: 在GCKS指定的多播地址上监听
  2. 接收消息: 接收GROUPKEY-PUSH数据报
  3. 验证消息ID: 检查消息ID是否大于之前接收的消息ID(防止重放攻击)

消息处理

  1. 解密消息: 使用当前KEK解密GROUPKEY-PUSH消息
  2. 验证完整性: 验证消息的完整性保护
  3. 解析负载: 提取消息中包含的SA负载和密钥下载负载
  4. 更新SA: 根据消息内容更新本地SA

SA更新类型

GROUPKEY-PUSH消息可能包含:

  • 新TEK: 安装新的流量加密密钥
  • 新KEK: 安装新的密钥加密密钥
  • LKH密钥更新: 如果使用LKH,更新密钥树中的密钥
  • SA删除: 删除指定的SA

使用TEK保护数据

组成员使用TEK来保护群组通信:

发送数据

  1. 选择当前TEK: 使用最新的有效TEK
  2. 加密数据: 使用数据安全协议(如IPsec ESP)加密出站流量
  3. 发送到群组: 将加密数据发送到群组多播地址

接收数据

  1. 接收加密数据: 从群组多播地址接收数据
  2. 识别TEK: 根据SPI确定用于加密的TEK
  3. 解密数据: 使用相应的TEK解密数据
  4. 处理数据: 将解密后的数据传递给应用层

SA生命周期管理

组成员必须 (MUST) 管理SA的生命周期:

监控生命周期

  • 时间生命周期: 跟踪SA的时间限制
  • 字节生命周期: 跟踪使用SA处理的数据量(如果适用)
  • 过期处理: 在SA过期时停止使用

密钥转换

在密钥更新期间:

  1. 接收新密钥: 通过GROUPKEY-PUSH接收新TEK
  2. 安装新密钥: 在本地安全数据库中安装新TEK
  3. 切换发送密钥: 立即使用新TEK加密出站流量
  4. 保留旧密钥: 继续使用旧TEK解密入站流量,直到其生命周期到期
  5. 删除旧密钥: 在旧TEK生命周期到期后删除

这种不对称的密钥转换策略允许在更新期间有一个过渡期。

重新注册

组成员可能 (MAY) 需要定期重新注册:

重新注册触发条件

  • KEK生命周期即将到期
  • 第1阶段SA到期
  • 长时间未收到GROUPKEY-PUSH消息
  • 从群组中被临时移除后重新加入

重新注册过程

  1. 建立新的第1阶段SA: 如果当前SA已过期
  2. 执行GROUPKEY-PULL: 获取最新的群组SA
  3. 更新本地SA: 用新接收的SA替换旧SA

离开群组

组成员在离开群组时应该 (SHOULD):

  1. 通知GCKS: 发送删除通知(如果协议支持)
  2. 删除所有密钥: 从本地存储中安全删除所有KEK和TEK
  3. 清理SA: 从安全数据库中删除所有群组SA
  4. 关闭第1阶段SA: 终止与GCKS的第1阶段SA

错误处理

组成员必须 (MUST) 处理各种错误情况:

解密失败

如果无法解密GROUPKEY-PUSH消息:

  1. 检查KEK: 验证当前KEK是否有效
  2. 重新注册: 如果KEK已过期,执行新的GROUPKEY-PULL
  3. 记录错误: 记录解密失败事件以进行故障排除

消息丢失

如果检测到GROUPKEY-PUSH消息丢失(通过消息ID间隙):

  1. 等待重传: GCKS可能会重传消息
  2. 请求重发: 如果协议支持,请求GCKS重发丢失的消息
  3. 重新注册: 作为最后手段,执行新的GROUPKEY-PULL

SA不匹配

如果接收到的数据使用未知的SPI:

  1. 检查旧SA: 验证是否过早删除了SA
  2. 检查新SA: 验证是否错过了GROUPKEY-PUSH消息
  3. 重新注册: 执行GROUPKEY-PULL获取最新SA

状态维护

组成员应该 (SHOULD) 维护以下状态:

  • 当前KEK: 用于解密GROUPKEY-PUSH的KEK
  • 当前TEK: 用于加密/解密数据的TEK
  • 接收的消息ID: 最后接收的GROUPKEY-PUSH消息ID
  • SA生命周期: 每个SA的到期时间
  • LKH状态: 如果使用LKH,密钥树中的当前密钥

性能考虑

在高流量群组中,组成员应该 (SHOULD):

  • 优化解密: 使用硬件加速进行加密/解密操作
  • 缓存密钥: 缓存常用的密钥以减少查找开销
  • 批处理: 批量处理GROUPKEY-PUSH消息更新