RU2812867C1 - Защита двоичных файлов типовых коммерческих программ от пиратства с использованием аппаратных анклавов - Google Patents
Защита двоичных файлов типовых коммерческих программ от пиратства с использованием аппаратных анклавов Download PDFInfo
- Publication number
- RU2812867C1 RU2812867C1 RU2022117900A RU2022117900A RU2812867C1 RU 2812867 C1 RU2812867 C1 RU 2812867C1 RU 2022117900 A RU2022117900 A RU 2022117900A RU 2022117900 A RU2022117900 A RU 2022117900A RU 2812867 C1 RU2812867 C1 RU 2812867C1
- Authority
- RU
- Russia
- Prior art keywords
- code
- data
- decryption key
- hash
- processor
- Prior art date
Links
- 238000000034 method Methods 0.000 claims abstract description 78
- 238000004891 communication Methods 0.000 claims description 16
- 238000012986 modification Methods 0.000 claims description 5
- 230000004048 modification Effects 0.000 claims description 5
- 230000000694 effects Effects 0.000 abstract 1
- 239000000126 substance Substances 0.000 abstract 1
- 238000005516 engineering process Methods 0.000 description 11
- 230000008569 process Effects 0.000 description 8
- 230000006870 function Effects 0.000 description 7
- 238000012795 verification Methods 0.000 description 5
- 238000013461 design Methods 0.000 description 4
- 230000008901 benefit Effects 0.000 description 3
- 238000012545 processing Methods 0.000 description 3
- 230000000977 initiatory effect Effects 0.000 description 2
- 238000005259 measurement Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000006978 adaptation Effects 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 238000005401 electroluminescence Methods 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 238000000926 separation method Methods 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
Images
Abstract
Изобретение относится к области защиты информации. Технический результат направлен на повышение защиты данных. Способ защиты программного обеспечения от пиратства, при этом способ содержит этапы, на которых принимают множество двоичных файлов, причем каждый двоичный файл содержит код и данные, модифицируют это множество двоичных файлов таким образом, что данные каждого двоичного файла могут быть расположены на произвольном расстоянии в памяти от кода этого двоичного файла, шифруют код каждого двоичного файла, и принимают из вычислительного устройства запрос на ключ дешифрования, причем вычислительное устройство включает в себя аппаратный анклав, при этом зашифрованный код каждого двоичного файла, но не данные каждого двоичного файла сохраняется в аппаратном анклаве. 3 н. и 12 з.п. ф-лы. 7 ил.
Description
Уровень техники
[0001] Вычислительные устройства могут использоваться для того, чтобы выполнять широкий спектр задач. Разработчики программного обеспечения могут проектировать и создавать программно-реализованные программы для использования на вычислительных устройствах. Пользователи вычислительных устройств могут использовать программные приложения, чтобы выполнять задачи. Например, пользователь вычислительного устройства может использовать приложение Интернет-браузера для того, чтобы осуществлять доступ к информации в Интернете, и затем использовать приложение создания презентаций для того, чтобы создавать презентацию, сообщающую информацию, полученную из Интернета. Программные приложения могут включать в себя определенное число различных файлов, в том числе исполняемые файлы.
[0002] Разработчики программного обеспечения могут волноваться касательно пиратства программного обеспечения. Пиратство программного обеспечения может возникать, когда конечный пользователь приобретает или получает копию приложения, делает неавторизованные копии приложения и использует неавторизованные копии или распространяет их третьим сторонам. Прекращение пиратства может быть затруднительным, поскольку взломщик зачастую имеет полное управление вычислительным устройством и системой, которая исполняет приложение.
Сущность изобретения
[0003] В соответствии с одним аспектом настоящего раскрытия, раскрывается способ для защиты программного обеспечения от пиратства. Способ включает в себя прием нескольких двоичных файлов. Каждый двоичный файл включает в себя код и данные. Способ дополнительно включает в себя модификацию нескольких двоичных файлов таким образом, что данные каждого двоичного файла могут быть расположены на произвольном расстоянии в запоминающем устройстве (памяти) от кода этого двоичного файла. Способ дополнительно включает в себя шифрование кода каждого двоичного файла. Способ дополнительно включает в себя прием, из вычислительного устройства, запроса на ключ дешифрования. Вычислительное устройство может включать в себя аппаратный анклав. Зашифрованный код каждого двоичного файла, но не данные каждого двоичного файла может сохраняться в аппаратном анклаве.
[0004] Способ дополнительно может включать в себя предоставление, в вычислительное устройство, ключа дешифрования.
[0005] Способ дополнительно может включать в себя аутентификацию, перед предоставлением ключа дешифрования, подписи процессора. Процессор вычислительного устройства формирует подпись процессора, и запрос на ключ дешифрования может включать в себя подпись процессора.
[0006] Способ дополнительно может включать в себя проверку достоверности, перед предоставлением ключа дешифрования, хеша. Запрос на ключ дешифрования может включать в себя хеш.
[0007] Модификация нескольких двоичных файлов может включать в себя идентификацию ссылок на данные в коде каждого двоичного файла и модификацию ссылок на данные.
[0008] Модификация нескольких двоичных файлов может осуществляться без доступа к исходному коду или отладочным символам для нескольких двоичных файлов.
[0009] Способ дополнительно может включать в себя добавление заголовка отделения в каждый из нескольких двоичных файлов. Заголовок отделения может указывать то, что данные каждого из нескольких двоичных файлов могут быть размещены на произвольном расстоянии в запоминающем устройстве от кода этого двоичного файла.
[0010] В соответствии с другим аспектом настоящего раскрытия, раскрывается система для обеспечения защиты программно-реализованной программы от пиратства. Система включает в себя один или более процессоров, запоминающее устройство, поддерживающее электронную связь с одним или более процессоров, и инструкции, сохраненные в запоминающем устройстве. Инструкции исполняются посредством одного или более процессоров для того, чтобы принимать несколько двоичных файлов, причем каждый двоичный файл содержит код и данные. Инструкции также исполняются посредством одного или более процессоров для того, чтобы модифицировать несколько двоичных файлов таким образом, что данные каждого двоичного файла могут быть расположены на произвольном расстоянии в запоминающем устройстве от кода этого двоичного файла. Инструкции также исполняются посредством одного или более процессоров для того, чтобы шифровать код каждого двоичного файла, но не данные каждого двоичного файла. Инструкции также исполняются посредством одного или более процессоров для того, чтобы принимать, из вычислительного устройства, запрос на ключ дешифрования. Вычислительное устройство включает в себя аппаратный анклав. Зашифрованный код каждого двоичного файла, но не данные каждого двоичного файла сохраняется в аппаратном анклаве. Аппаратный анклав включает в себя инструкции для того, чтобы размечать аппаратный анклав как несчитываемый перед исполнением кода.
[0011] Инструкции дополнительно могут исполняться посредством одного или более процессоров для того, чтобы предоставлять, в вычислительное устройство, ключ дешифрования.
[0012] Инструкции дополнительно могут исполняться посредством одного или более процессоров для того, чтобы аутентифицировать, перед предоставлением ключа дешифрования, подпись процессора. Процессор вычислительного устройства формирует подпись процессора, и запрос на ключ дешифрования может включать в себя подпись процессора.
[0013] Инструкции дополнительно могут исполняться посредством одного или более процессоров для того, чтобы проверять достоверность, перед предоставлением ключа дешифрования, хеша. Запрос на ключ дешифрования может включать в себя хеш, и проверка достоверности хеша может включать в себя сравнение хеша с верифицированным хеш-значением.
[0014] Модификация нескольких двоичных файлов может включать в себя идентификацию ссылок на данные в коде каждого двоичного файла и модификацию ссылок на данные.
[0015] Модификация нескольких двоичных файлов может не требовать доступа к исходному коду или отладочным символам для нескольких двоичных файлов.
[0016] Инструкции дополнительно могут исполняться посредством одного или более процессоров для того, чтобы добавлять заголовок отделения в каждый из нескольких двоичных файлов. Заголовок отделения может указывать то, что данные каждого из нескольких двоичных файлов могут быть размещены на произвольном расстоянии в запоминающем устройстве от кода этого двоичного файла, и то, что код этого двоичного файла должен быть размещен в аппаратном анклаве.
[0017] В соответствии с другим аспектом настоящего раскрытия, раскрывается машиночитаемый носитель. Машиночитаемый носитель включает в себя инструкции, которые исполняются посредством одного или более процессоров для того, чтобы инструктировать вычислительной системе принимать запрос на то, чтобы инициировать приложение, причем приложение включает в себя один или более файлов с исполняемым кодом и данными. Исполняемый код является зашифрованным. Инструкции также исполняются посредством одного или более процессоров для того, чтобы инструктировать вычислительной системе загружать исполняемый код в аппаратный анклав на вычислительной системе и загружать данные в местоположение в запоминающем устройстве на вычислительной системе. Местоположение находится за пределами аппаратного анклава и не находится на предварительно определенном расстоянии в запоминающем устройстве от исполняемого кода. Инструкции также исполняются посредством одного или более процессоров для того, чтобы инструктировать вычислительной системе отправлять запрос на ключ дешифрования на сервер аутентификации и дешифровать исполняемый код с использованием ключа дешифрования. Ключ дешифрования принимается посредством вычислительной системы после отправки запроса на ключ дешифрования. Инструкции также исполняются посредством одного или более процессоров для того, чтобы инструктировать вычислительной системе размечать аппаратный анклав как несчитываемый.
[0018] Исполняемый код может включать в себя две или более секций исполняемого кода, и две или более секций исполняемого кода могут загружаться в непрерывном диапазоне в аппаратном анклаве.
[0019] Машиночитаемый носитель дополнительно может включать в себя дополнительные инструкции, которые исполняются посредством одного или более процессоров для того, чтобы инструктировать вычислительной системе загружать код запуска в аппаратный анклав.
[0020] Машиночитаемый носитель дополнительно может включать в себя дополнительные инструкции, которые исполняются посредством одного или более процессоров для того, чтобы инструктировать вычислительной системе измерять хеш кода запуска и исполняемого кода.
[0021] Машиночитаемый носитель дополнительно может включать в себя дополнительные инструкции, которые исполняются посредством одного или более процессоров для того, чтобы инструктировать вычислительной системе подписывать хеш с помощью подписи одного или более процессоров.
[0022] Запрос на ключ дешифрования может включать в себя подпись и хеш.
[0023] Данное краткое изложение сущности изобретения приведено для введения в упрощенной форме подборки концепций, которые дополнительно описаны ниже в подробном описании. Это краткое изложение сущности изобретения не имеет намерение идентифицировать ключевые или важнейшие признаки заявленного изобретения, а также не имеет намерение использоваться в качестве помощи при определении объема заявленного изобретения.
[0024] Дополнительные признаки и преимущества должны быть изложены в нижеприведенном описании. Признаки и преимущества раскрытия могут реализовываться и получаться посредством систем и способов, которые конкретно указываются в прилагаемой формуле изобретения. Признаки настоящего раскрытия должны становиться более очевидными из нижеприведенного описания и прилагаемой формулы изобретения или могут изучаться при практическом использовании раскрытого изобретения, как изложено далее.
Краткое описание чертежей
[0025] Чтобы описывать способ, которым могут получаться вышеизложенные и другие признаки раскрытия, более подробное описание приводится в отношении его конкретных вариантов осуществления, которые проиллюстрированы на прилагаемых чертежах. Для лучшего понимания, аналогичные элементы обозначаются посредством аналогичных ссылок с номерами на всех различных прилагаемых чертежах. С пониманием того, что чертежи иллюстрируют некоторые примерные варианты осуществления, варианты осуществления описываются и поясняются в дальнейшем конкретнее и подробнее и с помощью прилагаемых чертежей, на которых:
[0026] Фиг. 1 иллюстрирует примерную систему для использования аппаратного анклава для того, чтобы защищать программно-реализованную программу от пиратства программного обеспечения.
[0027] Фиг. 2A и 2B иллюстрируют примерный файл, который может модифицироваться для обеспечения защиты примерного файла от пиратства программного обеспечения.
[0028] Фиг. 3 иллюстрирует примерный способ для модификации файла, чтобы обеспечить защиту файла от пиратства программного обеспечения.
[0029] Фиг. 4 иллюстрирует примерный способ для загрузки файла в запоминающее устройство, чтобы обеспечить защиту файла от пиратства программного обеспечения.
[0030] Фиг. 5 иллюстрирует примерный способ для аутентификации информации и предоставления ключа дешифрования, чтобы обеспечить защиту файла от пиратства программного обеспечения.
[0031] Фиг. 6 иллюстрирует примерный способ для инициирования исполнения программы, чтобы обеспечить защиту программы от пиратства программного обеспечения.
[0032] Фиг. 7 иллюстрирует определенные компоненты, которые могут включаться в вычислительную систему.
Подробное описание изобретения
[0033] Разработчик программного обеспечения может создавать приложение для использования на вычислительных устройствах. Приложение может включать в себя наборы инструкций, которые инструктируют вычислительным устройствам выполнять определенные задачи. Разработчик программного обеспечения может инвестировать значительное время и деньги в проектирование и создание кода приложения. Разработчик программного обеспечения может намереваться получать прибыль от продаж (разработчиком или дистрибьютором программного обеспечения) авторизованных копий приложения. Как результат, разработчик программного обеспечения может хотеть защищать приложение от пиратства. Пиратство программного обеспечения может возникать, когда пользователь приобретает или получает копию приложения, делает неавторизованные копии приложения и использует неавторизованные копии или распространяет их третьим сторонам. Третьи стороны могут использовать неавторизованные копии приложения вместо покупки авторизованной копии от разработчика программного обеспечения или дистрибьютора разработчика программного обеспечения. Таким образом, пиратство программного обеспечения может непосредственно оказывать влияние на доходы и прибыль разработчика. Тем не менее, прекращение пиратства может быть затруднительным, поскольку взломщик зачастую имеет полное управление системой, которая выполняет приложение.
[0034] Это раскрытие описывает системы и способы для использования аппаратных анклавов для того, чтобы защищать программный код, содержащийся в типовых коммерческих (COTS) программах, от пиратства программного обеспечения. Аппаратный анклав может представлять собой заданную область запоминающего устройства, контент которой вообще не может считываться или сохраняться посредством программного обеспечения, включающего в себя операционную систему и даже гипервизор, не сохраненного в аппаратном анклаве. Набор кодов инструкций, таких как программные защитные расширения Intel® (Intel® SGX) или защищенная зашифрованная виртуализация (SEV) AMD, встроенных в процессор, могут поддерживать создание и использование аппаратного анклава. Набор инструкций и аппаратный анклав могут обеспечивать возможность удаленной стороне выполнять немодифицированную программу с защитой конфиденциальности и/или целостности, даже если остальная часть системы является злоумышленной. Код и данные, сохраненные в аппаратном анклаве, могут доверять только аппаратному анклаву и могут трактовать любой процесс за пределами аппаратного анклава, включающего в себя операционную систему или гипервизор, как потенциально враждебный. Процессор может шифровать информацию, сохраненную в аппаратном анклаве, и дешифровать информацию на лету в самом процессоре.
[0035] Хотя аппаратные анклавы могут предоставлять возможности для того, чтобы защищать информацию от злоумышленных систем (требующие доверия только процессору), разработчик программного обеспечения может не использовать аппаратные анклавы, поскольку достижение этого требует того, что разработчик программного обеспечения должен модифицировать свои программы. Но описанные системы и способы практически не требуют помощи от разработчиков программы и не требуют доступа к исходному коду или базирования на перекомпиляции программы. Вместо этого, описанная система и способы могут применяться непосредственно к двоичным файлам типовых коммерческих (COTS) программ человеком или субъектом, отличным от разработчика программного обеспечения. Таким образом, аспекты описанных систем и способов могут предоставляться в качестве услуги для разработчиков программного обеспечения посредством платформы распространения программного обеспечения, разработчика операционной системы или других доверенных сторон. Как результат, описанные системы и способы могут повышать эффективность использования аппаратных анклавов, чтобы победить пиратство для нового и для унаследованного программного обеспечения. Конечно, разработчик программного обеспечения также может выполнять аспекты описанных систем и способов, а не базироваться на третьей стороне.
[0036] Допустим, что разработчик программного обеспечения предоставляет COTS-приложение в платформу, чтобы распространять и продавать приложение потребителям. Приложение может включать в себя один или более двоичных файлов, которые включают в себя исполняемый код. В случае PC-приложения, приложение может включать в себя один или более EXE-файлов и один или более DLL-файлов. Каждый двоичный файл может включать в себя одну или более кодовых секций (секций исполняемых инструкций) и одну или более секций данных, содержащих информацию, на которую выполняемые инструкции ссылаются и которую используют. Чтобы работать надлежащим образом, двоичные файлы может требовать того, что секции данных должны быть размещены в запоминающем устройстве на предварительно определенном и фиксированном расстоянии от кодовых секций. Приложение или двоичные файлы могут задавать предварительно определенное и фиксированное расстояние.
[0037] До обеспечения доступности приложения для покупателей, платформа может модифицировать каждый двоичный файл, который включает в себя исполняемый код. Платформа может модифицировать каждый двоичный файл максимум тремя способами: (1) отделять кодовые секции от секций данных; (2) шифровать кодовые секции и (3) добавлять заголовок.
[0038] Во-первых, для каждого двоичного файла, который включает в себя исполняемый код, платформа может отделять кодовые секции от секций данных таким образом, что код и данные могут загружаться в двух местоположениях в запоминающем устройстве, которые разнесены на произвольное расстояние (в отличие от предварительно определенного расстояния, требуемого перед отделением). Отделение кода от данных может заключать в себе модификацию всех ссылок на данные в коде, которые допускают фиксированное расстояние между кодом и данными. Платформа может отделять код от данных вообще без базирования на информации, не включенной в двоичные файлы. Таким образом, платформа может отделять код от данных без осуществления доступа к исходному коду или отладочным символам двоичных файлов. Отделение кода от данных может обеспечить загрузку всех кодовых секций из нескольких двоичных файлов рядом в одну непрерывную область запоминающего устройства.
[0039] Во-вторых, после того, как платформа отделяет код от данных, платформа может шифровать кодовые секции, содержащиеся в каждом модифицированном двоичном файле. Платформа может оставлять секции данных двоичных файлов в качестве незашифрованного простого текста.
[0040] В-третьих, платформа может добавлять заголовок или другую информацию в один или более модифицированных двоичных файлов. Заголовок может сообщать в операционную систему то, что кодовые секции в модифицированных двоичных файлах отделены от секций данных в модифицированных двоичных файлах. Заголовок также может сообщать то, что кодовые секции должны загружаться в аппаратный анклав, и то, что секции данных должны загружаться за пределы аппаратного анклава.
[0041] После модификации двоичных файлов, платформа может продавать или распространять приложение (с модифицированными двоичными файлами) для всех. Пользователь может загружать приложение в запоминающее устройство на дисках на вычислительном устройстве, которое также включает в себя аппаратный анклав. Когда пользователь запускает приложение, операционная система вычислительного устройства может загружать двоичные файлы приложения в запоминающее устройство. Операционная система может проектироваться с возможностью распознавать, когда кодовые секции в двоичных файлах являются отдельными от секций данных. Операционная система также может проектироваться с возможностью распознавать, когда кодовые секции должны загружаться в аппаратный анклав. Операционная система может определять, на основе заголовка, то, что код и секции данных являются отдельными, и то, что кодовые секции должны загружаться в аппаратный анклав. После загрузки всех кодовых секций из модифицированных двоичных файлов в аппаратный анклав в одном непрерывном диапазоне, операционная система может загружать все секции данных из модифицированных двоичных файлов в запоминающее устройство процесса за пределами аппаратного анклава.
[0042] Чтобы загружать модифицированные двоичные файлы таким образом, операционная система может включать в себя загрузчик, который отличается от стандартного загрузчика. Загрузчик может составлять часть операционной системы, спроектированной с возможностью перемещать исполняемые файлы для приложения из дискового устройства хранения данных в запоминающее устройство процесса и самоинициализировать процесс запуска для приложения. Стандартный загрузчик может загружать кодовые секции и секции данных в запоминающее устройство вместе и может не распознавать информацию в модифицированных двоичных файлах, указывающую то, что кодовые секции должны загружаться вместе. Тем не менее, загрузчик, включенный в операционную систему, описанную выше, проектируется с возможностью загружать кодовые секции модифицированных двоичных файлов вместе в аппаратном анклаве и секции данных за пределами аппаратного анклава. Но даже если загрузчик операционной системы, описанной выше, может отличаться от стандартного загрузчика, ядро операционной системы индивидуально не настраивается или изменяется. Следовательно, описанные системы и способы могут требовать только минимальных модификаций существующих операционных систем.
[0043] В дополнение к загрузке модифицированных двоичных файлов, операционная система может загружать код запуска в аппаратный анклав. Код запуска может включаться в операционную систему и может не шифроваться. В альтернативе, платформа может предоставлять код запуска в вычислительное устройство с приложением.
[0044] После того как загрузчик загружает все, операционная система может передавать управление коду запуска. Код запуска может инструктировать процессору измерять хеш кода, постоянно размещающегося в аппаратном анклаве, и подписывать хеш с помощью подписи процессора. Процессор затем может устанавливать защищенный канал связи с сервером аутентификации платформы и отправлять подписанный хеш на сервер аутентификации. Сервер аутентификации может верифицировать подпись процессора, чтобы обеспечивать то, что процессор является подлинным. Сервер аутентификации также может верифицировать хеш. Если сервер аутентификации верифицирует подпись и хеш, сервер аутентификации может отправлять ключ для дешифрования кода в вычислительное устройство. Код запуска может использовать ключ для того, чтобы дешифровать код, постоянно размещающийся в аппаратном анклаве.
[0045] До того, как приложение исполняется, код запуска может размечать все запоминающее устройство аппаратного анклава как несчитываемое для кода, сохраненного в аппаратном анклаве, чтобы защищать приложение от утечки контента кода. В противном случае, взломщик может пытаться обманывать приложение, чтобы допускать утечку контента кода посредством манипулирования указателями данных, которые не защищаются посредством аппаратного анклава. Секции данных, сохраненные за пределами аппаратного анклава, могут содержать указатели. Взломщик может изменять указатели в секциях данных, чтобы указывать на кодовые секции. Если код не проверяет то, указывают или нет данные на код, код может допускать утечку своего контента, если аппаратный анклав не размечен как несчитываемый.
[0046] Несмотря на потенциал для противостояния пиратству программного обеспечения, аппаратные анклавы широко не приспосабливаются. Одна причина, как отмечено выше, может заключаться в том, что использование аппаратных анклавов требует от разработчиков программного обеспечения модификации существующего программного обеспечения. Типично, разработчик программного обеспечения должен модифицировать программу таким образом, что она получает сведения относительно аппаратного анклава, чтобы использовать характеристики аппаратного анклава. Но раскрытые системы и способы не требуют от разработчика программного обеспечения модификации программы. Кроме того, при этом раскрытые системы и способы не требуют от разработчика программного обеспечения предоставления исходного кода. Вместо этого, раскрытые системы и способы обеспечивают возможность платформе или поставщику услуг модифицировать программу таким образом, чтобы использовать аппаратный анклав без необходимости помощи или дополнительной информации от разработчика программного обеспечения. Таким образом, описанные системы и способы обеспечивают возможность платформе распространения программного обеспечения предлагать сквозное антипиратское решение для сторонних приложений без базирования на разработчиках программного обеспечения.
[0047] Другая причина, по которой аппаратные анклавы не могут широко приспосабливаться, заключается в отсутствии поддержки в главных операционных системах. Но описанные системы и способы сохраняют совместимость с типовыми операционными системами, поскольку они не затрагивают то, как операционные системы осуществляют доступ к данным программы для того, чтобы обслуживать определенные системные вызовы (например, загрузку контента файла в запоминающее устройство программы). Данные программы по-прежнему постоянно размещаются в нормальном запоминающем устройстве процесса, которое является считываемым и записываемым. Таким образом, раскрытые системы и способы не требуют изменений ядра сегодняшней операционной системы. Вместо этого, разработчик операционной системы должен модифицировать только загрузчик операционной системы, что обеспечивает пригодность этого подхода для приспособления в реальном мире на нескольких платформах (например, на Windows, Mac и т.д.).
[0048] Другая причина, по которой аппаратные анклавы не могут широко приспосабливаться, заключается в ограниченном объеме запоминающего устройства анклава. Описанные системы и способы уменьшают давление в силу нехватки запоминающего устройства посредством использования запоминающего устройства анклава только для кодовых секций программы, которые типично существенно меньше секций данных программы. Кроме того, пираты программного обеспечения могут быть в большей степени заинтересованы в коде приложения, а не в данных.
[0049] Фиг. 1 иллюстрирует примерную систему 100, в которой могут использоваться технологии, раскрытые в данном документе для защиты программного обеспечения от пиратства. Система 100 может включать в себя платформу 102, сервер 146 аутентификации и вычислительное устройство 104. Платформа 102 и вычислительное устройство 104 могут соединяться через сеть 142. Вычислительное устройство 104 и сервер 146 аутентификации также могут соединяться через сеть 142.
[0050] Разработчик 106 программного обеспечения может использовать систему 100. Разработчик 106 программного обеспечения может создавать программу 108a. Программа 108a может представлять собой набор инструкций, и информация намеревалась выполнять одну или более функций или задач. Программа 108a может представлять собой типовую коммерческую (COTS) программно-реализованную программу, которая может исполняться на вычислительном устройстве, к примеру, на вычислительном устройстве 104.
[0051] Программа 108a может включать в себя один или более файлов, к примеру, файл 110a и файл 112a. Программа 108a может включать в себя дополнительные файлы, не показанные на фиг. 1. В других проектных решениях, программа 108a может включать в себя только один файл. Файлы 110a, 112a могут представлять собой незашифрованные двоичные файлы. Файлы 110a, 112a могут включать в себя исполняемый код и данные. Исполняемый код может представлять собой инструкции, которые процессор может понимать и исполнять. Исполняемый код в файлах 110a, 112a может включать в себя ссылки на данные, включенные в файлы 110a, 112a. Файлы 110a, 112a могут проектироваться таким образом, что они выполняются на вычислительном устройстве, данные, включенные в файлы 110a, 112a, должны сохраняться на фиксированном и предварительно определенном расстоянии в запоминающем устройстве от кода, включенного в файлы 110a, 112a. Программа 108a или файлы 110a, 112a могут задавать фиксированное и предварительно определенное расстояние.
[0052] Платформа 102 может предоставлять программно-реализованные программы для распространения и продажи. Платформа 102 может включать в себя онлайновый магазин, из которого пользователи могут загружать программно-реализованные программы. Платформа 102 может принимать программу 108a от разработчика 106 программного обеспечения. Разработчик 106 программного обеспечения может предоставлять программу 108a в платформу 102 для целей обеспечения возможности платформе 102 продавать авторизованные копии программы 108a пользователям вычислительных устройств, к примеру, вычислительного устройства 104. Разработчик 106 программного обеспечения может волноваться касательно того, что кто-либо может приобретать программу 108a через платформу 102, делать неавторизованные копии программы 108a и затем распространять неавторизованные копии третьим сторонам без компенсации для разработчика 106 программного обеспечения. Платформа 102 может предоставлять такую услугу для разработчика 106 программного обеспечения, чтобы обеспечивать защиту программы 108a от пиратов программного обеспечения.
[0053] Платформа 102 может включать в себя программу 108b. Программа 108b может представлять собой модифицированную версию программы 108a. Программа 108b может включать в себя модифицированный файл 110b и модифицированный файл 112b. Модифицированный файл 110b может представлять собой модифицированную версию файла 110a, и модифицированный файл 112b может представлять собой модифицированную версию файла 112a. Модифицированные файлы 110b, 112b могут представлять собой двоичные файлы. Платформа 102 может модифицировать программу 108a таким образом, чтобы создавать программу 108b с обеспечением защиты программы 108a от пиратства программного обеспечения. В альтернативе, разработчик 106 программного обеспечения или субъект, отличный от платформы 102, может модифицировать программу 108a таким образом, чтобы создавать программу 108b.
[0054] Модифицированный файл 110b может включать в себя зашифрованный код 114b-1, зашифрованный код 114b-2, данные 116b-1, данные 116b-2 и заголовок 118b-1. Зашифрованный код 114b-1 и зашифрованный код 114b-2 могут представлять собой модифицированные версии кода, включенного в файл 110a. Зашифрованный код 114b-1, 114b-2 может обеспечивать возможность вычислительному устройству выполнять модифицированный файл 110b, когда данные 116b-1, 116b-2 расположены на произвольном расстоянии в запоминающем устройстве от зашифрованного кода 114b-1, 114b-2. Кроме того, зашифрованный код 114b-1, 114b-2 быть зашифрованным таким образом, что ключ требуется для того, чтобы дешифровать и исполнять зашифрованный код 114b-1, 114b-2. В отличие от зашифрованного кода 114b-1, 114b-2, данные 116b-1, 116b-2 могут быть незашифрованными.
[0055] Заголовок 118b-1 может включать в себя информацию относительно модифицированного файла 110b. Заголовок 118b-1 может указывать то, что модифицированный файл 110b включает в себя код и данные, которые отделены. Другими словами, заголовок 118b-1 может сообщать то, что данные 116b-1, 116b-2 могут быть размещены в запоминающем устройстве на произвольном расстоянии от зашифрованного кода 114b-1, 114b-2. Заголовок 118b-1 может указывать то, что зашифрованный код 114b-1, 114b-2 должен быть размещен в аппаратном анклаве, и данные 116b-1, 116b-2 должны быть размещены в запоминающем устройстве за пределами аппаратного анклава. Хотя заголовок 118b-1 показывается в модифицированном файле 110b, информация, содержащаяся в заголовке 118b-1, вместо этого может включаться в программу 108b за пределами модифицированного файла 110b.
[0056] Модифицированный файл 112b может включать в себя зашифрованный код 114b-3, данные 116b-3 и заголовок 118b-2. Зашифрованный код 114b-2 может представлять собой модифицированную версию кода, включенного в файл 112a. Зашифрованный код 114b-3 может обеспечивать возможность вычислительному устройству исполнять модифицированный файл 112b, когда данные 116b-3 сохраняются на произвольном расстоянии в запоминающем устройстве от зашифрованного кода 114b-3. Кроме того, зашифрованный код 114b-3 быть зашифрованным. В отличие от зашифрованного кода 114b-3, данные 116b-3 могут быть незашифрованными.
[0057] Заголовок 118b-2 может включать в себя информацию относительно модифицированного файла 112b. Заголовок 118b-2 может указывать то, что модифицированный файл 112b включает в себя код и данные, которые отделены. Другими словами, заголовок 118b-2 может сообщать то, что данные 116b-3 могут быть размещены в запоминающем устройстве на произвольном расстоянии от зашифрованного кода 114b-3. Заголовок 118b-2 может указывать то, что зашифрованный код 114b-3 должен быть размещен в аппаратном анклаве, и данные 116b-3 должны быть размещены в запоминающем устройстве за пределами аппаратного анклава. Хотя заголовок 118b-2 показывается в модифицированном файле 112b, информация, содержащаяся в заголовке, вместо этого может включаться в программу 108b за пределами модифицированного файла 112b.
[0058] Вычислительное устройство 104 может загружать программно-реализованные программы из платформы 102 для использования на вычислительном устройстве 104. Пользователь вычислительного устройства 104 может использовать загружаемые программно-реализованные программы для того, чтобы выполнять функции и задачи. Вычислительное устройство 104 может включать в себя программу 108c, сохраненную на дисковом устройстве 140 хранения данных. Программа 108c может представлять собой копию программы 108b. Вычислительное устройство 104 может загружать программу 108c из платформы 102 через сеть 142.
[0059] Программа 108c может включать в себя модифицированный файл 110c и модифицированный файл 112c. Модифицированный файл 110c может представлять собой копию модифицированного файла 110b, и модифицированный файл 112c может представлять собой копию модифицированного файла 112b. Модифицированный файл 110c может включать в себя зашифрованный код 114c-1 (который может представлять собой копию зашифрованного кода 114b-1), зашифрованный код 114c-2 (который может представлять собой копию зашифрованного кода 114b-2), данные 116c-1 (которые могут представлять собой копию данных 116b-1), данные 116c-2 (которые могут представлять собой копию данных 116b-2) и заголовок 118c-1 (который может представлять собой копию заголовка 118b-1). Модифицированный файл 112c может включать в себя зашифрованный код 114c-3 (который может представлять собой копию зашифрованного кода 114b-3), данные 116c-3 (которые могут представлять собой копию данных 116b-3) и заголовок 118c-2 (который может представлять собой копию заголовка 118b-2).
[0060] Пользователь вычислительного устройства 104 может инструктировать вычислительному устройству 104 инициировать программу 108c. Операционная система 126 вычислительного устройства 104 может использовать загрузчик 128 для того, чтобы загружать программу 108c в запоминающее устройство 130 вычислительного устройства. Операционная система 126 может представлять собой программу, которая управляет аппаратными средствами и программным обеспечением на вычислительном устройстве, к примеру, на вычислительном устройстве 104. Платформа 102 может разрабатывать операционную систему 126. Загрузчик 128 может проектироваться с возможностью определять то, включают или нет модифицированные файлы 110c, 112c в себя код, который отделен от данных. Загрузчик 128 может определять из заголовков 118c-1, 118c-2 то, что модифицированные файлы 110c, 112c включают в себя код, который отделен от данных.
[0061] Загрузчик 128 также может определять из заголовков 118c-1, 118c-2 то, что код, включенный в модифицированные файлы 110c, 112c, должен загружаться в аппаратный анклав 132 запоминающего устройства 130. Аппаратный анклав 132 может представлять собой заданную часть запоминающего устройства 130, которая имеет защиту конфиденциальности и целостности от инструкций, не размещающихся постоянно в аппаратном анклаве 132. Процессор 136 вычислительного устройства 104 может управлять, защищать и поддерживать аппаратный анклав 132.
[0062] Загрузчик 128 может загружать зашифрованный код 114c-1, 114c-2, 114c-3 в аппаратный анклав 132. Загрузчик 128 может загружать зашифрованный код 114c-1, 114c-2, 114c-3 в непрерывном диапазоне аппаратного анклава 132. Загрузчик 128 также может загружать код 134 запуска в аппаратный анклав 132. Код 134 запуска может включаться в операционную систему 126. В альтернативе, вычислительное устройство 104 может получать код 134 запуска из платформы 102 или в качестве части программы 108b. Код 134 запуска может быть незашифрованным. Загрузчик 128 может загружать данные 116c-1, 116c-2, 116c-3 в запоминающее устройство 130 за пределами аппаратного анклава 132. Данные 116c-1, 116c-2, 116c-3 могут быть расположены на произвольном расстоянии в запоминающем устройстве 130 от зашифрованного кода 114c-1, 114c-2, 114c-3.
[0063] После того как загрузчик 128 загружает модифицированные файлы 110c, 112c в запоминающее устройство 130, операционная система 126 может инициировать код 134 запуска. Код 134 запуска может включать в себя инструкции для того, чтобы инструктировать процессору выполнять удаленную аттестацию, чтобы получать ключ для того, чтобы дешифровать зашифрованный код 114c-1, 114c-2, 114c-3, к примеру, ключ 124 дешифрования. В качестве части выполнения удаленной аттестации, код 134 запуска может включать в себя инструкции для того, чтобы инструктировать процессору 136 предоставлять информацию, аттестуемую согласно подлинности контента аппаратного анклава 132. Например, код 134 запуска может включать в себя инструкции для того, чтобы инструктировать процессору 136 вычислительного устройства 104 измерять хеш зашифрованного кода 114c-1, 114c-2, 114c-3. Процессор 136 также может включать в себя код 134 запуска при хеш-измерении. Процессор может использовать открытую хеш-функцию для того, чтобы измерять хеш зашифрованного кода 114c-1, 114c-2, 114c-3 и кода 134 запуска.
[0064] В качестве части выполнения удаленной аттестации, процессор 136 может предоставлять информацию, аттестуемую согласно своей подлинности. Например, процессор 136 может включать в себя модуль 138 формирования подписей, и процессор 136 может инструктировать модулю 138 формирования подписей подписывать хеш с помощью подписи процессора. Модуль 138 формирования подписей может подписывать хеш с использованием закрытого сертификата, поддерживаемого посредством процессора 136.
[0065] В качестве части выполнения удаленной аттестации, код 134 запуска может инструктировать процессору 136 устанавливать связь канал с сервером 146 аутентификации по сети 142. Канал связи может представлять собой защищенный канал связи. Процессор 136 может отправлять на сервер 146 аутентификации информацию, аттестуемую согласно подлинности процессора 136 и контенту аппаратного анклава 132. Например, процессор 136 может отправлять подписанный хеш на сервер 146 аутентификации по каналу связи. Процессор 136 может отправлять подписанный хеш на сервер 146 аутентификации в качестве части запроса на ключ 124 дешифрования. Ключ 124 дешифрования может обеспечивать дешифрование зашифрованного кода 114b-1, 114b-2, 114b-3. В некоторых проектных решениях, сервер 146 аутентификации может включаться в платформу 102. В других проектных решениях, сервер 146 аутентификации может быть отдельным от платформы 102. В этом случае, сервер 146 аутентификации может принимать ключ 124 дешифрования из платформы 102.
[0066] Сервер 146 аутентификации может верифицировать подпись процессора, принимаемую из процессора 136. Сервер 146 аутентификации может использовать открытый сертификат 148, чтобы верифицировать подпись процессора. Сервер 146 аутентификации может верифицировать подпись процессора, чтобы определять то, что процессор 136 является подлинным и может быть доверенным. Если сервер 146 аутентификации не может верифицировать подпись процессора, процессор 136 может быть злоумышленным или управляемым посредством взломщика. В этом случае, процессор 136 может не размещать зашифрованный код 114b-1, 114b-2, 114b-3 в защищенном аппаратном анклаве. Когда сервер 146 аутентификации не может верифицировать подпись процессора, сервер 146 аутентификации может не предоставлять ключ 124 дешифрования в вычислительное устройство 104. В противном случае, пользователь вычислительного устройства 104 может инструктировать вычислительному устройству 104 размещать зашифрованный код 114b-1, 114b-2, 114b-3 в незащищенной части запоминающего устройства 130, использовать ключ 124 дешифрования для того, чтобы дешифровать зашифрованный код 114b-1, 114b-2, 114b-3, и делать неавторизованные копии дешифрованного кода.
[0067] Сервер 146 аутентификации может верифицировать хеш. Сервер 146 аутентификации может включать в себя верифицированное хеш-значение 150. Сервер 146 аутентификации может определять то, совпадает или нет хеш, принимаемый из процессора 136, с верифицированным хеш-значением 150. Платформа 102 может определять верифицированное хеш-значение 150, когда платформа 102 формирует модифицированные файлы 110b, 112b. Платформа 102 может иметь доступ к коду 134 запуска, чтобы формировать верифицированное хеш-значение 150. Сервер 146 аутентификации может верифицировать хеш, чтобы определять то, что вычислительное устройство 104 не модифицирует зашифрованный код 114b-1, 114b-2, 114b-3 или код 134 запуска. Если сервер 146 аутентификации не может верифицировать хеш, сервер 146 аутентификации может не предоставлять ключ 124 дешифрования в вычислительное устройство. В противном случае, пользователь вычислительного устройства 104 может модифицировать код 134 запуска или зашифрованный код 114b-1, 114b-2, 114b-3 таким образом, что он включает в себя инструкции для того, чтобы предоставлять информацию относительно дешифрованного контента аппаратного анклава 132. Посредством верификации хеша, система 100 может защищать программу 108a от злоумышленного загрузчика. Даже если загрузчик 128 является злоумышленным, загрузчик 128 не может пиратствовать в отношении зашифрованного кода 114b-1, 114b-2, 114b-3, поскольку он шифруется. Кроме того, даже если загрузчик 128 вводит дополнительную информацию в зашифрованный код 114b-1, 114b-2, 114b-3 или загружает зашифрованный код 114b-1, 114b-2, 114b-3 некорректно, то сервер 146 аутентификации не должен верифицировать хеш.
[0068] Если сервер аутентификации верифицирует то, что процессор 136 и контент аппаратного анклава 132 могут быть доверенными (к примеру, посредством верификации как подписи процессора, так и хеша), сервер 146 аутентификации может отправлять ключ 124 дешифрования в вычислительное устройство 104. Процессор 136 может использовать ключ 124 дешифрования для того, чтобы дешифровать зашифрованный код 114b-1, 114b-2, 114b-3. В это время, аппаратный анклав 132 может содержать дешифрованный код 120-1, 120-2, 120-3. Дешифрованный код 120-1 может представлять собой дешифрованную версию зашифрованного кода 114c-1. Дешифрованный код 120-2 может представлять собой дешифрованную версию зашифрованного кода 114c-2. Дешифрованный код 120-3 может представлять собой дешифрованную версию зашифрованного кода 114c-3. Дешифрованный код 120-1, 120-2 может выполняться, даже когда дешифрованный код 120-1, 120-2 находится на произвольном расстоянии в запоминающем устройстве 130 от данных 116c-1, 116c-2. Кроме того, дешифрованный код 120-3 может выполняться, даже когда дешифрованный код 120-3 находится на произвольном расстоянии в запоминающем устройстве 130 от данных 116c-3.
[0069] До того, как процессор 136 выполняет дешифрованный код 120-1, 120-2, 120-3, код 134 запуска может инструктировать процессору 136 размечать аппаратный анклав 132 как несчитываемый для всех инструкций, постоянно размещающихся в аппаратном анклаве 132. Код 134 запуска может включать в себя эти инструкции для того, чтобы защищать дешифрованный код 120-1, 120-2, 120-3 от утечки контента. Считываемость и исполняемость могут представлять собой два отдельных разрешения. Следовательно, разметка аппаратного анклава 132 как несчитываемого может не предотвращать выполнение дешифрованного кода 120-1, 120-2, 120-3. После того как процессор 136 размечает аппаратный анклав 132 как несчитываемый, процессор 136 может выполнять дешифрованный код 120-1, 120-2, 120-3. Дешифрованный код 120-1, 120-2, 120-3 может выполнять функции, идентичные функциям кода, включенного в файлы 110a, 112a.
[0070] Фиг. 2A и 2B иллюстрируют файл 210a и модифицированный файл 210b в соответствии с технологиями, описанными в данном документе. Файл 210a может представлять собой один пример файла 110a, показанного на фиг. 1. Модифицированный файл 210b может представлять собой один пример модифицированного файла 110b, показанного на фиг. 1.
[0071] Файл 210a может представлять собой часть программно-реализованной COTS-программы. Файл 210a может представлять собой незашифрованный двоичный файл, который включает в себя исполняемый код и данные. Например, файл 210a может включать в себя кодовую секцию 220a-1, кодовую секцию 220a-2, секцию 216a-1 данных и секцию 216a-2 данных. Кодовые секции 220a-1, 220a-2 могут включать в себя исполняемый код и могут быть незашифрованными. Кодовые секции 220a-1, 220a-2 могут иметь гораздо меньший размер, чем секции 216a-1, 216a-2 данных. Кодовые секции 220a-1, 220a-2 могут включать в себя одну или более ссылок на секции 216a-1, 216a-2 данных. Например, кодовая секция 220a-1 может включать в себя ссылку 242a-1 на данные, ссылку 242a-2 на данные и ссылку 242a-3 на данные, и кодовая секция 220a-2 может включать в себя ссылку 242a-4 на данные. Хотя файл 210a включает в себя две кодовых секции и две секции данных, в других вариантах осуществления файл может содержать только одну кодовую секцию и одну секцию данных либо более двух кодовых секций и более двух секций данных. Файл также может содержать неравное число кодовых секций и секций данных.
[0072] Ссылки 242a-1, 242a-2, 242a-3, 242a-4 на данные могут указывать на конкретные данные или конкретные местоположения в секциях 216a-1, 216a-2 данных. Например, ссылка 242a-1 на данные может указывать на данные 244a-1 в секции 216a-1 данных. Ссылка 242a-2 на данные может указывать на данные 244a-2. Ссылка 242a-3 на данные может указывать на данные 244a-3 в секции 216a-2 данных. Ссылка 242a-4 на данные также может указывать на данные 244a-3. Ссылки 242a-1, 242a-2, 242a-3, 242a-4 на данные могут форматироваться таким образом, что ссылки 242a-1, 242a-2, 242a-3, 242a-4 на данные должны указывать на корректные данные во время выполнения, только если секции 216a-1, 216a-2 данных загружаются в запоминающее устройство на фиксированном и предварительно определенном расстоянии от кодовых секций 220a-1, 220a-2. Ссылки 242a-1, 242a-2, 242a-3, 242a-4 на данные могут включать в себя инструкции для того, чтобы получать конкретные данные, включенные в секции 216a-1 данных или секции 216a-2 данных. Ссылки 242a-1, 242a-2, 242a-3, 242a-4 на данные могут включать в себя инструкции для того, чтобы модифицировать конкретные данные, включенные в секции 216a-1 данных или секции 216a-2 данных. Таким образом, если секции 216a-1, 216a-2 данных не загружаются на фиксированном и предварительно определенном расстоянии от кодовых секций 220a-1, 220a-2, инструкции, включенные в кодовые секции 220a-1, 220a-2, могут получать или модифицировать неправильные данные, и файл 210a может не функционировать надлежащим образом.
[0073] Модифицированный файл 210b может представлять собой модифицированную версию файла 210a. Разработчик файла 210a может модифицировать файл 210a таким образом, чтобы формировать модифицированный файл 210b. В альтернативе, человек или объект, отличный от разработчика файла 210a (такой как платформа), может модифицировать файл 210a таким образом, чтобы формировать модифицированный файл 210b. Человек или объект, отличный от разработчика файла 210a, может создавать модифицированный файл 210b без доступа к исходному коду файла 210a или отладочным символам файла 210a.
[0074] Модифицированный файл 210b может включать в себя зашифрованную кодовую секцию 214b-1, зашифрованную кодовую секцию 214b-2, секцию 216b-1 данных и секцию 216b-2 данных. Зашифрованные кодовые секции 214b-1, 214b-2 могут представлять собой модифицированные версии кодовых секций 220a-1, 220a-2. Зашифрованные кодовые секции 214b-1, 214b-2 могут шифроваться таким образом, что вычислительное устройство не может выполнять зашифрованные кодовые секции 214b-1, 214b-2 без получения сначала ключа дешифрования. Секции 216b-1, 216b-2 данных могут представлять собой копии секций 216a-1, 216a-2 данных. Секции 216b-1, 216b-2 данных могут включать в себя данные 244b-1 (которые могут представлять собой копию данных 244a-1), данные 244b-2 (которые могут представлять собой копию данных 244a-2), и данные 244b-3 (которые могут представлять собой копию данных 244a-3). Секции 216b-1, 216b-2 данных могут представлять собой незашифрованный простой текст.
[0075] Зашифрованная кодовая секция 214b-1 может включать в себя модифицированную ссылку 242b-1 на данные, модифицированную ссылку 242b-2 на данные и модифицированную ссылку 242b-3 на данные. Зашифрованная кодовая секция 214b-2 может включать в себя модифицированную ссылку 242b-4 на данные. Модифицированная ссылка 242b-1 на данные может представлять собой модифицированную версию ссылки 242a-1 на данные. Модифицированная ссылка 242b-2 на данные может представлять собой модифицированную версию ссылки 242a-2 на данные. Модифицированная ссылка 242b-3 на данные может представлять собой модифицированную версию ссылки 242a-3 на данные. Модифицированная ссылка 242b-4 на данные может представлять собой модифицированную версию ссылки 242a-4 на данные. Модифицированные ссылки 242b-1, 242b-2, 242b-3, 242b-4 на данные могут модифицироваться таким образом, что модифицированные ссылки 242b-1, 242b-2, 242b-3, 242b-4 на данные должны указывать на корректные данные во время выполнения, даже если расстояние в запоминающем устройстве между зашифрованными кодовыми секциями 214b-1, 214b-2 и секциями 216b-1, 216b-2 данных отличается от фиксированного и предварительно определенного расстояния, которое может задаваться в файле 210a. Например, если ссылка 242a-1 на данные указывает на данные 244a-1, когда секция 216a-1 данных размещена на фиксированном и предварительно определенном расстоянии в запоминающем устройстве от кодовой секции 220a-1, модифицированная ссылка 242b-1 на данные должна указывать на данные 244b-1, когда секция 216b-1 данных размещена на расстоянии в запоминающем устройстве от кодовой секции 214b-1, которое отличается от фиксированного и предварительно определенного расстояния. Таким образом, модифицированные ссылки 242b-1, 242b-2, 242b-3, 242b-4 на данные проектируются таким образом, что может быть предусмотрено произвольное расстояние в запоминающем устройстве между зашифрованными кодовыми секциями 214b-1, 214b-2 и секциями 216b-1, 216b-2 данных.
[0076] Модификация ссылок 242a-1, 242a-2, 242a-3, 242a-4 на данные может заключать в себе идентификацию и определение местоположения ссылок 242a-1, 242a-2, 242a-3, 242a-4 на данные в кодовых секциях 220a-1, 220a-2. Определение местоположения ссылок 242a-1, 242a-2, 242a-3, 242a-4 на данные может заключать в себе использование информации перебазирования. Файл 210a или программа, которая включает в себя файл 210a, может включать в себя информацию перебазирования относительно всех ссылок на данные в кодовых секциях. Информация перебазирования может включаться с возможностью поддерживать рандомизацию схемы распределения адресного пространства (ASLR). ASLR может обеспечивать возможность процессору загружать программу в произвольное место в запоминающем устройстве. Но ASLR по-прежнему может требовать того, что расстояние между кодом и данными должно представлять собой фиксированное расстояние, заданное в программе. Тем не менее, ASLR может помогать платформе определять местоположение ссылок 242a-1, 242a-2, 242a-3, 242a-4 на данные. Таким образом, платформа может использовать информацию перебазирования для того, чтобы определять местоположение ссылок 242a-1, 242a-2, 242a-3, 242a-4 на данные. После определения местоположения ссылок 242a-1, 242a-2, 242a-3, 242a-4 на данные, платформа может модифицировать ссылки 242a-1, 242a-2, 242a-3, 242a-4 на данные, чтобы отделять кодовые секции 220a-1, 220a-2 от секций 216a-1, 216a-2 данных.
[0077] Модифицированный файл 210b может включать в себя заголовок 218b. Заголовок 218b может включать в себя информацию относительно модифицированного файла 210b. Заголовок 218b может быть незашифрованным. Заголовок 218b может указывать то, что зашифрованные кодовые секции 214b-1, 214b-2 отделены от секций 216b-1, 216b-2 данных таким образом, что секции 216b-1, 216b-2 данных могут загружаться в запоминающее устройство на произвольном расстоянии от кодовых секций 214b-1, 214b-2. Заголовок 218b может указывать то, что кодовые секции 214b-1, 214b-2 должны загружаться в аппаратный анклав, и секции 216b-1, 216b-2 данных должны загружаться в запоминающее устройство за пределами аппаратного анклава. Платформа может добавлять заголовок 218b в модифицированный файл 210b.
[0078] Фиг. 3 иллюстрирует примерный способ 300 для модификации файла, чтобы обеспечить защиту программы от пиратства с использованием аппаратного анклава.
[0079] Способ 300 может включать в себя прием 302 файла, содержащего код и данные. Файл может представлять собой часть программы, которая может представлять собой программный COTS-продукт. Файл может представлять собой файл 110a, файл 112a или файл 210a. Программа может включать в себя дополнительную информацию, отличную от файла. Файл может представлять собой исполняемый файл. Файл может представлять собой незашифрованный двоичный файл. Код может представлять собой инструкции, выполняемые посредством процессора. Файл может проектироваться таким образом, что данные должны сохраняться на фиксированном и предварительно определенном расстоянии в запоминающем устройстве от кода для надлежащего выполнения файла. Платформа, к примеру, платформа 102, может принимать 302 файл.
[0080] Способ 300 может включать в себя определение местоположения 304 ссылок на данные в коде. Ссылки на данные могут указывать на конкретную информацию или местоположения в данных. Код может использовать ссылки на данные в качестве части получения или модификации конкретной информации в данных. Ссылки на данные могут проектироваться таким образом, что данные должны сохраняться на фиксированном предварительно определенном расстоянии в запоминающем устройстве от кода для ссылок на данные, чтобы указывать на корректную информацию в данных во время выполнения. Платформа может определять местоположение 304 ссылок на данные. Платформа может определять местоположение 304 ссылок на данные без использования исходного кода или отладочных символов, ассоциированных с файлом. Платформа может определять местоположение 304 ссылок на данные без использования информации от разработчика программы, отличной от программы.
[0081] Определение местоположения 304 ссылок на данные в коде может включать в себя использование информации перебазирования относительно ссылок на данные, содержащихся в коде, файле или программе. Информация перебазирования может включаться с возможностью поддерживать ASLR.
[0082] Способ 300 может включать в себя модификацию 306 ссылок на данные в коде. Модификация 306 ссылок на данные может включать в себя отделение кода от данных. После отделения, данные могут быть размещены на произвольном расстоянии в запоминающем устройстве от ссылок кода, и данные в коде по-прежнему должны указывать на корректную информацию в данных во время выполнения. Платформа может модифицировать 306 ссылки на данные. Платформа может модифицировать 306 ссылки на данные без осуществления доступа к исходному коду или отладочным символам, ассоциированным с файлом. Платформа может модифицировать 306 ссылки на данные без осуществления доступа к информации от разработчика программы, отличной от программы.
[0083] Способ 300 может включать в себя шифрование 308 кода. Дешифрование зашифрованного кода может требовать использования ключа дешифрования. Ключ дешифрования может представлять собой закрытый ключ дешифрования. Платформа может шифровать 308 код. Платформа может не шифровать данные.
[0084] Способ 300 может включать в себя модификацию 310 файла таким образом, что он включает в себя заголовок отделения. Заголовок отделения может указывать то, что данные в файле могут быть размещены на произвольном расстоянии в запоминающем устройстве от кода. Заголовок отделения может указывать то, что код должен загружаться в запоминающее устройство в аппаратном анклаве, и то, что данные должны загружаться в запоминающее устройство за пределами аппаратного анклава. Платформа может модифицировать 310 файл таким образом, что он включает в себя заголовок отделения.
[0085] Способ 300 может включать в себя измерение 312 хеша зашифрованного кода и кода запуска. Измерение 312 хеша может включать в себя выполнение открытой стандартной хеш-функции для зашифрованного кода и кода запуска. Код запуска может проектироваться с возможностью быть размещенным в аппаратном анклаве с зашифрованным кодом. Измерение 312 хеша может включать в себя сохранение хеша в качестве верифицированного хеш-значения. Платформа может измерять 312 хеш. Платформа может сохранять хеш на платформе или на сервере аутентификации. Хеш может использоваться при аутентификации запроса на ключ дешифрования для того, чтобы дешифровать зашифрованный код.
[0086] Способ 300 может включать в себя предоставление 314 файла для распространения. Файл может включать в себя заголовок отделения, модифицированные ссылки на данные и зашифрованный код. Предоставление 314 файла для распространения может включать в себя предоставление копий файла для загрузки пользователями. Платформа может предоставлять 314 файл для распространения. Вычислительное устройство может загружать файл из платформы.
[0087] Фиг. 4 иллюстрирует потенциальный способ 400 для загрузки приложения, чтобы обеспечивать защиту приложения от пиратства программного обеспечения.
[0088] Способ 400 может включать в себя прием 402 запроса на то, чтобы инициировать приложение. Приложение может включать в себя один или более файлов с исполняемым кодом. Каждый из одного или более файлов может включать в себя код и данные. Код и данные в одном или более файлов могут быть отделены таким образом, что данные из каждого из одного или более файлов могут загружаться на произвольном расстоянии в запоминающем устройстве от кода этого файла. Код в одном или более файлов быть зашифрованным. Данные в одном или более файлов могут быть незашифрованными. Операционная система, к примеру, операционная система 126, может принимать 402 запрос.
[0089] Способ 400 может включать в себя считывание 404 заголовка из одного или более файлов. Заголовок может содержаться или ассоциироваться с одним или более файлов. Заголовок может указывать то, что код и данные в одном или более файлов отделяются. Заголовок может указывать то, что код должен загружаться в аппаратный анклав в непрерывном диапазоне, и данные должны загружаться в запоминающее устройство за пределами аппаратного анклава. Операционная система может считывать 404 заголовок. Операционная система может включать в себя загрузчик, к примеру, загрузчик 128, спроектированный с возможностью считывать и понимать заголовок.
[0090] Способ 400 может включать в себя загрузку 406 кода запуска в аппаратный анклав. Код запуска может включать в себя инструкции, потребляемые посредством процессора. Код запуска может включать в себя инструкции для того, чтобы инструктировать процессору измерять хеш информации, сохраненной в аппаратном анклаве, подписывать хеш с помощью подписи, предоставлять хеш и подпись на сервер аутентификации и размечать аппаратный анклав как несчитываемый. Операционная система может загружать 406 код запуска в аппаратный анклав. Операционная система может включать в себя код запуска. В альтернативе, операционная система может принимать код запуска из платформы.
[0091] Способ 400 может включать в себя загрузку 408 кода, содержащегося в одном или более файлов, в аппаратный анклав. Код быть зашифрованным. Загрузка 408 кода может включать в себя загрузку кода в непрерывном диапазоне в аппаратный анклав. Операционная система может загружать 408 код, содержащийся в одном или более файлов, в аппаратный анклав. Операционная система может использовать загрузчик для того, чтобы загружать 408 код, содержащийся в одном или более файлов, в аппаратный анклав.
[0092] Способ 400 может включать в себя загрузку 410 данных, содержащихся в одном или более файлов, в запоминающее устройство за пределами аппаратного анклава. Данные могут не быть зашифрованными. Загрузка 410 данных может включать в себя загрузку данных в непрерывном диапазоне в запоминающее устройство за пределами аппаратного анклава. Загрузка 410 данных может включать в себя загрузку данных на произвольном расстоянии в запоминающем устройстве от кода. Операционная система может загружать 410 данные, содержащиеся в одном или более файлов, в запоминающее устройство за пределами аппаратного анклава. Операционная система может использовать загрузчик для того, чтобы загружать 410 данные.
[0093] Способ 400 может включать в себя инструктирование 412 выполнения кода запуска. Операционная система может инструктировать 412 выполнение кода запуска. Код запуска может быть незашифрованным.
[0094] Фиг. 5 иллюстрирует примерный способ для предоставления ключа дешифрования в соответствии с технологиями, описанными в данном документе.
[0095] Способ 500 может включать в себя прием 502 запроса на ключ дешифрования, причем запрос включает в себя хеш и подпись. Вычислительное устройство может выполнять запрос и может предоставлять хеш и подпись. Вычислительное устройство может выполнять запрос в качестве части процесса удаленной аттестации. Вычислительное устройство может включать в себя процессор и аппаратный анклав. Аппаратный анклав может включать в себя зашифрованный код и код запуска. Процессор может измерять хеш зашифрованного кода и кода запуска. Процессор может подписывать хеш с помощью подписи с использованием закрытого сертификата. Платформа или сервер аутентификации может принимать 502 запрос.
[0096] Способ 500 может включать в себя аутентификацию 504 подписи. Аутентификация 504 подписи может включать в себя определение того, что хеш подписан с использованием закрытого сертификата. Аутентификация 504 подписи может выполняться с использованием открытого сертификата. Платформа или сервер аутентификации может аутентифицировать 504 подпись. Аутентификация 504 подписи может верифицировать то, что процессор является подлинным и может быть доверенным на то, чтобы принудительно активировать защиту конфиденциальности и/или целостности аппаратного анклава.
[0097] Способ 500 может включать в себя верификацию 506 хеша. Верификация 506 хеша может включать в себя сравнение хеша с верифицированным хеш-значением. Платформа или сервер аутентификации может верифицировать 506 хеш. Верификация 506 может верифицировать то, что хеш, зашифрованный код и код запуска, сохраненный в аппаратном анклаве, не модифицируются посредством вычислительного устройства. Верификация 506 может верифицировать то, что хеш, зашифрованный код и код запуска могут быть доверенными. Платформа или сервер аутентификации может определять верифицированное хеш-значение.
[0098] Способ 500 может включать в себя предоставление 508 ключа дешифрования. Ключ дешифрования может обеспечивать возможность вычислительному устройству дешифровать зашифрованный код. Код запуска может включать в себя инструкции для того, чтобы инструктировать процессору дешифровать зашифрованный код. Платформа или сервер аутентификации может предоставлять 508 ключ дешифрования. Платформа или сервер аутентификации может не предоставлять 508 ключ дешифрования, если подпись не является подлинной, и хеш совпадает с верифицированным хеш-значением. Если подпись или хеш не верифицируется либо не проходит проверку достоверности, платформа или сервер аутентификации может уведомлять вычислительное устройство в отношении того, что платформа или сервер аутентификации не должен предоставлять ключ дешифрования.
[0099] Фиг. 6 иллюстрирует примерный способ 600 для инициирования программы, модифицированной в соответствии с технологиями, раскрытыми в данном документе.
[00100] Способ 600 может включать в себя инструктирование 602 процессору измерять хеш кода в аппаратном анклаве. Код запуска, сохраненный в аппаратном анклаве, может включать в себя инструкции для того, чтобы инструктировать 602 процессору измерять хеш кода в аппаратном анклаве. Процессор может измерять хеш кода в аппаратном анклаве с использованием стандартной хеш-функции. Код в аппаратном анклаве может включать в себя код запуска и зашифрованный код из программы. Программа может включать в себя файлы, кодовые секции и секции данных которых отделены. Измерение хеша кода в аппаратном анклаве может представлять собой часть процесса удаленной аттестации, чтобы получать ключ дешифрования. Могут использоваться другие способы для того, чтобы выполнять аттестацию согласно контенту аппаратного анклава, отличные от измерения хеша.
[00101] Способ 600 может включать в себя инструктирование 604 процессору подписывать хеш с помощью подписи. Код запуска может включать в себя инструкции для того, чтобы инструктировать 604 процессору подписывать хеш с помощью подписи. Процессор может подписывать хеш с помощью подписи с использованием закрытого сертификата. Подписание хеша с помощью подписи может представлять собой часть процесса удаленной аттестации для получения ключа дешифрования. Могут использоваться другие способы для того, чтобы выполнять аттестацию согласно подлинности процессора, отличные от подписания хеша с помощью подписи.
[00102] Способ 600 может включать в себя инструктирование 606 процессору запрашивать ключ дешифрования из сервера аутентификации, причем запрос включает в себя хеш и подпись. Код запуска может включать в себя инструкции для того, чтобы инструктировать 606 процессору запрашивать ключ дешифрования. Процессор может выполнять запрос и предоставлять хеш и подпись на сервер аутентификации по защищенному каналу связи. Сервер аутентификации может представлять собой часть платформы. Сервер аутентификации может включать в себя ключ дешифрования. Сервер аутентификации может предоставлять ключ дешифрования, если сервер аутентификации верифицирует хеш и подпись. Если сервер аутентификации определяет либо то, что подпись не является подлинной, либо то, что хеш является некорректным, сервер аутентификации может не предоставлять ключ дешифрования. Хотя способ 600 включает в себя инструктирование 606 процессору запрашивать ключ дешифрования с использованием хеша и подписи, могут использоваться другие способы аттестации.
[00103] Способ 600 может включать в себя инструктирование 608 процессору дешифровать код. Код запуска может включать в себя инструкции для того, чтобы инструктировать 608 процессору использовать ключ дешифрования для того, чтобы дешифровать код.
[00104] Способ 600 может включать в себя инструктирование 610 процессору размечать аппаратный анклав как несчитываемый. Код запуска может включать в себя инструкции для того, чтобы инструктировать 610 процессору размечать аппаратный анклав как несчитываемый для инструкций в аппаратном анклаве.
[00105] Фиг. 7 иллюстрирует определенные компоненты, которые могут включаться в компьютерную систему 700. Одна или более компьютерных систем 700 могут использоваться для того, чтобы реализовывать различные устройства, компоненты и системы, описанные в данном документе.
[00106] Компьютерная система 700 включает в себя процессор 701. Процессор 701 может представлять собой одно- или многомикросхемный микропроцессор общего назначения (например, машину с расширенным набором команд для RISC (компьютера с сокращенным набором команд) (ARM)), микропроцессор специального назначения (например, процессор цифровых сигналов (DSP)), микроконтроллер, программируемую вентильную матрицу и т.д. Процессор 701 может называться "центральным процессором (CPU)". Хотя только один процессор 701 показан в компьютерной системе 700 по фиг. 7, в альтернативной конфигурации, может использоваться комбинация процессоров (например, ARM и DSP).
[00107] Компьютерная система 700 также включает в себя запоминающее устройство 701, поддерживающее электронную связь с процессором 703. Запоминающее устройство 703 может представлять собой любой электронный компонент, допускающий сохранение электронной информации. Например, запоминающее устройство 703 может осуществляться в качестве оперативного запоминающего устройства (RAM), постоянного запоминающего устройства (ROM), носителей хранения данных на магнитных дисках, оптических носителей хранения данных, устройств флэш-памяти в RAM, встроенного запоминающего устройства, включенного в процессор, стираемого программируемого постоянного запоминающего устройства (EPROM), электрически стираемого программируемого постоянного запоминающего устройства (EEPROM), регистров и т.д., в том числе и в качестве комбинаций вышеозначенного.
[00108] Инструкции 705 и данные 707 могут сохраняться в запоминающем устройстве 703. Инструкции 705 могут выполняться посредством процессора 701, чтобы реализовывать часть или всю функциональность, раскрытую в данном документе. Выполнение инструкций 705 может заключать в себе использование данных 707, которые сохраняются в запоминающем устройстве 703. Любые из различных примеров модулей, компонентов, пакетов, приложений и операционных систем, описанных в данном документе, могут реализовываться, частично или полностью, в качестве инструкций 705, сохраненных в запоминающем устройстве 703 и выполняемых посредством процессора 701. Любые из различных примеров данных, описанных в данном документе, может находиться в числе данных 707, которые сохраняются в запоминающем устройстве 703 и используются во время выполнения инструкций 705 посредством процессора 701.
[00109] Компьютерная система 700 также может включать в себя один или более интерфейсов 709 связи для обмена данными с другими электронными устройствами. Интерфейс(ы) 709 связи могут быть основаны на технологии проводной связи, на технологии беспроводной связи либо на обеих технологиях. Некоторые примеры интерфейсов 709 связи включают в себя интерфейс универсальной последовательной шины (USB), Ethernet-адаптер, беспроводной адаптер, который работает в соответствии с протоколом беспроводной связи 1602.11 Института инженеров по электротехнике и радиоэлектронике (IEEE), Bluetooth®-адаптер беспроводной связи и порт инфракрасной (IR) связи.
[00110] Компьютерная система 700 также может включать в себя одно или более устройств 711 ввода и одно или более устройств 713 вывода. Некоторые примеры устройств 711 ввода включают в себя клавиатуру, мышь, микрофон, устройство дистанционного управления, кнопку, джойстик, шаровой манипулятор, сенсорную панель и световое перо. Некоторые примеры устройств 713 вывода включают в себя динамик и принтер. Один конкретный тип устройства вывода, которое типично включается в компьютерную систему 715, представляет собой устройство 715 отображения. Устройства 715 отображения, используемые с вариантами осуществления, раскрытыми в данном документе, могут использовать любую подходящую технологию проецирования изображений, такую как жидкокристаллический дисплей (ЖК-дисплей), светоизлучающий диод (светодиод), газовая плазма, электролюминесценция и т.п. Контроллер 717 отображения также может предоставляться для преобразования данных 707, сохраненных в запоминающем устройстве 703, в текст, графику и/или движущиеся изображения (надлежащим образом), показанные на устройстве 715 отображения.
[00111] Различные компоненты компьютерной системы 700 могут соединяться между собой посредством одной или более шин, которые могут включать в себя шину подачи мощности, шину управляющих сигналов, шину сигналов состояния, шину данных и т.д. Для понятности, различные шины проиллюстрированы на фиг. 7 в качестве системы 719 шин.
[00112] Технологии, раскрытые в данном документе, могут реализовываться в аппаратных средствах, в программном обеспечении, в микропрограммном обеспечении либо в любой комбинации вышеозначенного, если конкретно не описываются как реализуемые конкретным способом. Любые признаки, описанные как модули, компоненты и т.п., также могут реализовываться совместно в интегральном логическом устройстве или отдельно как дискретные, но имеющие возможность взаимодействовать логические устройства. При реализации в программном обеспечении, технологии могут реализовываться, по меньшей мере, частично посредством энергонезависимого машиночитаемого носителя, сохраняющего машиноисполняемые инструкции, которые, при их исполнении посредством по меньшей мере одного процессора, выполняют некоторые или все этапы, операции, действия или другую функциональность, раскрытую в данном документе. Инструкции могут организовываться в процедуры, программы, объекты, компоненты, структуры данных и т.д., которые могут выполнять конкретные задачи и/или реализовывать конкретные типы данных и которые могут комбинироваться или распределяться требуемым образом в различных вариантах осуществления.
[00113] Термин "процессор" может означать одно- или многомикросхемный микропроцессор общего назначения (например, машину с расширенным набором команд для RISC (компьютера с сокращенным набором команд) (ARM)), микропроцессор специального назначения (например, процессор цифровых сигналов (DSP)), микроконтроллер, программируемую вентильную матрицу и т.п. Процессор может представлять собой центральный процессор (CPU). В некоторых вариантах осуществления, комбинация процессоров (например, ARM и DSP) может использоваться для того, чтобы реализовывать часть или все технологии, раскрытые в данном документе.
[00114] Термин "запоминающее устройство" может означать любой электронный компонент, допускающий сохранение электронной информации. Например, запоминающее устройство может осуществляться в качестве оперативного запоминающего устройства (RAM), постоянного запоминающего устройства (ROM), носителей хранения данных на магнитных дисках, оптических носителей хранения данных, устройств флэш-памяти в RAM, встроенного запоминающего устройства, включенного в процессор, стираемого программируемого постоянного запоминающего устройства (EPROM), электрически стираемого программируемого постоянного запоминающего устройства (EEPROM), регистров и т.д., в том числе и в качестве комбинаций вышеозначенного.
[00115] Этапы, операции и/или действия способов, описанных в данном документе, могут меняться местами друг с другом без отступления от объема формулы изобретения. Другими словами, если конкретный порядок этапов, операций и/или действий не требуется для надлежащего функционирования способа, который описывается, порядок и/или использование конкретных этапов, операций и/или действий может модифицироваться без отступления от объема формулы изобретения.
[00116] Термин "определение" (и его грамматические разновидности) может охватывать широкий спектр действий. Например, "определение" может включать в себя расчет, вычисление, обработку, извлечение, исследование, поиск (к примеру, поиск в таблице, базе данных или другой структуре данных), выявление и т.п. Кроме того, "определение" может включать в себя прием (к примеру, прием информации), осуществление доступа (к примеру, осуществление доступа к данным в запоминающем устройстве) и т.п. Кроме того, "определение" может включать в себя разрешение, отбор, выбор, установление и т.п.
[00117] Термины "содержащий", "включающий в себя" и "имеющий" служат для того, чтобы быть включающими, и означают то, что могут быть предусмотрены дополнительные элементы, отличные от перечисленных элементов. Дополнительно, следует понимать, что ссылки на "один вариант осуществления" или "вариант осуществления" настоящего раскрытия не имеют намерение интерпретироваться как исключающие существование дополнительных вариантов осуществления, которые также включают изложенные признаки. Например, любой элемент или признак, описанный относительно варианта осуществления в данном документе, может быть комбинируемым с любым элементом или признаком любого другого варианта осуществления, описанного в данном документе, в случае совместимости.
[00118] Настоящее раскрытие может осуществляться в других характерных формах без отступления от сущности или характеристик. Описанные варианты осуществления должны рассматриваться как иллюстративные, а не ограничивающие. Следовательно, объем раскрытия определяется прилагаемой формулой изобретения, а не вышеприведенным описанием. Изменения, которые подпадают под смысл и рамки эквивалентности формулы изобретения, должны охватываться ее объемом.
Claims (32)
1. Способ защиты программного обеспечения от пиратства, при этом способ содержит этапы, на которых:
принимают множество двоичных файлов, причем каждый двоичный файл содержит код и данные;
модифицируют это множество двоичных файлов таким образом, что данные каждого двоичного файла могут быть расположены на произвольном расстоянии в памяти от кода этого двоичного файла;
шифруют код каждого двоичного файла; и
принимают из вычислительного устройства запрос на ключ дешифрования, причем вычислительное устройство включает в себя аппаратный анклав, при этом зашифрованный код каждого двоичного файла, но не данные каждого двоичного файла сохраняется в аппаратном анклаве.
2. Способ по п.1, дополнительно содержащий этап, на котором предоставляют в вычислительное устройство ключ дешифрования.
3. Способ по п.2, дополнительно содержащий этап, на котором аутентифицируют, перед предоставлением ключа дешифрования, подпись процессора, при этом процессор вычислительного устройства формирует подпись процессора, и запрос на ключ дешифрования включает в себя подпись процессора.
4. Способ по п.3, дополнительно содержащий этап, на котором проверяют, перед предоставлением ключа дешифрования, достоверность хеша, при этом запрос на ключ дешифрования включает в себя хеш.
5. Способ по п.1, в котором модификация упомянутого множества двоичных файлов включает в себя этап, на котором идентифицируют ссылки на данные в коде каждого двоичного файла и модифицируют ссылки на данные.
6. Способ по п.5, в котором модификация упомянутого множества двоичных файлов выполняется без доступа к исходному коду или отладочным символам для данного множества двоичных файлов.
7. Система для обеспечения защиты программно-реализованной программы от пиратства, содержащая:
один или более процессоров;
запоминающее устройство на электронной связи с одним или более процессорами; и
инструкции, сохраненные в запоминающем устройстве, причем инструкции исполняются одним или более процессорами, чтобы:
- принимать множество двоичных файлов, причем каждый двоичный файл содержит код и данные;
- модифицировать это множество двоичных файлов таким образом, что данные каждого двоичного файла могут быть расположены на произвольном расстоянии в памяти от кода этого двоичного файла;
- шифровать код каждого двоичного файла, но не данные каждого двоичного файла; и
- принимать из вычислительного устройства запрос на ключ дешифрования, причем вычислительное устройство включает в себя аппаратный анклав, при этом зашифрованный код каждого двоичного файла, но не данные каждого двоичного файла сохраняется в аппаратном анклаве, причем аппаратный анклав включает в себя инструкции, чтобы размечать аппаратный анклав как несчитываемый перед исполнением кода.
8. Система по п.7, в которой инструкции дополнительно исполняются одним или более процессорами, чтобы предоставлять в вычислительное устройство ключ дешифрования.
9. Система по п.8, в которой инструкции дополнительно исполняются одним или более процессорами, чтобы аутентифицировать, перед предоставлением ключа дешифрования, подпись процессора, при этом процессор вычислительного устройства формирует подпись процессора, и запрос на ключ дешифрования включает в себя подпись процессора.
10. Система по п.9, в которой инструкции дополнительно исполняются одним или более процессорами, чтобы проверять, перед предоставлением ключа дешифрования, достоверность хеша, при этом запрос на ключ дешифрования включает в себя хеш, и проверка достоверности хеша содержит сравнение хеша с верифицированным хеш-значением.
11. Машиночитаемый носитель, содержащий инструкции, которые исполняются одним или более процессорами, чтобы инструктировать вычислительной системе:
принимать запрос инициировать приложение, причем приложение содержит один или более файлов с исполняемым кодом и данными, при этом исполняемый код является зашифрованным;
загружать исполняемый код в аппаратный анклав на вычислительной системе;
загружать данные в местоположение в памяти на вычислительной системе, при этом местоположение находится за пределами аппаратного анклава и не находится на предварительно определенном расстоянии в памяти от исполняемого кода;
отправлять запрос на ключ дешифрования в сервер аутентификации;
дешифровать исполняемый код с использованием ключа дешифрования, при этом ключ дешифрования принимается вычислительной системой после отправки запроса на ключ дешифрования; и
размечать аппаратный анклав как несчитываемый.
12. Машиночитаемый носитель по п.11, дополнительно содержащий дополнительные инструкции, которые исполняются одним или более процессорами, чтобы инструктировать вычислительной системе загружать код запуска в аппаратный анклав.
13. Машиночитаемый носитель по п.12, дополнительно содержащий дополнительные инструкции, которые исполняются одним или более процессорами, чтобы инструктировать вычислительной системе измерять хеш кода запуска и исполняемого кода.
14. Машиночитаемый носитель по п.13, дополнительно содержащий дополнительные инструкции, которые исполняются одним или более процессорами, чтобы инструктировать вычислительной системе подписывать хеш с помощью подписи упомянутых одного или более процессоров.
15. Машиночитаемый носитель по п.14, при этом запрос на ключ дешифрования включает в себя подпись и хеш.
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/734,197 | 2020-01-03 |
Publications (1)
Publication Number | Publication Date |
---|---|
RU2812867C1 true RU2812867C1 (ru) | 2024-02-05 |
Family
ID=
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070192864A1 (en) * | 2006-02-10 | 2007-08-16 | Bryant Eric D | Software root of trust |
RU2602793C2 (ru) * | 2013-12-27 | 2016-11-20 | Интел Корпорейшн | Способ модификации разрешений на доступ к памяти в защищенной процессорной среде |
US20180165428A1 (en) * | 2016-12-09 | 2018-06-14 | Microsoft Technology Licensing, Llc | Application Piracy Prevention With Secure Enclave Protection Of Automatically Modularized Functions |
US20190180006A1 (en) * | 2017-12-07 | 2019-06-13 | International Business Machines Corporation | Facilitating build and deploy runtime memory encrypted cloud applications and containers |
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070192864A1 (en) * | 2006-02-10 | 2007-08-16 | Bryant Eric D | Software root of trust |
RU2602793C2 (ru) * | 2013-12-27 | 2016-11-20 | Интел Корпорейшн | Способ модификации разрешений на доступ к памяти в защищенной процессорной среде |
US20180165428A1 (en) * | 2016-12-09 | 2018-06-14 | Microsoft Technology Licensing, Llc | Application Piracy Prevention With Secure Enclave Protection Of Automatically Modularized Functions |
US20190180006A1 (en) * | 2017-12-07 | 2019-06-13 | International Business Machines Corporation | Facilitating build and deploy runtime memory encrypted cloud applications and containers |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP4085361B1 (en) | Protecting commercial off-the-shelf program binaries from piracy using hardware enclaves | |
KR101231561B1 (ko) | 서비스 커넬 설계에 의한 보안 정책 차별화 | |
US7051200B1 (en) | System and method for interfacing a software process to secure repositories | |
US7546587B2 (en) | Run-time call stack verification | |
US8417968B2 (en) | Secure repository with layers of tamper resistance and system and method for providing same | |
US8166304B2 (en) | Support for multiple security policies on a unified authentication architecture | |
US20190114401A1 (en) | On device structure layout randomization for binary code to enhance security through increased entropy | |
US10503931B2 (en) | Method and apparatus for dynamic executable verification | |
US20050021968A1 (en) | Method for performing a trusted firmware/bios update | |
JP2012181862A (ja) | クライアント・プラットフォーム上のコンテンツを保護する方法 | |
US9015454B2 (en) | Binding data to computers using cryptographic co-processor and machine-specific and platform-specific keys | |
US11354402B2 (en) | Virtual environment type validation for policy enforcement | |
KR20200020627A (ko) | 통합 보안 SoC를 이용한 IoT 디바이스의 안전한 부트 방법 | |
RU2812867C1 (ru) | Защита двоичных файлов типовых коммерческих программ от пиратства с использованием аппаратных анклавов | |
Futral et al. | Fundamental principles of intel® txt |