web-dev-qa-db-ja.com

認証局のキーペアを生成するときに、Hyper-Vゲストはどこでエントロピーを取得しますか?

EFFのSSL観測所による調査 によると、「弱い乱数生成アルゴリズムのために実質的にセキュリティを提供しない数万のキー」があります。その問題についての私の理解は次のとおりです。RSAアルゴリズムで使用される大きな素因数の生成中に、かなりの数のデバイスが同じ素因数を選択してしまいました。これはおそらく、デバイスが十分なエントロピーを使用して素因数を選択しなかったために発生しました。

Active Directory証明書サービスをインストールすると、次の画面が表示されます。

enter image description here

表面上、インストールを完了すると、キーペアを構成する主要な要素が生成されます。

ルート認証局を仮想マシンとして作成し、オフラインにして物理的に安全に保護することを推奨する( これは1つです )ことをよく耳にします。 Windows環境では、Hyper-Vを使用してルートCAをホストするのが自然なようです。

これにより、次の質問が発生します。

  1. Windows ServerのHyperVでホストされているインスタンスは、AD証明書サービスのインストール中に主要な要素を生成するときにどこでエントロピーを取得しますか?

  2. エントロピーソースはどの程度「良い」のでしょうか。

10
alx9r

Hyper-Vゲストは、ゲストでなかった場合と同じようにエントロピーを取得します。 Windowsの場合、Microsoftの暗号化サービスプロバイダーを使用するアプリケーションは、3つまたは4つの主なソースからエントロピーを得ます。

  1. ネットワークアクティビティなどの外部イベント。
  2. CSP関数の呼び出し元に関する詳細(プロセスID、スレッドID、それらのスレッドとプロセスに関連付けられたさまざまなタイマーなど)。
  3. アプリケーション開発者が提供したいエントロピー(キーを押すタイミング、マウスの動きなど)。
  4. IntelプロセッサのRdRandなど、サポートされているハードウェアエントロピーデバイス。

上記の4つはすべて、物理サーバーの場合と同様にゲストが利用できます。

Msdn.Microsoft.com/en-us/library/windows/desktop/aa379942(v=vs.85).aspxで説明されているように:

Microsoft CSPでは、CryptGenRandomは他のセキュリティコンポーネントで使用されているものと同じ乱数ジェネレータを使用します。これにより、多数のプロセスがシステム全体のシードに貢献できます。 CryptoAPIは、すべてのユーザーに中間のランダムシードを格納します。乱数ジェネレーターのシードを形成するために、呼び出し元のアプリケーションは、それが持つ可能性のあるビット(たとえば、マウスまたはキーボードのタイミング入力)を提供します。これらのビットは、格納されたシードと、プロセスIDやユーザーIDなどのユーザーデータの両方と組み合わせられます。スレッドID、システムクロック、システム時間、システムカウンター、メモリステータス、空きディスククラスター、ハッシュされたユーザー環境ブロック。この結果は、疑似乱数ジェネレータ(PRNG)のシードに使用されます。 Windows Vista Service Pack 1(SP1)以降では、AESカウンターモードベースの実装PRNG NIST Special Publication 800-90で指定されているものを使用します。WindowsVistaでは、Windows Storage Server 2003、およびWindows XPでは、PRNGが使用されます。アプリケーションが適切なランダムソースにアクセスできる場合、pbBufferバッファをCryptGenRandomを呼び出す前にいくつかのランダムデータ。CSPはこのデータを使用して内部シードをさらにランダム化します。CryptGenRandomを呼び出す前にpbBufferバッファを初期化するステップを省略してもかまいません。

2
longneck