您正在阅读的是旧版本但仍受支持的 ROS 2 文档。 Jazzy.

了解安全密钥库

目标 探索位于 ROS 2 安全密钥库中的文件。

辅导水平: 高级

时间 15 分钟

背景介绍

"(《世界人权宣言》) sros2 软件包可用于创建启用 ROS 2 安全性所需的密钥、证书和策略。不过,安全配置非常灵活。只要对 ROS 2 安全密钥库有基本的了解,就能将其与现有的 PKI(公钥基础设施)集成,并根据组织政策管理敏感的密钥材料。

安全工件位置

在上一教程中启用了通信安全后,让我们来看看启用安全后创建的文件。这些文件使加密成为可能。

"(《世界人权宣言》) sros2 公用事业 (玫瑰2 安全 ...) 将文件分为公共密钥、私人密钥和飞地密钥材料。

ROS 使用环境变量 ros_security_keystore 作为密钥存储。在本教程中,我们使用目录 ~/sros2_demo/demo_keystore.

公钥材料

您可以在公共目录中找到三个加密证书,地址分别为 ~/sros2_demo/demo_keys/public但是,身份和权限证书实际上只是证书颁发机构(CA)证书的链接。

在公钥基础设施中, 证书颁发机构 充当信任锚:验证参与者的身份和权限。对于 ROS 来说,这意味着参与 ROS 图的所有节点(可以扩展到整个独立机器人舰队)。通过将证书颁发机构的证书 (ca.cert.pem所有 ROS 节点都可以使用同一个证书颁发机构与其他节点建立互信关系。

虽然我们在教程中即时创建了证书颁发机构,但在生产系统中,应根据预定义的安全计划进行创建。通常情况下,生产系统的证书颁发机构将离线创建,并在初始设置时置于机器人上。每个机器人的证书机构可能是唯一的,也可能是多个机器人共享的,所有机器人都打算相互信任。

DDS (以及 ROS)支持身份和权限信任链的分离,因此每个功能都有自己的证书颁发机构。在大多数情况下,ROS 系统安全计划并不要求分离这些职责,因此安全实用程序会生成一个单一的证书颁发机构,同时用于身份和权限。

使用 opensl 查看该 x509 证书并以文本形式显示:

CD ~/sros2_demo/demo_keys/public openssl x509 -在 ca.cert.pem -文本 -noout

输出结果应类似于下面的内容:

证书:
  数据:
      版本: 3 (0x2)
      串行 数量:
          02:8e:9a:24:ea:10:55:cb:e6:ea:e8:7a:c0:5f:58:6d:37:42:78:aa
      签名 算法: ecdsa--SHA256
      发行人: CN = sros2CA
      有效性
          没有 之前: Jun  1 16:57:37 2021 格林威治标准时间
          没有 之后 : 五月份 31 16:57:37 2031 格林威治标准时间
      主题: CN = sros2CA
      主题 公众 钥匙 信息:
          公众 钥匙 算法: 本我-ecPublicKey
              公众-钥匙: (256 马衔)
              酒吧:
                  04:71:e9:37:d7:32:ba:b8:a0:97:66:da:9f:e3:c4:
                  08:4f:7a:13:59:24:c6:另见:6a:f7:95:c5:CD:82:c0:
                  7f:7f:e3:90:dd:7b:0f:77:d1:ee:0e:af:68:7c:76:
                  a9:ca:60:d7:1e:2c:01:d7:bc:7e:e3:86:2a:9f:38:
                  :编辑:39:c5:32
              ASN1 OID: prime256v1
              NIST 曲线: P-256
      X509v3 扩展:
          X509v3 基本 制约因素: 严重
              加利福尼亚州:, 路径:1
  签名 算法: ecdsa--SHA256
       30:45:02:21:00:d4:fc:d8:45:ff:a4:51:49:98:4c:f0:c4:3f:
       e0:e7:33:19:8e:31:3c:d0:43:e7:e9:8f:36:f0:90:18:编辑:d7:
       7d:02:20:30:84:f7:04:33:87:bb:4f:d3:8b:95:61:48:df:83:
       4b:e5:92:b3:e6:ee:3c:d5:另见:30:43:09:04:71:bd:dd:7c
有关 CA 证书的一些注意事项:
  • 证书主题名称 sros2CA 是由 sros2 公用事业。

  • 本证书自创建时起十年内有效

  • 与所有证书一样,它包含一个用于公钥-私钥加密的公钥

  • 作为根证书颁发机构,这是一个 自签证书即使用自己的私钥签名。

由于这是一个公共证书,因此可以根据需要自由复制,以便在整个 ROS 系统中建立信任。

私钥材料

私钥材料可在密钥库目录中找到 ~/sros2_demo/demo_keys/private.类似于 目录,其中包含一个证书授权密钥 ca.key.pem 和符号链接,以用作身份和权限 CA 私钥。

警告

保护该私人密钥并创建安全备份!

这是与公共证书颁发机构(Certificate Authority)相关联的私人密钥,它是 ROS 系统中所有安全性的锚点。您可以用它来修改 ROS 图形的加密策略,并添加新的 ROS 参与者。根据机器人的安全需求,可以通过访问权限来保护密钥,并将其锁定在另一个账户上,也可以将其完全从机器人上转移到另一个系统或设备上。如果文件丢失,您将无法更改访问权限,也无法在系统中添加新的参与者。同样,任何可以访问该文件的用户或程序都可以修改系统策略和参与者。

该文件仅在配置机器人时需要,机器人运行时不需要。它可以安全地离线保存在另一个系统或可移动媒体中。

"(《世界人权宣言》) sros2 公用设施的使用 椭圆曲线密码学 而不是 RSA,以提高安全性并减少密钥大小。使用以下命令显示椭圆曲线私钥的详细信息:

CD ~/sros2_demo/demo_keys/private openssl 生态 -在 ca.key.pem -文本 -noout

您的输出结果应类似于下面的内容:

阅读 欧盟委员会 密钥
私人-钥匙: (256 马衔)
隐私:
    93:da:76:b9:e3:91:ab:e9:42:76:f2:38:f1:9d:94:
    90:5e:b5:96:7b:7f:71:ee:13:1b:d4:a0:f9:48:fb:
    ae:77
酒吧:
    04:71:e9:37:d7:32:ba:b8:a0:97:66:da:9f:e3:c4:
    08:4f:7a:13:59:24:c6:另见:6a:f7:95:c5:CD:82:c0:
    7f:7f:e3:90:dd:7b:0f:77:d1:ee:0e:af:68:7c:76:
    a9:ca:60:d7:1e:2c:01:d7:bc:7e:e3:86:2a:9f:38:
    :编辑:39:c5:32
ASN1 OID: prime256v1
NIST 曲线: P-256

除了私钥本身,请注意还列出了公开密钥,它与证书颁发机构中列出的公开密钥相匹配。 ca.cert.pem.

域名管理政策

在密钥存储的 enclave 目录中找到域治理策略、 ~/sros2_demo/demo_keys/enclaves.......。 飞地 目录中包含 XML 治理政策文件 治理.xml以及经许可 CA 签名的文件副本,如 治理.p7s.

"(《世界人权宣言》) 治理.p7s 文件包含全域范围的设置,如如何处理未验证的参与者、是否对发现进行加密,以及访问主题的默认规则。

使用以下命令验证 S/MIME 签名 的管理文件:

opensl 默记 -验证 -在 治理.p7s -CAfile ../public/permissions_ca.cert.pem

该命令将打印出 XML 文档,最后一行是 验证 成功的 以证明文件已由权限 CA 正确签署。

安全飞地

安全进程(通常是 ROS 节点)在安全飞地内运行。在最简单的情况下,所有进程都可以合并到同一个飞地中,然后所有进程都将使用相同的安全策略。不过,为了对不同进程应用不同的策略,进程在启动时可以使用不同的安全飞地。有关安全飞地的更多详情,请参阅 设计文件.使用 ROS 参数指定安全飞地 --飞地 运行节点时。

每个安全飞地需要六个文件 以确保安全。每个文件 必须 根据下文的定义和《公约》的概述,命名为 DDS 安全标准.为避免出现同一文件有多个副本的情况,可使用 sros2 实用程序为每个飞地创建指向单一治理策略、上述身份 CA 和权限 CA 的链接。

请参见以下六个文件 听众 飞地。其中三项是该飞地特有的,另外三项则是该 ROS 系统通用的:

  • key.pem,用于在该飞地内加密和解密的私人密钥

  • cert.pem该飞地的公共证书;该证书由身份 CA 签发

  • 权限.p7s,该飞地的权限;该文件已与权限 CA 签名

  • 治理.p7s,指向该域已签名安全策略文件的链接

  • identity_ca.cert.pem, 该域的身份 CA 链接

  • permissions_ca.cert.pem, 该域的权限 CA 链接

私人加密密钥 key.pem 应根据安全计划加以保护。该密钥可对该特定飞地内的通信进行加密、解密和验证。如果密钥丢失或被盗,应撤销密钥并为该飞地创建一个新身份。

文件 permissions.xml 也已在该目录中创建,可用于重新创建签名权限文件。不过,启用安全性并不需要该文件,因为 DDS 使用的是签名版文件。

参加测试

看看你能否回答这些有关 ROS 安全密钥库的问题。从一个新的终端会话开始,使用前面教程中创建的密钥库启用安全性:

出口 ros_security_keystore=~/sros2_demo/demo_keystore
出口 ros_security_enable=
出口 安全战略=执行

CD ~/sros2_demo/demo_keys/enclaves/talker_listener/listener

备份 权限.p7s 在开始之前。

开放 权限.p7s 文本编辑器。对 XML 内容进行可忽略不计的修改(如添加空格或空行),然后保存文件。启动监听节点:

玫瑰2 运行 演示节点 听众 --ros-args --飞地 /talker_listener/listener

你希望发生什么?

你能启动通话节点吗?

玫瑰2 运行 演示节点 话匣子 --ros-args --飞地 /talker_listener/talker

启动倾听者和启动倾诉者有什么区别?

什么命令可以让您检查已修改的 权限.p7s 文件是否有效?

恢复正确签名的原始文件 权限.p7s 文件,然后继续下一个教程。