• Статья
  • Чтение занимает 6 мин

Подписи Microsoft Authenticode обеспечивают гарантии автору и целостности для двоичных данных. Отметка времени Authenticode основана на стандартных # подписях PKCS 7. Средства подписывания от корпорации Майкрософт позволяют разработчикам закреплять отметки времени в то же время, когда они прикреплены к сигнатурам Authenticode. Отметка времени позволяет проверять подписи Authenticode даже после истечения срока действия сертификатов, используемых для подписи.

Краткое введение в Authenticode

Authenticode применяет технологию цифровой подписи, чтобы гарантировать автор и целостность двоичных данных, таких как устанавливаемое программное обеспечение. Клиентский веб-браузер или другие системные компоненты могут использовать подписи Authenticode для проверки целостности данных при скачивании или установке программного обеспечения. Подписи Authenticode можно использовать во многих форматах программного обеспечения, включая CAB, exe, OCX и DLL.

Корпорация Майкрософт поддерживает список общедоступных центров сертификации (CAS). Издатели сертификатов Authenticode в настоящее время включают SSL.com, DigiCert, Сектиго (Comodo)и глобалсигн.

О криптографической отметке времени

В прошлом были предложены различные методы криптографических меток времени. См., например, Хабер и Сторнетта «как Time-Stamp цифровой документ» в журнале криптологи (1991) и беналох и де Маре «односторонние агрегаты: децентрализованная альтернатива цифровым подписям» в Springer Link-Верлаг конспектах в Ах. 765 (еурокрипт «93»). Расширенная выдержка из этой статьи доступна в Microsoft Research. (Эти ресурсы могут быть недоступны в некоторых языках и странах или регионах.) Поскольку время является физическим, а не математическим количеством, эти методы обычно связаны с тем, как связывать объекты, чтобы можно было определить порядок их создания или как эффективно сгруппировать объекты, которые могут быть описаны как созданные параллельно.

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

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

#Подписанные документы PKCS 7 и подписи от других сторон

PKCS # 7 — это стандартный формат для криптографических данных, включая подписанные данные, сертификаты и списки отзыва сертификатов (CRL). Конкретный # интересующий тип PKCS 7 в контексте отметки времени — это подписанные данные, соответствующие стандартному # типу содержимого сигнеддата PKCS 7.

Пакет PKCS # 7 состоит из сигнеддата , который определяет реальное содержимое и некоторые сведения о них и блоках сигнатур SignerInfo. SignerInfo может сам содержать подпись другой стороны, которая рекурсивно является еще одной SignerInfoой. В принципе, может присутствовать последовательность таких подписей. Подпись другой стороны — это атрибут, не прошедший проверку подлинности, в отношении сигнатуры в SignerInfo; то есть, он может быть прикреплен к исходной сигнатуре. В форме структуры:

Сигнеддата (PKCS # 7)

  • Версия (из PKCS # 7, обычно версия 1)
  • Дижесталгорисмс (коллекция всех алгоритмов, используемых блоками сигнатур SignerInfo, для оптимизированной обработки)
  • Контентинфо (contentType равняется сигнеддата, а содержимое или ссылка на содержимое)
  • Необязательные сертификаты (коллекция всех используемых сертификатов)
  • Необязательные списки отзыва сертификатов (коллекция всех списков отзыва сертификатов)
  • Блоки сигнатур SignerInfo (фактическая подпись, состоящая из одного или нескольких блоков подписи SignerInfo)

SignerInfo (блок сигнатуры)

  • Версия (из PKCS # 7, обычно версия 1)
  • Сертификат (поставщик и серийный номер для уникальной идентификации сертификата подписывания в сигнеддата)
  • Дижесталгорисм и Дижестенкриптионалгорисм, а также дайджест (хэш), а также Енкриптеддижест (фактическая подпись)
  • Необязательный Аусентикатедаттрибутес (например, подписанный этим подписавшим)
  • Необязательный Унаусентикатедаттрибутес (например, не подписанный этим подписавшим)

Примером атрибута, прошедшего проверку подлинности, является время подписи (OID 1.2.840.113549.1.9.5), поскольку оно является частью того, что это за подпись службы отметок времени. Примером непроверенного атрибута является подпись другой стороны (OID 1.2.840.113549.1.9.6), так как она может быть прикреплена после подписи. В этом случае сам SignerInfo содержит SignerInfo (подпись другой стороны).

Примечание

Объект, подписанный в другой подписи, является исходной сигнатурой (то есть Енкриптеддижест исходного SignerInfo).

Средство SignTool доступно для подписывания Authenticode и двоичных данных отметок времени. Средство устанавливается в папку bin пути установки пакета средств разработки программного обеспечения (SDK) для Microsoft Windows.

Двоичные данные для подписи и отметок времени относительно просты при использовании средства SignTool. Издатель должен получить сертификат подписи кода из коммерческого ЦС для подписи кода. Для удобства Корпорация Майкрософт публикует и обновляет список общедоступных центров сертификации, включая те, которые выдают сертификаты Authenticode. При готовности к публикации объектные файлы подписываются и отметок времени с использованием соответствующих параметров командной строки с помощью средства SignTool. Результатом любой операции SignTool всегда является # Формат PKCS 7 сигнеддата.

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

Аргумент Описание
/T хттпаддресс Указывает, что файл должен иметь метку времени. Должен быть указан URL-адрес, указывающий адрес сервера отметок времени. параметр /t можно использовать одновременно с командами » подписать » и » отметка времени » средства SignTool.

Дополнительные сведения о средствах, которые могут быть полезны в этом контексте, см. в разделе средства шифрования и средство SignTool.

Сведения о реализации и формат сети

Средство SignTool использует реализацию Windows Authenticode для создания подписей меток времени. Authenticode работает с двоичными файлами, например CAB, exe, DLL или OCX. Сначала Authenticode создает подпись, выдавая PKCS # 7 сигнеддата. Это сигнеддата , который должен быть скрепляющая подпись, как описано в PKCS # 9.

Процесс подписи от другой стороны выполняется в четыре этапа:

  1. Скопируйте сигнатуру (то есть Енкриптеддижест) из SignerInfo в # сигнеддатаPKCS 7.
  2. Создайте запрос метки времени, содержимое которого является исходной подписью. Отправьте его в нотации абстрактного синтаксиса сервера метки времени (ASN. 1), закодированного как тиместампрекуест.
  3. Получение отметки времени, отформатированной в виде второй PKCS # 7 сигнеддата, возвращаемой сервером отметок времени.
  4. Скопируйте SignerInfo из метки времени непосредственно в оригинальный # сигнеддатаPKCS 7, как подпись PKCS 9 (т. е. # атрибут без проверки подлинности в SignerInfo исходного файла).

Запрос метки времени

Запрос метки времени отправляется в сообщении HTTP 1,1 POST. В заголовке HTTP директива CacheControl имеет значение No-cache, а директива Content-Type имеет значение Application/октет-Stream. Текст HTTP-сообщения представляет собой кодировку Base64 для запроса метки времени ( distinguished Encoding Rules (Der)).

Кроме того, в настоящее время директива Content-Length также используется при формировании HTTP-сообщения, так как она помогает серверу отметок времени искать место запроса в HTTP-запросе POST.

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

Запрос метки времени — это сообщение в кодировке ASN. 1. Формат запроса выглядит следующим образом.

TimeStampRequest ::= SEQUENCE {
   countersignatureType OBJECT IDENTIFIER,
   attributes Attributes OPTIONAL, 
   content  ContentInfo
}

Каунтерсигнатуретипе — это идентификатор объекта (OID), который определяет это как отметку времени от другой стороны и должен быть точным идентификатором OID 1.3.6.1.4.1.311.3.2.1.

В запрос метки времени атрибуты в данный момент не включены.

Содержимое является Контентинфо, как определено в PKCS # 7. Содержимое представляет собой подписанные данные. Для отметки времени подписи ContentType должен быть данными, а содержимое должно быть Енкриптеддижест (Подпись) из SignerInfo # содержимого PKCS 7 для отметки времени.

Ответ метки времени

Ответ метки времени также отправляется в сообщении HTTP 1,1. В заголовке HTTP директива Content-Type также устанавливается в значение Application/октет-Stream. Текст HTTP-сообщения представляет собой кодировку Base64 в кодировке DER для отклика метки времени.

Отметка времени — это сообщение, # подписанное PKCS 7, подписанное на время Стампер. Контентинфо # сообщения PKCS 7 идентично контентинфо, полученной в отметке времени. Содержимое PKCS # 7 содержит атрибут проверки подлинности времени подписи (определенный в PKCS # 99, OID 1.2.840.113549.9.5).

После того как Authenticode получит метку времени с сервера, Authenticode включает метку времени в исходную # сигнеддата PKCS 7 в качестве другой подписи. Для этого Контентинфо возвращенного PKCS # 7 сигнеддата отбрасывается, а SignerInfo возвращенной метки времени копируется как подпись другой стороны в SignerInfo исходного файла PKCS # 7 сигнеддата. Цепочка сертификатов для времени Стампер также копируется в сертификаты исходного файла PKCS # 7 сигнеддата в качестве атрибута, не прошедшего проверку подлинности, в исходном подписавшем.

Дополнительные сведения о PKCS и других субъектах безопасности см. в библиотеке содержимого веб-сайта RSA.