Открыть сервис

PKCS#7

PKCS#7 (Public-Key Cryptography Standards #7) — это криптографический стандарт, определяющий формат криптографических сообщений, предназначенных для защиты данных с использованием асимметричных (открытых) ключей. Официальное название стандарта — «Cryptographic Message Syntax» (CMS), хотя термин PKCS#7 часто используется как синоним для более ранней версии, лёгшей в основу CMS. Стандарт описывает структуру данных для подписывания, шифрования, аутентификации и хэширования произвольных сообщений (документов, файлов, программного кода) и широко применяется в системах электронной подписи, сертификатах X.509 и протоколах защищённого обмена данными, включая S/MIME для электронной почты.

История

Стандарт PKCS#7 был разработан компанией RSA Security (в то время — RSA Laboratories) в 1990-х годах как часть серии стандартов PKCS, направленных на унификацию криптографических протоколов. Первая версия вышла в 1993 году. В 1998 году на основе PKCS#7 был создан стандарт CMS (Cryptographic Message Syntax), который был принят IETF (Internet Engineering Task Force) как RFC 2630, а затем обновлён до RFC 5652 (2009 год) и последующих версий. Основное отличие CMS от PKCS#7 заключается в более гибкой поддержке алгоритмов и расширений, но синтаксис и структура сообщений остались обратно совместимыми. В России стандарт PKCS#7 не является государственным, но широко используется в коммерческих и корпоративных системах, в том числе в сочетании с ГОСТ-криптографией (например, в электронной подписи на платформе «Госключ»).

Структура сообщения PKCS#7

Сообщение PKCS#7 представляет собой структуру данных, закодированную в формате ASN.1 (Abstract Syntax Notation One) и обычно сериализованную в DER (Distinguished Encoding Rules) или BER (Basic Encoding Rules). Основные компоненты сообщения включают:

  • ContentInfoконтейнер, содержащий тип содержимого (OID — объектный идентификатор) и сами данные.
  • Content — собственно защищаемые данные (например, подписываемый документ или зашифрованный текст).
  • SignedData — тип содержимого для цифровой подписи: включает подписываемые данные, набор сертификатов (подписантов), список подписей и алгоритмы хэширования.
  • EnvelopedData — тип содержимого для шифрования: содержит зашифрованные данные, информацию об алгоритме шифрования и список получателей с их открытыми ключами.
  • DigestedData — тип содержимого для хэширования: включает хэш-значение данных без подписи.
  • EncryptedData — тип содержимого для симметричного шифрования (без использования открытых ключей, только с предварительным общим ключом).
  • AuthenticatedData — тип содержимого для аутентификации с ключом (MAC — Message Authentication Code), добавленный в более поздних версиях CMS.

Типы содержимого

SignedData (цифровая подпись)

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

  • version — версия синтаксиса.
  • digestAlgorithms — список алгоритмов хэширования (например, SHA-256, ГОСТ Р 34.11-2012).
  • encapContentInfo — подписываемые данные (могут быть вложены или переданы отдельно).
  • certificates — набор сертификатов X.509 подписантов (необязательно, но рекомендуется).
  • crls — списки отзыва сертификатов (необязательно).
  • signerInfos — список подписей: для каждого подписанта указывается идентификатор сертификата, алгоритм подписи (например, RSA, ГОСТ Р 34.10-2012) и сама подпись.

Пример применения: подпись документа в формате PDF (подпись PKCS#7 встраивается в файл), подпись электронных писем S/MIME.

EnvelopedData (шифрование)

Используется для шифрования данных с помощью открытого ключа получателя. Структура включает:

  • version.
  • recipientInfos — список получателей: для каждого указывается идентификатор сертификата, алгоритм шифрования ключа (например, RSA-OAEP, ГОСТ Р 34.10-2012) и зашифрованный симметричный ключ.
  • encryptedContentInfo — зашифрованные данные (симметричный алгоритм, например, AES-256, ГОСТ 28147-89) и сам шифротекст.

Пример применения: защита вложений в электронной почте (S/MIME), шифрование файлов.

DigestedData (хэширование)

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

EncryptedData (симметричное шифрование)

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

AuthenticatedData (аутентификация)

Добавлен в CMS (RFC 5652) для поддержки аутентификации с использованием ключа (MAC). Позволяет проверить, что данные не были изменены, и что отправитель знает общий ключ. Не обеспечивает неотказуемость (в отличие от подписи).

Применение

Электронная подпись

PKCS#7 является основой для большинства форматов электронной подписи, включая:

  • CAdES (CMS Advanced Electronic Signatures) — европейский стандарт, использующий CMS/PKCS#7 для долговременной подписи.
  • XAdES (XML Advanced Electronic Signatures) — хотя основан на XML, часто использует PKCS#7 для подписи вложений.
  • PAdES (PDF Advanced Electronic Signatures) — подпись PDF-документов, где подпись PKCS#7 встраивается в PDF.
  • S/MIME (Secure/Multipurpose Internet Mail Extensions) — защита электронной почты: подпись и шифрование писем и вложений.

Сертификаты X.509

Стандарт PKCS#7 используется для распространения сертификатов и списков отзыва (CRL) в виде контейнеров (например, файлы .p7b, .p7c). Файл .p7b (PKCS#7 без подписи) содержит только сертификаты, .p7c — только списки отзыва.

Криптопровайдеры и ГОСТ

В России PKCS#7 адаптирован для работы с национальными криптоалгоритмами (ГОСТ Р 34.10-2012, ГОСТ Р 34.11-2012, ГОСТ 28147-89). Многие российские криптопровайдеры (например, КриптоПро CSP, VipNet CSP) поддерживают создание и проверку подписей в формате PKCS#7 с использованием ГОСТ-сертификатов. Формат подписи в системе «Госуслуги» и «Госключ» также основан на PKCS#7/CMS.

Преимущества и недостатки

Преимущества

  • Стандартизация — единый формат, поддерживаемый большинством криптографических библиотек (OpenSSL, Bouncy Castle, Crypto++).
  • Гибкость — поддержка различных алгоритмов, множества подписантов, вложенных данных.
  • Обратная совместимость — CMS сохраняет совместимость с PKCS#7.
  • Интероперабельность — возможность обмена подписанными/зашифрованными данными между разными системами.

Недостатки

  • Размер — сообщения PKCS#7 могут быть значительно больше исходных данных из-за включения сертификатов и метаданных.
  • Сложность — синтаксис ASN.1 требует специальных инструментов для разбора.
  • Ограниченная поддержка потоковой обработки — данные должны быть полностью загружены в память для обработки (хотя существуют расширения для потокового режима).

Интересные факты

  • PKCS#7 является предшественником стандарта CMS, который в настоящее время является основным в IETF. Однако термин PKCS#7 до сих пор широко используется в документации и программном обеспечении.
  • Формат .p7b (PKCS#7 без подписи) часто используется для распространения цепочек сертификатов (например, корневых и промежуточных сертификатов центров сертификации).
  • В операционной системе Windows файлы подписей драйверов и обновлений (каталоги .cat) также используют формат PKCS#7.
  • Некоторые реализации PKCS#7 позволяют вкладывать подписанные данные внутрь зашифрованного контейнера (и наоборот), создавая многоуровневую защиту.

Критика

Основная критика PKCS#7 связана с его сложностью и избыточностью для простых задач. Например, для подписи одного документа часто требуется несколько килобайт служебной информации (сертификаты, алгоритмы, идентификаторы). Кроме того, стандарт не предусматривает встроенной поддержки долговременной подписи (с метками времени и архивацией), что привело к созданию расширений CAdES. Также отмечается, что ASN.1/DER-кодирование менее удобно для современных систем, чем JSON или XML, хотя для криптографических контейнеров оно остаётся стандартом.

Источники

  • RFC 2315: PKCS #7: Cryptographic Message Syntax, Version 1.5 (1998)
  • RFC 5652: Cryptographic Message Syntax (CMS) (2009)
  • RFC 5751: S/MIME Version 3.2 Message Specification (2010)
  • RSA Laboratories: PKCS #7 v1.5 (1993)
  • Национальный стандарт РФ ГОСТ Р 34.10-2012 «Информационная технология. Криптографическая защита информации. Процессы формирования и проверки электронной цифровой подписи»
  • Документация КриптоПро CSP: «Форматы криптографических сообщений»

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →