生成证书颁发机构密钥对时,Hyper-V 来宾从哪里获取熵?

信息安全 视窗 证书颁发机构 虚拟化
2021-09-08 06:33:45

根据EFF 的 SSL 观察站的调查结果,“由于随机数生成算法较弱,数以万计的密钥实际上无法提供安全性。” 我对这个问题的理解是:在生成 RSA 算法使用的大素因数期间,大量设备最终选择了相同的素因数。据推测,这是因为设备没有使用足够的熵来选择主要因素。

安装 Active Directory 证书服务时,您会看到以下屏幕:

在此处输入图像描述

从表面上看,完成安装会导致生成构成密钥对的主要因素。

我经常听到建议(这里是一个)将您的根证书颁发机构创建为虚拟机,以便轻松脱机并对其进行物理保护。在 Windows 环境中,使用 Hyper-V 托管根 CA 似乎很自然。

这会引发以下问题:

  1. 在 AD 证书服务安装期间生成主要因素时,Windows Server 的 HyperV 托管实例在哪里获取其熵?

  2. 熵源有多“好”?

1个回答

Hyper-V 来宾获取它的熵就像它不是来宾时一样。对于 Windows,使用 Microsoft 加密服务提供商的应用程序从三个/四个主要来源获取熵:

  1. 网络活动等外部事件。
  2. 有关 CSP 函数调用者的详细信息(进程 ID、线程 ID、与这些线程和进程关联的各种计时器等)。
  3. 应用程序开发人员希望提供的任何熵(按键时间、鼠标移动等)。
  4. 任何受支持的硬件熵设备,例如 Intel 处理器中的 RdRand。

上述所有四个都对来宾可用,就像它是物理服务器一样。

如 msdn.microsoft.com/en-us/library/windows/desktop/aa379942(v=vs.85).aspx 中所述:

对于 Microsoft CSP,CryptGenRandom 使用与其他安全组件相同的随机数生成器。这允许许多进程为系统范围的种子做出贡献。CryptoAPI 为每个用户存储一个中间随机种子。为了形成随机数生成器的种子,调用应用程序提供它可能具有的位(例如,鼠标或键盘计时输入),然后将这些位与存储的种子以及各种系统数据和用户数据(如进程 ID 和线程 ID、系统时钟、系统时间、系统计数器、内存状态、空闲磁盘集群、散列用户环境块。该结果用于播种伪随机数生成器 (PRNG)。在带有 Service Pack 1 (SP1) 及更高版本的 Windows Vista 中,使用 NIST 特别出版物 800-90 中指定的基于 AES 计数器模式的 PRNG 的实现。在 Windows Vista、Windows Storage Server 2003 和 Windows XP 中,使用联邦信息处理标准 (FIPS) 186-2 中指定的 PRNG。如果应用程序可以访问一个好的随机源,它可以在调用 CryptGenRandom 之前用一些随机数据填充 pbBuffer 缓冲区。然后,CSP 使用该数据进一步随机化其内部种子。在调用 CryptGenRandom 之前省略初始化 pbBuffer 缓冲区的步骤是可以接受的。然后,CSP 使用该数据进一步随机化其内部种子。在调用 CryptGenRandom 之前省略初始化 pbBuffer 缓冲区的步骤是可以接受的。然后,CSP 使用该数据进一步随机化其内部种子。在调用 CryptGenRandom 之前省略初始化 pbBuffer 缓冲区的步骤是可以接受的。