Информационная безопасность

       

Использование программных идентификаторов


Программные идентификаторы используются, в частности механизмами хранилищ запечатанных данных (sealed storage) и засвидетельствования (attestation).

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

На рис. 1 представлены примитивы Seal и Unseal. Программы могут вызывать примитив Seal и называть свой программный идентификатор (так происходит в большинстве случаев) или программный идентификатор какой-либо другой программы как объекта, имеющего доступ к данной информации. Если примитив Unseal вызывается программой, идентификатор которой «запечатан», он возвращает «запечатанный» секрет и программный идентификатор запечатывающего компонента (sealer). Если обратившаяся с запросом программа имеет другой идентификатор, Unseal возвращает ошибку.

Seal предназначен для локального хранения секретных данных. «Запечатанные» секреты недоступны для других компьютеров. Существует достаточно широкий диапазон возможностей реализации примитивов Seal и Unseal [6]. В общем случае уровень реализации — будь то аппаратный уровень или операционная система — должен иметь доступ к криптографическому ключу K.

В демонстрационной реализации Seal создает структуру данных, содержащую секретную строку, предоставленную программой, которая запустила механизм, идентификатор программы, для которой должны быть открыты запечатанные данные, а также идентификатор программы, вызвавшей Seal, — чтобы распечатывающий элемент мог идентифицировать источник данных [7]. Для шифрования этой структуры данных и защиты ее целостности в механизме Seal используется примитив шифрования с аутентификацией (authenticated encryption primitive), который может сочетать шифрование и аутентификацию сообщения.


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

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

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

Засвидетельствование. Хранение запечатанных данных есть ограниченная форма симметричного шифрования, при использовании которой программы обеспечивают длительное хранение долгосрочных секретов. Засвидетельствование же — это вариант шифрования с открытым ключом, обеспечивающий программам возможность предъявления удаленным контрагентам своих прав доступа через предоставление своих программных идентификаторов [8].

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

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


Содержание раздела