启用 Virtio RNG


Virtio RNG 是一种半虚拟化的随机数字生成器。Virtio RNG 会提供由虚拟机 (VM) 实例的宿主机生成的内核熵池中的随机数字。内核熵池会从系统收集随机信息,并使用该信息生成真正随机数字,以便用于敏感信息(如 SSH 密钥或唯一 ID)。

准备工作

  • 设置身份验证(如果尚未设置)。身份验证是通过其进行身份验证以访问 Google Cloud 服务和 API 的过程。如需从本地开发环境运行代码或示例,您可以按如下方式向 Compute Engine 进行身份验证。
    1. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. Set a default region and zone.

限制

  • Virtio RNG 不适用于 Windows 映像。
  • 默认情况下,Compute Engine 虚拟机使用 Virtio RNG 而不是守护程序来重新填充客机内核熵池。如果您希望使用熵收集守护进程而不是 Virtio RNG,或将两者结合使用,则必须安装一个 Virtio RNG。如需查看熵收集守护程序的示例,请参阅 rng-tools 文档。

检查是否已启用 Virtio RNG

您可以通过运行以下命令来检查是否已在虚拟机上启用了 Virtio RNG:

lsmod | grep rng

启用 Virtio RNG 后,您的输出类似于以下内容:

virtio_rng             16384  0
rng_core               16384  2 virtio_rng
virtio_ring            28672  4 virtio_rng,virtio_scsi,virtio_pci,virtio_net
virtio                 16384  4 virtio_rng,virtio_scsi,virtio_pci,virtio_net

测试 Virio RNG

您可以使用 /dev/random 设备来测试 Virtio RNG。

  1. 使用 SSH 连接到虚拟机。例如,您可以使用 gcloud CLI 进行连接:

    gcloud compute ssh VM_NAME
    

    VM_NAME 替换为虚拟机名称。

  2. 安装 rng-tools

    CentOS

    使用以下命令安装 rng-tools

    sudo yum install rng-tools

    Debian

    使用以下命令安装 rng-tools

    sudo apt install rng-tools

    Fedora CoreOS

    使用以下命令安装 rng-tools

    sudo yum install rng-tools

    RHEL

    使用以下命令安装 rng-tools

    sudo yum install rng-tools

    SLES

    使用以下命令安装 rng-tools

    sudo zypper install rng-tools

    Ubuntu LTS

    使用以下命令安装 rng-tools

    sudo apt install rng-tools

    某些 Ubuntu 映像会返回 Package 'rng-tools' has no installation candidate 错误。如果收到此错误,请运行以下命令:

    sudo apt update
    sudo apt install rng-tools
    
  3. 在虚拟机上,运行 rngtest 命令:

    cat /dev/random | rngtest -c 1000
    

如果 Virtio RNG 未启用,则该命令不会返回任何内容。如果 Virtio RNG 已启用,您会收到类似于以下内容的响应:

rngtest 2-unofficial-mt.14..
rngtest: starting FIPS tests...
rngtest: bits received from input: 20000032
rngtest: FIPS 140-2 successes: 1000
rngtest: FIPS 140-2 failures: 0
rngtest: FIPS 140-2(2001-10-10) Monobit: 0
rngtest: FIPS 140-2(2001-10-10) Poker: 0
rngtest: FIPS 140-2(2001-10-10) Runs: 0
rngtest: FIPS 140-2(2001-10-10) Long run: 0
rngtest: FIPS 140-2(2001-10-10) Continuous run: 0
rngtest: input channel speed: (min=4.801; avg=7.318; max=7.839)Mibits/s
rngtest: FIPS tests speed: (min=39.005; avg=69.557; max=72.523)Mibits/s
rngtest: Program run time: 2880954 microseconds

后续步骤