Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

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

乱数ジェネレーターは、オペレーティングシステムのセキュリティーにとって非常に重要です。仮想オペレーティングシステムのセキュリティーを保護するために、Red Hat Enterprise Linux 7 には、要求に応じて新しいエントロピーをゲストに提供できる仮想ハードウェア乱数ジェネレーターデバイスである virtio-rng が同梱されています。
ホスト物理マシンでは、ハードウェア RNG インターフェイスにより、/dev/hwrng に chardev が作成されます。これは開いてから読み込み、ホスト物理マシンからエントロピーを取得できます。rngd デーモンと連携すると、ホストの物理マシンのエントロピーは、ランダム性の主要なソースであるゲスト仮想マシンの/dev/random にルーティングできます。
乱数ジェネレーターの使用は、キーボード、マウス、その他の入力などのデバイスがゲスト仮想マシンで十分なエントロピーを生成するのに十分でない場合に特に役立ちます。仮想乱数ジェネレーターデバイスを使用すると、ホストの物理マシンがエントロピーを通過してゲストの仮想マシンのオペレーティングシステムに到達できます。 この手順は、コマンドラインまたは virt-manager インターフェイスのいずれかを使用して実行できます。手順は、以下を参照してください。virtio-rng の詳細は、Red Hat Enterprise Linux Virtual Machines: Access to Random Numbers Made Easy を参照してください。

手順16.11 Virtual Machine Manager を使用した virtio-rng の実装

  1. ゲスト仮想マシンをシャットダウンします。
  2. ゲスト仮想マシンを選択し、Edit メニューからVirtual Machine Details を選択して、指定したゲスト仮想マシンの Details ウィンドウを開きます。
  3. Add Hardware ボタンをクリックします。
  4. Add New Virtual Hardware ウィンドウで RNG を選択し、Random Number Generator ウィンドウを開きます。

    図16.20 Random Number Generator ウィンドウ

    Random Number Generator ウィンドウ
    目的のパラメーターを入力し、完了したら Finish を押します。パラメーターは、virtio-rng 要素 で説明されています。

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

  1. ゲスト仮想マシンをシャットダウンします。
  2. virsh edit domain-name コマンドを使用して、目的のゲスト仮想マシンの XML ファイルを開きます。
  3. <devices> 要素を編集して、以下の内容を追加します。

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

    
      ...
      <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>
      ...
    乱数ジェネレーターデバイスでは、以下の 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 プロトコルを使用して送信元に接続します。ソースはキャラクターデバイスとして指定されます。詳細は、キャラクターデバイスホストの物理マシンインターフェイスを参照してください。