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 →