Энтропийные пулы для виртуальных машин
Иллюстрации
Показать всеИзобретение относится к области генерации случайных чисел. Техническим результатом является повышение эффективности генерации случайных чисел для виртуальных машин. В главной операционной системе вычислительного устройства энтропийные данные собираются на основании, по меньшей мере частично, каждого из одного или более компонентов аппаратного обеспечения вычислительного устройства. Энтропийный пул обновляется на основании, по меньшей мере частично, собранных энтропийных данных, и данные из энтропийного пула предоставляются гостевой операционной системе, выполняемой как виртуальная машина вычислительного устройства. Гостевая операционная система сохраняет энтропийный пул гостевой операционной системы, основанный на данных из энтропийного пула, предоставленных главной операционной системой. Гостевая операционная система осуществляет доступ к энтропийному пулу гостевой операционной системы и использует энтропийный пул гостевой операционной системы в качестве основы для генерации значений, включая случайные числа. 5 н. и 21 з.п. ф-лы, 5 ил.
Реферат
УРОВЕНЬ ТЕХНИКИ
Случайные числа могут использоваться во множестве различных вычислительных сценариев. Одним из обычных сценариев использования является криптография, в которой криптографический ключ и криптографические процессы основаны на генерации случайных чисел. Генерация случайных чисел часто основана на состоянии одного или более компонентов аппаратного обеспечения в компьютере. Однако такая основа может быть проблематичной, когда на компьютере выполняется виртуальная машина. Виртуальная машина имитирует компоненты аппаратного обеспечения и представляет их как виртуальные компоненты для операционной системы, выполняемой на виртуальной машине. Такие виртуальные компоненты могут иметь меньшую степень случайности, или энтропию, чем их соответствующие компоненты аппаратного обеспечения, что может снизить энтропию генерируемых чисел.
СУЩНОСТЬ ИЗОБРЕТЕНИЯ
Это краткое изложение сущности изобретения приведено для представления в упрощенном виде подборки концепций, которые дополнительно описаны ниже в подробном описании. Данное краткое изложение сущности изобретения не предназначено ни для идентификации ключевых признаков или существенных признаков заявленного изобретения, ни для использования для ограничения объема заявленного изобретения.
В соответствии с одним или более аспектами, энтропийный пул программы, управляемой диспетчером виртуальных машин на вычислительном устройстве, генерируется на основе, по меньшей мере частично, каждого из одного или более компонентов аппаратного обеспечения вычислительного устройства. Программа осуществляет доступ к энтропийному пулу и использует энтропийный пул в качестве основы для генерации случайного числа.
В соответствии с одним или более аспектами, в главной (host) операционной системе вычислительного устройства энтропийные данные собираются на основе, по меньшей мере частично, каждого из одного или более компонентов аппаратного обеспечения вычислительного устройства. Энтропийный пул обновляется на основе, по меньшей мере частично, собранных энтропийных данных, и предоставляется гостевой (guest) операционной системе, выполняемой как виртуальная машина вычислительного устройства.
КРАТКОЕ ОПИСАНИЕ ЧЕРТЕЖЕЙ
Одинаковые номера используются во всех чертежах для ссылки на подобные признаки.
Фиг. 1 является структурной схемой, иллюстрирующей примерное вычислительное устройство, реализующее энтропийные пулы для виртуальных машин в соответствии с одним или более вариантами осуществления.
Фиг. 2 - блок-схема последовательности операций, иллюстрирующая примерный процесс для получения и предоставления энтропии для виртуальной машины в соответствии с одним или более вариантами осуществления.
Фиг. 3 является структурной схемой, иллюстрирующей примерную гостевую операционную систему, реализующую энтропийные пулы для виртуальных машин в соответствии с одним или более вариантами осуществления.
Фиг. 4 - блок-схема последовательности операций, иллюстрирующая примерный процесс для гостевой операционной системы, использующей последовательные счетчики, в соответствии с одним или более вариантами осуществления.
Фиг. 5 иллюстрирует примерное вычислительное устройство, которое может быть сконфигурировано для реализации энтропийных пулов для виртуальных машин в соответствии с одним или более вариантами осуществления.
ПОДРОБНОЕ ОПИСАНИЕ
В материалах настоящей заявки обсуждаются энтропийные пулы для виртуальных машин. Энтропийный пул, основанный на компонентах аппаратного обеспечения в вычислительном устройстве, генерируется и обновляется главной операционной системой вычислительного устройства. Виртуальная машина, исполняющая гостевую операционную систему, также может исполняться на вычислительном устройстве. Гостевая операционная система имеет энтропийный пул, который генерируется на основе, по меньшей мере частично, энтропийного пула главной операционной системы, предоставляющей гостевой операционной системе энтропийный пул, основанный, по меньшей мере частично, на компонентах аппаратного обеспечения, даже если гостевая операционная система выполняется на виртуальной машине.
Кроме того, значение последовательного счетчика может сохраняться гостевой операционной системой. Каждый раз, когда создается копия или клон гостевой операционной системы, значение последовательного счетчика одной из гостевых операционных систем прирастает. Дополнительно, каждый раз, когда получается значение, основанное на энтропийном пуле гостевой операционной системы, запись полученного значения и текущее значение последовательного счетчика гостевой операционной системы в момент времени, когда получено значение, сохраняется. Когда значение, основанное на энтропийном пуле гостевой операционной системы, используется, сохраненное значение последовательного счетчика для значения сравнивается с текущим значением последовательного счетчика гостевой операционной системы, и значение используется, только если два значения последовательного счетчика одинаковы.
Фиг. 1 является структурной схемой, иллюстрирующей примерное вычислительное устройство 100, реализующее энтропийные пулы для виртуальных машин в соответствии с одним или более вариантами осуществления. Вычислительное устройство 100 отображения может являться множеством различных типов устройств. Например, вычислительное устройство 100 может быть настольным компьютером, мобильной станцией, нетбуком, развлекательным устройством, телевизионной приставкой, с возможностью обмена информацией присоединенной к устройству отображения, телевизором, сотовым или иным беспроводным телефоном, игровой консолью, мобильной вычислительной машиной и так далее. Таким образом, вычислительное устройство 100 может находиться в диапазоне от полноресурсного устройства с существенными ресурсами памяти и обрабатывающими ресурсами (например, персональных компьютеров, игровых консолей) до малоресурсного устройства с ограниченными ресурсами памяти и/или обрабатывающими ресурсами (например, традиционных телевизионных приставок, карманных игровых консолей).
Вычислительное устройство 100 включает в себя главную операционную систему 102 и диспетчер 104 виртуальных машин. Главная операционная система 102 управляет доступом к функциональности, предоставляемой одним или более компонентами 108. Компоненты 108 могут являться множеством различных компонентов ввода/вывода (I/O), также как и других компонентов или устройств. Например, компоненты 108 могут включать в себя один или более компонентов памяти, запоминающих устройств, компонентов связи и так далее. Различные компоненты или модули, выполняемые на вычислительном устройстве 100, включая диспетчер 104 виртуальных машин, могут осуществлять доступ к этой функциональности, управляемой главной операционной системой 102, даже если такие компоненты или модули не могут осуществлять доступ к компоненту 108 напрямую.
Главная операционная система 102 также включает в себя энтропийный пул 110. Как правило, энтропийный пул является набором данных или битов, который предоставляет источник случайности вычислительного устройства 100. Энтропийный пул генерируется на основе данных, собираемых из одного или более источников энтропии, и получается генератором случайных чисел и/или другим компонентом как источником случайности.
Один или более диспетчеров виртуальных машин (VM) могут исполняться на главной операционной системе 102. Диспетчер виртуальных машин позволяет одной или более дополнительным программам исполняться на вычислительном устройстве 100. Эти программы могут быть операционными системами, каждая упоминаемая как гостевая операционная система, или, в качестве альтернативы, другими программами. Диспетчер виртуальных машин предоставляет гостевой операционной системе виртуализированную систему аппаратного обеспечения, на которой выполняется гостевая операционная система. Соответственно, гостевая операционная система, выполняемая на виртуализированной системе аппаратного обеспечения, также упоминается как виртуальная машина. Гостевая операционная система часто выполняется на виртуализированной системе аппаратного обеспечения без знания того, что ее ресурсы аппаратного обеспечения являются визуализированными. Виртуальные машины поддерживают различные сценарии использования, включая позволение компонентам I/O быть представленными гостевой операционной системе различными способами (например, эмулированный, синтетический, виртуальный, транзитный, в качестве различных компонентов, с различными протоколами связи и так далее).
На фиг. 1 диспетчер 104 виртуальных машин включает в себя модуль 120 управления виртуальной машиной и один или более визуализированных компонентов 122. Модуль 120 управления виртуальной машиной управляет виртуализированной системой аппаратного обеспечения, обменивающейся данными с гостевой операционной системой 132. Виртуализированные компоненты 122 являются виртуализированными компонентами аппаратного обеспечения, которые представляются модулем 120 управления виртуальной машиной гостевой операционной системе 132 как компоненты аппаратного обеспечения. Виртуализированные компоненты 122 могут быть теми же типами компонентов, как и компоненты 108, или, в качестве альтернативы, другими типами компонентов. Гостевая операционная система 132 обменивается данными с модулем 120 управления и/или виртуализированным компонентом 122, как если бы гостевая операционная система 132 обменивалась данными с физическим аппаратным обеспечением вычислительного устройства 100. Хотя вычислительное устройство 100 обсуждается в материалах настоящей заявки со ссылкой на гостевую операционную систему 132, в качестве альтернативы другие операционные системы могут выполняться на виртуальной машине.
Гостевая операционная система 132 включает в себя генератор 134 случайных чисел и энтропийный пул 136. Энтропийный пул 136 обсуждается в материалах настоящей заявки как используемый генератором 134 случайных чисел, хотя стоит понимать, что энтропийный пул 136 может, в качестве альтернативы, использоваться другими компонентами гостевой операционной системы 132. Генератор 134 случайных чисел является детерминированной системой, сконструированной, чтобы имитировать или приближать реальный генератор случайных чисел. Соответственно, генератор 134 случайных чисел может также упоминаться как псевдогенератор случайных чисел. Генератор 134 случайных чисел может генерировать случайные числа одним или более из множества различных способов. В одном или более вариантах осуществления генератор 134 случайных чисел генерирует случайные числа на основе данных, упоминаемых как исходное значение (seed), полученных из энтропийного пула 136. Генератор 134 случайных чисел может применять множество различных алгоритмов к исходному значению, чтобы получать случайные числа, таких как один из функций алгоритма аутентификации и проверки целостности информации (SHA) (например, SHA-512), стандартного симметричного криптографического алгоритма (например, улучшенный стандарт шифрования (AES)) и так далее.
Данные, хранимые как энтропийный пул (например, энтропийный пул 136 или энтропийный пул 110), генерируются на основе значений из одного или более источников энтропии. Источник энтропии является источником данных или значений, имеющих некоторую величину случайности. Множество различных источников могут использоваться в качестве источников энтропии для энтропийного пула. Например, системная информация, такая как системные часы или таймеры, то, сколько страничных ошибок произошло, сколько имеется доступной оперативной памяти, занятое пространство на диске, информация системного хранения, информация системного прерывания и так далее, каждая может являться источником энтропии. Сетевая информация, такая как количества принятых или отправленных пакетов, тайминги сетевых пакетов, адреса, с которых принимаются сетевые пакеты, и так далее, каждая может являться источником энтропии. Времена или содержание движений мыши, нажатия клавиш, голосовые вводы и другие схожие события - каждое может являться источником энтропии.
Существующие источники аппаратного обеспечения на вычислительной системе также могут служить в качестве источников энтропии. Данные из звукового или видеоввода вместе с (или без) источника, вставленного в них, могут являться источниками энтропии. Дисководы могут иметь небольшие случайные флуктуации их скорости вращения из-за хаотичной воздушной турбулентности, которая может быть измерена с помощью низкоуровневых измерительных приборов времени поиска диска и использоваться в качестве источника энтропии. Уникальные (или почти уникальные) идентификаторы и серийные номера аппаратного обеспечения, включая серийные номера накопителя на жестких дисках и таблиц микропрограммного обеспечения базовой системы ввода/вывода (BIOS), могут использоваться в качестве источника энтропии.
Аппаратный генератор случайных чисел, включенный в или присоединенный к устройству 100, также может являться источником энтропии. Аппаратный генератор случайных чисел ссылается на компонент аппаратного обеспечения специального назначения, который производит случайный вывод. Например, такой аппаратный генератор случайных чисел может быть основан на усиленном шуме, генерируемом электронной цепью, окружающем акустическом шуме, квантовых эффектах в полупроводнике, синхронизации радиоактивных распадов и так далее.
Данные из источников энтропии могут быть встроены в энтропийный пул (например, энтропийный пул 110 или 136) множеством различных способов. В одном или более вариантов осуществления данные из источника энтропии смешиваются для формирования случайного значения, которое встраивается в энтропийный пул, или, в качестве альтернативы, сами данные из источника энтропии могут быть встроены в энтропийный пул. Встраивание данных в энтропийный пул может быть выполнено, например, посредством соединения данных в энтропийный пул, вставкой по меньшей мере части данных в одно или более мест энтропийного пула и так далее.
Гостевая операционная система 102 получает данные из одного или более источников энтропии и встраивает полученные данные в энтропийный пул 110. Гостевая операционная система 102 получает данные на основе компонентов 108. Соответственно, энтропийный пул 110 основан на аппаратных источниках энтропии.
Энтропийный пул 136 включен в гостевую операционную систему 132, которая выполняется на виртуальной машине. Модуль 120 управления виртуальной машиной осуществляет доступ к энтропийному пулу 110 и делает по меньшей мере часть данных из энтропийного пула 110 доступными энтропийному пулу 136. Данные из энтропийного пула 110 могут быть сделаны доступными энтропийному пулу 106 множеством различных способов, как более подробно обсуждается ниже. Таким образом, даже хотя энтропийный пул 136 является частью гостевой операционной системы на виртуальной машине, энтропийный пул 136 все еще основан на аппаратных источниках энтропии.
В одном или более вариантах осуществления гостевая операционная система 102 предоставляет данные из энтропийного пула 110 гостевой операционной системы 132 через виртуализированный компонент 122. Когда гостевая операционная система 132 загружается или иным образом начинает исполняться, гостевая операционная система 102 получает данные из энтропийного пула 110. Эти данные, полученные из энтропийного пула 110, сохраняются в виртуализированном компоненте 122, например, посредством отображения данных в пространстве памяти виртуализированного компонента 122. В свою очередь, гостевая операционная система 132 осуществляет доступ к виртуализированному компоненту 122 и использует его в качестве (или в дополнение к) энтропийного пула 136. Соответственно, гостевая операционная система 132 имеет энтропийный пул 136, основанный на аппаратных источниках энтропии. Количество данных из энтропийного пула 110, которое предоставляется главной операционной системой 102, может варьироваться. Например, количество данных из энтропийного пула 110, которое предоставляется главной операционной системой 102, может являться предопределенным количеством битов, предопределенной долей величины энтропийного пула 110, всеми данными энтропийного пула 110 и так далее.
В одном или более вариантах осуществления виртуализированный компонент 122, в котором хранятся данные из энтропийного пула 110, является таблицей BIOS (базовой системы ввода/вывода), к которой осуществляется доступ гостевой операционной системой 132. Гостевая операционная система 102 отображает данные из энтропийного пула 110 в конкретное пространство памяти диспетчера 104 виртуальных машин; это пространство памяти является пространством памяти, в котором хранится таблица BIOS, которую использует гостевая операционная система 132. Соответственно, в дополнение к данным, типично включаемым в таблицу BIOS, энтропийные данные из энтропийного пула также включаются в таблицу BIOS. Стоит понимать, однако, что использование таблицы BIOS является лишь примером, и что данные из энтропийного пула 110 могут храниться во множестве различных виртуализированных компонентов. Пространство памяти виртуализированного компонента 122, в котором хранятся данные из энтропийного пула 110, типично является частью виртуализированного компонента 122, который иным образом не используется и который не требуется виртуализированному компоненту 122 или гостевой операционной системе 132 для правильного функционирования. Например, часть таблицы BIOS, которая не важна для гостевой операционной системы 132 для правильного функционирования, может использоваться как часть таблицы BIOS, в которой хранятся данные из энтропийного пула 110.
Гостевая операционная система 102 продолжает собирать энтропийные данные, основанные на компонентах 108, и добавляет энтропийные данные к энтропийному пулу 110. Это собирание энтропийных данных главной операционной системой 102 продолжается независимо от собирания и/или использования энтропийных данных гостевой операционной системой 132.
Вдобавок к или в качестве альтернативы, вместо предоставления данных из энтропийного пула 110 гостевой операционной системе 132, когда осуществляется начальная загрузка гостевой операционной системы 132, данные из энтропийного пула 110 могут предоставляться гостевой операционной системе 132 во время исполнения гостевой операционной системы 132. В таких ситуациях модуль 120 управления виртуальной машиной поддерживает интерфейс связи между гостевой операционной системой 132 и главной операционной системой 102, позволяя данным из энтропийного пула 110 быть предоставленными энтропийному пулу 136. Это позволяет данным в энтропийном пуле 136 обновляться на основе аппаратных источников энтропии после того, как операционная система 132 загружается.
В одном или более вариантах осуществления гостевая операционная система 132 требует дополнительной энтропии, когда требуется. Гостевая операционная система 132 может определять, когда требуется дополнительная энтропия, множеством различных способов, например, через регулярные или нерегулярные интервалы, в ответ на определение того, что количество доступных данных в энтропийном пуле 136 падает ниже порогового значения, и так далее. Когда требуется дополнительная энтропия, гостевая операционная система 132 отправляет запрос главной операционной системе 102 (посредством диспетчера 104 виртуальных машин) для дополнительной энтропии. В ответ на такой запрос главная операционная система 102 возвращает дополнительные данные из энтропийного пула 110. Количество данных из энтропийного пула 110, которое возвращается, может варьироваться. Например, количество данных из энтропийного пула 110, которое возвращается, может являться предопределенным количеством битов, количеством битов, запрашиваемых гостевой операционной системой 132, всеми данными энтропийного пула 110 и так далее. В других вариантах осуществления главная операционная система 102 отправляет данные гостевой операционной системе 132 (посредством диспетчера 104 виртуальных машин) через регулярные или нерегулярные интервалы. Это определение времени того, когда главная операционная система 102 отправляет энтропию, может варьироваться, например, происходить по предопределенному расписанию (например, каждые десять минут), в ответ на содержание в энтропийном пуле 110 порогового значения количества данных, и так далее. Данные, отправленные гостевой операционной системе 132, сохраняются в энтропийном пуле, делая данные доступными генератору 134 случайных чисел, когда требуется, без отправки запроса гостевой операционной системой 132 для дополнительной энтропии главной операционной системе 102.
Данные в энтропийном пуле 136 могут полностью получаться из энтропийного пула 110 или, в качестве альтернативы, также получаться из других источников энтропии. Например, один или более виртуализированных компонентов 122 могут использоваться гостевой операционной системой 132 в качестве источников энтропии с данными, полученными из таких источников энтропии, встраиваемыми в энтропийный пул 136.
Фиг. 2 - блок-схема последовательности операций, иллюстрирующая примерный процесс 200 для получения и предоставления энтропии для виртуальной машины в соответствии с одним или более вариантами осуществления. Процесс 200 может быть реализован в программном обеспечении, микропрограммном обеспечении, аппаратном обеспечении или их комбинации. Действия процесса 200, проиллюстрированные на левой стороне фиг. 2, выполняются главной операционной системой вычислительного устройства, такой как главная операционная система 102 фиг. 1. Действия процесса 200, проиллюстрированные на правой стороне фиг. 2, выполняются виртуальной машиной вычислительного устройства, такой как гостевая операционная система 132 фиг. 1. Процесс 200 показан как набор действий и не ограничивается порядком, показанным для выполнения операций различных действий. Процесс 200 является примерным процессом для получения и предоставления энтропии виртуальной машине; дополнительные обсуждения получения и предоставления энтропии виртуальной машине включены в материалы настоящей заявки со ссылкой на разные фигуры.
В процессе 200 главная операционная система собирает энтропийные данные, основанные на компонентах аппаратного обеспечения (действие 202). Эти энтропийные данные могут собираться из множества различных источников энтропии, как обсуждалось выше.
Энтропийный пул главной операционной системы обновляется на основе собранных энтропийных данных (действие 204). Собранные энтропийные данные могут быть встроены в энтропийный пул главной операционной системой множеством различных способов, как обсуждалось выше.
Действия 202 и 204 могут повторяться множество раз с главной операционной системой, постоянно собирающей новые энтропийные данные и обновляющей энтропийный пул главной операционной системы на основе этих новых энтропийных данных. Это собирание и обновление в действиях 202 и 204 может продолжаться независимо от того, осуществляет ли гостевая операционная система доступ или использует энтропийный пул гостевой операционной системы.
Главная операционная система предоставляет данные из энтропийного пула главной операционной системы гостевой операционной системе (действие 206). Данные из энтропийного пула могут предоставляться гостевой операционной системе, когда операционная система загружается и/или в другие моменты времени, в то время как гостевая операционная система исполняется, как обсуждалось выше.
Гостевая операционная система генерирует энтропийный пул гостевой операционной системы на основе, по меньшей мере частично, энтропийного пула главной операционной системы (действие 208). Данные из энтропийного пула главной операционной системы, предоставленные главной операционной системой в действии 206, могут использоваться в качестве или в дополнение к энтропийному пулу гостевой операционной системы.
Гостевая операционная система осуществляет доступ к энтропийному пулу гостевой операционной системы (действие 210), который основан, по меньшей мере частично, на энтропийном пуле, обновленном главной операционной системой в действии 204. Энтропийный пул также может по желанию включать в себя данные, полученные гостевой операционной системой из других источников энтропии.
Гостевая операционная система использует энтропийный пул гостевой операционной системы в качестве основы для генерации случайных чисел (действие 212). Гостевая операционная система также может использовать энтропийный пул гостевой операционной системы для других операций и/или для получения значений, где требуется энтропия, отличная от генерации случайных чисел.
Стоит отметить, что действия 206 и 208 могут повторяться множество раз во время выполнения гостевой операционной системы, позволяя энтропийному пулу гостевой операционной системы многократно обновляться новыми энтропийными данными.
Возвращаясь к фиг. 1, могут возникнуть ситуации, в которых виртуальная машина может копироваться. Клонирование виртуальной машины соответствует дублированию виртуальной машины, включая любые приложения, исполняемые на виртуальной машине, также как и данные, описывающие текущее состояние виртуальной машины (например, различные настройки гостевой операционной системы). Это дублирование в результате дает две идентичные копии виртуальной машины. Клонирование может быть выполнено в различные моменты времени, например, когда виртуальная машина бездействует (не исполняется) или когда виртуальная машина исполняется. Клонирование также может использоваться, чтобы сохранить копию виртуальной машины, упоминаемую как моментальная копия, позволяя вычислительному устройству 100 вернуться к этим сохраненным настройкам. Клонирование может быть выполнено в ответ на запросы от пользователя и/или от других компонентов или модулей на вычислительном устройстве 100.
Обеспечение возможности клонирования виртуальных машин, однако, может привести к проблемам с энтропийным пулом 136. Могут возникнуть ситуации, в которых после клонирования две виртуальные машины имеют одинаковый энтропийный пул, что может привести к уменьшенной степени случайности или представить предсказуемость случайных чисел из-за повторного использования чисел, генерируемых генератором 134 случайных чисел. В одном или более вариантах осуществления последовательный счетчик используется для разграничения различных виртуальных машин, как более подробно обсуждается ниже.
Фиг. 3 является структурной схемой, иллюстрирующей примерную гостевую операционную систему 300, реализующую энтропийные пулы для виртуальных машин в соответствии с одним или более вариантами осуществления. Гостевая операционная система 300 может быть, например, гостевой операционной системой 132 по фиг. 1. Гостевая операционная система 300 исполняется как виртуальная машина на виртуализированной системе аппаратного обеспечения, аналогично гостевой операционной системе 132 по фиг. 1.
Гостевая операционная система 300 включает в себя генератор 302 случайных чисел, энтропийный пул 304, последовательный счетчик 306, модуль 308 управления последовательностью и модуль 310 пометки значений. Генератор 302 случайных чисел генерирует случайные числа, основанные на энтропийном пуле 304, аналогично генератору 134 случайных чисел и энтропийному пулу 136 фиг. 1.
Последовательный счетчик 306 является значением счетчика, который отличает гостевую операционную систему 300 от других гостевых операционных систем, получаемых в результате клонирования в той же ветке дерева происхождения, как и гостевая операционная система 300 (например, которые являются дочерними объектами или другими потомками операционной системы 300, или родителями или другими предками гостевой операционной системы 300). В одном или более вариантах осуществления последовательный счетчик 306 имеет числовое значение, хотя значения в других списках известного порядка также могут использоваться.
Когда гостевая операционная система клонируется, последовательный счетчик 306 одной из гостевых операционных систем прирастает, в то время как последовательный счетчик 306 другой гостевой операционной системы остается неизменным. Если одна из копий операционной системы продолжает исполняться после клонирования, тогда эта операционная система является операционной системой, последовательный счетчик которой сохраняет свое значение; в противном случае, последовательный счетчик любой копии операционной системы может прирасти. Например, если должна быть сделана мгновенная копия исполняемой гостевой операционной системы, тогда исполняемая гостевая операционная система сохраняет значение своего последовательного счетчика, в то время как значение последовательного счетчика сохраненной мгновенной копии прирастает (например, на 1). В качестве другого примера, если делается копия бездействующей гостевой операционной системы, тогда значение последовательного счетчика одной из двух копий гостевой операционной системы прирастает (например, на 1), в то время как другая копия сохраняет значение своего последовательного счетчика.
Последовательный счетчик 306 одной из гостевых операционных систем может прирастать множеством различных способов. В одном или более вариантах осуществления гостевая операционная система или другой компонент, управляющий копированием гостевой операционной системы, увеличивает последовательный счетчик 306 одной из гостевых операционных систем. В других вариантах осуществления одна из гостевых операционных систем увеличивает свой собственный последовательный счетчик 306. Например, гостевая операционная система или другой компонент, управляющий клонированием гостевой операционной системы, может устанавливать метку или другой указатель того, что гостевая операционная система была клонирована. Эта метка или другой указатель может обнаруживаться копией гостевой операционной системы в следующий раз, когда будет осуществляться ее начальная загрузка, предписывая гостевой операционной системе обновлять свой последовательный счетчик 306.
Модуль 308 управления последовательностью и модуль 310 пометки значения используют последовательный счетчик 306, чтобы убедиться, что случайность значений, генерируемых на основе энтропийного пула 304, не компрометируется из-за клонирования. Модуль 310 пометки значений получает текущее значение последовательного счетчика 306 каждый раз, когда генерируется значение на основе энтропийного пула 304. Примеры таких генерируемых значений включают в себя случайные числа, генерируемые генератором 302 случайных чисел, криптографические ключи, генерируемые на основе случайных чисел, и так далее. Каждый раз, когда генерируется значение на основе энтропийного пула 306, модуль 310 сохраняет с этим генерируемым значением текущее значение последовательного счетчика 306. Соответственно, с каждым генерируемым значением сохраняется связанное с ним указание значения последовательного счетчика, для которого он действителен.
Когда используется значение, генерируемое на основе энтропийного пула 304, модуль 308 управления последовательностью извлекает сохраненное значение последовательного счетчика для этого генерируемого значения. Сохраненное значение последовательного счетчика сравнивается с текущим значением последовательного счетчика 306. Если сохраненное значение последовательного счетчика совпадает с текущим значением последовательного счетчика 306, тогда может использоваться значение, генерируемое на основе энтропийного пула 304. Однако если сохраненное значение последовательного счетчика не совпадает (например, меньше) с текущим значением последовательного счетчика 306, тогда значение, генерируемое на основе энтропийного пула 304, не должно использоваться.
Если значение, генерируемое на основе энтропийного пула 304, не должно использоваться, тогда гостевой операционной системой 300 генерируется новое значение. Дополнительно, энтропийный пул 304 очищается и повторно генерируется (например, на основе энтропийного пула главной операционной системы, как обсуждалось выше). Стоит отметить, что энтропийный пул 304 по желанию может очищаться и повторно генерироваться только один раз для гостевой операционной системы 300 для конкретного значения последовательного счетчика. Например, если осуществляется попытка использования первого значения, генерируемого на основе энтропийного пула 304, но оно не используется из-за того, что сохраненное значение последовательного счетчика меньше, чем текущее значение последовательного счетчика 306, тогда энтропийный пул 304 очищается и повторно генерируется. Если осуществляется попытка использования второго значения, генерируемого на основе энтропийного пула 304, но оно не используется из-за того, что сохраненное значение последовательного счетчика меньше, чем текущее значение последовательного счетчика 306, тогда энтропийный пул 304 не должен очищаться и снова повторно генерироваться, если текущее значение последовательного счетчика 306, когда осуществляется попытка использования второго значения, совпадает с текущим значением последовательного счетчика 306, когда осуществляется попытка использования первого значения, так как энтропийный пул 304 уже был очищен и повторно сгенерирован. Например, предположим, что случайное число было сгенерировано гостевой операционной системой, чтобы быть использованным в качестве шифровального ключа для предоставления защищенного канала связи. Дополнительно предположим, что гостевая операционная система имеет значение последовательного счетчика, равное 3, в момент времени, когда генерируется шифровальный ключ. Когда генерируется шифровальный ключ, модуль 310 пометки значения сохраняет запись о том, что значение последовательного счетчика для шифровального ключа равно 3.
Продолжая с этим примером, предположим, что мгновенная копия производится для сохранения копии гостевой операционной системы. Значение последовательного счетчика выполняемой гостевой операционной системы сохраняется равным 3, но значение последовательного счетчика мгновенной копии гостевой операционной системы сохраняется равным увеличивается до 4. Если выполняемая гостевая операционная система должна попытаться продолжить использование шифровального ключа для предоставления защищенного канала связи, тогда значение последовательного счетчика выполняемой гостевой операционной системы (которое равно 3) совпадает со значением последовательного счетчика, записанным для шифровального ключа, поэтому шифровальный ключ может использоваться выполняемой гостевой операционной системой. Однако если мгновенная копия гостевой операционной системы должна попытаться запустить и использовать шифровальный ключ для предоставления защищенного канала связи, тогда значение последовательного счетчика, записанное для шифровального ключа (которое равно 3), меньше, чем значение последовательного счетчика мгновенной копии выполняемой гостевой операционной системы (которое равно 4), поэтому шифровальный ключ не используется.
Стоит отметить, однако, что когда значение, генерируемое на основе энтропийного пула 304, используется для шифрования и дешифрования, запись сгенерированного значения сохраняется, даже если значение последовательного счетчика, записанное для шифровального ключа, меньше, чем значение последовательного счетчика мгновенной копии выполняемой гостевой операционной системы. Путем сохранения записи сгенерированного значения сгенерированное значение все еще может использоваться для дешифрования данных, которые были зашифрованы на основе сгенерированного значения.
Фиг. 4 - блок-схема последовательности операций, иллюстрирующая примерный процесс 400 для гостевой операционной системы, использующей последовательные счетчики, в соответствии с одним или более вариантов осуществления. Процесс 400 выполняется гостевой операционной системой, такой как гостевая операционная система 300 фиг. 3, и может быть