Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

3 Страницы123>
Опции
К последнему сообщению К первому непрочитанному
Offline Hardbotan  
#1 Оставлено : 28 июня 2011 г. 14:36:07(UTC)
Hardbotan

Статус: Активный участник

Группы: Участники
Зарегистрирован: 15.12.2009(UTC)
Сообщений: 32
Мужчина
Откуда: Москва, ФКЦ "Земля"

В Крипто ПРО ЭЦП SDK приведен пример создания усовершенствованной ЭЦП с использованием COM компоненты. Насколько я понял из описания при создании усовершенствованной ЭЦП используется не только служба штампов времени (TSP клиент), но и служба проверки сертификатов (OCSP клиент).

У меня стоит задача создания обычной ЭЦП и прикрепления к ней штампа времени. Подписываться будут документы различных форматов (xml, pdf и тд.).
Подпись хранится во внешнем контейнере (бинарный файл) и передается вместе с основным фалом.

Вопрос, как мне встроить штамп времени в полученную обычную ЭЦП и какие функции для этого использовать?

Штамп времени я получаю от тестового сервера Крипто ПРО используя следующий алгоритм

Код:

            TSPRequest oRequest = new TSPCOM.TSPRequest();
            TSPCOM.TSPStamp oStamp = null;
            CPICom.HashedData20 oHash = new CPICom.HashedData20();

            oHash.Algorithm = (CAPICOM.CAPICOM_HASH_ALGORITHM)CPICom.CPICOM_HASH_ALGORITHM.CAPICOM_HASH_ALGORITHM_GOST3411;
            oHash.Hash("ABC");

            oRequest.Hash = (HashedData)oHash;

            oRequest.UseNonce = true;
            oRequest.PolicyID = "";
            oRequest.CertReq = false;

            oRequest.TSAAddress = "http://www.cryptopro.ru/tsp/tsp.srf";

            oRequest.TSAAuthType = TSPCOM.TSPCOM_AUTH_TYPE.TSPCOM_AUTH_TYPE_ANONYMOUS;
            oRequest.TSAUserName = "";
            oRequest.TSAPassword = "";

            string error = "";
            string result = "";
            try
            {
                oStamp = oRequest.Send(false);
                result = oStamp.Export();

            }
            catch (Exception ex)
            {
                error = ex.Message;
            }



Если COM для этих целей не подойдет, то какие технологии мне нужно использовать, приложение пишется на C#
Offline Новожилова Елена  
#2 Оставлено : 28 июня 2011 г. 17:13:10(UTC)
Новожилова Елена

Статус: Сотрудник

Группы: Администраторы, Участники
Зарегистрирован: 10.12.2008(UTC)
Сообщений: 924
Женщина
Откуда: Крипто-Про

Поблагодарили: 99 раз в 95 постах
CryptoAPI
Offline Hardbotan  
#3 Оставлено : 28 июня 2011 г. 17:47:45(UTC)
Hardbotan

Статус: Активный участник

Группы: Участники
Зарегистрирован: 15.12.2009(UTC)
Сообщений: 32
Мужчина
Откуда: Москва, ФКЦ "Земля"

в другой теме вы писали что можно его добавить через CAdESCOM.CPSignerClass.UnauthenticatedAttributes.Add, но я так и не понял как туда передать временной штамп, всякий раз как я пытался туда что то записать метод валился в ошибку, или я не так вас понял и через этот функционал к атрибутам ЭЦП не достучаться
Offline Hardbotan  
#4 Оставлено : 28 июня 2011 г. 17:49:47(UTC)
Hardbotan

Статус: Активный участник

Группы: Участники
Зарегистрирован: 15.12.2009(UTC)
Сообщений: 32
Мужчина
Откуда: Москва, ФКЦ "Земля"

еще раз перечитал ваш пост, я так понял что надо сначала структуру штампа времени как то "закодировать" (то есть привести к какому то типу, какому?), только после правильного перекодирования мне будет позволено его добавить в коллекцию не подписанных атрибутов
Offline Новожилова Елена  
#5 Оставлено : 30 июня 2011 г. 16:47:04(UTC)
Новожилова Елена

Статус: Сотрудник

Группы: Администраторы, Участники
Зарегистрирован: 10.12.2008(UTC)
Сообщений: 924
Женщина
Откуда: Крипто-Про

Поблагодарили: 99 раз в 95 постах
Создаете атрибут, заполняете поле OID нужным вам значением (если вам нужна совместимость с КриптоАРМ - посмотрите какое значение используется там).
В качестве значения атрибута кладете штамп времени в бинарном виде, здесь можно воспользоваться методом Export. Атрибут добавляете в коллекцию подписанных или неподписанных атрибутов по своему выбору (опять же - если нужна совместимость, посмотрите, как это сделано в КриптоАРМ).

Отредактировано пользователем 30 июня 2011 г. 16:49:28(UTC)  | Причина: Не указана

Offline Hardbotan  
#6 Оставлено : 30 июня 2011 г. 21:13:28(UTC)
Hardbotan

Статус: Активный участник

Группы: Участники
Зарегистрирован: 15.12.2009(UTC)
Сообщений: 32
Мужчина
Откуда: Москва, ФКЦ "Земля"

сделал все как вы говорите:
Код:

                CAdESCOM.CPAttributeClass atr = new CPAttributeClass();
                atr.OID.Name = CAPICOM.CAPICOM_OID.CAPICOM_OID_TIME_STAMP_SIGNING_EKU;//пробовал и такой тип CAPICOM_OID_TIME_STAMPING_EKU;
                atr.Value = oStamp.Export();
                oSigner.UnauthenticatedAttributes.Add(atr);
                aSignedData = oSignedData.SignCades(oSigner, CAdESCOM.CADESCOM_CADES_TYPE.CADESCOM_CADES_BES,
                                                    true, CAdESCOM.CAPICOM_ENCODING_TYPE.CAPICOM_ENCODE_BASE64);


теперь вываливается ошибка "Идентификатор объекта имеет неправильный формат. (Исключение из HRESULT: 0x80091003)" для обоих случаев
может напрямую присваивать
Код:
atr.Value = oStamp.Export()
не хорошо и надо как то преобразовывать то что возвращает Export?
Offline Новожилова Елена  
#7 Оставлено : 4 июля 2011 г. 16:09:03(UTC)
Новожилова Елена

Статус: Сотрудник

Группы: Администраторы, Участники
Зарегистрирован: 10.12.2008(UTC)
Сообщений: 924
Женщина
Откуда: Крипто-Про

Поблагодарили: 99 раз в 95 постах
Попробуйте вместо :
Код:
atr.OID.Name = CAPICOM.CAPICOM_OID.CAPICOM_OID_TIME_STAMP_SIGNING_EKU;

написать так:

Код:
atr.OID.Value = "1.2.3.4.5";

Идентификатор указываете _точно такой же_ как в КриптоАРМ, если нужна совместимость. Идентификаторы EKU здесь точно не подходят.

Отредактировано пользователем 4 июля 2011 г. 16:45:11(UTC)  | Причина: Не указана

Offline Павел Смирнов  
#8 Оставлено : 4 июля 2011 г. 17:02:26(UTC)
Павел Смирнов

Статус: Вам и не снилось

Группы: Администраторы
Зарегистрирован: 24.12.2007(UTC)
Сообщений: 831
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 1 раз
Поблагодарили: 48 раз в 44 постах
Скорее всего, штамп на подпись КриптоАРМ кладёт в соответствии со стандартом RFC3161. Тогда идентификатор атрибута будет таким:
id-aa-timeStampToken OBJECT IDENTIFIER ::= { iso(1) member-body(2)
us(840) rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) aa(2) 14 }

Но имейте в виду, что с помощью CAdESCOM вы НЕ СМОЖЕТЕ добавить в подпись штамп времени на подпись.
Техническую поддержку оказываем тут.
Наша база знаний.
Offline Hardbotan  
#9 Оставлено : 14 июля 2011 г. 20:36:03(UTC)
Hardbotan

Статус: Активный участник

Группы: Участники
Зарегистрирован: 15.12.2009(UTC)
Сообщений: 32
Мужчина
Откуда: Москва, ФКЦ "Земля"

Спасибо за ответ, мне не нужен штамп на подпись, мне нужен штамп только на данные. Вы говорите что можно как то узнать с каким идентификатором кладет КРИПТО АРМ, а как это узнать? с помощью чего можно просмотреть файл подписи со штампом что бы узнать какой там идентификатор? или проще в службу поддержки написать этот вопрос?
Offline Hardbotan  
#10 Оставлено : 15 июля 2011 г. 15:30:24(UTC)
Hardbotan

Статус: Активный участник

Группы: Участники
Зарегистрирован: 15.12.2009(UTC)
Сообщений: 32
Мужчина
Откуда: Москва, ФКЦ "Земля"


а почему CAdESCOM не позволяет создавать штамп на подпись? ведь штамп на подпись по сути просто еще один не подписанный атрибут для ЭЦП или это не так? штамп на подпись можно сформировать с помощью CryptoApi?
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest (4)
3 Страницы123>
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.