ROS 2安全性

概述

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

ROS 实用工具可以为 ROS 应用程序创建权威的 信任锚点,或者可以使用外部证书机构。

内置的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安全隔离区的设计文档:<https://design.ros2.org/articles/ros2_security_enclaves.html>。

安全文件

通过DDS规范,建立了一个包含六个文件的ROS 2安全隔离区。其中三个文件定义了隔离区的标识,另外三个文件定义了授予隔离区的权限。这六个文件都存放在一个目录中,如果在启动节点时没有指定合格的隔离区路径,将使用默认根级隔离区中的文件。

隔离区标识

身份证书机构文件``identity_ca.cert.pem``作为用于识别参与者的信任锚点。每个隔离区还在文件``cert.pem``中保存其唯一标识证书,并在文件``key.pem``中保存关联的私钥。由于``cert.pem``证书已经由身份证书签名,当参与者向其他域成员呈现此证书时,它们可以使用自己拥有的身份证书副本验证参与者的身份。此有效的证书交换使得隔离区能够与其他参与者安全地建立可信任的通信。隔离区不共享``key.pem``私钥,而仅将其用于解密和消息签名。

安全区域权限

权限证书机构文件 permissions_ca.cert.pem 用作授予权限给安全区域的可信锚点。该证书用于创建签名文件 governance.p7s,它是一个定义了整个域的保护策略的 XML 文档。类似地,XML 文件 permissions.p7s 概述了该特定安全区域的权限,并由权限证书机构签名。域成员使用权限证书机构的副本来验证这些签名文件并授予所请求的访问权限。

尽管这两个证书机构为身份和权限提供了单独的工作流程,但通常同一证书既用作身份验证机构,也用作权限机构。

私钥

身份和权限证书还附带有关联的私钥文件。通过使用身份证书的私钥签署其证书签名请求(CSR),将新的安全区域添加到域中。同样地,通过使用权限证书的私钥签署权限的 XML 文档来授予新安全区域的权限。

安全环境变量

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

一旦启用了安全功能,环境变量``ROS_SECURITY_STRATEGY``定义了域参与者在启动参与者时如何处理问题。安全功能依赖于证书和正确签名的配置文件,但默认情况下,配置不正确的参与者仍然可以成功启动,但没有安全功能。为了严格遵守安全设置并防止启动不符合规范的安全区域,将此环境变量设置为``Enforce``(区分大小写)

可以在`ROS 2 DDS-Security集成设计文档 <https://design.ros2.org/articles/ros2_dds_security.html>`_中找到其他与安全相关的环境变量。这些变量通常帮助ROS管理安全区域并定位安全文件

了解更多

有关ROS 2通信安全性的更多信息和实际操作,请参阅:doc:设置安全性