4.8 组成员操作 (Group Member Operations)
组成员是参与群组通信的实体,它们通过GDOI协议获取和维护群组安全关联。本节描述组成员执行的关键操作。
初始化和注册
组成员在加入群组时必须 (MUST):
- 建立第1阶段SA: 与GCKS建立ISAKMP第1阶段安全关联
- 执行GROUPKEY-PULL: 发起GROUPKEY-PULL交换以获取群组SA
- 接收KEK和TEK: 从GCKS接收重密钥SA(KEK)和数据安全SA(TEK)
- 安装SA: 在本地安全数据库中安装接收到的SA
- 配置数据安全协议: 使用接收到的TEK配置数据安全协议(如IPsec ESP)
接收GROUPKEY-PUSH消息
组成员必须 (MUST) 准备接收和处理GROUPKEY-PUSH消息:
消息接收
- 监听多播地址: 在GCKS指定的多播地址上监听
- 接收消息: 接收GROUPKEY-PUSH数据报
- 验证消息ID: 检查消息ID是否大于之前接收的消息ID(防止重放攻击)
消息处理
- 解密消息: 使用当前KEK解密GROUPKEY-PUSH消息
- 验证完整性: 验证消息的完整性保护
- 解析负载: 提取消息中包含的SA负载和密钥下载负载
- 更新SA: 根据消息内容更新本地SA
SA更新类型
GROUPKEY-PUSH消息可能包含:
- 新TEK: 安装新的流量加密密钥
- 新KEK: 安装新的密钥加密密钥
- LKH密钥更新: 如果使用LKH,更新密钥树中的密钥
- SA删除: 删除指定的SA
使用TEK保护数据
组成员使用TEK来保护群组通信:
发送数据
- 选择当前TEK: 使用最新的有效TEK
- 加密数据: 使用数据安全协议(如IPsec ESP)加密出站流量
- 发送到群组: 将加密数据发送到群组多播地址
接收数据
- 接收加密数据: 从群组多播地址接收数据
- 识别TEK: 根据SPI确定用于加密的TEK
- 解密数据: 使用相应的TEK解密数据
- 处理数据: 将解密后的数据传递给应用层
SA生命周期管理
组成员必须 (MUST) 管理SA的生命周期:
监控生命周期
- 时间生命周期: 跟踪SA的时间限制
- 字节生命周期: 跟踪使用SA处理的数据量(如果适用)
- 过期处理: 在SA过期时停止使用
密钥转换
在密钥更新期间:
- 接收新密钥: 通过GROUPKEY-PUSH接收新TEK
- 安装新密钥: 在本地安全数据库中安装新TEK
- 切换发送密钥: 立即使用新TEK加密出站流量
- 保留旧密钥: 继续使用旧TEK解密入站流量,直到其生命周期到期
- 删除旧密钥: 在旧TEK生命周期到期后删除
这种不对称的密钥转换策略允许在更新期间有一个过渡期。
重新注册
组成员可能 (MAY) 需要定期重新注册:
重新注册触发条件
- KEK生命周期即将到期
- 第1阶段SA到期
- 长时间未收到GROUPKEY-PUSH消息
- 从群组中被临时移除后重新加入
重新注册过程
- 建立新的第1阶段SA: 如果当前SA已过期
- 执行GROUPKEY-PULL: 获取最新的群组SA
- 更新本地SA: 用新接收的SA替换旧SA
离开群组
组成员在离开群组时应该 (SHOULD):
- 通知GCKS: 发送删除通知(如果协议支持)
- 删除所有密钥: 从本地存储中安全删除所有KEK和TEK
- 清理SA: 从安全数据库中删除所有群组SA
- 关闭第1阶段SA: 终止与GCKS的第1阶段SA
错误处理
组成员必须 (MUST) 处理各种错误情况:
解密失败
如果无法解密GROUPKEY-PUSH消息:
- 检查KEK: 验证当前KEK是否有效
- 重新注册: 如果KEK已过期,执行新的GROUPKEY-PULL
- 记录错误: 记录解密失败事件以进行故障排除
消息丢失
如果检测到GROUPKEY-PUSH消息丢失(通过消息ID间隙):
- 等待重传: GCKS可能会重传消息
- 请求重发: 如果协议支持,请求GCKS重发丢失的消息
- 重新注册: 作为最后手段,执行新的GROUPKEY-PULL
SA不匹配
如果接收到的数据使用未知的SPI:
- 检查旧SA: 验证是否过早删除了SA
- 检查新SA: 验证是否错过了GROUPKEY-PUSH消息
- 重新注册: 执行GROUPKEY-PULL获取最新SA
状态维护
组成员应该 (SHOULD) 维护以下状态:
- 当前KEK: 用于解密GROUPKEY-PUSH的KEK
- 当前TEK: 用于加密/解密数据的TEK
- 接收的消息ID: 最后接收的GROUPKEY-PUSH消息ID
- SA生命周期: 每个SA的到期时间
- LKH状态: 如果使用LKH,密钥树中的当前密钥
性能考虑
在高流量群组中,组成员应该 (SHOULD):
- 优化解密: 使用硬件加速进行加密/解密操作
- 缓存密钥: 缓存常用的密钥以减少查找开销
- 批处理: 批量处理GROUPKEY-PUSH消息更新