УСТРОЙСТВО ВИРТУАЛЬНОЙ МАШИНЫ, ИМЕЮЩЕЕ УПРАВЛЯЕМУЮ КЛЮЧОМ ОБФУСКАЦИЮ, И СПОСОБ Российский патент 2017 года по МПК G06F21/62 G06F9/455 

Описание патента на изобретение RU2620712C2

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

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

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

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

В последние годы облачные вычисления стали новой моделью потребления и доставки, стимулируемой потребительскими Интернет-услугами. Облачные вычисления - это модель обслуживания для 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 иллюстрирует сеть таблиц. Большинство функций может быть выражено как сеть таблиц. Например, сеть таблиц может быть реализацией типа "белый ящик", например, для шифра. Показано 8 таблиц из множества таблиц. Таблица преобразует входное значение в выходное значение посредством табличного поиска входного значения. Показаны три из входных таблиц 310 для приема входных данных снаружи реализации типа "белый ящик". Показана одна из выходных таблиц 330. Выходные таблицы 330 вместе формируют выходные данные реализации типа "белый ящик", например, посредством последовательного соединения. Показаны четыре таблицы из промежуточных таблиц 320, которые принимают, по меньшей мере, одни входные данные из другой из таблиц и которые создают выходные данные для использования в качестве входных данных, по меньшей мере, для одной другой таблицы. Таблицы 310, 320 и 330 вместе формируют сеть. Шифр может быть блочным шифром; блочный шифр может быть выполнен с возможностью шифрования или дешифрования. Блочный шифр шифрует блочный шифр, например AES, для конкретного ключа; таблицы зависят от конкретного ключа.

Фиг. 1a - это блок-схема, иллюстрирующая виртуальную машину 100. Виртуальная машина 100 принимает код из канала 210 кода, входные данные из канала 240 ввода и создает выходные данные для канала 260 вывода. В этом описании каналы абстрагируются. Виртуальная машина 100 типично реализуется в программном обеспечении и запускается на компьютере (не показан).

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

Виртуальная машина 100 содержит селектор 110. Селектор 110 считывает операцию из последовательности операций, принятых из канала 210 кода, и определяет соответствующую операционную процедуру для выполнения операции. Селектор 110 может быть реализован как так называемый оператор "case" (выбор). Такой оператор выбора принимает в качестве входных данных операцию, например, представленную как числовой операнд, и в качестве вывода переходит к соответствующей процедуре для исполнения. Альтернативно селектор 110 может быть реализован как последовательность операторов сравнения, проверяющих равенство между принятой операцией и операцией, представленной операционными процедурами. Если оператор сравнения успешен, т.е. если существует равенство, тогда управление может быть передано соответствующей операционной процедуре, например, посредством команды «go-to» (перейти).

Из множества операционных процедур в виртуальной машине 100 показаны на фиг. 1a операционные процедуры 122, 124 и 126. В качестве примера операционная процедура 126 обрисована более подробно. Однако процедуры 122 и 124 сконфигурированы аналогично операционной процедуре 126. Селектор 110 начинает выполнение операционной процедуры в зависимости от операнда, принятого из канала 210 кода. В качестве примера предположим, что операционная процедура 126 выбирается селектором 110. Отметим, что, если используется шифрование адреса, исходные адреса операционных процедур, включающих в себя процедуры 122, 124 и 126, просто станут другими адресами.

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

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

Фиг. 6 иллюстрирует это. Перед использованием VM открытый код шифруется с помощью ключа кода, т.е. ключа k, например, посредством создания сначала открытого кода, т.е. последовательности открытых инструкций, представленной здесь как канал 412 открытого кода. Операции шифруются посредством шифратора 414 кода, получая в результате зашифрованные операции, которые могут быть использованы в канале 210 кода. Предпочтительно шифрование кода выполняется после компиляции, например, во время компоновки. Как оказалось, чтобы компенсировать шифрование операций, соответствующий этап декодирования явно не нужен в VM 100. Например, множество операционных процедур могут быть перемешаны так, что в ответ на зашифрованные операции селектор 110 выбирает правильную операционную процедуру. Если реализация типа "белый ящик" используется для операционных процедур, тогда восстановление правильной операции из зашифрованной операции будет затруднительным. После этого метки выбора могут быть переупорядочены, например, отсортированы.

Предпочтительно шифратор 414 кода шифрует из диапазона значений, представляющих все возможные операции, в тот же диапазон. Альтернативно может быть использован шифратор небольшого диапазона; например, если используется байтовый код, может быть использован побайтовый блочный шифр. Также может быть использован блочный шифр размером 16 битов. Например, шифратор 414 кода может шифровать открытую инструкцию, представленную как слова фиксированного битового размера, в зашифрованные инструкции, представленные как слова того же битового размера; типично битовые размеры включают в себя 4, 8, 16 и 32. Например, блочный шифр может быть адаптирован от более длинных размеров блока к меньшим. Например, шифр по методу Фейстеля, такой как DES, может быть адаптирован посредством усечения раундовой функции до половины желаемого размера блока. Например, AES может адаптироваться посредством ограничения каждого раунда желаемым числом байтов или слов. Пример, он может иметь шифратор 414 кода, использующий режим кодовой книги.

Фиг. 6 также показывает открытый входной канал 422 и входной шифратор 424. Входной шифратор 424 может быть использован, чтобы шифровать открытые входные данные перед их отправкой устройству 100 виртуальной машины. Фиг. 6 также показывает выходной дешифратор 464, который может быть использован, чтобы дешифровать выходные данные устройства 100 виртуальной машины.

Фиг. 1a дополнительно показывает память 132 и файл 134 регистров. Операционные процедуры, например операционная процедура 126, могут считывать или записывать в локальное временное, или энергонезависимое, хранилище.

Операционным процедурам, например операционной процедуре 126, может требоваться только один или более операндов для операции, которую они реализуют. Виртуальная машина 100 имеет доступ к каналу 240 ввода. Опять же для канала 240 ввода возможно множество альтернатив, особенно в облаке. Например, виртуальная машина 100 может принимать входные данные через другие компьютеры, использующие распределенное хранилище, или вычисление. Виртуальная машина 100 может принимать входные данные от пользователя и т.д. Входные данные для виртуальной машины 100 могут быть или могут не быть зашифрованы. Входные данные могут быть перекодированы входным перекодировщиком 140 в кодировку, используемую внутренним образом операционными процедурами. Если операционные процедуры работают дополнительно по промежуточным результатам, сохраненная, в типичном варианте временно, память 132 или файл 134 регистров обычно не должны перекодироваться, поскольку они уже сохранены в кодировке, используемой операционной процедурой 126. Криптография типа "белый ящик" и обфускационные пары особенно подходят для кодирования, декодирования и перекодирования.

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

Операционные процедуры могут также создавать данные для экспорта, т.е. выходные данные виртуальной машины 100. Выходные данные отправляются в канал 260 вывода. Выходные данные могут быть экспортированы из виртуальной машины 100 множеством способов. Например, выходные результаты могут быть отправлены другому компьютеру, например, тому же компьютеру, от которого были приняты входные данные, например, по сети. Выходные данные могут быть записаны в файл, возможно на другом компьютере, возможно для дальнейшего использования как часть распределенного вычисления и/или хранилища. Выходные данные виртуальной машины 100 могут быть или могут не быть зашифрованы. Если виртуальная машина 100 не использует внутреннее шифрование, например, использует только шифрование для канала 210 кода, или если виртуальная машина 100 использует то же шифрование для выходных данных, что и для внутреннего использования, тогда выходной перекодировщик 160 может быть исключен. Выходной перекодировщик 160 может быть использован, чтобы перекодировать данные для шифрования, используемого внешним образом.

Канал 210 кода и канал 240 ввода могут быть объединены, например чередоваться.

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

Селектор 110 может быть реализован следующим образом:

While (true)

Do

{

Fetch (instruction);

Decode (instruction);

Execute (instruction); // incorporating Instruction = next (instruction);

}

Чтобы подготавливать приложение для выполнения на виртуальной машине 100, код, т.е. последовательность инструкций, шифруется с помощью функции E шифрования и ключа k. Функция E шифрования может предпочтительно быть блочным шифром. Код тогда становится последовательностью зашифрованных инструкций, т.е. последовательностью E_k(instruction). E_k обозначает шифрование с помощью ключа k. Операция декодирования основного контура VM может быть расширена с помощью реализации типа "белый ящик" функции дешифрования, характеризуемой ключом k, т.е. WB[D_k]. Обозначим реализацию типа "белый ящик", например, как сеть таблиц, для функции посредством окружения функции с помощью WB[].

Основной контур виртуальной машины 100 может выглядеть как:

While (true)

Do

{

Fetch (instruction);

Decode (WB [Dk] (instruction));

Execute (instruction); // incorporating Instruction = next (instruction);

}

Удивительно, состав функции Decode и WB[Dk] может "раствориться" в Melted_WB_and_decoder(x) = Decode (WB[Dk] (x)). Пункт выбора декодирования, который осуществляет выполнение инструкции, может быть просто переупорядочен в результате "растворения". Особенно в случае, когда реализация инструкций, т.е. операционные процедуры, была выполнена в "белом ящике", или иначе обфусцирована, это устраняет возможную точку начала для атаки системы, а именно функцию WB[Dk]. Даже в случае, когда "белый ящик" не использовался в операциях, произвольное переупорядочивание выбирающего предложения может иметь место.

Одно лишь шифрование инструкций не обеспечивает обфускацию входных данных или выходных данных. В улучшенном варианте осуществления данные для канала 240 ввода шифруются. Чтобы компенсировать это шифрование, входной перекодировщик 140, например, как часть инструкции в VM, к которой осуществляется доступ через чтение канала 240 ввода, оснащается функцией WB[Dkʹ].

В другом улучшении, которое может быть объединено с описанными выше, запись в канал вывода приложения шифруется с помощью шифрования типа "белый ящик" WB[Ekʺ]. Позже результат может затем быть получен и дешифрован, например, на защищенной платформе, с помощью Dkʺ.

В еще одном дополнительном улучшении фактическая операция инструкции скрыта от наблюдения. Чтобы скрывать функциональность операции, используется пара кодирования и декодирования шифрования WB, т.е. WB[EKʹʹʹ] и WB[DKʹʹʹ]. Функциональность окружается такой парой. Например, предположим, что функциональностью (одноместной) операции является f, тогда новой функциональностью становится new_f(x) = WB[EKʹʹʹ](f(WB[DKʹʹʹ](x))). Если операция является двуместной, используется форма Карри для двуместных операций. При этом вся информация в регистрах и памяти становится зашифрованной посредством WB[EKʹʹʹ]. Отметим, что для большей части функциональности операторов (семантики инструкции) окружающий блок является неделимым. Для простоты можно было бы использовать вышеописанное кодирование посредством "белого ящика" только для одноместных операций.

Последнее имеет последствия также для каналов ввода и вывода. Поскольку каждая операция ожидает, что VM-данные должны быть зашифрованы посредством WB[EKʹʹʹ], мы должны шифровать каналы ввода и дешифровать перед записью и каналом вывода.

Чтение канала ввода теперь будет состоять из WB[EKʹʹʹ] и WB[Dk.ʹ], а запись в канал вывода будет состоять из WB[DKʹʹʹ] и WB[Ekʺ]. Опять отметим, что в понимании WB они предпочтительно составлены неделимо. «Неделимо» означает, что возможное частичное разделение не может быть выполнено, что раскрыло бы канал обфускации, регистр или инструкции.

Ключ kʹʹʹ является особым для каждого VM. Ключи k, kʹ, kʺ являются секретами, разделенными между VM и приложением.

Ниже перечислим различные варианты шифрования (кодирования/перекодирования) во входном перекодировщике 140, выходном перекодировщике 160 и операционной процедуре 126.

Входной перекодировщик 140 Выходной перекодировщик 160 Операционная процедура 126 Нет защиты Identity Identity Oper Только входные данные WB[D_kʹ] Identity Oper Только операция WB[E_kʹʹʹ] WB[D_k‘‘‘] WB[E_k‘‘‘] o Oper o WB[D_k‘‘‘] Входные данные и операция WB[E_kʹ‘‘] o WB[D_kʹ] WB[D_k‘‘‘] WB[E_k‘‘‘] o Oper o WB[D_k‘‘‘] Входные данные, операция и выходные данные WB[E_kʹ‘‘] o WB[D_kʹ] WB[E_k‘‘] o WB[D_k‘‘‘] WB[E_k‘‘‘] o Oper o WB[D_k‘‘‘]

Знак «o» обозначает композицию функции. Композиция функции читается справа налево. Функция справа применяется первой, функция слева - последней. Identity обозначает преобразование идентичности (не изменение). Oper обозначает операцию, выполняемую в операционной процедуре, например, операционной процедуре 126. Также шифрование кода может быть использовано с ключом k. Селектор 110 будет в этом случае либо содержать WB[D_k], либо будет переупорядочен, чтобы, таким образом, компенсировать шифрование.

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

Фиг. 1b дополнительно иллюстрирует шифрование внутренних операций. Взаимный предварительный кодировщик 126a конфигурируется для WB[Dkʹʹʹ], операция 126b выполняет фактическую операцию, и пост-кодировщик 126c конфигурируется для WB[Ekʹʹʹ]. Таким образом, затем сначала устраняется внутреннее шифрование с внутренним ключом kʹʹʹ шифрования, затем выполняется операция, и затем внутреннее шифрование применяется снова. Однако если блок 126b, который выполняет фактическую операцию, реализован с помощью сети таблиц, тогда они могут быть объединены с предварительным кодировщиком 126a и пост-кодировщиком 126c. Таким образом, работа операционной процедуры 126 полностью обфусцируется, даже если сам код был изучен.

Фиг. 7 иллюстрирует виртуальную машину, в которой код шифруется с помощью ключа k, входные данные - с помощью ключа kʹ, выходные данные - с помощью ключа kʺ, а внутренние операции - с помощью ключа kʹʹʹ.

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

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

Также в окружении серверов, которые могут запускать VM, каналы вывода могут быть зашифрованы с помощью Ekʺ. При этом канал(ы) вывода приложения обфусцируется посредством использования шифрования типа "белый ящик". Вычислительные значения не показываются в явном виде. Взаимосвязь может соблюдаться посредством разделения секрета между VM и приложением.

Любой из ключа k кода, ключа kʹ входных данных или ключа kʺ выходных данных может быть привязан к id устройства. Например, ключ может содержать id. Это дает в результате VM, которая может быть реализована только на устройстве с корректным id.

Фиг. 4a, 4b, 4c, 4d и 4e иллюстрируют различные способы кодирования инструкций и данных. Эти кодирования могли бы быть выполнены кодировщиком инструкций, например, как часть компоновщика, или на этапе посткомпоновки.

Фиг. 4a показывает открытую инструкцию 510 вместе с открытыми непосредственными данными 520. Открытая инструкция 510 кодируется с помощью кодирования 550 кода, например, посредством кодировщика 550 кода, чтобы получать закодированную инструкцию 515. Непосредственные данные шифруются отдельно с помощью входного кодирования 570, например, посредством входного кодировщика 570, чтобы получать закодированные данные 525. Чтобы использовать этот тип кодирования, виртуальной машине нужно лишь средство поиска, чтобы устанавливать соответствие закодированной инструкции с правильной операцией, например указатель, и средство поиска, чтобы устанавливать соответствие закодированных данных данным, закодированным согласно внутреннему кодированию (если отличается от внешнего кодирования). Таким образом, необходимы лишь небольшие таблицы.

Фиг. 4b показывает тип кодирования, в котором как открытая инструкция 510, так и открытые непосредственные данные кодируются напрямую с шифрованием кода. Это потребует от них совместного декодирования, таким образом, большей обфускации, но также возникают более крупные таблицы. Отметим, что, если необходимо больше непосредственных данных, они могут быть закодированы отдельно, например, посредством входного кодирования. Средство поиска, используемое, чтобы декодировать закодированную инструкцию 517, может быть разделено на две таблицы; первая таблица получает операционную процедуру в ответ на закодированную инструкцию, вторая - непосредственные данные. Отметим, что таблица может давать непосредственные данные в любом подходящем шифровании, например, закодированные с помощью внутреннего кодирования.

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

Фиг. 4d показывает частичное кодирование. Инструкция 510 ассемблируется вместе с непосредственными данными 520 и 512. Как и на фиг. 4c, все непосредственные данные кодируются с помощью входного кодирования 570. Однако только инструкция 510 и закодированные данные 525 кодируются с помощью кодирования 550 кода, чтобы получать закодированную инструкцию 516. Закодированная инструкция 516 объединяется с закодированными данными 526. Частичное кодирование непосредственных данных сдерживает рост размера таблиц.

Отметим, что частичное кодирование может также быть выполнено с помощью системы на фиг. 4b. Это иллюстрируется на фиг. 4e. Инструкция 510 и непосредственные данные 520 кодируются с помощью кодирования кода, чтобы получать закодированную инструкцию 517. Дополнительные непосредственные данные 521 кодируются с помощью входного кодирования.

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

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

Фиг. 5a иллюстрирует, как может работать селектор. Сначала селектор принимает закодированную инструкцию. В этом примере все инструкции имеют фиксированный размер, например, 1 байт (возможны другие размеры). В этом примере закодированная инструкция кодируется с помощью схемы из фиг. 4b или 4c. Например, открытая инструкция может быть 0xaa с открытыми непосредственными данными 0x12. Вместе они кодируются (в этом примере) как 0x34ab. Закодированная инструкция отыскивается через средство поиска (в этом случае таблицу 710 поиска). В результате, находится информация, указывающая на правильную операционную процедуру и на операнд для использования в этой процедуре. Например, может быть найдено 0x22b3, в котором 0x22 указывает на конкретную таблицу. (Отметим, что может быть промежуточная таблица поиска для перехода от 0x22 к адресу указателя). Операция '0x22' представлена в таблице 720 поиска. В результате таблицы 710 поиска (0x22b3) часть 0xb3 является закодированной версией непосредственных данных, в этом примере - 0x12. Кодирование может быть выполнено с внутренним кодированием. Далее 0xb3 ищется в таблице 720. В этом случае операция получает один операнд, например, операция отрицания. 0xb3 отыскивается, чтобы находить результат, здесь 0xca. Результат уже закодирован с помощью внутреннего кодирования. Внутреннее кодирование может быть таким же, оно может быть другим внутренним кодированием.

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

Результат 0xca может быть введен в регистр или в память устройства виртуальной машины, возможно, для дальнейшего использования в операционных процедурах или выведен.

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

Фиг. 5b показывает, как таблица может быть создана. В этом случае таблица представлена для операции с двумя операндами. Таблица 750 поиска представляет таблицу поиска открытой операции, при этом просто все результаты операции для всех возможных входных данных перечисляются в воспроизводимом порядке, например, отсортированными. Таблицы 730 и 740 поиска представляют операцию внутреннего декодирования для декодирования входных данных. Таблица 760 поиска представляет внутреннее кодирование для результата. Декодирование 730 и 740 и/или кодирования 760 - все могут соответствовать одному и тому же внутреннему кодированию, но это не нужно. Наконец, все операции составлены. Например, можно проходить через таблицы для всех возможных входных данных и перечислять все получающиеся результаты.

Фиг. 8 иллюстрирует способ 600 виртуальной машины согласно изобретению. Этап 610 содержит прием закодированной инструкции, например, посредством получения последовательности зашифрованных инструкций. Зашифрованная инструкция может быть получена посредством кодирования открытой инструкции с помощью кодирования кода. Последовательность зашифрованных инструкций может быть получена посредством шифрования каждой из последовательности открытых инструкций с помощью ключа шифрования кода. Открытые инструкции могут быть элементами цифровых данных, например, представленными как целые числа. Этап 620 содержит поиск закодированной инструкции, чтобы выбирать соответствующую операционную процедуру из множества операционных процедур. Соответствующая операционная процедура выполнена с возможностью выполнять открытую инструкцию, соответствующую закодированной инструкции. Этап 630 содержит активацию соответствующей операционной процедуры.

Типично кодирование инструкций будет выполняться на другом компьютере, чем этапы 610, 620 и 630. Способ предпочтительно является машинно-реализованным способом.

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

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

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

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

Похожие патенты RU2620712C2

название год авторы номер документа
ВЫЧИСЛИТЕЛЬНОЕ УСТРОЙСТВО, ХРАНЯЩЕЕ ТАБЛИЦЫ СООТВЕТСТВИЯ ДЛЯ ВЫЧИСЛЕНИЯ ФУНКЦИИ 2013
  • Гориссен Паулус Матхиас Хюбертус Мехтилдис Антониус
  • Толхэйзен Людовикус Маринус Герардус Мария
RU2657178C2
СПОСОБ КОДИРОВАНИЯ И ДЕКОДИРОВАНИЯ ЦИФРОВОЙ ИНФОРМАЦИИ В ВИДЕ УЛЬТРАСЖАТОГО НАНОБАР-КОДА (ВАРИАНТЫ) 2013
  • Пряхин Евгений Иванович
  • Ларионова Екатерина Владимировна
  • Захаренко Евгений Анатольевич
RU2656734C2
ВЫЧИСЛИТЕЛЬНОЕ УСТРОЙСТВО, КОНФИГУРИРУЕМОЕ С ПОМОЩЬЮ ТАБЛИЧНОЙ СЕТИ 2013
  • Толхэйзен Людовикус Маринус Герардус Мария
  • Гориссен Паулус Матхиас Хюбертус Мехтилдис Антониус
  • Брюкерс Альфонс Антониус Мария Ламбертус
  • Денг Мина
RU2661308C2
КРИПТОГРАФИЧЕСКАЯ СИСТЕМА И СПОСОБ 2015
  • Шеперс, Хендрик Ян Йозеф Хюбертус
  • Гориссен, Паулус Матхиас Хюбертус Мехтилдис Антониус
  • Бодландер, Мартен Петер
  • Гиспен, Вихер Идо-Ян
RU2710670C2
МОСТ МЕЖДУ АУТЕНТИФИКАЦИЕЙ И АВТОРИЗАЦИЕЙ С ИСПОЛЬЗОВАНИЕМ РАСШИРЕННЫХ СООБЩЕНИЙ 2017
  • Энрайт Эрик Нильс
  • Ратика Адам
  • Кересман Майкл А. Iii
  • Шервин Фрэнсис М.
  • Баласубраманиан Чандра С.
RU2716042C1
БЕЗОПАСНЫЙ ТРАНСПОРТ ЗАШИФРОВАННЫХ ВИРТУАЛЬНЫХ МАШИН С НЕПРЕРЫВНЫМ ДОСТУПОМ ВЛАДЕЛЬЦА 2015
  • Новак Марк Фишел
  • Бен-Зви Нир
  • Фергюсон Нильс Т.
RU2693313C2
ВЫЧИСЛИТЕЛЬНОЕ УСТРОЙСТВО, СОДЕРЖАЩЕЕ СЕТЬ ТАБЛИЦ 2013
  • Толхэйзен Людовикус Маринус Герардус Мария
  • Гориссен Паулус Матхиас Хюбертус Мехтилдис Антониус
  • Денг Мина
  • Брюкерс Альфонс Антониус Мария Ламбертус
RU2676454C2
Способ кодирования цифровой информации в виде многомерного нанобар-кода 2020
  • Пряхин Евгений Иванович
  • Ларионова Екатерина Владимировна
  • Захаренко Евгений Анатольевич
  • Романов Валерий Витальевич
  • Одинцова Галина Викторовна
  • Горный Сергей Георгиевич
RU2777708C2
УСТРОЙСТВО СВЯЗИ 2003
  • Накамура Такатоши
  • Йокота Акихиро
RU2360366C9
АТТЕСТАЦИЯ ХОСТА, СОДЕРЖАЩЕГО ДОВЕРИТЕЛЬНУЮ СРЕДУ ИСПОЛНЕНИЯ 2015
  • Фергюсон Нильс Т.
  • Самсонов Евгений Анатольевич
  • Кинсхуманн
  • Чандрашекар Самартха
  • Мессек Джон Энтони
  • Новак Марк Фишел
  • Маккаррон Кристофер
  • Тэмхейн Амитабх Пракаш
  • Ван Цян
  • Крус Дэвид Мэттью
  • Бен-Зви Нир
  • Винберг Андерс Бертил
RU2679721C2

Иллюстрации к изобретению RU 2 620 712 C2

Реферат патента 2017 года УСТРОЙСТВО ВИРТУАЛЬНОЙ МАШИНЫ, ИМЕЮЩЕЕ УПРАВЛЯЕМУЮ КЛЮЧОМ ОБФУСКАЦИЮ, И СПОСОБ

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

Формула изобретения RU 2 620 712 C2

1. Виртуальная машина для кодирования и декодирования данных, встроенная в электронном устройстве, содержащая

- множество операционных процедур (122, 124, 126), причем каждая выполнена с возможностью выполнять конкретную инструкцию, и

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

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

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

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

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

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

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

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

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

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

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

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

7. Виртуальная машина по п. 1, при этом этапы декодирования, выполнения и кодирования комбинируются в одну таблицу или сеть таблиц.

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

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

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

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

12. Распределенная система виртуальной машины для кодирования и декодирования данных, содержащая

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

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

13. Способ, выполняемый виртуальной машиной, для кодирования и декодирования данных, содержащий этапы, на которых

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

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

- активируют соответствующую операционную процедуру,

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

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

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

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

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

Документы, цитированные в отчете о поиске Патент 2017 года RU2620712C2

Способ обработки целлюлозных материалов, с целью тонкого измельчения или переведения в коллоидальный раствор 1923
  • Петров Г.С.
SU2005A1
US 7124170 B1, 17.10.2006
Способ приготовления лака 1924
  • Петров Г.С.
SU2011A1
Перекатываемый затвор для водоемов 1922
  • Гебель В.Г.
SU2001A1
RU 2009115656 A, 27.10.2010.

RU 2 620 712 C2

Авторы

Денг Мина

Гориссен Паулус Матхиас Хюбертус Мехтилдис Антониус

Петкович Милан

Даты

2017-05-29Публикация

2012-12-27Подача