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 节点建立安全通信时,典型流程如下:
- 节点 A 和节点 B 各自持有由 CA 签发的证书和私钥。
- 双方交换证书,验证证书链是否可信、是否过期、是否被吊销。
- 通过非对称算法完成身份认证,并协商出一把临时对称会话密钥。
- 后续话题、服务、动作的数据使用对称密钥加密,并附带消息认证码或签名,保证机密性与完整性。
- 通信结束后会话密钥销毁,避免长期密钥泄露影响历史数据。
在 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,并避免进入版本库或镜像层。
把这张图记在脑子里,再回头看 SROS2 的 keystore 目录,就不会觉得那些 cert.pem、key.pem、governance.p7s、permissions.p7s 是黑盒了:它们分别对应证书、私钥、治理文件和权限文件的签名结果。理解原语,才能正确配置、验证和排障。