用于虚拟机的熵池的制作方法

文档序号:6350247阅读:218来源:国知局
专利名称:用于虚拟机的熵池的制作方法
用于虚拟机的熵池
背景技术
随机数能够在多种不同的计算场景中使用。一个常见的使用场景是密码加密 (cryptography),其中密码加密密钥和密码加密处理全都依赖于随机数的生成。随机数生成通常依赖于计算机中的一个或多个硬件组件的状态。然而,当虚拟机在计算机上运行时, 这种依赖性有可能会存在问题。所述虚拟机抽象化计算机中的硬件组件,并且将其作为虚拟组件呈现给虚拟机中运行的操作系统。与其对应的硬件组件相比,这种虚拟组件有可能具有较小的随机性或熵,而这有可能会减小所产生的数字的熵。

发明内容
本发明内容是为了以简化形式引入精选概念而被提供的,并且在以下的详细描述中将会进一步描述这些概念。本发明内容的目的既不是识别所要求保护主题的关键特征或必要特征,也不是用于限制所要求保护的主题的范围。根据一个或多个方面,由计算设备中的虚拟机管理器管理的程序的熵池至少部分基于计算设备中的一个或多个硬件组件中的每一个而被产生。所述程序访问熵池,并且使用熵池作为产生随机数的基础。根据一个或多个方面,在计算设备的主机操作系统中,熵数据至少部分基于计算设备的一个或多个硬件组件中的每一个而被收集。熵池至少部分基于收集到的熵数据而被更新,并且被提供给作为计算设备的虚拟机运行的客户操作系统。


在附图中始终使用了相同数字来引用相同特征。图1是示出了根据一个或多个实施例来实现用于虚拟机的熵池的例示计算设备的框图。图2是示出了根据一个或多个实施例来获取和提供用于虚拟机的熵的例示处理的流程图。图3是示出了根据一个或多个实施例来实现用于虚拟机的熵池的例示客户操作系统的框图。图4是示出了根据一个或多个实施例的用于使用了顺序计数器的客户操作系统的例示处理的流程图。图5示出了能够根据一个或多个实施例而被配置成实现用于虚拟机的熵池的例示计算设备。
具体实施例方式在这里论述的是用于虚拟机的熵池。基于计算设备中的硬件组件的熵池是由计算设备的主机操作系统产生和更新的。运行客户操作系统的虚拟机也可以在计算设备上运行。所述客户操作系统具有至少部分基于主机操作系统的熵池产生的熵池,由此,即便客户操作系统是在虚拟机中运行的,也可以至少部分基于硬件组件来为客户操作系统提供熵池。此外,客户操作系统可以保持顺序计数器值。在每次产生客户操作系统的拷贝或克隆的时候,其中一个客户操作系统的顺序计数器值都会递增。此外,在每次获取基于客户操作系统熵池的值时,这时都会存储关于所获取的值以及获取该值时的客户操作系统的当前顺序计数器值的记录。当使用基于客户操作系统熵池的值时,关于该值的已存储顺序计数器值将会与客户操作系统的当前顺序计数器值相比较,并且只有在这两个计数器值相同的时候才会使用该值。图1是示出了根据一个或多个实施例来实现用于虚拟机的熵池的例示计算设备 100的框图。计算设备100可以是多种不同类型的设备。例如,所述计算设备100可以是台式计算机、移动站、上网本、娱乐电器、可通信地耦合到显示设备的机顶盒、电视、蜂窝或其他无线电话、游戏控制台、车载计算机等等。由此,计算设备100的范围可以是从具有大量存储器和处理器资源的资源充足的设备(例如个人计算机、游戏控制台)到存储器和/或处理资源有限的资源很少的设备(例如传统的机顶盒、手持游戏控制台)。计算设备100包括主机操作系统102和虚拟机管理器104。主机操作系统102管理对由一个或多个组件108提供的功能所进行的访问。组件108可以是多种不同的输入/ 输出(I/O)组件以及其他组件或设备。例如,组件108可以包括一个或多个存储器组件、存储设备、通信组件等等。对于包括虚拟机管理器104在内的在计算设备100上运行的其他各种不同的组件或模块来说,即使这种组件或模块不能直接访问组件108,它们也可以访问主机操作系统102管理的这个功能。主机操作系统102还包括熵池110。通常,熵池是一组向计算设备100提供随机源的数据或比特。所述熵池是基于从一个或多个熵源收集的数据产生的,并且是由随机数生成器和/或作为随机源的其他组件进行提取的。在主机操作系统102上可以运行一个或多个虚拟机(VM)管理器。虚拟机管理器允许一个或多个附加程序在计算设备100上运行。这些程序可以是每个都被称为客户操作系统的操作系统或可替换地是其他程序。虚拟机管理器向客户操作系统呈现一个虚拟化硬件系统,其中客户操作系统是在所述虚拟化硬件系统中运行的。相应地,在虚拟化硬件系统中运行的客户操作系统也被称为虚拟机。客户操作系统经常是在不知道其硬件资源已被虚拟化的情况下在这个虚拟化硬件系统中运行的。虚拟机支持各种不同的使用场景,这其中包括允许以不同方式将I/O组件呈现给客户操作系统(例如仿真、合成、虚拟、透传、作为不同组件、具有不同的通信协议等等)。在图1中,虚拟机管理器104包括虚拟机控制模块120以及一个或多个虚拟化组件122。虚拟机控制模块120管理虚拟化硬件系统,由此与客户操作系统132进行通信。虚拟化组件122是由虚拟机控制模块120作为硬件组件呈现给客户操作系统132的虚拟化硬件组件。虚拟化组件122与组件108既可以是相同类型的组件,可替换地,也可以是不同类型的组件。客户操作系统132与控制模块120和/或虚拟化组件122进行通信,就好像客户操作系统132在与计算设备100的物理硬件进行通信一样。虽然在这里是参考客户操作系统132来论述计算设备100的,但是作为替换,除了操作系统之外的其他程序也可以在虚拟机中运行。
客户操作系统132包括随机数生成器134和熵池136。在这里将熵池136论述成由随机数生成器134使用,但是应该了解,可替换地,熵池136也可以由客户操作系统132 的其他组件使用。随机数生成器134是一个被设计成模拟或近似真实随机发生器的确定性系统。相应地,随机数生成器134也可以被称为伪随机数生成器。随机数生成器134可以采用多种不同方式中的一种或多种方式来产生随机数。在一个或多个实施例中,随机数生成器134基于从熵池136获取的被称为种子值的数据来产生随机数。所述随机数生成器134 可以通过将多种不同算法应用于种子值来获取随机数,例如安全散列算法(SHA)函数(例如 SHA-512)、标准对称密码算法(例如高级加密标准(AES))等等中的一种。作为熵池(例如熵池136或熵池110)存储的数据是基于来自一个或多个熵源的值而被产生的。熵源是具有某种随机量的数据或值的来源。有多种不同的源可被用于熵池的熵源。例如,下列系统信息中的每一个都可以是熵源,如各种系统时钟或定时器、页面错误发生次数、可用空闲RAM大小、已占用盘驱动器空间、空闲盘驱动器空间、系统后备信息、系统中断信息等等。每一个网络信息都可以是熵源,例如接收或发送的分组的数目、网络分组定时、从中接收到网络分组的地址等等。此外,鼠标移动、按键、语音输入及其他类似事件的定时或内容中的每一个都可以是熵源。计算系统上的现有硬件资源也可以充当熵源。来自插有(或未插入)源的声音或视频输入的数据可以是熵源。由于混乱的空气扰动,盘驱动器在旋转速度中有可能具有小的随机波动,所述空气扰动可以由低级磁盘寻道时间测量装置(low level disk seek time instrumentation)测量并被用作熵源。包括硬盘驱动器序列号和BIOS固件表在内的唯一 (或几乎唯一的)硬件ID和序列号也可以被用作熵源。包含在设备100中或与之耦合的硬件随机数生成器也可以是熵源。硬件随机数生成器指的是一个产生随机输出的专用硬件组件。例如,这种硬件随机数生成器可以基于电子电路产生的放大噪声,环境声音噪声、半导体中的量子效应、放射性衰变定时等等。来自熵源的数据可以用多种不同方式引入熵池(例如熵池110或136)。在一个或多个实施例中,来自熵源的数据将被散列,以便产生引入熵池的散列值,或者,可替换地,来自熵源的数据本身可被引入熵池。例如,将数据引入熵池的处理可以通过将数据串联到熵池,将至少一部分数据插入熵池的一个或多个位置以及诸如此类的处理来执行。主机操作系统102从一个或多个熵源获取数据,并且将所获取的数据引入熵池 110。主机操作系统102获取基于组件108的数据。相应地,熵池110是以硬件熵源为基础的。熵池136被包含在虚拟机中运行的客户操作系统132中。虚拟机控制模块120访问熵池110,并且使来自熵池110的至少一部分数据对熵池136而言是可获得的。如下文中更详细论述的那样,来自熵池110的数据可以用多种不同的方式被使得对熵池106而言是可获得。由此,即使熵池136是虚拟机中的客户操作系统的一部分,所述熵池136仍旧以硬件熵源为基础。在一个或多个实施例中,主机操作系统102将来自熵池110的数据经由虚拟化组件122提供给客户操作系统132。当引导(boot)客户操作系统132或是其以其他方式开始运行所述系统时,主机操作系统102从熵池110获取数据。从熵池110获取的该数据被保存在虚拟化组件122中,例如通过将数据映射到虚拟化组件122的存储器空间。所述虚拟化组件122进而又被客户操作系统132访问并被用作(或者添加到)熵池136。相应地,客户操作系统132具有基于硬件熵源的熵池136。来自主机操作系统102提供的熵池110的数据量是可以改变的。例如,来自主机操作系统102提供的熵池110的数据量可以是预定数量的比特、预定百分比或数量的熵池 110,熵池110中的所有数据等等。在一个或多个实施例中,保存了来自熵池110的数据的虚拟化组件122是供客户操作系统132访问的BIOS (基本输入/输出系统)表。主机操作系统102将来自熵池110 的数据映射到虚拟机管理器104的特定存储器空间,该存储器空间是存储了客户操作系统 132使用的BIOS表的存储器空间。相应地,除了 BIOS表中通常包含的数据之外,来自熵池 110的熵数据同样包含在BIOS表中。然而可以意识到的是,BIOS表的使用仅仅是一个示例,来自熵池110的数据可以保存在多种不同的虚拟化组件中。存储了来自熵池110的数据的虚拟化组件122的存储器空间通常是原本未被正常工作的虚拟化组件122或客户操作系统132使用或需要的虚拟化组件122的一部分。例如, 与客户操作系统132的正常工作无关的BIOS表的一部分可被用作存入来自熵池110的数据的BIOS表的一部分。主机操作系统102继续收集基于组件108的熵数据,并且将熵数据添加至熵池 110。这个由主机操作系统102实施的熵数据收集处理是在独立于客户操作系统132对熵数据的收集和/或使用的情况下继续进行的。作为在引导客户操作系统132时将来自熵池110的数据提供给客户操作系统132 的处理的补充或替换,来自熵池Iio的数据可以在客户操作系统132正在运行时被提供给客户操作系统132。在这种情形下,虚拟机控制模块120支持客户操作系统132与主机操作系统102之间的通信接口,从而允许将来自熵池110的数据提供给熵池136。这样做允许在引导了客户操作系统132之后基于硬件熵源来更新熵池136中的数据。在一个或多个实施例中,客户操作系统132会在需要时请求附加熵。客户操作系统132可以采用多种不同方式来确定何时需要附加熵,例如以规则或不规则的间隔,响应于熵池136中的可用数据降至阈值数量以下的确定等等。当需要附加熵时,客户操作系统 132会向主机操作系统102 (经由虚拟机管理器104)发送对于附加熵的请求。响应于这种请求,主机操作系统102会返回来自熵池110的附加数据。所返回的来自熵池110的数据量是可以改变的。例如,所返回的来自熵池110的数据量可以是预定数量的比特,客户操作系统132请求的多个比特,熵池110中的所有数据等等。在其他实施例中,主机操作系统102以规则或不规则的间隔将熵数据发送到客户操作系统132 (经由虚拟机管理器104)。这个关于主机操作系统102何时发送熵的定时是可变的,例如按照预定时间表(例如每十分钟),响应于熵池110包含阈值量的数据等等。发送至客户操作系统132的数据被保存在熵池136中,由此使得该数据在需要时对随机数生成器134而言是可获得的,而不用客户操作系统132向主机操作系统102发送对于附加熵的请求。熵池136中的数据可以全都是从熵池110获取的,作为替换,该数据也可以是从其他熵源获取的。例如,客户操作系统132可以将一个或多个虚拟化组件122用作熵源,从此类熵源获取的数据则会被引入到熵池136中。
图2是示出了根据一个或多个实施例来获取和提供用于虚拟机的熵的例示处理 200的流程图。处理200可以采用软件、固件、硬件或是其组合来实现。图2左侧示出的处理200的行为是由诸如图1的主机操作系统102之类的计算设备的主机操作系统执行的。 而处于图2右侧的处理200的行为则是由诸如图1的客户操作系统132之类的计算设备的虚拟机执行的。处理200被显示成是一组行为,并且不局限于所显示的用于执行各种不同行为的操作的顺序。所述处理200是一个用于获取和提供用于虚拟机的熵的例示处理;在这里包含了参考不同的附图对获取和提供用于虚拟机的熵的附加论述。在处理200中,主机操作系统收集基于硬件组件的熵数据(行为202)。所述熵数据可以是从如上所述的多种不同的熵源收集的。主机操作系统的熵池基于收集到的熵数据而被更新(行为204)。所收集的熵数据可以采用如上所述的多种不同方式引入主机操作系统的熵池。行为202和204可被重复多次,其中主机操作系统不断收集新的熵数据,以及基于新的熵数据来更新主机操作系统的熵池。行为202和204中的这种收集和更新处理可以在与客户操作系统是否访问或使用客户操作系统熵池无关的情况下持续进行。主机操作系统将来自主机操作系统熵池的数据提供给客户操作系统(行为206)。 如上所述,在引导操作系统时和/或在客户操作系统正在运行的其他时间,来自熵池的数据可被提供给客户操作系统。客户操作系统至少部分基于主机操作系统的熵池来产生客户操作系统的熵池(行为208)。来自主机操作系统在行为206中提供的主机操作系统熵池的数据可被用作或是添加到客户操作系统熵池。客户操作系统访问客户操作系统的熵池(行为210),其中所述熵池至少部分基于主机操作系统在行为204中更新的熵池。此外,所述熵池还可以可选地包括客户操作系统从其他熵源获取的数据。客户操作系统使用客户操作系统的熵池作为随机数生成处理的基础(行为212)。 在需要除了随机数生成处理之外的其他熵的情况下,客户操作系统还可以将客户操作系统的熵池用于其他操作和/或用于获取值。应该指出的是,行为206和208可以在客户操作系统正在运行时重复多次,从而允许使用新的熵数据来重复更新客户操作系统的熵池。回到图1,在这里有可能出现能够克隆虚拟机的情形。虚拟机的克隆指的是复制虚拟机,包括在虚拟机上运行的任何应用以及描述虚拟机当前状态的数据(例如客户操作系统的各种不同设置)。该复制处理会导致产生虚拟机的两个相同拷贝。所述克隆处理可以在不同时间执行,例如在虚拟机休眠(不运行)时或是在虚拟机运行时。该克隆处理可用于保存被称为快照的虚拟机拷贝,从而允许计算设备100回滚到这些已存储的设置。克隆处理可以是响应于来自用户和/或来自计算设备100中的其他组件或模块的请求而被执行的。然而,允许克隆虚拟机可能带来关于熵池136的问题。在克隆之后有可能出现两个虚拟机具有相同熵池的情形,而这有可能会因为重复使用随机数生成器134产生的数字而导致随机性减小或是引入随机数的可预测性。在一个或多个实施例中,顺序计数器可被用于区分不同的虚拟机,在下文中将会对此进行更详细的论述。
8
图3是示出了根据一个或多个实施例来实现用于虚拟机的熵池的例示客户操作系统300的框图。例如,客户操作系统300可以是图1的客户操作系统132。与图1的客户操作系统132相似,客户操作系统300是作为虚拟化硬件系统中的虚拟机运行的。客户操作系统300包括随机数生成器302,熵池304,顺序计数器306,顺序管理器模块308以及值标记模块310。与图1的随机数生成器134和熵池136相似,随机数生成器 302是基于熵池304来产生随机数的。顺序计数器306是一个区分客户操作系统300与其他客户操作系统的计数器值, 其中所述其他客户操作系统是因为在与客户操作系统300相同的系谱树分支中执行克隆处理产生的(例如,所述其他客户操作系统是客户操作系统300的子女或其他子代,或者是客户操作系统300的双亲或其他先人)。在一个或多个实施例中,顺序计数器306具有一个数值,但是所使用的也可以是具有已知顺序的其他列表中的值。在克隆客户操作系统时,客户操作系统之一的顺序计数器306将会递增,同时其他客户操作系统的顺序计数器306则保持不变。如果其中一个操作系统拷贝在克隆之后保持运行,那么该操作系统是使其顺序计数器保持其值的操作系统;否则,任一操作系统拷贝都可以让其顺序计数器递增。举个例子,如果要获取正在运行的客户操作系统的快照,那么所述正在运行的客户操作系统将会保持其顺序计数器值,而已存储的快照拷贝则会使其顺序计数器值递增(例如加1)。另举一例,如果对休眠的客户操作系统执行克隆,那么这两个客户操作系统拷贝之一会使其顺序计数器递增(例如加1),而另一个则会保持其顺序计数器值。客户操作系统之一的顺序计数器306可以采用多种不同的方式递增。在一个或多个实施例中,主机操作系统或管理客户操作系统克隆的其他组件将会递增其中一个客户操作系统的顺序计数器306。在其他实施例中,客户操作系统之一将会递增其自身的顺序计数器306。例如,主机操作系统或其他那些管理客户操作系统克隆的组件可以设置一个表明客户操作系统已被克隆的标记或其他指示符。当下一次引导客户操作系统的拷贝时,所述拷贝可以检测到所述标记或其他指示符,从而促使该客户操作系统更新其顺序计数器306。顺序管理器模块308和值标记模块310使用顺序计数器306来确保基于熵池304 产生的值的随机性不会因为克隆处理而受损。在每次产生基于熵池304的值的时候,值标记模块310都会获取顺序计数器306的当前值。这样产生的值的示例包括随机数生成器302 产生的随机数,基于随机数产生的密码加密密钥等等。在每次产生基于熵池304的值时,模块310都会将所产生的值与顺序计数器306的当前值保存在一起。相应地,与所产生的每个值一起保存的是对其有效的顺序计数器值的相关联指示。当使用基于熵池304产生的值时,顺序管理器模块308将会检索为该产生的值存储的顺序计数器值。已存储的顺序计数器值会与顺序计数器306的当前值相比较。如果已存储的顺序计数器值与顺序计数器306的当前值相同,则可以使用基于熵池304产生的值。 然而,如果已存储的顺序计数器值不同于(例如小于)顺序计数器306的当前值,那么不会使用基于熵池304产生的值。如果不使用基于熵池304产生的值,那么客户操作系统300将会产生新值。此外, 熵池304将被清空和再生(例如基于如上所述的主机操作系统的熵池)。应该指出的是,对于特定的顺序计数器值来说,熵池304只能可选地为客户操作系统300清空和再生一次。举个例子,如果尝试使用基于熵池304产生的第一个值,然而却因为已存储的顺序计数器值小于顺序计数器306的当前值而未使用该值,那么熵池304将被清空和再生。如果尝试使用基于熵池304产生的第二个值,然而却因为已存储的顺序计数器值小于顺序计数器306 的当前值而未使用该值,那么,如果在尝试使用第二个值的时候的顺序计数器306的当前值与因为已经清空且再生了熵池304而尝试使用第一个值的时候的顺序计数器306的当前值相同,则不必再次清空和再生熵池304。举个例子,假设客户操作系统已经产生了一个随机数,以便将其用作加密密钥来提供安全通信信道。更进一步的假设是客户操作系统在产生加密密钥时具有当前顺序计数器值3。当产生加密密钥时,值标记模块310将会为加密密钥存储一条顺序计数器值是3的记录。继续该示例,假设随后获取了一个快照来存储客户操作系统的拷贝。正在运行的客户操作系统将会保持其顺序计数器值3,然而客户操作系统的快照拷贝则会将其顺序计数器值递增至4。如果正在运行的客户操作系统尝试继续使用加密密钥来提供安全通信信道,那么正在运行的客户操作系统的顺序计数器值(该值为3)与为加密密钥记录的顺序计数器值相同,由此,加密密钥可以被正在运行的客户操作系统使用。然而,如果客户操作系统的快照拷贝尝试运行和使用加密密钥来提供安全通信信道,那么为加密密钥记录的顺序计数器值(其值为3)将会小于运行中的客户操作系统的快照拷贝的顺序计数器值(其值为 4),由此不会使用加密密钥。然而应该指出的是,当基于熵池304产生的值是用于加密和解密的密钥时,即便为加密密钥记录的顺序计数器值小于运行中的客户操作系统的快照拷贝的顺序计数器值, 也会保持所产生的值的记录。通过保持所产生的值的记录,所述所产生的值仍旧可以用于解密那些基于所产生的值加密的数据。图4是示出了根据一个或多个实施例使用了顺序计数器的客户操作系统的例示处理400的流程图。处理400是由诸如图3的客户操作系统300之类的客户操作系统执行的,并且可以采用软件、固件、硬件或其组合的方式实现。处理400被显示成是一组行为,并且不受所示出的执行各种不同行为的操作的顺序的限制。处理400是使用了顺序计数器的客户操作系统的例示处理;关于使用顺序计数器的客户操作系统的附加论述是参考附图而被包含在这里的。在处理400中,基于熵池的值被产生(行为402)。在行为402中可以产生多种不同的值,例如上文所述的随机数、密码加密密钥等等。实现处理400的客户操作系统的当前顺序计数器值被获取(行为404),并且将会存储所产生的值以及当前顺序计数器值的记录(行为406)。随后接收要求使用所产生的值的请求(行为408)。该请求可以是从实现处理400 的客户操作系统的组件或模块接收,从别的组件或模块接收,从用户接收等等。响应于该请求,与所产生的值一起保存的顺序计数器值将被获取(行为410)。此外,实现处理400的客户操作系统的当前顺序计数器值也被获取(行为412)。然后,客户操作系统将会检查在行为412中获取的当前顺序计数器值与在行为 410中获取的已存储顺序计数器值是否相同(行为414)。如果这两个值相同,则可以使用所产生的值(行为416)。
10
然而,如果这两个值不同,那么客户操作系统的熵池将被清空和再生(行为418)。 所请求的值被再生(行为420),并且再生的值可被使用(行为422)。图5示出了根据一个或多个实施例而可以被配置成实现用于虚拟机的熵池的例示计算设备500。举例来说,计算设备500可以是图1的计算设备100。计算设备500包括一个或多个处理器或处理单元502,一个或多个可以包含一个或多个存储器和/或存储组件506的计算机可读媒体504,一个或多个输入/输出(I/O)设备508,以及允许不同组件和设备相互通信的总线510。计算机可读媒体504和/或一个或多个IO设备508既可以被包含成是计算设备500的一部分,可替换地,也可以与之耦合。总线510代表使用多种不同总线架构的若干种总线结构中的一种或多种,包括存储器总线或存储控制器、外设总线、加速图形端口、处理器或本地总线等等。总线510可以包括有线和 /或无线总线。存储器/存储组件506代表一个或多个计算机存储媒体。组件506可以包括易失媒体(例如随机存取存储器(RAM))和/或非易失媒体(例如只读存储器(ROM)、闪存、光盘、 磁盘等等)。组件506可以包括固定媒体(例如RAM、R0M、固定硬盘驱动器等等)以及可移除媒体(例如闪存驱动器、可移除硬盘驱动器、光盘等等)。这里论述的技术可以在软件中实现,其中指令由一个或多个处理单元502执行。 应该意识到的是,不同指令可以保存在计算设备500的不同组件中,例如处理单元502中、 处理单元502的不同缓冲存储器中、设备500的其他缓冲存储器(未显示)中、其他计算机可读媒体中等等。此外还应该意识到的是,在计算设备500中存储指令的位置是可以随时间改变的。一个或多个输入/输出设备508允许用户将命令和信息输入计算设备500,并且还允许将信息呈现给用户和/或其他组件或设备。输入设备的示例包括键盘、光标控制设备 (例如鼠标)、麦克风、扫描仪等等。输出设备的示例包括显示设备(例如监视器或投影仪)、扬声器、打印机、网卡等等。在这里可以在软件或程序模块的一般上下文中描述不同技术。通常,软件包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。这些模块和技术的实现可被保存在某种形式的计算机可读媒体上,或是经由所述媒体传送。计算机可读媒体可以是任何能被计算设备访问的可用介质或媒体。作为示例而不是限制,计算机可读媒体可以包括“计算机存储媒体”和“通信媒体”。“计算机存储媒体”包括通过任何方法和技术实现的用于存储诸如计算机可读指令、数据结构、程序模块或其他数据之类的信息的易失和非易失以及可移除和不可移除媒体。计算机存储媒体包括但不局限于RAM、ROM、EEPR0M、闪速存储器或其他存储器技术、 CD-ROM、数字多用途碟片(DVD)或其他光存储器、磁带盒、磁带、磁盘存储器或其他磁存储设备、或是可以用于存储期望信息并能被计算机访问的其他任何介质。“通信媒体”通常包括计算机可读指令、数据结构、程序模块或是诸如载波或其他传输机制之类的已调制数据信号中的其他数据。通信媒体还包括任何信息递送媒体。术语 “调制数据信号”指的是这样的信号,它的一个或多个特性依照将信息编码在该信号中的这样一种方式被设置或改变。作为例证而不是限制,通信媒体包括有线媒体,例如有线网络或直线线路连接,以及包括无线媒体,例如声学、RF、红外及其他无线媒体。此外,在计算机可读媒体的范围中还包含上述各项的组合。通常,这里描述的任何功能或技术都可以使用软件、固件、硬件(例如固定逻辑电路)、手动处理或是这些实现的组合来实现。这里使用的术语“模块”和“组件”通常代表软件、固件、硬件或是其组合。在软件实现的情况下,模块或组件代表当在处理器(例如一个或多个CPU)上运行时执行指定任务的程序代码。程序代码可以保存在一个或多个计算机可读存储器设备中,关于所述设备的进一步描述可以参考图5而被发现。用于这里描述的虚拟机技术的熵池的特征与平台是无关的,这意味着该技术可以在具有多种处理器的多种商业计算平台上实现。虽然通过特定于结构特征和/或方法行为的语言描述了本主题,但是应该理解, 附加权利要求中限定的主题未必局限于上述具体特征或行为。相反,以上描述的具体特征和行为是作为用于实现权利要求的例示形式公开的。
权利要求
1.一种计算设备,包括 处理器;以及计算机可读媒体,在该计算机可读媒体上存储了用于虚拟机管理器管理的程序的指令,其中在由处理器运行时,所述指令将会促使处理器访问程序的熵池,所述熵池是在该程序运行的时候至少部分基于计算设备的一个或多个硬件组件中的每一个产生的;以及使用所述熵池作为产生随机数的基础。
2.如权利要求1所述的计算设备,其中熵池是从计算设备上的主机操作系统获取的。
3.如权利要求2所述的计算设备,其中熵池的至少一部分被主机操作系统映射到虚拟机管理器的存储器空间。
4.如权利要求2所述的计算设备,其中熵池是经由程序的基本输入/输出系统(BIOS) 表而从主机操作系统获取的。
5.如权利要求2所述的计算设备,该指令还会促使处理器 向主机操作系统请求附加熵;从主机操作系统接收附加熵数据;以及将附加熵数据弓I入程序的熵池。
6.如权利要求2所述的计算设备,该指令还促使处理器 在特定间隔接收来自主机操作系统的附加熵;以及将附加熵数据弓I入程序的熵池。
7.如权利要求1所述的计算设备,其中该程序包括客户操作系统。
8.如权利要求1所述的计算设备,该指令还促使处理器 获取程序的第一顺序计数器值;以及存储用于该程序的随机数以及第一顺序计数器值。
9.如权利要求8所述的计算设备,该指令还促使处理器 接收要求使用随机数的请求;获取已存储的第一顺序计数器值;在接收到请求时,获取用于该程序的第二顺序计数器值;将第二顺序计数器值与第一顺序计数器值相比较;如果第一顺序计数器值和第二顺序计数器值相同,则使用随机数;如果第一顺序计数器值与第二顺序计数器值不用,则再生该程序的熵池,基于再生的熵池产生新的随机数,以及使用新的随机数。
10.一种计算设备中的方法,该方法包括在客户操作系统运行的时候,至少部分基于计算设备的一个或多个硬件组件中的每一个来收集熵数据;至少部分基于所收集的熵数据来更新熵池;以及将来自熵池的数据提供给作为计算设备的虚拟机运行的客户操作系统。
11.如权利要求10所述的方法,还包括响应于来自客户操作系统的对于附加熵的请求,将来自熵池的数据提供给客户操作系统。
12.如权利要求10所述的方法,还包括至少部分基于该设备的一个或多个硬件组件中的每一个来收集附加熵数据;以及至少部分基于收集到的附加熵数据来更新熵池。
13.如权利要求10所述的方法,还包括在引导客户操作系统的时候,将来自熵池的数据提供给客户操作系统。
14.如权利要求13所述的方法,其中在引导客户操作系统时将来自熵池的数据提供给客户操作系统的处理包括将熵池的至少一部分包含在存储了客户操作系统所使用的基本输入/输出系统(BIOS)表的虚拟机的存储器空间中。
15.如权利要求10所述的方法,其中该方法是在计算设备的主机操作系统中实现的。
全文摘要
在计算设备的主机操作系统中,熵数据是至少部分基于计算设备的一个或多个硬件组件中的每一个收集的。熵池至少部分是基于收集到的熵数据更新的,并且来自熵池的数据被提供给作为计算设备的虚拟机运行的客户操作系统。客户操作系统基于来自主机操作系统提供的熵池的数据来保持客户操作系统熵池。客户操作系统访问客户操作系统熵池,并且使用客户操作系统熵池作为产生包括随机数在内的值的基础。
文档编号G06F9/06GK102473098SQ201080037813
公开日2012年5月23日 申请日期2010年8月13日 优先权日2009年8月24日
发明者S. 贝克 B., M. 埃利森 C., A. 菲尔德 S. 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1