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

Уведомление

Icon
Error

2 Страницы12>
Опции
К последнему сообщению К первому непрочитанному
Offline MaCeL  
#1 Оставлено : 5 марта 2013 г. 18:59:24(UTC)
MaCeL

Статус: Новичок

Группы: Участники
Зарегистрирован: 05.03.2013(UTC)
Сообщений: 4
Российская Федерация
Откуда: Муром

Сказал(а) «Спасибо»: 1 раз
Здравствуйте.

Возникла такая проблема. Необходимо доподписать сообщение, при этом добавить в подпись неподписываемый строковый атрибут.
Выяснил, что в структуру PCMSG_SIGNER_ENCODE_INFO есть возможность передать массив аттрибутов. Т.е. примерный java-код добавления атрибута будет представлять собой:
Код:

PCMSG_SIGNER_ENCODE_INFO cosignerInfo = new PCMSG_SIGNER_ENCODE_INFO();

...
        
PCRYPT_ATTR_BLOB blb = new PCRYPT_ATTR_BLOB();
        
PCRYPT_ATTRIBUTE crAtr = new PCRYPT_ATTRIBUTE();
crAtr.pszObjId = "1.2.643.5.1.5.2.10000.1.2"; //OID добавляемого атрибута 
crAtr.cValue = 1;
crAtr.rgValue = blb;
        
String attrValue = "test"; //Значение атрибута

//Собственно здесь необходимо заполнить blb
... 

cosignerInfo.rgUnauthAttr = crAtr;
cosignerInfo.cUnauthAttr = 1;
...


Вопрос. Как правильно заполнить структуру PCRYPT_ATTR_BLOB? Просмотрел форум - нашел одну похожую тему, но ответа в ней так и не было :( (http://www.cryptopro.ru/forum2/...aspx?g=posts&m=30992).

Буду очень благодарен за примеры (подойдет любой язык) или любую другую помощь.

Отредактировано пользователем 5 марта 2013 г. 19:10:39(UTC)  | Причина: Не указана

Offline Юрий  
#2 Оставлено : 5 марта 2013 г. 21:10:33(UTC)
Юрий

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

Группы: Участники
Зарегистрирован: 22.01.2008(UTC)
Сообщений: 671
Мужчина
Российская Федерация
Откуда: Йошкар-Ола

Сказал «Спасибо»: 3 раз
Поблагодарили: 93 раз в 67 постах
Достаточно объемная для объяснения тема. Примерный план получения искомого:
1)
CryptMsgOpenToDecode();

2)
CryptMsgGetParam(...CMSG_SIGNER_INFO_PARAM...);

3)
CRYPT_ATTRIBUTE caCoSigner;
caCoSigner.cValue = 1;
caCoSigner.pszObjId = szOID_RSA_counterSign; // Ну или что там у Вас ещё добавляется
caCoSigner.rgValue = attrblobCoSigner;

CryptEncodeObject(...PKCS_ATTRIBUTE...);

4)
CryptMsgControl(...CMSG_CTRL_ADD_SIGNER_UNAUTH_ATTR...);

Вот как-то так. Дальше найдёте сами. Наверное :)
С уважением,
Юрий Строжевский
Offline Юрий  
#3 Оставлено : 5 марта 2013 г. 21:15:08(UTC)
Юрий

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

Группы: Участники
Зарегистрирован: 22.01.2008(UTC)
Сообщений: 671
Мужчина
Российская Федерация
Откуда: Йошкар-Ола

Сказал «Спасибо»: 3 раз
Поблагодарили: 93 раз в 67 постах
На всякий случай поясню: "attrblobCoSigner" получается так
1)
CMSG_SIGNER_INFO* pSignerInfo;

2)
CryptEncodeObject(...PKCS7_SIGNER_INFO...);
С уважением,
Юрий Строжевский
Offline Новожилова Елена  
#4 Оставлено : 6 марта 2013 г. 12:25:51(UTC)
Новожилова Елена

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

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

Поблагодарили: 99 раз в 95 постах
Здравствуйте!

Что именно вы подразумеваете под словами "доподписать сообщение"?

Создать "параллельную" подпись? То есть одни и те же данные подписывают 2 разных лица.

Или создать "заверяющую" подпись? То есть второй человек подписывает не исходные данные, а значение первой подписи.

Или вам нужно просто добавить неподписанный атрибут к существующей подписи?
Offline MaCeL  
#5 Оставлено : 6 марта 2013 г. 13:02:03(UTC)
MaCeL

Статус: Новичок

Группы: Участники
Зарегистрирован: 05.03.2013(UTC)
Сообщений: 4
Российская Федерация
Откуда: Муром

Сказал(а) «Спасибо»: 1 раз
Автор: Новожилова Елена Перейти к цитате

Что именно вы подразумеваете под словами "доподписать сообщение"?


Елена, имеется ввиду создание именно параллельной подписи, т.е. одно и то же сообщение подписывается 2-мя людьми.

Механизм добавления не так важен, т.е. большой разницы не имеет, добавить неподписываемый атрибут после наложения 2-ой подписи или же во время подписывания (если конечно такая возможность есть)
Offline Новожилова Елена  
#6 Оставлено : 6 марта 2013 г. 13:39:08(UTC)
Новожилова Елена

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

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

Поблагодарили: 99 раз в 95 постах
А атрибут нужно добавить в первую или вторую подпись?

Если во вторую (которая создается) то используете функцию CryptMsgControl(CMSG_CTRL_ADD_SIGNER). См. http://msdn.microsoft.co...ws/desktop/aa380220.aspx

В качестве параметра передается структура CMSG_SIGNER_ENCODE_INFO. Для того, чтобы добавить неподписанный атрибут заполняете вот эти поля:
Код:

DWORD cUnauthAttr;
PCRYPT_ATTRIBUTE rgUnauthAttr;


Это число атрибутов (в вашем случае один) и массив указателей(в вашем случае с одним элементом). См. http://msdn.microsoft.co...ws/desktop/aa378102.aspx

Если в первую (уже созданную), то используете CryptMsgControl(CMSG_CTRL_ADD_SIGNER_UNAUTH_ATTR)

Как закодировать атрибут - зависит от того, какое в нем должно лежать значение. Посмотрите на флаги для функции CryptEncodeObject http://msdn.microsoft.co...ws/desktop/aa378145.aspx

Отредактировано пользователем 6 марта 2013 г. 13:42:44(UTC)  | Причина: Не указана

Offline MaCeL  
#7 Оставлено : 11 марта 2013 г. 15:04:37(UTC)
MaCeL

Статус: Новичок

Группы: Участники
Зарегистрирован: 05.03.2013(UTC)
Сообщений: 4
Российская Федерация
Откуда: Муром

Сказал(а) «Спасибо»: 1 раз
Автор: Новожилова Елена Перейти к цитате


Как закодировать атрибут - зависит от того, какое в нем должно лежать значение. Посмотрите на флаги для функции CryptEncodeObject http://msdn.microsoft.co...ws/desktop/aa378145.aspx


Собственно вопрос и был как раз по поводу того, какую структуру(ы) использовать для кодирования атрибута (значение атрибута представляет собой обычную ascii строку).
Просмотрел описание констант для CryptEncodeObject, из наиболее подходящего нашел пару CRYPT_DATA_BLOB - X509_OCTET_STRING. Но не уверен, что это корректно.
Можете подсказать что то по этому поводу?
P.S.
Для добавления атрибута использую функцию CryptMsgControl(CMSG_CTRL_ADD_SIGNER).

Offline Новожилова Елена  
#8 Оставлено : 13 марта 2013 г. 13:22:40(UTC)
Новожилова Елена

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

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

Поблагодарили: 99 раз в 95 постах
Почему вы считаете, что выбор OCTET_STRING для кодирования атрибута будет некорректным?

Насколько я понимаю, это ваш собственный внутренний атрибут - вам и решать, как его кодировать. Главное, чтобы принимающая сторона знала как с таким атрибутом работать.
thanks 1 пользователь поблагодарил Новожилова Елена за этот пост.
MaCeL оставлено 15.03.2013(UTC)
Offline MaCeL  
#9 Оставлено : 15 марта 2013 г. 12:29:05(UTC)
MaCeL

Статус: Новичок

Группы: Участники
Зарегистрирован: 05.03.2013(UTC)
Сообщений: 4
Российская Федерация
Откуда: Муром

Сказал(а) «Спасибо»: 1 раз
Автор: Новожилова Елена Перейти к цитате
Почему вы считаете, что выбор OCTET_STRING для кодирования атрибута будет некорректным?

Насколько я понимаю, это ваш собственный внутренний атрибут - вам и решать, как его кодировать. Главное, чтобы принимающая сторона знала как с таким атрибутом работать.


Просто подумал, что существует общепринятая практика по добавлению такого рода атрибутов. Если в использовании OCTET_STRING нет ничего страшного, то пожалуй так и поступлю.
Огромное спасибо.

Offline Eurosport  
#10 Оставлено : 4 июля 2015 г. 7:59:14(UTC)
Eurosport

Статус: Новичок

Группы: Участники
Зарегистрирован: 18.04.2015(UTC)
Сообщений: 5
Мужчина
Российская Федерация
Откуда: Ульяновск

Уважаемые профессионалы, подскажите пожалуйста, какими функциями мне далее следует пользоваться:
Реализация в delphi7.
Есть подпись (массив байт), полученная при подписании XML через функцию CryptSignMessage.
Есть штамп времени (массив байт), полученный при отправке на TSA-сервер самой подписи через функцию CryptRetrieveTimeStamp.
Требуется реализовать добавление это штампа в подпись в соответствии со спецификацией CAdES-T (ETSI TS 101 733 "CMS Advanced Electronic Signatures (CadES))
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
2 Страницы12>
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.