ROS 2 安全性
概述
ROS 2 包括保护 ROS 2 计算图内节点之间通信的能力。 与发现类似,安全性通过底层 ROS 2 中间件实现(前提是它支持相应的安全插件)。 无需安装其他软件即可启用安全性;但是,中间件需要每个 ROS 图参与者的配置文件。 这些文件支持加密和身份验证,并为单个节点和整个 ROS 图定义策略。 ROS 2 还添加了一个主“开/关”开关来控制安全行为。
ROS 实用程序可以创建权威 trust anchor 对于 ROS 应用程序,或者可以使用外部证书颁发机构。
内置的 ROS 2 安全功能可以控制整个 ROS 图中通信。 这不仅允许加密 ROS 域参与者之间传输的数据,还可以对发送数据的参与者进行身份验证,确保发送数据的完整性,并实现域范围的访问控制。
ROS 2 安全服务由底层提供 Data Distribution Service (DDS) 用于节点之间的通信。 DDS 供应商提供与 ROS 配合使用的开源和商业 DDS 实现。 但是,为了创建符合规范的 DDS 实现,所有供应商都必须包含安全插件,如 DDS Security Specification. ROS 安全功能利用这些 DDS 安全插件来提供基于策略的加密、身份验证和访问控制。 DDS 和 ROS 安全性通过预定义的配置文件和环境变量启用。
安全区域
安全区域封装了用于保护 ROS 通信的单一策略。 区域可以为多个节点、整个 ROS 图或受保护的 ROS 进程和设备的任意组合设置策略。 安全区域可以在部署时灵活地映射到进程、用户或设备。 调整此默认行为对于优化通信和复杂系统非常重要。 请参阅 ROS 2 安全区域 design document 了解更多详细信息。
安全文件
ROS 2 security enclave 按照 DDS 规范的概述,由六个文件建立。
其中三个文件定义了 enclave 的身份,而另外三个文件定义了授予 enclave 的权限。 所有六个文件都位于一个目录中,没有合格 enclave 路径启动的节点将使用默认根级 enclave 中的文件。
Enclave 身份
身份证书颁发机构文件“identity_ca.cert.pem”充当用于识别参与者的信任锚。 每个 enclave 还在文件“cert.pem”中保存其唯一的标识证书,并在文件“key.pem”中保存关联的私钥。 由于“cert.pem”证书已由身份证书签名,因此当参与者向其他域成员出示此证书时,他们能够使用自己的身份证书副本来验证参与者的身份。 这种有效的证书交换允许 enclave 安全地与其他参与者建立受信任的通信。 该飞地不共享“key.pem”私钥,而仅将其用于解密和消息签名。
安全区权限
权限证书颁发机构文件“permissions_ca.cert.pem”用作向安全区授予权限的信任锚。 此证书用于创建签名文件“governance.p7s”,这是一个定义域范围保护策略的 XML 文档。 类似地,XML 文件“permissions.p7s”概述了此特定安全区的权限,并已由权限 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 design document. 这些变量通常有助于 ROS 管理 enclave 并定位安全文件。
了解更多
有关启用 ROS 2 通信安全的更多信息和动手练习,请参阅 设置安全性.