Устройство виртуальной машины, имеющее управляемую ключом обфускацию, и способ

Иллюстрации

Показать все

Изобретение относится к области компьютерной техники и, в частности, к устройству виртуальной машины, выполняющему принятую последовательность инструкций. Технический результат заключается в повышении уровня конфиденциальности и безопасности в выполнении операционных процедур в виртуальных машинах, встроенных в электронное устройство. Технический результат достигается за счет принятия закодированной инструкции, причем закодированная инструкция получается посредством кодирования открытой инструкции с помощью кодирования кода, выбора и активации соответствующей операционной процедуры из множества операционных процедур, причем соответствующая операционная процедура выполнена с возможностью выполнять открытую инструкцию, соответствующую закодированной инструкции, и поиска закодированной инструкции, чтобы выбирать соответствующую операционную процедуру. 4 н. и 10 з.п. ф-лы, 14 ил.

Реферат

Область техники, к которой относится изобретение

Изобретение относится к устройству виртуальной машины, выполненному с возможностью выполнять принятую последовательность инструкций.

Изобретение также относится к способу выполнения принятой последовательности инструкций.

Уровень техники изобретения

В последние годы облачные вычисления стали новой моделью потребления и доставки, стимулируемой потребительскими Интернет-услугами. Облачные вычисления - это модель обслуживания для IT-обеспечения, зачастую базирующаяся на основе технологий виртуализации и распределенных вычислений и типично выполняемая по запросу. Для введения в облачные вычисления см. ENISA, "Cloud computing benefits, risks and recommendations for information security", Европейское агентство по сетевой и информационной безопасности (ENISA), ноябрь 2009 г.

Преимущества архитектур на основе облачных вычислений включают в себя высокоабстрагированные ресурсы, почти мгновенную масштабируемость и гибкость, почти мгновенное обеспечение, совместно используемые ресурсы (например, аппаратные средства, база данных, память), "услугу по запросу" обычно с системой расчетов типа "оплата по факту потребления", программное управление, например, через API веб-службы. С облачными вычислениями компании могут мгновенно масштабироваться до емкостей вычисления или хранения по запросу без необходимости инвестиций в новую инфраструктуру.

Облачные вычисления поддерживают многоуровневую концепцию инфраструктуры, объединяя три модели обслуживания, а именно программное обеспечение как услуга (SaaS), платформа как услуга (PaaS) и инфраструктура как услуга (IaaS).

Облачная инфраструктура как услуга (IaaS) предоставляет виртуальные машины и другие абстрактные аппаратные средства и операционные системы, которые могут управляться через API услуги. Функциональной возможностью, предоставляемой подписчику, является обработка обеспечения, хранилище, сети и другие фундаментальные вычислительные ресурсы, где потребитель способен развертывать и запускать произвольное программное обеспечение, которое может включать в себя операционные системы и приложения. IaaS легче понять, если мы обратимся к нему как к аппаратным средствам в качестве услуги. Мы категоризируем аппаратные средства как услугу на (i) вычисление как услугу (CaaS), которая предлагает виртуальную машину на основе серверов; и (ii) данные как услугу (DaaS), которая предлагает пространство для хранения данных.

Облачная платформа как услуга (PaaS) предоставляет возможность потребителям разрабатывать новые приложения с помощью множества API, разворачиваемых и конфигурируемых удаленно. Предложенные платформы включают в себя инструментальные средства разработки, управление конфигурациями и платформы развертывания. Функциональной возможностью, предоставляемой потребителю, является развертывание в облачной инфраструктуре созданных клиентом или полученных приложений, созданных с помощью языков программирования и инструментальных средств, поддерживаемых поставщиком услуги. PaaS-модель типично работает на один уровень выше IaaS. OS-окружение и среда разработки приложений уже предложены, в то время как PaaS работает с прикладным окружением.

Программное обеспечение как услуга (SaaS) - это программное обеспечение, предоставленное потребителю, которое предоставляет возможность использования приложений поставщика услуги, запускаемых в облачной инфраструктуре. Приложения доступны с различных клиентских устройств через интерфейс тонкого клиента, такой как веб-браузер. Потребитель не руководит или не управляет лежащей в основе облачной инфраструктурой, включающей в себя сеть, серверы, операционные системы, хранилище или даже отдельные возможности приложения, с возможным исключением для ограниченных, характерных для пользователя настроек конфигурации приложения.

Одним признаком облачных вычислений является возможность виртуализировать и совместно использовать ресурсы между различными приложениями, например, максимизировать возврат инвестиций на использование машины. В отличие от невиртуализированного окружения, где каждое приложение работает на своих собственных серверах, виртуализация предоставляет возможность виртуализировать одну хост-машину, чтобы поддерживать множественные независимые операционные системы и приложения. Это может давать в результате экономию затрат, например, подписчика с точки зрения затрат на приобретение и техническое обслуживание аппаратных средств.

Виртуализация - это имитация программного обеспечения и/или аппаратных средств, на основе которых работает другое программное обеспечение. Виртуальная машина, называемая VM, является имитируемым окружением, созданным посредством виртуализации. Виртуальные машины управляются посредством монитора виртуальных машин (VMM), также называемого "гипервизором". Гипервизор - это компонент виртуализации, который управляет гостевыми OS на хост-машине и управляет потоком инструкций между гостевыми OS и физическими аппаратными средствами.

Облачные вычисления - это новая модель предоставления вычислительных ресурсов, таких как сети, серверы, хранилище или приложения системы программного обеспечения. Облачные вычисления используются все больше и больше. Однако определенные рыночные секторы, которые имеют дело с конфиденциальными данными, такие как здравоохранение, испытывают сомнение вследствие вопросов конфиденциальности и безопасности. Хранение конфиденциальных данных и/или приложений в облаке поднимает правовые, деловые и этические вопросы. Не только конфиденциальность данных, но также и конфиденциальность программного обеспечения имеет значение. Например, если приложение, сохраненное в общественном облаке широкого потребления, выполняется с помощью стандартной виртуальной машины (VM), данные могут быть раскрыты, и выполнение приложения может отслеживаться.

Сущность изобретения

Преимущества облачных вычислений зачастую страдают от опасений относительно доверия, конфиденциальности и безопасности. Особенно это актуально для области здравоохранения, которое имеет дело с очень конфиденциальными данными о здоровье, и где ответственность играет очень важную роль. Нарушения конфиденциальности в облаке, которые подразумевают раскрытие множества записей данных пациентов, являются критичными для многих компаний и медицинских учреждений. Простое шифрование данных и хранение зашифрованных данных в облаке создает множество ограничений, поскольку ключи также должны быть сохранены в облаке, чтобы предоставлять возможность обработки данных. Это создает потенциально эксплуатируемую уязвимость. Кроме того, перемещая приложения, которые выполняют обработку данных, в облако, многие компании беспокоятся, что их алгоритмы и способы будут раскрыты и что они потеряют отличительные признаки и конкурентное преимущество (возьмем алгоритмы логического вывода и знания для "Поддержки принятия клинических решений" (CDS) в качестве примера). С учетом вышеупомянутых проблем многие компании и органы государственной власти все еще не решаются использовать преимущества облачных вычислений, ожидая решений, которые повысят доверие, конфиденциальность и безопасность облачных решений.

Полезное устройство виртуальной машины содержит множество операционных процедур, каждая из которых выполнена с возможностью выполнять конкретную инструкцию, и селектор, выполненный с возможностью принимать закодированную инструкцию. Закодированная инструкция была получена посредством кодирования открытой инструкции с помощью кодирования кода. Селектор выполнен с возможностью выбирать и активировать соответствующую операционную процедуру из множества операционных процедур. Соответствующая операционная процедура выполнена с возможностью выполнять открытую инструкцию, соответствующую закодированной инструкции. Селектор содержит средство поиска для поиска закодированной инструкции, чтобы выбирать соответствующую операционную процедуру.

"Открытый" означает "открытый текст", т.е. незакодированный или незашифрованный текст. Например, открытый код является незакодированным/незашифрованным кодом.

Типично селектор будет выполнен с возможностью принимать последовательность зашифрованных инструкций; последовательность зашифрованных инструкций получается посредством шифрования последовательности открытых инструкций с помощью кодирования кода. Селектор выполнен с возможностью затем итерационно выбирать следующую зашифрованную инструкцию из последовательности зашифрованных инструкций и активировать соответствующую операционную процедуру из множества операционных процедур, причем соответствующая операционная процедура выполнена с возможностью выполнять открытую инструкцию, соответствующую выбранной следующей зашифрованной инструкции.

В известном способе виртуализации данные и выполнение виртуальной машины в облаке наблюдаются как внешними оппонентами, так и внутренними злоумышленниками, например, поставщиком облачной услуги. Эта возможность наблюдения и раскрытие информации процесса вычисления может быть проблематичной, если некто хочет гарантировать:

1. Конфиденциальность данных в облаке (например, данных о здоровье пациента, выгруженных в облако).

2. Конфиденциальное выполнение виртуализированных программ или операционных систем, чтобы гарантировать защиту интеллектуальной собственности алгоритмов в программах.

3. Привязку данных к определенной VM и приложению, так что только конкретные VM и приложения могут дешифровать данные, сохраненные в облаке.

Это изобретение направлено на техническое осуществление конфиденциальности и невозможности наблюдения данных, приложений и виртуальных машин, работающих в облаке, а также привязки данных к виртуальным машинам и приложениям.

Данные и код привязываются к VM таким образом, что никакое или ограниченное знание может отслеживаться из входных данных и кода. Также выходные данные могут быть привязаны к VM, так что знание, извлекаемое из выходных данных VM, также ограничено.

Раскрытие этого изобретения предоставляет возможность пользователям облака значительно уменьшать риски нарушения конфиденциальности в облаке посредством зашифрованного хранения данных и/или кода приложения в облаке. Ключи шифрования защищаются в облаке, скрывающем и привязывающем их к виртуальной машине и приложению, работающему поверх него. Входные данные, семантика и выходные данные приложения тяжело (трудно) восстановить. Восстановление семантики программы, как правило, является трудоемкой задачей. Для VM, связанной через кодирование и перекодирование с приложением, т.е. без доступа к семантике инструкции, на это могут потребоваться годы.

Изобретение и многие из предпочтительных вариантов осуществления используют кодирования (например, кодирование кода, кодирование входных данных, кодирование выходных данных, внутренние кодирования и т.д.). Кодирование - это биекция (также известная как биективная функция или соответствие один к одному), которая отображает диапазон целых чисел в том же диапазоне. Диапазон типично начинается с 0 и типично возрастает до степени двойки минус 1. Целые числа могут представлять данные или инструкции. Противоположность кодирования обозначается как декодирование.

Кодирования включают в себя шифрования, например, с помощью конкретного, типично фиксированного ключа. Например, кодирование может быть реализацией шифра, например, блочного шифра. Предпочтительно используется реализация шифра типа "белый ящик", используемого в качестве кодирования.

Важным свойством кодирования является то, что, если кодирование составляется с помощью таблицы T, они как единое целое объединяются вместе в новую таблицу. Если кодирование обозначено как O, новая таблица должна быть одной из (O° T, T° O-1). Это же справедливо для сети таблиц, обозначенной как WB, которая становится одной из (WB[Ek]° T, T° WB[DK]).

Преимущественно кодирование реализуется как таблица. Преимуществом использования таблицы является то, что, если должна быть выполнена следующая операция, которая также выражается как таблица, тогда таблицы могут быть объединены в новую таблицу, полученную посредством применения одной таблицы после другой.

Кодирования также могут быть выражены как шифрования для конкретного ключа. Это отчасти упрощает реализацию. Например, кодирование кода может быть получено как шифрование с помощью ключа шифрования.

Средство таблицы поиска предпочтительно является таблицей поиска. Однако такая таблица может быть реализована в различных формах; например, как длинная последовательность операторов если/тогда/иначе или как оператор выбора с множеством ветвей.

В варианте осуществления средство поиска принимает закодированную инструкцию в качестве индекса и создает указатель на правильную соответствующую процедуру. Указатель на соответствующую операционную процедуру может быть использован, чтобы активировать соответствующую операцию.

В дополнительном варианте осуществления также непосредственные данные создаются для использования соответствующей процедурой.

Средство поиска может быть таблицей поиска, например, списком элементов, которые должны быть найдены отсортированными согласно индексу. В вышеописанном случае таблица поиска может быть списком указателей на правильную соответствующую процедуру, отсортированным согласно закодированной инструкции. Таким образом, таблице нужен только один столбец. Если некоторые закодированные инструкции не используются, они могут быть представлены с помощью фиктивного указателя, например, все нулевые.

Средство поиска может также быть таблицей с двумя (или более) столбцами, например, первый содержит индекс, например, закодированную инструкцию, второй - отыскиваемый объект, например, соответствующий указатель.

В варианте осуществления таблица поиска может быть получена посредством переупорядочивания таблицы поиска обычного устройства виртуальной машины, которая выполнена с возможностью принимать открытые инструкции. Примечательно, что явное дешифрование или операция декодирования избегаются посредством комбинирования декодирования закодированных инструкций с синтаксическим анализом инструкций, чтобы получать правильную операцию.

Закодированная инструкция может быть получена только посредством кодирования инструкции. Это дает небольшое средство поиска. Например, если существует 256 возможных инструкций, средство поиска может быть реализовано как таблица поиска размером в 256 раз больше размера указателя.

Однако закодированная инструкция может также быть получена посредством кодирования открытой инструкции вместе с непосредственными данными. Это даст более крупное средство поиска. Например, если непосредственные данные являются одним байтом, тогда средство поиска может быть реализовано как таблица поиска размером в 256*256 раз больше размера байта указателя +1.

Хотя это укрупнит средство поиска, величина обфускации значительно увеличивается. Больше не будет фиксированного соотношения между инструкциями и конкретными строками в таблице.

Непосредственные данные - это данные, которые включаются в поток кода, на который действует инструкция, и включают в себя константы, параметры или операнды, на которые операция, которой соответствует инструкция, должна действовать.

Непосредственные данные могут включать в себя одиночный элемент данных, например, для операции отрицания. Непосредственные данные могут включать в себя множественные элементы данных, например, два элемента данных, например, для сложения.

В качестве примера закодированная инструкция была получена посредством кодирования открытой инструкции вместе с непосредственными данными в одном блоке блочного шифра.

Отметим, что закодированная инструкция может также быть получена посредством кодирования первой части непосредственных данных вместе с инструкцией без второй части непосредственных данных. Это будет сдерживать размер таблицы. Вторая часть может быть закодирована с помощью входного кодирования. Входное кодирование может быть перекодировано во внутреннее кодирование, но может также оставаться в инструкции, в таком случае операционная процедура может быть приспособлена, чтобы получать вторую часть, закодированную с помощью входного кодирования. Особенно, если непосредственные данные являются частью канала кода, т.е. потока кода или кодовой последовательности, тогда этот последний вариант предпочтителен, поскольку он избегает необходимости проводить синтаксический анализ кода.

Непосредственные данные могли бы быть закодированы с помощью входного кодирования перед кодированием с помощью кодирования кода вместе с открытой инструкцией.

В варианте осуществления устройство виртуальной машины содержит входной перекодировщик, выполненный с возможностью принимать дополнительные данные для использования операционной процедурой, дополнительные данные кодируются с помощью входного кодирования, входной перекодировщик выполнен с возможностью декодировать данные с помощью входного декодирования и кодировать с помощью внутреннего кодирования. Например, входной перекодировщик может содержать средство поиска для поиска закодированных дополнительных данных и для того, чтобы находить в таблице перекодированные дополнительные данные. Например, код может представлять собственный алгоритм для анализа медицинских данных, например, изображений; дополнительные данные могут представлять сами медицинские данные.

Входной перекодировщик может быть выполнен с возможностью принимать операнды для использования операционной процедурой. Входной перекодировщик может содержать дешифратор, выполненный с возможностью выполнять дешифрование с помощью входного ключа дешифрования. Дешифратор может быть дешифратором типа "белый ящик". Результат входного перекодирования типично сохраняется в памяти устройства виртуальной машины.

В варианте осуществления устройство виртуальной машины содержит выходной перекодировщик, выполненный с возможностью принимать результирующие данные, созданные операционной процедурой. Выходной перекодировщик выполнен с возможностью перекодировать результирующие данные, закодированные с помощью внутреннего декодирования, в результирующие данные, закодированные с помощью выходного кодирования.

Перекодировщики, такие как входные перекодировщики, выходные перекодировщики, внутренние перекодировщики и т.д., могут быть получены посредством применения сначала операции декодирования, за которой следует операция кодирования. Отметим, что эти две операции могут быть объединены в одну операцию, например, одиночное средство поиска, такое как поисковая таблица.

Выходной перекодировщик может содержать шифратор, выполненный с возможностью осуществлять шифрование с помощью выходного ключа шифрования. Шифратор может быть шифратором типа "белый ящик".

Риски раскрытия данных и алгоритмических IP уменьшаются за счет объединения кодирований с (необязательной) функцией ввода VM, декодером VM и/или (необязательной) функцией вывода VM. Данные и приложения шифруются в облаке, в то время как ключи неизвестны (в случае, когда кодирование соответствует шифрованиям). В случае обфускации, например, через случайную биекцию, атакующий не знает, что представляет элемент "k" данных, поскольку "k" является всего лишь k-ым элементом неизвестного ему набора запутанного кода.

В варианте осуществления множество операционных процедур и/или, в частности, соответствующая операционная процедура выполнены с возможностью принимать данные, закодированные с помощью первого кодирования, и создавать результат, закодированный с помощью второго внутреннего кодирования; закодированный результат получается посредством:

- декодирования закодированных данных с помощью первого декодирования,

- выполнения открытой инструкции, соответствующей закодированной инструкции, по декодированным закодированным данным, чтобы получать результат,

- кодирования результата с помощью второго внутреннего кодирования.

Предпочтительно этапы декодирования, выполнения и кодирования объединяются в одну таблицу или сеть таблиц.

Первое кодирование может быть внутренним кодированием. Второе внутреннее кодирование может быть тем же кодированием, что и первое кодирование. Первое кодирование может быть входным кодированием.

В варианте осуществления устройство виртуальной машины содержит одну или более инструкций перекодирования. Например, они могут быть композициями таблиц {O-1k и O1}, {Ok и O-11} или сетями таблиц {Wb[Ek] и Wb[D1], {Wb[E1] и Wb[Dk]}.

Данные, закодированные с помощью первого кодирования, являются любыми из следующих: закодированные непосредственные данные, данные, закодированные с помощью внутреннего кодирования, полученные из памяти виртуальной машины, данные, закодированные с помощью внутреннего кодирования, полученные из регистра устройства виртуальной машины, принятые данные, закодированные с помощью входного кодирования.

Соответствующая операционная процедура может быть реализована как средство поиска, например, таблица поиска или как сеть таблиц. Средство поиска выполнено с возможностью поиска закодированных данных, чтобы получать результат. Такая таблица может быть составлена посредством перечисления результатов операции для каждых возможных входных данных.

Если операцией является безусловный переход, таблица поиска может не требоваться. Отметим, что кодирование кода и/или данных может быть преимущественно объединено с кодированием адресного пространства. Необходимо только кодирование адресов и соответствующее переупорядочивание кода. Это дает результат в том, что код, составляющий операцию, будет рассеян по коду. Операция условного перехода может включать в себя средство поиска, получающее в качестве входных данных операнд, к которому относится условие, и один выходной бит, который указывает, должен или нет быть выполнен переход (или таблицу целей, предоставленных посредством входных данных).

Если операция действует на данные, такие как непосредственные данные или данные из памяти/регистров, таблица может быть создана посредством выполнения операции для всех таких данных. Таблице может предшествовать таблица декодирования для удаления кодирования непосредственных данных. За таблицей может следовать кодирование, например, внутреннее кодирование.

Если операция требует перемещения или записи данных, такая операция может быть выполнена как обычно, принимая во внимание кодирование адреса, если такое используется.

Открытые инструкции могут соответствовать Java-байт-коду. Также может быть использована "java cup".

Дополнительным аспектом изобретения является кодировщик инструкций, выполненный с возможностью кодировать инструкции с помощью кодирования кода и необязательно кодировать данные с помощью входного кодирования. Кодировщик инструкций может быть частью компилятора или предпочтительно компоновщика, например, как часть этапа пост-компоновки. Отметим, что этап пост-компоновки может использовать, по меньшей мере, два ключа: один для непосредственных данных и один для шифрования инструкций.

Например, промежуточные данные инструкций могут быть зашифрованы с помощью ключа входных данных или ключей, после этого возникают инструкции, содержащие теперь зашифрованные непосредственные данные, которые зашифрованы посредством ключа инструкции.

Дополнительным аспектом изобретения является распределенная система выполнения, содержащая кодировщик инструкций и устройство виртуальной машины.

Дополнительный аспект изобретения касается способа виртуальной машины. Способ виртуальной машины содержит прием закодированной инструкции, закодированная инструкция получается посредством кодирования открытой инструкции с помощью кодирования кода, поиск закодированной инструкции, чтобы выбирать соответствующую операционную процедуру из множества операционных процедур, соответствующая операционная процедура выполнена с возможностью выполнять открытую инструкцию, соответствующую закодированной инструкции, и активацию соответствующей операционной процедуры.

В варианте осуществления способ содержит получение последовательности зашифрованных инструкций посредством кодирования каждой из последовательности открытых инструкций с помощью кодирования кода, например, шифрования каждой из последовательности открытых инструкций с помощью ключа шифрования кода.

Возможны несколько случаев использования облачных вычислений. Например, перемещение данных в облако уменьшает мощность аппаратных средств, в то же время сохраняя защиту конфиденциальности. Например, чувствительная к конфиденциальности информация, такая как данные о пациенте, может храниться в облаке. Чтобы избегать утечки конфиденциальных данных, вся обработка данных может выполняться в зашифрованной области, т.е. с помощью зашифрованных инструкций и данных. Предпочтительно шифруются как входные, так и выходные данные VM.

Распределенная система выполнения может также включать в себя приемник, чтобы принимать результаты от устройства виртуальной машины. Приемник может включать в себя выходной декодер, чтобы устранять выходное кодирование устройства виртуальной машины. Например, приемник может быть размещен в больнице, имеющей устройство виртуальной машины, чтобы обрабатывать медицинские данные.

Устройство виртуальной машины может быть встроено в электронное устройство, в частности, сервер. Устройство виртуальной машины может также быть встроено в мобильные устройства, например, мобильный телефон, телевизионную приставку, компьютер, планшетный компьютер и т.д.

Устройство виртуальной машины может быть встроено в маркер доступа. Маркер доступа содержит устройство виртуальной машины и выполнен с возможностью принимать: код, чтобы выполнять протокол запрос-ответ и запрос. Код кодируется с помощью кодирования кода, запрос - с помощью входного кодирования. Маркер доступа может, таким образом, быть реализован в программном обеспечении и работать в ненадежном окружении.

Способ согласно изобретению может быть реализован на компьютере как компьютерно-реализованный способ или в специализированных аппаратных средствах или в их комбинации. Исполняемый код для способа согласно изобретению может быть сохранен в компьютерном программном продукте. Примеры компьютерных программных продуктов включают в себя запоминающие устройства, оптические устройства хранения, интегральные схемы, серверы, онлайновое программное обеспечение и т.д. Предпочтительно компьютерный программный продукт содержит средство постоянного программного кода, сохраненное на компьютерно-читаемом носителе для выполнения способа согласно изобретению, когда упомянутый программный продукт исполняется на компьютере.

В предпочтительном варианте осуществления компьютерная программа содержит средство кода компьютерной программы, приспособленное, чтобы выполнять все этапы способа согласно изобретению, когда компьютерная программа запускается на компьютере. Предпочтительно компьютерная программа осуществлена на компьютерно-читаемом носителе.

Краткое описание чертежей

Изобретение объясняется более подробно посредством примера и со ссылкой на сопровождающие чертежи, на которых:

фиг. 1a - это блок-схема, иллюстрирующая виртуальную машину согласно изобретению,

фиг. 1b - это блок-схема, показывающая возможную реализацию операционной процедуры, в частности операционной процедуры 126,

фиг. 2 - это блок-схема, иллюстрирующая систему, использующую виртуальную машину согласно изобретению,

фиг. 3 - это блок-схема, иллюстрирующая шифр типа "белый ящик",

фиг. 4a, 4b, 4c, 4d и 4e иллюстрируют различные способы шифрования кода и/или данных,

фиг. 5a иллюстрирует вариант осуществления изобретения,

фиг. 5b иллюстрирует конструирование таблицы поиска для операции,

фиг. 6 - это блок-схема, иллюстрирующая шифрование кода, данных и дешифрование выходных данных,

фиг. 7 - это блок-схема, иллюстрирующая виртуальную машину согласно изобретению,

фиг. 8 - это блок-схема последовательности операций, иллюстрирующая способ согласно изобретению.

На всех чертежах похожие или соответствующие признаки указаны одинаковыми условными обозначениями.

Список условных обозначений
100 виртуальная машина
110 селектор
122, 124, 126 операционные процедуры
125a предварительный кодировщик
125b операция
125c посткодировщик
132 память
134 файл регистров
140 входной перекодировщик
160 выходной перекодировщик
210 канал кода
222, 224 пользовательское устройство
230 сервер
240 канал ввода
260 канал вывода
310 входная таблица
320 промежуточная таблица
330 выходная таблица
412 канал открытого кода
414 шифратор кода
422 открытый входной канал
424 входной шифратор
462 открытый выходной канал
464 выходной дешифратор
510 открытая инструкция
515, 516, 517 закодированная инструкция
520 открытые непосредственные данные
525, 526 закодированные непосредственные данные
521 дополнительные непосредственные данные
550 кодирование кода
570 входное кодирование
710, 720, 730, 740, 750, 760 таблица поиска
600 способ виртуальной машины
610 прием закодированной инструкции
620 поиск закодированной инструкции, чтобы выбирать соответствующую операционную процедуру из множества операционных процедур
630 активация соответствующей операционной процедуры

Подробное описание вариантов осуществления

В то время как это изобретение допускает вариант осуществления во многих различных формах, показываются на чертежах и будут описаны в данном документе в деталях один или более конкретных вариантов осуществления с пониманием того, что настоящее открытие должно быть рассмотрено как пример принципов изобретения, и не предназначено, чтобы ограничивать изобретение конкретными показанными и описанными вариантами осуществления.

Криптография типа "белый ящик"

Изобретение может использовать криптографию типа "белый ящик". Криптография типа "белый ящик" рассматривает угрозы в модели "белого ящика". Модель атаки типа "белый ящик" используется, чтобы анализировать алгоритмы, которые работают в ненадежной среде исполнения, т.е. окружении, в котором приложения подвержены атакам из платформы исполнения.

Можно различать три основных модели атаки, которые охватывают возможности атаки противника на криптосистемы. Они представляют следующие модели:

- Модель "черного ящика" гарантирует, что противник имеет доступ только к функциональности криптосистемы, и это представляет традиционную модель атаки.

- Модель "серого ящика" предоставляет возможность противнику использовать технологии криптоанализа побочного канала посредством функции утечки.

- Модель "белого ящика" предоставляет возможность противнику иметь полную видимость реализации программного обеспечения криптосистемы и полный контроль над платформой ее исполнения. Модель "белого ящика" может называться моделью наихудшего случая.

Модель атаки типа "белый ящик", следовательно, требует специальных предупредительных мер, чтобы отвечать этим условиям. Существуют реализации типа "белый ящик" для различных алгоритмов; они могут быть использованы в изобретении. В качестве примера для блочных шифров DES и AES - оба предназначены для шифрования и дешифрования, доступны реализации типа "белый ящик".

Недостатком существующей реализации типа "белый ящик" является то, что они подходят только для одной цели, шифрования или дешифрования, типично только для одного конкретного ключа. Изобретение предоставляет виртуальную машину, которая предоставляет возможность выполнения произвольного кода и все еще обеспечивает безопасность в модели атаки типа "белый ящик".

"Белый ящик" может быть использован в изобретении, например, любое из входного декодирования. Но шифр типа "белый ящик" и виртуальная машина согласно изобретению являются совершенно различными. Шифр типа "белый ящик" не может запускать код.

Шифрование типа "белый ящик" или дешифрование примитивно типично реализует шифр, такой как симметричный шифр. Предпочтительно используется реализация типа "белый ящик" для блочных шифров. Например, любое из входного перекодировщика (возможно одно или оба из входного декодирования, внутреннего кодирования), выходного перекодировщика (возможно одно или оба из внутреннего декодирования, выходного кодирования) или перекодирования инструкций может быть реализовано как или содержать шифрование или дешифрование типа "белый ящик".

Шифр типа "белый ящик" - это программная реализация, в которой создается экземпляр секретного ключа. Цель заключается в том, что результат шифра типа "белый ящик" является, по меньшей мере, таким же большим, что и у атаки типа "черный ящик" (например, атака перебором) на лежащий в основе шифр. Одним идеальным решением было бы реализовать шифр как одну большую таблицу поиска. Однако это неприменимо для практического блочного шифра. Стратегия "белого ящика", которая приближается к этому идеалу, была введена в документе "A White-Box DES Implementation for DRM Applications" С. Чоу, П. Эйзен, Г. Джонсон и П.С. ван Орскот, 2002 (42, 43), опубликованном в книге «Digital Rights Management of the Lecture Notes in Computer Science», 2003 г. Вычисления, в частности блочные шифры, могут быть реализованы как сеть таблиц поиска, расположенных в случайном порядке так, что ключевая информация распределена по всей сети. Каждый структурный блок может быть выполнен так, чтобы по внешнему виду быть независимым от ключа. Так что противник вынужден анализировать всю сеть для того, чтобы получать информацию секретного ключа. Обфускация сети таблиц возможна посредством добавления обфусцирующих преобразований к началу и к концу преобразований, выписанных в таблице. Таким образом, каждая индивидуальная таблица располагается в случайном порядке, в то время как объединение всех обфусцирующих преобразований отменяется.

Фиг. 3 иллюстрирует сеть таблиц. Большинство