Как наложить метку времени в соответствии со спецификацией TSP и спецификацией CAdES-T? | |
---|---|
rvc44 Автор Сообщений: 2211 Откуда: Тамбов Дата регистрации: 06.12.2005 |
Добрый день!
Разбираюсь сейчас с Приложением №2 к приказу Министерства юстиции Российской Федерации от 24 мая 2018 г. № 89 "Формат предоставления сведений...", в котором содержится пункт: 2. Сведения представляют собой электронный документ ... содержащий метку времени (для электронного документа, подписанного усиленной квалифицированной электронной подписью), наложенную в соответствии со спецификацией Internet X.509 PublicKeyInfrastructureTime-StampProtocol (TSP) и спецификацией CAdES-T (ETSI TS 101 733 «CMSAdvancedElectronicSignatures (CadES) Такая метка времени формируется внутри блока подписи Signature XML-документа и выглядит, как показано на скриншотах ниже: [attachment 31403 MetkaVremeni01.jpg] На первом скриншоте сформированная метка времени, содержащаяся в теге ds:Object, показана в свёрнутом виде. А на втором скриншоте продемонстрирован тот же узел, содержащий метку времени ds:Object в развернутом виде. [attachment 31404 MetkaVremeni02.jpg] Каким образом, с помощью CryptoAPI или как-то иначе сформировать подобную метку времени? Например, значение для заполнения тега (элемента) dsigestValue формируется с помощью последовательности вызовов CryptoAPI-функций CryptAcquireContextA, CryptSetProvParam, CryptCreateHash, CryptGetHashParam и CryptHashData, с последующим CryptDestroyHash и CryptReleaseContext. Здесь же вообще непонятно с какой стороны подходить и существует ли CryptoAPI для работы с TSP и CAdES-T ? Для экспериментирования можно использовать TSP-сервер компании КриптоПро testca.cryptopro.ru Для тестирования меток времени в запросах можно использовать тестовый сервис Крипто-Про www.cryptopro.ru Подскажите, в какую сторону копать, чтобы реализовать данный функционал не на java, где есть все необходимые библиотеки и можео даже развернуть собственный TSP-сервер? |
Re: Как наложить метку времени в соответствии со спецификацией TSP и спецификацией CAdES-T? | |
---|---|
sphinx Сообщений: 31188 Откуда: Каменск-Уральски Дата регистрации: 22.11.2006 |
Здесь ничего не натолкнет?
www.cryptopro.ru Описание формата CadES: docplayer.ru и tools.ietf.org ------------------ "Veni, vidi, vici!"(с) |
Re: Как наложить метку времени в соответствии со спецификацией TSP и спецификацией CAdES-T? | |
---|---|
morafernet Сообщений: 8 Дата регистрации: 09.12.2018 |
Привет Роман
Что вы знаете о EncapsulatedTimeStamp? Если вы получите примеры того, как получить его в C++, дайте мне знать, чтобы проверить и перейти на Fox, я хочу включить это в свою библиотеку, даже если я еще не использую его. |
Re: Как наложить метку времени в соответствии со спецификацией TSP и спецификацией CAdES-T? | |
---|---|
morafernet Сообщений: 8 Дата регистрации: 09.12.2018 |
Роман, мы должны прочитать это:
docs.microsoft.com Я нашел бесплатный TSA, его можно было бы использовать для тестирования. www.freetsa.org Внизу страницы есть несколько примеров с openssl, это не выглядит так сложно. |
Re: Как наложить метку времени в соответствии со спецификацией TSP и спецификацией CAdES-T? | |
---|---|
rvc44 Автор Сообщений: 2211 Откуда: Тамбов Дата регистрации: 06.12.2005 |
Доброй ночи!
Для начала попробую объяснить суть вопроса на русском. Если что-то будет непонятно, позже могу уточнить отдельные детали. Упомянутые спецификации Internet X.509 PublicKeyInfrastructureTime-StampProtocol (TSP) и CAdES-T (ETSI TS 101 733 «CMSAdvancedElectronicSignatures (CadES) являются де-факто мировыми стандартами, а не используются лишь в какой-то одной стране мира. Вместе с тем, не уверен, что компания Microsoft их уже реализовала или собирается реализовывать в своих библиотеках CryptoAPI. В России в органах исполнительной власти и местного самоуправления де-юре с 2010 года, а де-факто с 2012 года так называемая Система Межведомственного Электронного Взаимодействия (SMEV), в которой используется криптография в соответствии с российскими и международными стандартами. Российские криптографические алгоритмы реализованы в виде надстройки (введены дополнительные ID алгоритмов) к стандартному CryptoAPI Windows и это всё в настоящее время портировано в Linux и в другие платформы. Существуют два или более независимых разработчиков, имеющих лицензии от органа, уполномоченного по вопросам криптографии в России. Это компании CryptoPro и VipNet. Мы работаем с первой из них. Особенности создания подписанных CMS сообщений в CryptoPro CSP 3.6 и выше: Для того, чтобы создаваемые с помощью CryptoAPI сообщения могли быть впоследствии дополнены до форматов усовершенствованной ЭЦП (CAdES-T, CAdES-X Long Type 1 и других), они должны как минимум соответствовать базовому формату усовершенствованной ЭЦП (CAdES BES). Формат электронной подписи CAdES BES требует наличия в подписанном сообщении подписанного атрибута, идентифицирующего сертификат подписывающего: •SigningCertificate (для подписей с алгоритмом хэширования SHA1), •SigningCertificateV2 (для подписей с остальными алгоритмами хэширования). Поскольку после создания подписи нельзя добавлять или изменять подписанные атрибуты, криптопровайдер CryptoPro CSP при создании подписанного сообщения с использованием российского национального алгоритма GOST R 34.10/34.11 добавляет к нему подписанный атрибут SigningCertificateV2. Также в сообщение добавляется отметка о времени создания подписи в виде подписанного атрибута signingTime (время в атрибуте указывается по часам локального компьютера). Особенности добавления атрибутов Добавление атрибутов SigningCertificateV2 и signingTime затрагивает работу следующих функций: CryptMsgOpenToEncode, CryptMsgControl, CryptMsgCalculateEncodedLength и CryptSignMessage. Атрибуты SigningCertificateV2 и signingTime не будут добавлены в подписанное сообщение, если выполняется хотя бы одно из следующих условий: •В параметрах вызова функции уже указан хотя бы один из подписанных атрибутов: SigningCertificate, SigningCertificateV2 или otherSigningCertificate. •Алгоритм подписи не GOST R 34.10/34.11 •Не удаётся найти сертификат лица, создающего электронную подпись, необходимый для вычисления значения атрибута SigningCertificateV2 Поиск сертификата ключа электронной подписи В функцию CryptSignMessage сертификат ключа электронной подписи передаётся в качестве аргумента, в то время как при использовании функций CryptMsgOpenToEncode, CryptMsgCalculateEncodedLength, CryptMsgControl производится его поиск в следующих местах: •В контейнере закрытого ключа •В коллекции сертификатов, добавленных в подписанное сообщение •В хранилищах "My" (Личные) текущего пользователя и локального компьютера (если не указан флаг CPCMSG_CADES_DISABLE_CERT_SEARCH) Для поиска сертификата используется имя издателя и серийный номер, заданный в качестве идентификатора подписывающего при вызове функции. Если в качестве идентификатора подписывающего указан идентификатор ключа, поиск сертификата не ведётся и атрибуты в сообщение не добавляются. Отключение добавления атрибутов Существуют следующие способы отключить добавление атрибутов SigningCertificateV2 и signingTime в подписанное сообщение: •Задать флаг, отключающий добавление атрибутов (CPCMSG_CADES_DISABLE/CPCRYPT_MESSAGE_CADES_DISABLE) •Установить параметр реестра, отключающий добавление атрибутов (AddEsAttribute) Параметр dwFlags для функций CryptMsgOpenToEncode, CryptMsgCalculateEncodedLength, CryptMsgControl может содержать дополнительные флаги, определённые в файле WinCryptEx.h. Добавление атрибутов на всём компьютере регулируется параметром реестра AddEsAttribute. Если данный параметр отсутствует, то добавление дополнительных атрибутов будет производиться. Для того, чтобы отключить добавление атрибутов, нужно добавить параметр AddEsAttribute типа DWORD и значением 0 в ветку реестра "HKEY_LOCAL_MACHINE\SOFTWARE\Crypto Pro\Cryptography\CurrentVersion\Parameters". Библиотеки компании CryptoPro и руководство разработчика описаны здесь: cpdn.cryptopro.ru Криптопровайдер CryptoPro CSP 4.0 с поддержкой российских криптоалгоритмов можно загрузить с сайта компании после бесплатной регистрации. Его полнофункциональная версия (без ввода ключа) будет работать 90 дней. В дальнейшем, ключ можно приобрести менее чем за $40 или можно переустановить ПО на другой компьютер и пользоваться ещё 3 месяца. Чтобы не возникало проблем с кодировкой при использовании реализации CryptoAPI от компании CryptoPro, которая обеспечивает в Windows 100% совместимость с Microsoft CryptoAPI и расширяет его поддержкой российских криптоалгоритмов, рекомендуется по возможности пользоваться только widechar-вариантами функций (например, CryptAcquireContextW) Штамп времени в CryptoPro можно получить при помощи tsputil.exe. Тестовый сервер штампов времени компании CryptoPro поддерживает анонимный доступ, т.е. клиентский сертификат в запросах к нему не нужен. Для разработки программного обеспечения для проставления штампов (меток) времени необходим TSP SDK версии 1.05 или выше. В C++ рабочим вариантом точно является
Функция Verify находится в библиотеке tspcli, прототип можно посмотреть в файле tspcli.h. Функция Verify имеет тип возвращаемого значения не unsigned int, а int, поэтому важно, чтобы файл tspcli.h у вас был из нового SDK.
Пример реализации на C++ функции, успешно отрабатывающей на тестовом сервере Крипто ПРО: www.cryptopro.ru Как реализовать вызов функций из CryptoPro SDK на VFP не знаю! У кого-то есть идеи без написания внешней dll/fll? Исправлено 1 раз(а). Последнее : rvc44, 04.09.19 02:05 |
Re: Как наложить метку времени в соответствии со спецификацией TSP и спецификацией CAdES-T? | |
---|---|
rvc44 Автор Сообщений: 2211 Откуда: Тамбов Дата регистрации: 06.12.2005 |
У нас есть собственный развёрнутый TSA сервер и мне известна еще куча адресов. К сожалению, большинство из них находятся в защищенной сети, изолированной от Интернета. России до Китая еще далеко, но закон о суверенном интернете уже подготовили "на случай войны".
|
Re: Как наложить метку времени в соответствии со спецификацией TSP и спецификацией CAdES-T? | |
---|---|
rvc44 Автор Сообщений: 2211 Откуда: Тамбов Дата регистрации: 06.12.2005 |
Вы в курсе, что для использования не тестового, а продуктивного TSA-сервера необходимо, чтобы раздел "Улучшенный ключ" используемого сертификата содержал объектный идентификатор OID = "1.3.6.1.5.5.7.3.8" ("Установка отметки времени")? Кстати, одним из условий штатного функционирования TSA/TSP-сервера является наличие регулярно загружаемых актуальных (не просроченных) списков отзыва сертификатов. У нас эта задача настроена в планировщикe задач в виде .bat файла и выполняется по настроенному расписанию. Если задача вдруг по каким-то причинам не отработала, то сервер TSP не сможет проставить метку времени, которая необходима, чтобы удостовериться, что на сервере подписания XML-запроса установлено правильное время. Поэтому мне стала интересна тема, как отказаться от .bat файла и реализовать загрузку CRL lists программно через CryptoAPI, поскольку точки распространения списков отзыва (CDP) не всегда бывают доступны. В этих случаях нужно использовать резервные CDP. В России метки времени активно использует пока только одно ведомство - Федеральная служба судебных приставов (ФССП России). Соответственно, для взаимодействия с ними необходимо иметь весь этот реализованный функционал. В SMEV2 метки времени только в формате XAdES, а не CAdES использовало еще Федеральное казначейство. Но в новой версии SMEV3 от них решено было отказаться и их убрали из описания формата взаимодействия, поскольку далеко не все участники взаимодействия - контрагенты, могли их реализовать на своей стороне. Это сложно и дорого. Казначейство всем прощало и закрывало глаза. С ФССП России такой номер не пройдет! Они ежемесячно заваливают всех Губернаторов регионов письмами с жалобами, что с ними никто не взаимодействует, регулярно вынося всем мозг. Поэтому, не реагировать нельзя, нужно разбираться.
Исправлено 3 раз(а). Последнее : rvc44, 04.09.19 03:00 |
Re: Как наложить метку времени в соответствии со спецификацией TSP и спецификацией CAdES-T? | |
---|---|
morafernet Сообщений: 8 Дата регистрации: 09.12.2018 |
Чтобы получить значение узла EncapsultatedTimeStamp, для формата Xades-T в соответствии с руководством ETSI: www.etsi.org должен быть создан хеш для значения узла подписи "<ds: SignatureValue id = value_uri_of_your_node> этот хэш должен быть передан в TSA, который будет отмечать временную подпись.
В следующем примере мы используем бесплатный TSA для тех, кто находится в сети, со значением Hash, которое я ранее получил из значения узла SignatureValue, и алгоритмом. Надеюсь, это поможет вам развернуть Xades-T. Привет!
|
© 2000-2024 Fox Club  |