PKCS #7

PKCS #7 (Public-Key Cryptography Standards #7) — это стандарт, разработанный компанией RSA Laboratories, который определяет общий формат для хранения и передачи подписанных и зашифрованных сообщений, а также цепочек доверия. Он служит основой для реализации электронной цифровой подписи (ЭЦП), шифрования данных и проверки сертификатов.

Также известен как Cryptographic Message Syntax (CMS) в стандарте RFC 2315 и RFC 5652, где он получил дальнейшее развитие и стал частью более широких протоколов безопасности.

PKCS #7 поддерживает:

  • Создание и проверку электронных подписей;
  • Зашифровку данных;
  • Передачу цепочки сертификатов;
  • Обмен криптографическими объектами между системами.

Основные характеристики

ХарактеристикаОписание
РазработчикRSA Laboratories
СтандартыRFC 2315, RFC 5652
Форматы файлов.p7b, .p7c, .p7s, .pem
ИспользованиеПодпись, шифрование, доверенные сертификаты
СовместимостьSSL/TLS, S/MIME, ERP, ЭДО

Назначение PKCS #7

Основное предназначение стандарта — обеспечение безопасного обмена данными посредством:

  • Цифровой подписи (для гарантии неотказуемости);
  • Шифрования сообщений (для конфиденциальности);
  • Передачи цепочек сертификатов (для верификации открытых ключей).

PKCS #7 позволяет создавать структурированные данные, которые могут быть:

  • Подписаны несколькими участниками;
  • Зашифрованы для конкретного получателя;
  • Проверены с помощью доверенного корневого сертификата.

Структура PKCS #7

Стандарт определяет несколько типов данных:

ТипОписание
signedDataПодписанные данные, содержащие содержимое и одну или несколько подписей
envelopedDataЗашифрованные данные, доступные только при наличии закрытого ключа
digestedDataСообщение, заверенное хэш-функцией
encryptedDataДанные, зашифрованные с использованием алгоритма шифрования
certificates-onlyКонтейнер с набором сертификатов без подписей

Пример содержимого в формате PEM:

-----BEGIN PKCS7-----
MIIEowYJKoZIhvcNAQcCoIIEcw...
-----END PKCS7-----

Где применяется PKCS #7?

1. S/MIME

  • Используется для шифрования и подписания электронных писем;
  • Применяется в почтовых клиентах: Outlook, Apple Mail, Thunderbird.

2. SSL/TLS-сертификаты

  • Входит в состав клиентских и серверных сертификатов;
  • Может содержать цепочку доверия для установления HTTPS-соединения.

3. Электронный документооборот (ЭДО)

  • Формат используется в системах:
    • ЕГАИС;
    • ГИС ЭПД;
    • 1С-Отчётность;
    • Контур.Экстерн.

4. Управление сертификатами

  • Позволяет собирать несколько сертификатов в один контейнер;
  • Удобен при импорте/экспорте доверенных лиц в Windows, Linux, Java KeyStore.

5. Подписания документов

  • Поддерживается в программах, работающих с квалифицированной ЭЦП;
  • Может быть частью запроса на выпуск сертификата (CSR) или ответа от удостоверяющего центра.

Преимущества стандарта PKCS #7

  • Единая структура — упрощает обмен криптоданными между системами;
  • Многообразие функций — поддерживает подпись, шифрование, хэширование;
  • Широкая совместимость — работает с большинством библиотек и операционных систем;
  • Интеграция с PKI — позволяет передавать цепочки доверия и сертификаты;
  • Юридическая значимость — может содержать квалифицированную подпись при использовании в государственных системах.

Как использовать PKCS #7 в работе?

Создание подписи через OpenSSL

# Подписание файла с использованием сертификата и приватного ключа
openssl smime -sign -in file.txt -out signed.p7 -signer certificate.pem -inkey private.key -outform DER

Проверка подписи

openssl smime -verify -in signed.p7 -inform DER -content file.txt

Импорт цепочки сертификатов

keytool -importcert -file chain.p7 -keystore keystore.jks

Современные реализации

РеализацияПоддержка
OpenSSL✅ Полная поддержка
Java KeyStore (JKS)✅ Через keytool и keyStore
Microsoft CryptoAPI
КриптоПро CSP
Bouncy Castle
Wordfey✅ При интеграции с HSM и токенами

Форматы, связанные с PKCS #7

РасширениеОписание
.p7b, .p7cСертификаты без приватного ключа
.p7sПодписанные данные (например, PDF с ЭЦП)
.pemТекстовое представление PKCS #7 в Base64
.derБинарный формат, используется в некоторых системах
.pfx, .p12Может содержать PKCS #7 вместе с приватным ключом

Сравнение с другими стандартами

СтандартНазначениеОсобенности
PKCS #1RSA-ключи и подписиТолько RSA, без упаковки
PKCS #7Подписанные / зашифрованные сообщенияПоддерживает несколько участников и типов подписей
PKCS #8Закрытые ключиОбёртка вокруг приватного ключа
PKCS #10CSR-запросыИспользуются для получения сертификатов
PKCS #12Контейнеры с ключами и сертификатамиПолный набор данных в одном файле

Безопасность и защита информации

  • Все данные, оформленные в формате PKCS #7, остаются неизменными после подписания;
  • Поддержка нескольких подписей позволяет создавать документы, подписанные разными сторонами;
  • Хранение сертификатов в формате PKCS #7 обеспечивает целостность цепочки доверия;
  • Шифрование с помощью envelopedData гарантирует, что получить данные может только указанный получатель.

Практические примеры применения

✔ В электронном документообороте: в системах ГИС ЭПД и ЕГАИС документы могут содержаться в формате PKCS #7, что позволяет: хранить полную цепочку доверия, проверять подлинность данных, использовать документ в юридически значимом обороте.

✔ В электронной почте (S/MIME): отправленное письмо подписывается и отправляется в формате PKCS #7, а получатель может проверить подлинность с помощью доверенного сертификата.

✔ В ERP-системах: 1С, SAP, Oracle используют PKCS #7 для подписания отчетности и обмена данными с налоговыми органами.

✔ В API и межсервисном взаимодействии: используется в REST- и SOAP-интерфейсах для защиты данных и аутентификации.

Частые ошибки и решения

ПроблемаВозможное решение
Не найден сертификатУбедитесь, что в контейнере есть все необходимые сертификаты
Неверная подписьПроверьте целостность документа и актуальность сертификата
Формат не поддерживаетсяКонвертируйте в другой формат (.PEM, .DER, .pfx)
Ошибка чтения контейнераУстановите последнюю версию OpenSSL или Bouncy Castle
Отсутствие приватного ключаУбедитесь, что он находится в отдельном хранилище или контейнере PKCS #12

Будущее стандарта

Хотя PKCS #7 считается устаревающим, он всё ещё широко используется. Его замещает CMS (Cryptographic Message Syntax), но многие системы продолжают работать с PKCS #7 из-за обратной совместимости.

Будущее видится в:

  • Переходе на CMS;
  • Усилении требований к проверке подписей;
  • Внедрении поддержки современных алгоритмов (ECDSA, EdDSA);
  • Повышении автоматизации проверки в ERP и сервисах ЭДО.

Заключение

PKCS #7 — это важный элемент криптографической экосистемы, особенно в сфере электронного документооборота, электронной почты и управления сертификатами. Он лежит в основе многих протоколов, включая S/MIME, и до сих пор активно используется в государственных и коммерческих системах.

Если ваш бизнес:

  • взаимодействует с государственными системами (ГосЭДО, ГосЛог);
  • использует квалифицированную ЭЦП;
  • обменивается документами в электронном виде,

то понимание и правильное использование формата PKCS #7 является необходимым элементом цифровой инфраструктуры.