3. 密码学入门

在 ROS2 安全部署中,DDS Security 并不是“加个密码”这么简单,它依赖一整套密码学原语来保证节点身份可信、数据不被窃听、指令不被篡改。理解对称加密、非对称加密、哈希函数、数字签名以及 PKI 证书体系,是后续配置 SROS2、签发密钥、排查握手失败的基础。本节用一条从“加密数据”到“证明身份”的链路,把这些概念串起来。

一、核心原理:四类原语各司其职

密码学在 ROS2 安全中主要解决四个问题:机密性、完整性、身份认证和不可否认性。它们分别由不同原语承担,不能互相替代。

  • 对称加密:加密和解密使用同一把密钥,速度快,适合加密大量传感器数据、图像流、控制指令。常见算法有 AES-128-GCM、AES-256-GCM。缺点是密钥分发困难:N 个节点两两通信,理论上需要 N(N-1)/2 把密钥。
  • 非对称加密:使用公钥加密、私钥解密,或私钥签名、公钥验签。常见算法有 RSA、ECDSA、Ed25519。它解决了密钥分发问题,但计算开销大,通常不直接加密业务数据,而是用来协商对称密钥或签名。
  • 哈希函数:把任意长度输入映射为固定长度摘要,如 SHA-256 输出 256 位。它具备单向性、抗碰撞性,用于校验数据完整性、生成指纹、构建证书签名。
  • 数字签名:先对消息做哈希,再用私钥加密摘要。接收方用公钥解密摘要并重新计算哈希,两者一致则说明消息未被篡改且确实来自私钥持有者。

一句话记忆:对称加密保护“数据本身”,非对称加密保护“密钥和身份”,哈希保护“完整性”,数字签名把三者组合成“可信凭证”。

二、方法流程:从密钥交换到安全通信

ROS2 节点建立安全通信时,典型流程如下:

  1. 节点 A 和节点 B 各自持有由 CA 签发的证书和私钥。
  2. 双方交换证书,验证证书链是否可信、是否过期、是否被吊销。
  3. 通过非对称算法完成身份认证,并协商出一把临时对称会话密钥。
  4. 后续话题、服务、动作的数据使用对称密钥加密,并附带消息认证码或签名,保证机密性与完整性。
  5. 通信结束后会话密钥销毁,避免长期密钥泄露影响历史数据。

在 SROS2 中,这一过程由 DDS Security 插件自动完成。开发者主要关注的是:生成密钥材料、配置权限文件、把证书和私钥放到正确路径,并确保环境变量指向安全目录。

# 典型 SROS2 密钥生成命令
ros2 security create_keystore demo_keystore
ros2 security create_enclave demo_keystore /talker_listener/talker
ros2 security create_enclave demo_keystore /talker_listener/listener

# 运行节点时启用安全
export ROS_SECURITY_KEYSTORE=~/demo_keystore
export ROS_SECURITY_ENCLAVE_OVERRIDE=/talker_listener/talker
export ROS_SECURITY_ENABLE=true
export ROS_SECURITY_STRATEGY=Enforce

其中 create_keystore 会生成 CA 根证书、私钥和初始权限文件;create_enclave 为每个节点或节点组生成独立证书、私钥、权限签名和治理文件。每个 enclave 相当于一个“安全身份域”,不同 enclave 之间默认不能随意通信。

三、PKI 与证书链:信任是如何传递的

PKI(公钥基础设施)是管理公钥、身份和信任的体系。它由 CA、注册机构、证书库、吊销列表等组成。在 ROS2 中,通常使用自建 CA 为每个节点签发证书。证书里包含:主体名称、公钥、有效期、签发者、扩展用途、签名算法等。验证时,节点从对方证书出发,逐级向上验证到受信任的根 CA。

概念 作用 ROS2 中的体现
对称密钥 高速加密业务数据 DDS 会话密钥,加密话题数据
非对称密钥对 身份认证、密钥协商、签名 节点证书中的公钥与本地私钥
哈希摘要 完整性校验、签名预处理 权限文件、治理文件的签名摘要
数字签名 证明来源与未被篡改 CA 对节点证书、权限文件的签名
CA 根证书 信任锚点 keystore 中的 ca.cert.pem
证书吊销列表 作废已泄露或过期的证书 DDS Security 可配置 CRL 检查

四、案例与场景:一个被篡改的指令如何被拦截

假设机械臂控制节点订阅 /arm_command,攻击者试图在总线上注入一条“移动到危险位置”的指令。若未启用安全,订阅端无法区分指令来源,可能直接执行。启用 SROS2 后,流程变为:

  • 发布者必须持有合法证书和对应权限,才能向该话题写入。
  • 消息附带数字签名或认证标签,订阅端验证签名失败则丢弃。
  • 即使攻击者截获报文,由于没有会话密钥,也无法解密或伪造有效签名。
  • 若攻击者使用过期证书,证书链验证会失败,握手阶段即被拒绝。

排障提示:如果节点启动时报 SecurityException 或 Access denied,优先检查三件事:证书路径是否正确、权限文件是否包含该话题、系统时间是否在证书有效期内。

五、常见误区与复盘

误区一:把非对称加密当成主要数据加密手段。 非对称加密速度慢,ROS2 中它主要用于握手和签名,真正跑数据的是对称密钥。

误区二:认为有了哈希就等于有了签名。 哈希只能证明数据没变,不能证明“谁发的”。攻击者可以同时替换数据和哈希值,因此必须用私钥签名。

误区三:所有节点共用一套证书。 这会让权限边界消失,一个节点被攻破等于全部沦陷。正确做法是按节点或按功能域划分 enclave,最小权限授权。

误区四:忽略时间同步。 证书验证依赖有效期,ROS2 设备若时间漂移过大,会导致证书被判定为未生效或已过期,安全通信直接失败。

私钥文件一旦泄露,攻击者可以冒充该节点。生产环境中私钥应设置严格文件权限,例如 chmod 600,并避免进入版本库或镜像层。

ROS2 安全通信中的密码学原语与 PKI 信任链 CA 根证书 信任锚点 · ca.cert.pem 节点 A 证书 公钥 + 身份 + 有效期 节点 B 证书 公钥 + 身份 + 有效期 签发 签发 身份认证与密钥协商 验证证书链 · 交换公钥 · 生成会话密钥 非对称加密 + 数字签名 对称加密数据通道 AES-GCM · 加密话题/服务数据 · 完整性校验 会话密钥 哈希函数 SHA-256 摘要 单向 · 抗碰撞 用于签名预处理 数字签名 私钥签名 公钥验签 防篡改 · 防抵赖 对称加密保护数据 · 非对称加密保护身份 · 哈希保证完整性 · 数字签名建立信任 · PKI 管理证书链

把这张图记在脑子里,再回头看 SROS2 的 keystore 目录,就不会觉得那些 cert.pem、key.pem、governance.p7s、permissions.p7s 是黑盒了:它们分别对应证书、私钥、治理文件和权限文件的签名结果。理解原语,才能正确配置、验证和排障。