16.6. 乱数ジェネレーターデバイス

乱数ジェネレーターは、オペレーティングシステムのセキュリティーにおいて非常に重要です。仮想オペレーティングシステムのセキュリティーを保護するために、Red Hat Enterprise Linux 7 には要求時に新規エントロピーをゲストに提供できる virtio-rng という仮想ハードウェアの乱数ジェネレーターが含まれます。
ホスト物理マシン上で、ハードウェア RNG インターフェースは /dev/hwrng に chardev を作成します。次に、この chardev が開かれ、ホスト物理マシンからエントロピーを取得するために読み込まれます。rngd デーモンと対で使用されると、ホスト物理マシンのエントロピーは、乱数度の主なソースであるゲスト仮想マシンの /dev/random に送られます。
乱数ジェネレーターの使用は、キーボード、マウスおよびその他の入力がゲスト仮想マシンのエントロピーを十分に生成しない場合にとくに便利です。仮想乱数ジェネレーターデバイスは、ホスト物理マシンからゲスト仮想マシンのオペレーティングシステムへのエントロピーの通過を許可します。このデバイスは Windows および KVM ゲスト仮想マシンの両方で利用できます。この手順は、コマンドライン または virt-manager インターフェース を使用して実行できます。virtio-rng についての詳細は、Red Hat Enterprise Linux Virtual Machines: Access to Random Numbers Made Easy を参照してください。

手順16.11 仮想マシンマネージャーを使用した virtio-rng の実装

  1. ゲスト仮想マシンをシャットダウンします。
  2. ゲスト仮想マシンを選択してから、編集 メニューで 仮想マシンの詳細 を選択し、指定されたゲスト仮想マシンの詳細ウィンドウを開きます。
  3. ハードウェアを追加 ボタンをクリックします。
  4. 新しい仮想ハードウェアを追加 ウィンドウで、RNG を選択し、Random Number Generator ウィンドウを開きます。
    乱数ジェネレーターウィンドウ

    図16.20 乱数ジェネレーターウィンドウ

    目的のパラメーターを入力したら 完了 をクリックします。パラメーターについては、virtio-rng 要素 で説明されています。

手順16.12 コマンドラインツールを使用した virtio-rng の実装

  1. ゲスト仮想マシンをシャットダウンします。
  2. virsh edit domain-name コマンドを使用し、目的のゲスト仮想マシンの XML ファイルを開きます。
  3. 以下を含めるように <devices> 要素を編集します。
    
      ...
      <devices>
        <rng model='virtio'>
          <rate period='2000' bytes='1234'/>
          <backend model='random'>/dev/random</backend>
          <!-- OR -->
          <backend model='egd' type='udp'>
            <source mode='bind' service='1234'/>
            <source mode='connect' host='1.2.3.4' service='1234'/>
          </backend>
        </rng>
      </devices>
      ...

    図16.21 乱数ジェネレーターデバイス

    乱数ジェネレーターデバイスは以下の XML 属性/要素を許可します。

    virtio-rng 要素

    • <model>: 必須の model 属性は、提供される RNG デバイスのタイプを指定します。
    • <backend model>: <backend> 要素は、ゲストに使用されるエントロピーのソースを指定します。ソースモデルは model 属性を使用して設定されます。サポートされるソースモデルには、'random' および 'egd' が含まれます。
      • <backend model='random'> - この <backend> タイプは、ブロック以外のキャラクターデバイスを入力として予想します。これらのデバイス例には、/dev/random および /dev/urandom があります。ファイル名は <backend> 要素のコンテンツとして指定されます。ファイル名が指定されていないと、ハイパーバイザーのデフォルトが使用されます。
      • <backend model='egd'> - このバックエンドは EGD プロトコルを使用してソースに接続されます。ソースはキャラクターデバイスとして指定されます。詳細は、キャラクターデバイスのホスト物理マシンインターフェースを参照してください。