2. ROS2与DDS基础
要理解ROS2的安全机制,必须先理解ROS2的通信底座。ROS2并没有自己实现一套端到端的通信协议,而是把通信能力委托给DDS(Data Distribution Service)。这意味着ROS2的节点发现、数据分发、服务质量策略,乃至安全认证与加密,最终都落在DDS中间件上。因此,本节从ROS2通信架构出发,逐层拆解DDS中间件的角色、域与主题的组织方式、发布订阅模型,并引出由此产生的安全需求。
一、ROS2通信架构:客户端库与中间件的分层
ROS2在架构上分为应用层、客户端库层(RCL,ROS Client Library)、中间件抽象层(RMW,ROS Middleware)和DDS实现层。开发者编写的节点使用rclcpp或rclpy,调用create_publisher、create_subscription等API;这些调用被RMW统一封装,再翻译成具体DDS厂商的API。RMW的存在让ROS2可以更换底层DDS实现,而不影响上层应用代码。
这种分层带来一个重要后果:ROS2的安全能力上限,取决于所选DDS实现所支持的安全插件。如果底层DDS不支持DDS Security规范,那么上层无论怎么配置都无法获得真正的身份认证与加密。因此,选型时必须先确认DDS实现的安全能力。
ROS2 节点 (rclcpp / rclpy)
│ create_publisher / create_subscription
▼
RMW 中间件抽象层 (rmw_fastrtps_cpp 等)
│ 映射为 DDS 实体
▼
DDS 实现 (Fast DDS / Cyclone DDS / Connext ...)
│ RTPS 协议 + DDS Security 插件
▼
网络传输 (UDP / 共享内存)
二、DDS中间件角色:从“消息总线”到“数据空间”
DDS的核心抽象是“以数据为中心的发布订阅”(DCPS)。它不像传统消息队列那样由Broker中转,而是让参与者(DomainParticipant)在同一个域内自动发现彼此,并直接建立数据通道。DDS中间件承担四类关键职责:
- 发现(Discovery):通过SPDP/SEDP协议自动交换参与者、发布者、订阅者及主题信息,无需中心服务器。
- 匹配与QoS协商:只有发布端与订阅端的QoS策略兼容时,才会建立实际的数据连接。
- 数据分发:按主题进行序列化传输,支持可靠/尽力而为、历史深度、截止时间等策略。
- 安全执行点:DDS Security插件在发现与数据面插入认证、访问控制、加密与日志审计。
三、DDS域、主题与发布订阅模型
域(Domain)是DDS的隔离边界,用Domain ID标识。不同域之间的参与者默认互不可见,因此域常被用来隔离不同机器人、不同测试环境或不同安全等级的数据。ROS2通过环境变量ROS_DOMAIN_ID选择域。
主题(Topic)是数据的逻辑通道,由名称和数据类型共同标识。发布者向主题写数据,订阅者从主题读数据,双方不需要知道对方的存在。ROS2中常见的主题如/chatter、/cmd_vel、/scan,其名称在DDS层会被映射为带前缀的DDS主题名。
发布订阅模型的关键在于“解耦”:时间解耦、空间解耦、同步解耦。一个发布者可以有多个订阅者,一个订阅者也可以订阅多个发布者。这种多对多关系在带来灵活性的同时,也扩大了攻击面——只要攻击者能加入域并伪装成合法参与者,就可能窃听或注入数据。
四、由发布订阅模型引出的安全需求
DDS的开放发现机制决定了:只要网络可达且域ID相同,任何参与者都能尝试加入。由此产生四类核心安全需求,它们与DDS Security的四个插件一一对应。
| 安全需求 | 威胁场景 | 对应DDS Security插件 |
|---|---|---|
| 身份真实性 | 攻击者伪装成合法节点加入域 | Authentication(基于PKI证书) |
| 权限最小化 | 合法节点越权发布/订阅敏感主题 | Access Control(Governance + Permissions) |
| 数据机密性与完整性 | 主题数据被窃听或篡改 | Cryptographic(AES-GCM加密与签名) |
| 行为可追溯 | 安全事件无法定位责任节点 | Logging(审计日志) |
五、案例场景:一个未加固的ROS2系统
假设一台移动机器人运行ROS2,使用默认配置,ROS_DOMAIN_ID为0。其/cmd_vel主题控制底盘运动,/camera/image传输视觉数据。此时同一局域网内任意一台安装了ROS2的电脑,只要设置相同的域ID,执行以下命令即可看到话题并订阅数据:
export ROS_DOMAIN_ID=0
ros2 topic list
ros2 topic echo /cmd_vel
ros2 topic pub /cmd_vel geometry_msgs/msg/Twist \
"{linear: {x: 1.0}, angular: {z: 0.5}}"
这意味着攻击者不仅能窃听摄像头画面,还能直接向底盘注入运动指令。这个案例说明:ROS2的默认通信模型是“信任优先”的,安全必须显式开启并配置。
六、复盘与要点归纳
- ROS2通信依赖DDS,安全能力由底层DDS实现及其安全插件决定。
- 域是隔离边界,主题是数据通道,发布订阅模型天然多对多、无中心。
- 无中心发现带来灵活性,也带来未授权加入、窃听、注入三类主要风险。
- DDS Security通过认证、访问控制、加密、日志四个插件覆盖上述风险。
- 安全配置必须与域ID、主题命名、QoS策略协同设计,否则可能出现“配了证书却匹配不上”的问题。