ROS 2 安全性

概述

ROS 2 包括保护 ROS 2 计算图内节点之间通信的能力。 与发现类似,安全性通过底层 ROS 2 中间件实现(前提是它支持相应的安全插件)。 无需安装其他软件即可启用安全性;但是,中间件需要每个 ROS 图参与者的配置文件。 这些文件启用加密和身份验证,并为单个节点和整个 ROS 图定义策略。 ROS 2 还添加了一个主“开/关”开关来控制安全行为。

ROS 实用程序可以为 ROS 应用程序创建权威的“信任锚 <https://en.wikipedia.org/wiki/Trust_anchor>`_,或者可以使用外部证书颁发机构。

内置的 ROS 2 安全功能可以控制整个 ROS 图中的通信。 这不仅允许加密 ROS 域参与者之间传输的数据,还可以对发送数据的参与者进行身份验证,确保发送数据的完整性,并启用域范围的访问控制。

ROS 2 安全服务由底层“数据分发服务 (DDS) <https://www.omg.org/spec/DDS/>”提供,用于节点之间的通信。 DDS 供应商提供与 ROS 配合使用的开源和商业 DDS 实现。 但是,为了创建符合规范的 DDS 实现,所有供应商都必须包含安全插件,如“DDS 安全规范 <https://www.omg.org/spec/DDS-SECURITY/About-DDS-SECURITY/>”中所述。 ROS 安全功能利用这些 DDS 安全插件来提供基于策略的加密、身份验证和访问控制。 DDS 和 ROS 安全性通过预定义的配置文件和环境变量启用。

安全区域

安全区域封装了用于保护 ROS 通信的单一策略。 安全区域可以为多个节点、整个 ROS 图或受保护的 ROS 进程和设备的任意组合设置策略。 安全区域可以在部署时灵活地映射到流程、用户或设备。 调整此默认行为对于优化通信和复杂系统非常重要。 有关更多详细信息,请参阅 ROS 2 安全区域 设计文档

安全文件

ROS 2 安全区域 由 DDS 规范概述的六个文件建立。 其中三个文件定义区域的身份,而另外三个文件定义要授予区域的权限。 所有六个文件都位于单个目录中,没有合格区域路径启动的节点使用默认根级区域内的文件。

区域身份

身份证书颁发机构文件“identity_ca.cert.pem”充当用于识别参与者的信任锚。 每个飞地还在文件“cert.pem”中保存其唯一的标识证书,并在文件“key.pem”中保存关联的私钥。 由于“cert.pem”证书已由身份证书签名,因此当参与者向其他域成员出示此证书时,他们能够使用自己的身份证书副本验证参与者的身份。 这种有效的证书交换允许飞地安全地与其他参与者建立受信任的通信。 飞地不共享“key.pem”私钥,而仅将其用于解密和消息签名。

飞地权限

权限证书颁发机构文件“permissions_ca.cert.pem”充当向安全飞地授予权限的信任锚。 此证书用于创建签名文件“governance.p7s”,这是定义域范围保护策略的 XML 文档。 同样,XML 文件“permissions.p7s”概述了此特定 enclave 的权限,并已由权限 CA 签名。 域成员使用权限 CA 的副本来验证这些签名文件并授予请求的访问权限。 虽然这两个证书颁发机构为身份和权限启用了单独的工作流程,但通常同一个证书同时充当身份和权限颁发机构。

私钥

身份和权限证书也有关联的私钥文件。 通过使用身份证书的私钥签署证书签名请求 (CSR),将新的 enclave 添加到域。 同样,通过使用权限证书的私钥签署权限 XML 文档,授予新 enclave 的权限。

安全环境变量

环境变量“ROS_SECURITY_ENABLE”充当 enclave 的 ROS 2 安全功能的主“开/关”开关。 默认情况下,安全性已关闭,因此即使存在适当的安全文件,也不会启用安全功能。 为了启用 ROS 2 安全性,请将此环境变量设置为“true”(区分大小写)。

启用安全性后,环境变量“ROS_SECURITY_STRATEGY”定义域参与者在启动参与者时如何处理问题。 安全功能依赖于证书和正确签名的配置文件,但默认情况下,配置不当的参与者仍将成功启动,但没有安全功能。 为了严格遵守安全设置并无法启动不合规的 enclave,请将此环境变量设置为“Enforce”(区分大小写)。

可以在 ROS 2 DDS-Security Integration 设计文档 中找到其他与安全相关的环境变量。 这些变量通常有助于 ROS 管理 enclave 并定位安全文件。

了解更多

有关启用 ROS 2 通信安全的更多信息和动手练习,请参阅 设置安全性