Стандарт Cryptographic Message Syntax — сертификаты PKCS #7 (.p7b)
Cryptographic Message Syntax Standard — сертификаты PKCS #7. В отличие от формата X.509 сертификаты стандарта PKCS #7 (Public Key Cryptography Standard — криптографический стандарт открытого ключа) позволяют сохранить не только сам сертификат, но и все сертификаты в пути сертификации. Это позволяет сохранить доверие к сертификату на другом компьютере. Имеет расширение .p7b.
________________________________________________
© 2002 — 2007, Digt. Адрес для контактов: info@digt.ru;
Техническая поддержка: support@digt.ru
Создание и проверка электронной подписи в формате PKCS#7 с использованием квалифицированного сертификата
При осуществлении электронного документооборота требуется создание электронной подписи документа для придания ему юридической значимости.
Стандарты на ЭП являются двухуровневыми. Первый уровень представляет собой непосредственно ЭП документа (подпись с помощью закрытого ключа). Вторым уровнем называют совокупность ЭП и всех документов, необходимых для обеспечения юридической значимости ЭП: сертификат ключа, с помощью которого осуществлялось подписание, или цепочку сертификатов, время создания подписи и т.д.
В Российской Федерации приняты: стандарт ЭП первого уровня — ГОСТ 34-10.2001, второго уровня — PKCS#7 с возможностью добавления временных меток.
Это обязывает владельца квалифицированного сертификата, например, при подаче заявления в государственный орган создать электронную подпись документа в формате PKCS#7 и подать её вместе с заявлением. Обратившееся лицо будет однозначно идентифицировано, осуществится проверка целостности и неизменности заявления с момента создания и проверка электронной подписи заявителя, которая при успешности всех предыдущих проверок будет приравнена к собственноручной подписи заявителя.
Ключ подписи и его сертификат могут распространяться в двух формах:
- Файл-контейнер;
- Электронный ключ (например, Rutoken или eToken).
Файл-контейнер
Если нет желания тратиться на электронный ключ, можно получить в удостоверяющем центре ключ подписи и сертификат в виде файла-контейнера, который представляет собой программный аналог электронного ключа. Доступ к ключу подписи, содержащемуся в файле-контейнере осуществляется при помощи программного криптопровайдера с использованием пароля (доступ к ключу подписи, содержащемуся в электронном ключе осуществляется при помощи встроенного в ключ криптопровайдера с использованием пин-кода).
Внешние программы, например Microsoft Outlook, Microsoft Word/Excel или любая программа создания и проверки электроной подписи, при вызове функций подписания или проверки обращаются к части операционной системы, отвечающей за криптографию (Microsoft Crypto API), которая в зависимости от задействованных криптографических алгоритмов вызывает соответствующий криптопровайдер. В нашем случае используется отечественная криптография. Поскольку Microsoft Windows не имеет встроенной поддержки российских алгоритмов электронной подписи, следует установить криптопровайдер отечественной криптографии.
Если сертификат подписи был заранее установлен в систему (в Хранилище сертификатов), то криптопровайдер знает, в каком контейнере от какого сертификата лежит закрытый ключ, и требует от пользователя ввода пароля от этого контейнера. Если закрытый ключ расположен на электронном ключе, криптопровайдер запрашивает пин-код. При успешном вводе пароля контейнер открывается, осуществляются операции с использованием закрытого ключа, после чего контейнер закрывается.
Про использование криптопровайдера и Microsoft Outlook/Office рассказывается в статье Использование электронного ключа доступа к порталу госуслуг для осуществления электронной подписи. Если требуется создать электронную подпись произвольного документа, например, XML-формы запроса «Единого реестра доменных имен, указателей страниц сайтов в сети «Интернет» и сетевых адресов, позволяющих идентифицировать сайты в сети «Интернет», содержащие информацию, распространение которой в Российской Федерации запрещено» с сайта http://zapret-info.gov.ru, необходимо программное обеспечение с соответствующим функционалом (создание электронной подписи в формате PKCS#7).
При использовании программного криптопровайдера создание подписи с использованием квалифицированного сертификата, содержащегося в файле-контейнере и на электронном ключе ничем не отличается.
При использовании ключей подписи, содержащихся на электронных ключах, есть три варианта: использовать программный криптопровайдер (рассмотрено выше), использовать общедоступное программное обеспечение, реализующее стандартный интерфейс работы с электронными ключами PKCS#11, или создавать самописное ПО, использующее API разработчика электронного ключа. Последние два варианта используют встроенный в электронный ключ криптопровайдер.
Рассмотрим частный случай второго варианта.
OpenSUSE Linux + OpenSSL + OpenSC + Rutoken ECP
Здесь будет целесообразнее изложить материал в виде пошагового HOWTO.
1. OpenSUSE 12.2, доустанавливаем недостающее ПО
zypper install openssl engine_pkcs11 pcsc-ccid libpcsclite1 libtool opensc
Включаем автостарт демона смарт-карт:
chkconfig pcscd on
2. Обеспечиваем поддержку в OpenSSL электронного ключа Aktiv Rutoken ECP
Скачиваем с сайта производителя драйвера и настройки (всегда полезно поискать свежую версию):
wget http://www.rutoken.ru/download/software/forum/pkcs11-gost-linux-2-x86.zip
Внутри архива — 4 файла:
libp11.so.2 libpkcs11_gost.so librtpkcs11ecp.so openssl.cnf
Добавляем в исходный файл /etc/ssl/openssl.cnf секции:
[openssl_def] engines = engine_section [engine_section] pkcs11 = pkcs11_section [gost_section] default_algorithms = ALL [pkcs11_section] engine_id = pkcs11_gost dynamic_path = /usr/lib/pkcs11-gost/libpkcs11_gost.so MODULE_PATH = /usr/lib/pkcs11-gost/librtpkcs11ecp.so init = 0
, а в самое начало файла — строку «openssl_conf = openssl_def»
Раскладываем библиотеки из архива по соответствующим каталогам, файл libp11.so.2 кладём в каталог /usr/lib/
Проверяем работоспособность электронного ключа:
pkcs11-tool --module /usr/lib/pkcs11-gost/librtpkcs11ecp.so -Ol
Будет запрошен пин-код электронного ключа и выдан список объектов на ключе.
3. Считываем с электронного ключа сертификат подписи
Среди объектов, хранящихся на электронном ключе нас интересуют сертификат и закрытый ключ (поле ID уникально для каждой тройки объектов: открытый ключ, закрытый ключ, сертификат):
Certificate Object, type = X.509 cert label: ViPNet Certificate ID: e59e26a30000000020ffbbd2567ccd01 Private Key Object; GOSTR3410 PARAMS OID: 06072a850302022400 label: ViPNet PrivateKey ID: e59e26a30000000020ffbbd2567ccd01 Usage: decrypt, sign
Извлекаем сертификат, который будет использоваться для подписи, в файл signer_cert.crt:
pkcs11-tool --module /usr/lib/pkcs11-gost/librtpkcs11ecp.so -l -r \ -y cert -d e59e26a30000000020ffbbd2567ccd01 -o signer_cert.crt
В этой команде -d e59e26a30000000020ffbbd2567ccd01 — ID сертификата.
4. Создаём электронную подпись
Имеется некий файл document.txt, для которого мы хотим создать электронную подпись.
openssl smime -engine pkcs11_gost -sign -in document.txt \ -out document.txt.attached.p7s -outform der -noverify -binary \ -signer certpem.crt -inkey e59e26a30000000020ffbbd2567ccd01 \ -keyform engine -nodetach
openssl smime -engine pkcs11_gost -sign -in document.txt \ -out document.txt.detached.p7s -outform der -noverify -binary \ -signer certpem.crt -inkey e59e26a30000000020ffbbd2567ccd01 \ -keyform engine
Поле -inkey e59e26a30000000020ffbbd2567ccd01 определяет ID закрытого ключа, использующегося при создании подписи.
На выходе получаем файлы: document.txt.detached.p7s, который содержит электронную подпись файла document.txt, и document.txt.attached.p7s, который содержит текст документа + его электронную подпись.
5. Проверяем электронные подписи
openssl smime -verify -in document.txt.attached.p7s -noverify -inform der
openssl smime -verify -in document.txt.attached.p7s -noverify -inform der -content document.txt
Примечание
Во всех командах openssl используется параметр -noverify — не происходит автоматическая проверка сертификата подписи на валидность.
17 декабря 2012 г., Лабазников Н.В., Начальник отдела сетевых технологий и информационной безопасности ООО»УЦИ»
Все права на статью принадлежат ООО «УЦИ». Разрешается копирование статьи без уведомления правообладателя. При копировании необходимо указывать ссылку на источник.
© ООО «Удостоверяющий Центр Интернет» +7 (495) 730 28 82
В отношении персональных данных ООО «УЦИ» придерживается политики
Структура PKCS7-файла
Довелось мне на днях столкнуться с такой напастью как p7s файл и, как вследствие этого, с Cryptographic Message Syntax (CMS). На хабре нашлась интересная статья описывающая структуру CMS данных, но в ней к сожалению нет примера, позволяющего наглядно продемонстрировать CMS на практике. Я хочу немного дополнить ту статью и разобрать внутренности файла цифровой подписи p7s.
ASN.1
Что же такое Cryptographic Message Syntax? Это стандарт, описывающий структуру сообщений, полученных с использованием криптографии.
В стандарте описывается шесть типов данных: data, signedData, envelopedData, signedAndEnvelopedData, digestedData, and encryptedData. В данном топике я расскажу о типе signedData (данные с электронной подписью).
Прежде всего следует сказать, что стандартный p7s файл имеет ASN.1 структуру.
ASN.1 — формат записи, с помощью которого можно описывать сложные структуры данных, состоящие из различных типов.
Приведу краткую выдержку из своего старого топика про x.509 сертификаты:
ASN.1-кодировка описывается следующим правилом. Сперва записываются байты, характеризующий тип данных, затем последовательность байтов хранящих сведения о длине данных и лишь после этого следуют сами данные.
К примеру, для кодировки целого числа INTEGER 65537 используется следующая форма: 02 03 01 00 01.
Здесь первый байт 02, определяет тип INTEGER (полную таблицу типов вы можете найти например тут), второй байт 03 показывает длину блока. А следующие за этим байты 01 00 01, являются шестнадцатеричной записью нашего числа 65537.
В нашем случае, для описание простейшего самоподписанного сертификата, достаточно 9 типов данных. Приведем таблицу кодирования для этих типов:
Наименование типа | Краткое описание | Представление типа в DER-кодировке |
---|---|---|
SEQUENCE | Используется для описания структуры данных, состоящей из различных типов. | 30 |
INTEGER | Целое число. | 02 |
OBJECT IDENTIFIER | Последовательность целых чисел. | 06 |
UTCTime | Временной тип, содержит 2 цифры для определения года | 17 |
GeneralizedTime | Расширенный временной тип, содержит 4 цифры для обозначения года. | 18 |
SET | Описывает структуру данных разных типов. | 31 |
UTF8String | Описывает строковые данные. | 0C |
NULL | Собственно NULL | 05 |
BIT STRING | Тип для хранения последовательности бит. | 03 |
Подробное описание ASN.1 дано в статье «ASN.1 простыми словами». Я же просто расскажу какие сведения можно извлечь из самого обыкновенного p7s файла.
Структура P7S файла
В стандарте CMS приводится описание структуры файла содержащего сведения об ЭЦП.
SignedData ::= SEQUENCE
- CMSVersion — целое число, обозначающее версию используемого синтаксиса.
- DigestAlgorithmIdentifiers — идентификатор одной или нескольких хеш-функций которые используются при вычислении подписей.
- EncapsulatedContentInfo — собственно данные, которые были подписаны.
- CertificateSet — набор всех необходимых сертификатов, необходимых для проверки подписей.
- RevocationInfoChoices — набор списков отзыва сертификатов.
- SignerInfos — структура данных содержащая информацию о подписанте.
Самый обычный файл с электронной цифровой подписью
30 82 03 99 06 09 2A 86 48 86 F7 0D 01 07 02 A0 82 03 8A 30 82 03 86 02 01 01 31 0B 30 09 06 05 2B 0E 03 02 1A 05 00 30 27 06 09 2A 86 48 86 F7 0D 01 07 01 A0 1A 04 18 54 00 65 00 73 00 74 00 20 00 6D 00 65 00 73 00 73 00 61 00 67 00 65 00 A0 82 02 6B 30 82 02 67 30 82 01 D0 A0 03 02 01 02 02 11 00 D9 01 B8 B8 2F 74 CA 0E 8D 84 48 5A 22 65 E1 C3 30 0D 06 09 2A 86 48 86 F7 0D 01 01 05 05 00 30 21 31 10 30 0E 06 03 55 04 03 0C 07 54 65 73 74 20 43 41 31 0D 30 0B 06 03 55 04 0A 0C 04 54 65 73 74 30 1E 17 0D 31 35 30 34 32 39 31 32 33 33 32 30 5A 17 0D 31 35 30 35 30 36 31 32 33 33 32 30 5A 30 43 31 0D 30 0B 06 03 55 04 0C 0C 04 54 65 73 74 31 0D 30 0B 06 03 55 04 0B 0C 04 54 65 73 74 31 0D 30 0B 06 03 55 04 0A 0C 04 54 65 73 74 31 14 30 12 06 03 55 04 03 0C 0B 5B 54 45 53 54 5D 20 54 65 73 74 30 81 9F 30 0D 06 09 2A 86 48 86 F7 0D 01 01 01 05 00 03 81 8D 00 30 81 89 02 81 81 00 92 98 ED 87 B0 E9 DB 66 AB 06 D1 8E 7B 1B 17 40 10 98 81 D3 06 F3 B5 CA A7 FC D4 FF CB A2 2D 98 48 F9 1E 10 25 0F C6 1C 45 5D B7 A6 76 57 60 E7 BF BF DB 66 E0 D7 FC 1F 0B A1 99 1B EE C0 0D AA 76 EE 9A B8 C6 85 5D D5 C8 FA AF F8 FD 12 67 DE 6F 2D BE 5C 3E B1 88 1F 49 B2 90 AA DD B2 85 A6 46 BA 93 14 65 8C C5 20 5A AC 59 62 59 51 F1 7F BC 1E 7A D7 9F F8 8B 3B 48 2A 43 2B 7E 20 44 4B 02 03 01 00 01 A3 7D 30 7B 30 0B 06 03 55 1D 0F 04 04 03 02 04 F0 30 2C 06 03 55 1D 25 01 01 FF 04 22 30 20 06 08 2B 06 01 05 05 07 03 04 06 08 2B 06 01 05 05 07 03 02 06 0A 2B 06 01 04 01 82 37 0A 03 0C 30 1D 06 03 55 1D 0E 04 16 04 14 C7 05 8A 12 A4 B5 B7 3E F4 E5 87 6C 34 B9 BB 32 15 5E 96 91 30 1F 06 03 55 1D 23 04 18 30 16 80 14 6A E7 AB 14 AA E8 B4 C0 A8 9E 18 9D 81 68 B1 19 9F FB 25 B0 30 0D 06 09 2A 86 48 86 F7 0D 01 01 05 05 00 03 81 81 00 20 07 EF BF 72 C4 ED B8 8F B4 03 6A B8 F9 0E 16 84 89 7F B5 C5 0E 31 17 CF 80 9D B1 FB C1 C6 8B CF 3F 9C 34 51 76 21 55 29 30 E9 F3 B7 39 F5 4C E0 81 C1 04 70 67 C5 0C AE 07 80 B2 44 CB 18 3F 0E 68 67 BC EB AA 95 75 8F 7C 18 46 5B AD 96 30 70 CA 63 09 99 54 86 87 27 0A D6 DE 36 26 6A 85 64 53 B5 03 22 59 72 7F 3E 46 43 60 C2 AA EC 70 9E F7 0F 13 F5 D6 66 49 EC FE 7A 52 19 D1 27 40 31 81 DB 30 81 D8 02 01 01 30 36 30 21 31 10 30 0E 06 03 55 04 03 0C 07 54 65 73 74 20 43 41 31 0D 30 0B 06 03 55 04 0A 0C 04 54 65 73 74 02 11 00 D9 01 B8 B8 2F 74 CA 0E 8D 84 48 5A 22 65 E1 C3 30 09 06 05 2B 0E 03 02 1A 05 00 30 0D 06 09 2A 86 48 86 F7 0D 01 01 01 05 00 04 81 80 57 14 04 A3 2C 01 5B 61 B9 57 F0 02 95 0A 33 E0 94 75 CA 66 DE D0 90 93 8A E2 1A FE 6E 0B 39 C9 02 38 50 DE 7C 38 48 27 36 E9 7B FF 6C B4 DB B0 60 5C CD 78 78 54 52 54 99 A9 C4 2B 28 D7 BA AD 19 B2 6D 0D 43 B6 23 1B 5E DC B2 3E 70 FF B4 68 1D 1C 3B 6F D5 A4 0D 50 8F 55 45 7E 04 7D 2C C5 C3 80 3A 23 27 D2 E2 B4 1A 05 2E D1 3E 3A 1E 97 88 D9 12 AE B3 56 49 E9 34 97 EF 47 70 E1 66 9E
Используя ASN.1-парсер можно легко разобрать что скрывается за шестнадцатеричным кодом.
SEQUENCE < OBJECTIDENTIFIER 1.2.840.113549.1.7.2 (signedData) [0] < SEQUENCE < INTEGER 0x01 (1 decimal) SET < SEQUENCE < OBJECTIDENTIFIER 1.3.14.3.2.26 (id_sha1) NULL >> SEQUENCE < OBJECTIDENTIFIER 1.2.840.113549.1.7.1 (data) [0] < OCTETSTRING 540065007300740020006D00650073007300610067006500 >> [0] < SEQUENCE < SEQUENCE < [0] < INTEGER 0x02 (2 decimal) >INTEGER 0x00D901B8B82F74CA0E8D84485A2265E1C3 SEQUENCE < OBJECTIDENTIFIER 1.2.840.113549.1.1.5 (sha1WithRSAEncryption) NULL >SEQUENCE < SET < SEQUENCE < OBJECTIDENTIFIER 2.5.4.3 (commonName) UTF8String 'Test CA' >> SET < SEQUENCE < OBJECTIDENTIFIER 2.5.4.10 (organizationName) UTF8String 'Test' >> > SEQUENCE < UTCTime '150429123320Z' UTCTime '150506123320Z' >SEQUENCE < SET < SEQUENCE < OBJECTIDENTIFIER 2.5.4.12 (title) UTF8String 'Test' >> SET < SEQUENCE < OBJECTIDENTIFIER 2.5.4.11 (organizationalUnitName) UTF8String 'Test' >> SET < SEQUENCE < OBJECTIDENTIFIER 2.5.4.10 (organizationName) UTF8String 'Test' >> SET < SEQUENCE < OBJECTIDENTIFIER 2.5.4.3 (commonName) UTF8String '[TEST] Test' >> > SEQUENCE < SEQUENCE < OBJECTIDENTIFIER 1.2.840.113549.1.1.1 (rsaEncryption) NULL >BITSTRING 0x308189028181009298ED87B0E9DB66AB06D18E7B1B1740109881D306F3B5CAA7FCD4FFCBA22D9848F9 1E10250FC61C455DB7A6765760E7BFBFDB66E0D7FC1F0BA1991BEEC00DAA76EE9AB8C6855DD5C8FAAFF8FD1267D E6F2DBE5C3EB1881F49B290AADDB285A646BA9314658CC5205AAC59625951F17FBC1E7AD79FF88B3B482A432B7E20 444B0203010001 : 0 unused bit(s) > [3] < SEQUENCE < SEQUENCE < OBJECTIDENTIFIER 2.5.29.15 (keyUsage) OCTETSTRING 030204F0 >SEQUENCE < OBJECTIDENTIFIER 2.5.29.37 (extKeyUsage) BOOLEAN TRUE OCTETSTRING 302006082B0601050507030406082B06010505070302060A2B0601040182370A030C >SEQUENCE < OBJECTIDENTIFIER 2.5.29.14 (subjectKeyIdentifier) OCTETSTRING 0414C7058A12A4B5B73EF4E5876C34B9BB32155E9691 >SEQUENCE < OBJECTIDENTIFIER 2.5.29.35 (authorityKeyIdentifier) OCTETSTRING 301680146AE7AB14AAE8B4C0A89E189D8168B1199FFB25B0 >> > > SEQUENCE < OBJECTIDENTIFIER 1.2.840.113549.1.1.5 (sha1WithRSAEncryption) NULL >BITSTRING 0x2007EFBF72C4EDB88FB4036AB8F90E1684897FB5C50E3117CF809DB1FBC1C68BCF3F9C34517621552930E9F 3B739F54CE081C1047067C50CAE0780B244CB183F0E6867BCEBAA95758F7C18465BAD963070CA630999548687270AD6DE3 6266A856453B5032259727F3E464360C2AAEC709EF70F13F5D66649ECFE7A5219D12740 : 0 unused bit(s) > > SET < SEQUENCE < INTEGER 0x01 (1 decimal) SEQUENCE < SEQUENCE < SET < SEQUENCE < OBJECTIDENTIFIER 2.5.4.3 (commonName) UTF8String 'Test CA' >> SET < SEQUENCE < OBJECTIDENTIFIER 2.5.4.10 (organizationName) UTF8String 'Test' >> > INTEGER 0x00D901B8B82F74CA0E8D84485A2265E1C3 > SEQUENCE < OBJECTIDENTIFIER 1.3.14.3.2.26 (id_sha1) NULL >SEQUENCE < OBJECTIDENTIFIER 1.2.840.113549.1.1.1 (rsaEncryption) NULL >OCTETSTRING 571404A32C015B61B957F002950A33E09475CA66DED090938AE21AFE6E0B39C9023850DE7C38482736E97 BFF6CB4DBB0605CCD787854525499A9C42B28D7BAAD19B26D0D43B6231B5EDCB23E70FFB4681D1C3B6FD5A40D508F55 457E047D2CC5C3803A2327D2E2B41A052ED13E3A1E9788D912AEB35649E93497EF4770E1669E > > > > >
-
version, версия синтаксиса.
INTEGER 0x01 (1 decimal)
SEQUENCE < OBJECTIDENTIFIER 1.2.840.113549.1.7.1 (data) [0] < OCTETSTRING 540065007300740020006D00650073007300610067006500 >>
SEQUENCE < SEQUENCE < [0] < INTEGER 0x02 (2 decimal) >INTEGER 0x00D901B8B82F74CA0E8D84485A2265E1C3 SEQUENCE < OBJECTIDENTIFIER 1.2.840.113549.1.1.5 (sha1WithRSAEncryption) NULL >SEQUENCE < SET < SEQUENCE < OBJECTIDENTIFIER 2.5.4.3 (commonName) UTF8String 'Test CA' >> SET < SEQUENCE < OBJECTIDENTIFIER 2.5.4.10 (organizationName) UTF8String 'Test' >> > SEQUENCE < UTCTime '150429123320Z' UTCTime '150506123320Z' >SEQUENCE < SET < SEQUENCE < OBJECTIDENTIFIER 2.5.4.12 (title) UTF8String 'Test' >> SET < SEQUENCE < OBJECTIDENTIFIER 2.5.4.11 (organizationalUnitName) UTF8String 'Test' >> SET < SEQUENCE < OBJECTIDENTIFIER 2.5.4.10 (organizationName) UTF8String 'Test' >> SET < SEQUENCE < OBJECTIDENTIFIER 2.5.4.3 (commonName) UTF8String '[TEST] Test' >> > SEQUENCE < SEQUENCE < OBJECTIDENTIFIER 1.2.840.113549.1.1.1 (rsaEncryption) NULL >BITSTRING 0x308189028181009298ED87B0E9DB66AB06D18E7B1B1740109881D306F3B5CAA7FCD4FFCBA22D9848F9 1E10250FC61C455DB7A6765760E7BFBFDB66E0D7FC1F0BA1991BEEC00DAA76EE9AB8C6855DD5C8FAAFF8FD1267D E6F2DBE5C3EB1881F49B290AADDB285A646BA9314658CC5205AAC59625951F17FBC1E7AD79FF88B3B482A432B7E20 444B0203010001 : 0 unused bit(s) > [3] < SEQUENCE < SEQUENCE < OBJECTIDENTIFIER 2.5.29.15 (keyUsage) OCTETSTRING 030204F0 >SEQUENCE < OBJECTIDENTIFIER 2.5.29.37 (extKeyUsage) BOOLEAN TRUE OCTETSTRING 302006082B0601050507030406082B06010505070302060A2B0601040182370A030C >SEQUENCE < OBJECTIDENTIFIER 2.5.29.14 (subjectKeyIdentifier) OCTETSTRING 0414C7058A12A4B5B73EF4E5876C34B9BB32155E9691 >SEQUENCE < OBJECTIDENTIFIER 2.5.29.35 (authorityKeyIdentifier) OCTETSTRING 301680146AE7AB14AAE8B4C0A89E189D8168B1199FFB25B0 >> > > SEQUENCE < OBJECTIDENTIFIER 1.2.840.113549.1.1.5 (sha1WithRSAEncryption) NULL >BITSTRING 0x2007EFBF72C4EDB88FB4036AB8F90E1684897FB5C50E3117CF809DB1FBC1C68BCF3F9C34517621552930E9F 3B739F54CE081C1047067C50CAE0780B244CB183F0E6867BCEBAA95758F7C18465BAD963070CA630999548687270AD6DE3 6266A856453B5032259727F3E464360C2AAEC709EF70F13F5D66649ECFE7A5219D12740 : 0 unused bit(s) > >
SEQUENCE < INTEGER 0x01 (1 decimal) SEQUENCE < SEQUENCE < SET < SEQUENCE < OBJECTIDENTIFIER 2.5.4.3 (commonName) UTF8String 'Test CA' >> SET < SEQUENCE < OBJECTIDENTIFIER 2.5.4.10 (organizationName) UTF8String 'Test' >> > INTEGER 0x00D901B8B82F74CA0E8D84485A2265E1C3 > SEQUENCE < OBJECTIDENTIFIER 1.3.14.3.2.26 (id_sha1) NULL >SEQUENCE < OBJECTIDENTIFIER 1.2.840.113549.1.1.1 (rsaEncryption) NULL >OCTETSTRING 571404A32C015B61B957F002950A33E09475CA66DED090938AE21AFE6E0B39C9023850DE7C38482736E97 BFF6CB4DBB0605CCD787854525499A9C42B28D7BAAD19B26D0D43B6231B5EDCB23E70FFB4681D1C3B6FD5A40D508F55 457E047D2CC5C3803A2327D2E2B41A052ED13E3A1E9788D912AEB35649E93497EF4770E1669E >
- Поле описывающее тип данных, содержащихся в блоке contentInfo
- Поле хранящее хеш-значение блока contentInfo
SEQUENCE < OBJECTIDENTIFIER 1.2.840.113549.1.7.2 (signedData) [0] < SEQUENCE < INTEGER 0x01 (1 decimal) SET < SEQUENCE < OBJECTIDENTIFIER 1.3.14.3.2.26 (id_sha1) NULL >> SEQUENCE < OBJECTIDENTIFIER 1.2.840.113549.1.7.1 (data) [0] < OCTETSTRING 540065007300740020006D00650073007300610067006500 >> [0] < SEQUENCE < SEQUENCE < [0] < INTEGER 0x02 (2 decimal) >INTEGER 0x00D901B8B82F74CA0E8D84485A2265E1C3 SEQUENCE < OBJECTIDENTIFIER 1.2.840.113549.1.1.5 (sha1WithRSAEncryption) NULL >SEQUENCE < SET < SEQUENCE < OBJECTIDENTIFIER 2.5.4.3 (commonName) UTF8String 'Test CA' >> SET < SEQUENCE < OBJECTIDENTIFIER 2.5.4.10 (organizationName) UTF8String 'Test' >> > SEQUENCE < UTCTime '150429123320Z' UTCTime '150506123320Z' >SEQUENCE < SET < SEQUENCE < OBJECTIDENTIFIER 2.5.4.12 (title) UTF8String 'Test' >> SET < SEQUENCE < OBJECTIDENTIFIER 2.5.4.11 (organizationalUnitName) UTF8String 'Test' >> SET < SEQUENCE < OBJECTIDENTIFIER 2.5.4.10 (organizationName) UTF8String 'Test' >> SET < SEQUENCE < OBJECTIDENTIFIER 2.5.4.3 (commonName) UTF8String '[TEST] Test' >> > SEQUENCE < SEQUENCE < OBJECTIDENTIFIER 1.2.840.113549.1.1.1 (rsaEncryption) NULL >BITSTRING 0x308189028181009298ED87B0E9DB66AB06D18E7B1B1740109881D306F3B5CAA7FCD4FFCBA22D9848F91E102 50FC61C455DB7A6765760E7BFBFDB66E0D7FC1F0BA1991BEEC00DAA76EE9AB8C6855DD5C8FAAFF8FD1267DE6F2DBE5C 3EB1881F49B290AADDB285A646BA9314658CC5205AAC59625951F17FBC1E7AD79FF88B3B482A432B7E20444B0203010001 : 0 unused bit(s) > [3] < SEQUENCE < SEQUENCE < OBJECTIDENTIFIER 2.5.29.15 (keyUsage) OCTETSTRING 030204F0 >SEQUENCE < OBJECTIDENTIFIER 2.5.29.37 (extKeyUsage) BOOLEAN TRUE OCTETSTRING 302006082B0601050507030406082B06010505070302060A2B0601040182370A030C >SEQUENCE < OBJECTIDENTIFIER 2.5.29.14 (subjectKeyIdentifier) OCTETSTRING 0414C7058A12A4B5B73EF4E5876C34B9BB32155E9691 >SEQUENCE < OBJECTIDENTIFIER 2.5.29.35 (authorityKeyIdentifier) OCTETSTRING 301680146AE7AB14AAE8B4C0A89E189D8168B1199FFB25B0 >> > > SEQUENCE < OBJECTIDENTIFIER 1.2.840.113549.1.1.5 (sha1WithRSAEncryption) NULL >BITSTRING 0x2007EFBF72C4EDB88FB4036AB8F90E1684897FB5C50E3117CF809DB1FBC1C68BCF3F9C34517621552930E9F 3B739F54CE081C1047067C50CAE0780B244CB183F0E6867BCEBAA95758F7C18465BAD963070CA630999548687270AD6DE3 6266A856453B5032259727F3E464360C2AAEC709EF70F13F5D66649ECFE7A5219D12740 : 0 unused bit(s) > > SET < SEQUENCE < INTEGER 0x01 (1 decimal) SEQUENCE < SEQUENCE < SET < SEQUENCE < OBJECTIDENTIFIER 2.5.4.3 (commonName) UTF8String 'Test CA' >> SET < SEQUENCE < OBJECTIDENTIFIER 2.5.4.10 (organizationName) UTF8String 'Test' >> > INTEGER 0x00D901B8B82F74CA0E8D84485A2265E1C3 > SEQUENCE < OBJECTIDENTIFIER 1.3.14.3.2.26 (id_sha1) NULL >[0] < SEQUENCE < OBJECTIDENTIFIER 1.2.840.113549.1.9.3 (contentType) SET < OBJECTIDENTIFIER 1.2.840.113549.1.7.1 (data) >> SEQUENCE < OBJECTIDENTIFIER 1.2.840.113549.1.9.5 (signingTime) SET < UTCTime '150429124539Z' >> SEQUENCE < OBJECTIDENTIFIER 1.2.840.113549.1.9.4 (messageDigest) SET < OCTETSTRING F21FA6C3A1A5756D74B11C65B7D38F7EB9F458B5 >> > SEQUENCE < OBJECTIDENTIFIER 1.2.840.113549.1.1.1 (rsaEncryption) NULL >OCTETSTRING 21D1762506C25894B98E6BD3BB11566719AEBF642B7A4541494C45F181880D936ABC28774BA575C53CC 1CB9551ABA21359FD3FA9013DE4242802674A1C304B2601183EA8015840EEF0D0D0312E361088725A255A869EEC394C 826712F684E0BA22806BD14404EA1DD80601A8C1E6598F1CCF907EE2891FB58683EEEF121D2312 > > > > >
Этот пример отличается от предыдущего наличием дополнительного блока:
[0] < SEQUENCE < OBJECTIDENTIFIER 1.2.840.113549.1.9.3 (contentType) SET < OBJECTIDENTIFIER 1.2.840.113549.1.7.1 (data) >> SEQUENCE < OBJECTIDENTIFIER 1.2.840.113549.1.9.5 (signingTime) SET < UTCTime '150429124539Z' >> SEQUENCE < OBJECTIDENTIFIER 1.2.840.113549.1.9.4 (messageDigest) SET < OCTETSTRING F21FA6C3A1A5756D74B11C65B7D38F7EB9F458B5 >> >
Именно в нем содержатся SignedAttributes. Помимо двух обязательных атрибутов при подписи был использован атрибут signedTime, который хранит время подписи.
Выводы
Таким образом стандартный p7s файл представляет собой нечто гораздо большее, чем сведения об электронной подписи и открытом ключе подписанта. В нем содержится сложная структура данных, представленная в ASN.1 формате и имеющая ряд обязательных полей, позволяющих получить сведения о подписавшей стороне. А также несколько опциональных полей, которые используются при вычислении итоговой подписи.
- Информационная безопасность
- Криптография
Pkcs 7 что это
4.3.Правила формирования ЭППри формировании ЭП всех видов должны использоваться следующие алгоритмы:
4.3.1Подписи в формате PKCS#7
Формат PKCS#7 используется для подписания файлов, вложенных в сообщения.
Используется версия 1.5 спецификации PKCS#7 (RFC-2315).
На формат подписи накладываются следующие ограничения:
Для корневого элемента ContentInfo единственный допустимый contentType — SignedData.
Подпись должна быть detached (т.е. для элемента SignedData/contentInfo/contentType единственное допустимое значение — 1.2.840.113549.1.7.1, а элемент SignedData/contentInfo/content должен отсутствовать).
Для вычисления message digest разрешён только алгоритм ГОСТ 34.11-94.
Для генерации ЭЦП разрешён только алгоритм ГОСТ 34.10-2001.
Запрещено размещать более одной ЭЦП в PKCS#7-криптосообщении.
В элементе SignerInfo должны присутствовать следующие authenticated attributes:
- contentType (1.2.840.113549.1.9.3), всегда имеет значение 1.2.840.113549.1.7.1.
- messageDigest (1.2.840.113549.1.9.4), содержит ГОСТ-digest подписываемого файла.
4.4.Электронные подписи субъектов взаимодействия – физических лиц
4.4.1Общие требования к электронной подписи, формируемой от имени должностных лиц органов власти при межведомственном информационном обмене
Сертификаты и ключи электронной подписи (п. 3 ст. 14 Федерального закона № 63-ФЗ «Об электронной подписи») должностного лица выдаются на имя физического лица представителя органа власти и применяются в информационных системах при оказании государственных и муниципальных услуг/исполнении государственных и муниципальных функций с использованием системы межведомственного электронного взаимодействия для формирования и (или) проверки электронных подписей.
Данные подписи аналогичны собственноручным подписям этих сотрудников и подтверждают, в том числе, факт формирования электронного документа конкретным сотрудником ОВ в ИС ОВ.
Ответственность за хранение и использование ключа подписи ЭП-СП несет должностное лицо и контролируется представителями органов власти.
Перевыпуск существующих сертификатов ключей ЭП-СП должностных лиц ОВ для использования при межведомственном взаимодействии не является обязательным – возможно использовать ранее выданные и действительные сертификаты ключей подписи должностных лиц при условии, что они выданы одним из удостоверяющих центров, входящих в единое пространство доверия ЭП, формируемое Минкомсвязью РФ.
4.4.2Электронная подпись при межведомственном взаимодействии
ЭП-СП подписывает бизнес-данные сообщения, представленные в XML, а также приложенные файлы. Поскольку вложения передаются отдельно от бизнес-данных, ЭП-СП ставится отдельно на бизнес-данные, отдельно на каждый приложенный файл.
4.4.2.1Правила формирования электронной подписи сообщений
Формат подписи | XMLDSig detached |
Трансформация, дополнительно к канонизации | urn://smev-gov-ru/xmldsig/transform |
Требования к форматированию | В XML-структуре подписи, между элементами не допускается наличие текстовых узлов, в том числе переводов строки. |
Подписываемый элемент | Для запросов и ответов — корневой элемент XML-документа, представляющего бизнес-данные запроса или ответа. |
Размещение в сообщении | //SenderProvidedRequestData/ PersonalSignature/dsig:Signature (для запросов), |
//SenderProvidedResponseData/PersonalSignature/dsig:Signature
(для ответов),
С помощью программы «КриптоАРМ» вы можете подписать
- отдельный файл
- папку файлов (при этом будет создана подпись для каждого файла, входящего в указанную папку. Подписанные файлы автоматически сохраняются в папку с исходными данными)
Файл в формате P7S используется чаще. *.p7s – подписанные файлы в формате PKCS #7, но в текстовом base64 виде (как PEM)
Для формата PKCS#7 Message в Base64-кодировке вы можете указать флаг Отключить служебные заголовки (в этом случае в файле подписи не будут использоваться заголовки, указывающие начало и окончание блока с подписанными данными. Заголовки необходимы для того, чтобы можно было выполнять проверку ЭЦП более ранними версиями программы «КриптоАРМ» ).
- Введите необходимые свойства подписи (комментарий к подписи*, идентификатор ресурса** , включение времени создания подписи). Кроме этого, вы можете установить параметр «включить штамп времени на подписываемые данные», который может быть включен при установленном дополнительно модуле TSP .
* Комментарием к подписи может служить информация, предназначенная для прочтения людям, просматривающим подписанный документ (например, «Согласовано!»)
** Под идентификатором ресурса понимается:
- путь до исходного, подписываемого файла (на компьютере или в Интернете, где находится данный файл)
- имя файла (указывается для того, чтобы в случае изменения имени файла получатель подписанного документа смог определить первоначальное его название)
При установке флага будет создана отделенная электронная подпись на файле (например, может быть удобна в том случае, если вы отправляете документ человеку, который не использует «КриптоАРМ» и ему важна не столько подпись, сколько сами данные)
При отсутствии флага — будет сформирована электронная подпись, включающая в себя файл с исходными данными (в этом случае документ и ЭЦП будут храниться вместе)
Если вы решили создать файл совмещенной подписи, вы можете удалить исходный файл после выполнения операции. Эта возможность важна
- прежде всего, для удобства работы с документами
- для тех, кому требуется хранить и обмениваться только подписанными ЭЦП документами (в рамках регламента электронного документооборота, принятого в организации)
В случае если вы установит флаг напротив строки Удалить исходный файл после выполнения операции, документ (-ы), выбранный для подписи, будет удален при успешном завершении операции.
При установке флага — в файл подписи будет включено время подписи
При установке флага в файл ЭЦП будет включен штамп времени на исходные данные
Этот флаг появляется только в том случае, если установлен Модуль TSP.
- Если был установлен флаг Включить штамп времени на подписываемые данные, на следующем шаге укажите параметры Службы штампов времени :
- Укажите необходимые параметры ЭЦП — личный сертификат для создания ЭЦП и хеш-алгоритм.
После сбора данных для создания ЭЦП возникнет окно с информацией о статусе операции и об используемых параметрах: сертификат, которым был подписан файл.
Указанные параметры ЭЦП можно сохранить в настройку в качестве шаблона для дальнейшего использования. Для этого поставьте флаг в пункте Сохранить данные в настройку для дальнейшего использования и введите наименование настройки. Также вы можете сохранить все данные в уже существующую настройку, выбрав ее название из списка.
- Начнется процесс подписи файла. Остановить процесс можно, нажав на кнопку Отмена .
- Сформированный файл ЭЦП по умолчанию будет сохранен в тот же каталог, в котором находится файл с исходными данными. Имя файла ЭЦП совпадает с именем подписываемого файла, дополненным расширением (расширение соответствует выбранному выходному формату). Если файл с таким именем уже существует, сохраните его под другим именем.
- После завершения операции возникнет окно Результат выполнения операции . Чтобы просмотреть детальную информацию о результатах создания подписи и используемых параметрах: имя исходного файла, имя выходного файла, статус завершения операции, длительность выполнения операции, нажмите кнопку Детали >> .
Если вы хотите просмотреть информацию об ЭЦП и сертификате подписчика, выделите запись в списке окна Результат выполнения операции и нажмите на кнопку Менеджер сообщения .
Откроется окно Управление подписанными данными, в котором вы можете просмотреть информацию о подписи и сертификате:
- просмотреть подписанный файл, нажав на кнопку Просмотреть напротив имени файла,
- сохранить по указанному пути, нажав на кнопку Сохранить ,
- просмотреть информацию о подписи, сертификате и его статусе (кнопка Просмотреть )
Информация в закладке
Информация об атрибутах подписи, времени ее создания, используемых алгоритмах подписи и хеширования.
Информация о сертификате (статус сертификата /действителен и др./, номер, данные о владельце и издателе, сроках действия сертификата и его использовании).
Общий статус проверки полного пути сертификации (о статусах сертификата читайте подробнее в главе Проверка статуса сертификата ). Кроме этого, в закладке вы можете установить способ, каким проверять статус сертификатов (по локальному СОС; по СОС, полученному из УЦ; с использованием Revocation Provider; в OCSP службе)
Файлы такого типа, а также для каких целей они предназначены, подробно опишем ниже. Оригинальное название данного материала PKCS-7 Signature file.
Описание расширения
Итак, начнем разговор о формате расскажем далее, а пока попробуем разобраться с предназначением данного решения. Материал такого формата является e-mail сообщением, которое содержит цифровую подпись. Данный формат применяется для безопасной пересылки электронных писем. Их может просмотреть исключительно получатель. Данный метод передачи удостоверяет отправителя, а также подтверждает, что определенное письмо не было каким-либо образом изменено в процессе отправки. Если используемая почтовая программа цифровую подпись не поддерживает, файл P7S, как правило, появляется в виде вложения в сообщение. E-mail клиенты, работающие с данным форматом, применяют стандарт PKCS. Таким образом создается подпись для почтовых сообщений.
Mozilla Thunderbird
Итак, перед нами файл P7S. Чем открыть его, подскажет данный почтовый клиент. Mozilla Thunderbird повторяет во многом интерфейс фирменного браузера. Работает данное решение по похожему принципу. На свой вкус можно выбрать подходящую тему оформления. Имеется возможность для настройки 5-ти уровней шрифта, а также фона в письмах. В приложение включена библиотека смайликов. Скорость работы близка к аналогичному показателю у фирменного обозревателя. Максимальный период ожидания приема письма или его отправки равен 10 минутам. По истечении указанного срока приложение определяет, что связь разорвана, в результате останавливает отправку. Эту проблему легко исправить, изменив программные настройки.
Другие приложения
Есть и другие средства, поддерживающие формат P7S. Чем открыть подобный документ, поможет разобраться программа PostBox. Также в данном случае может помочь Microsoft Outlook. Речь идет об информационном менеджере, который был создан компанией «Майкрософт». Программа сочетает возможности почтового клиента со средствами для совместной работы. Outlook является частью пакета офисных программ Microsoft Office. Решить вопрос о том, как открыть файл P7S, также можно посредством приложения «КриптоАРМ». Речь идет об универсальном программном пакете. Он позволяет применять криптографические средства для деловой и личной переписки. Посредством данного решения можно обеспечить защиту как корпоративной, так и персональной информации.
Приложение получило весьма приятный графический интерфейс. Данное решение обеспечивает надежное шифрование, а также расшифровку данных. Также при помощи этого инструмента можно создавать и Доступно применение открытых ключей, а также поддерживается работа с сертификатами и криптопровайдерами. При помощи данного приложения можно создать произвольное количество ЭЦП, а также проверить их подлинность. Поддерживается расшифровка файлов. Исполнение операций в один этап.
Теперь вы знаете, что такое P7S. Чем открыть файл с таким расширением и для чего используется подобный формат, подробно описано выше.