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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline PrGeorge  
#1 Оставлено : 17 ноября 2011 г. 14:31:31(UTC)
PrGeorge

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

Группы: Участники
Зарегистрирован: 17.11.2011(UTC)
Сообщений: 4
Откуда: Томск

Здравствуйте!

Столкнулся с такой проблемой и решить не могу.
Нужно пописать файл. И не просто подписать, а подписать так чтобы был задан атрибут подписи "время создания".
Для создания самой подписи руководствовался следующим материалом: http://www.rsdn.ru/article/crypto/signature.xml. Но там никакие дополнительные атрибуты при создании подписи не используются.
Читая MSDN догадался что мне нужно сформировать дополнительную структуру CRYPT_ATTRIBUTE и там прописать этот самый дополнительный атрибут "Время создания". Но в самом MSDN и в других источниках пока ничего не нашел.

Пробую следующим образом:

Код:
                        CRYPT_SIGN_MESSAGE_PARA param;
                                ...
                                 param.cAuthAttr = 1;
                        CRYPT_ATTRIBUTE Attr;
                                memset(&Attr, 0, sizeof(CRYPT_ATTRIBUTE));
                                Attr.pszObjId = szOID_RSA_signingTime;
                                Attr.cValue = 1;
                                CRYPT_INTEGER_BLOB intblob;
                                        memset(&intblob, 0, sizeof(CRYPT_INTEGER_BLOB));
                                        intblob.cbData = 1;
                                        intblob.pbData = "17.11.2011";
                                Attr.rgValue = &     intblob;
                        param.rgAuthAttr = &Attr;
                        ...


Вообще должна ставиться просто текущая системная дата/время.

Но ничего не выходит. Программа честно отрабатывает, добавляет подпись в файл, но проверить результат, например, КриптоАРМом не получается.

Может кто подскажет как сделать правильно? Или инструкцию где можно об этом почитать.
Offline Андрей Писарев  
#2 Оставлено : 17 ноября 2011 г. 14:35:15(UTC)
Андрей *

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

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 13,487
Мужчина
Российская Федерация

Сказал «Спасибо»: 553 раз
Поблагодарили: 2245 раз в 1751 постах
Цитата:
Программа честно отрабатывает, добавляет подпись в файл.


нет, "не честно"

т.к.
Цитата:
но проверить результат, например, КриптоАРМом не получается


обсуждалось и не раз, и в MSDN есть пример и здесь, что в старом форуме , что в новом
Техническую поддержку оказываем тут
Наша база знаний
Offline PrGeorge  
#3 Оставлено : 17 ноября 2011 г. 14:42:02(UTC)
PrGeorge

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

Группы: Участники
Зарегистрирован: 17.11.2011(UTC)
Сообщений: 4
Откуда: Томск

Спасибо за ответ. Жаль только что ссылочек не дали.
Offline Андрей Писарев  
#4 Оставлено : 17 ноября 2011 г. 15:25:44(UTC)
Андрей *

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

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 13,487
Мужчина
Российская Федерация

Сказал «Спасибо»: 553 раз
Поблагодарили: 2245 раз в 1751 постах
PrGeorge написал:
Спасибо за ответ. Жаль только что ссылочек не дали.


пардон, я уж совсем обленился, исправляюсь:
в верхней части
Поиск
Ввести одно ключевое слово: szOID_RSA_signingTime
Нажать кнопку Искать

Отредактировано пользователем 17 ноября 2011 г. 15:28:10(UTC)  | Причина: Не указана

Техническую поддержку оказываем тут
Наша база знаний
Offline PrGeorge  
#5 Оставлено : 17 ноября 2011 г. 16:56:31(UTC)
PrGeorge

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

Группы: Участники
Зарегистрирован: 17.11.2011(UTC)
Сообщений: 4
Откуда: Томск

Огромное Спасибо за помощь! Действительно, поиск по szOID_RSA_signingTime помог, а поиск по "Время создания" не помог.
По поиску нашел пример. Правда он на Delphi, а у меня программа на Builder`е.
Попробовал перевести. Вот что получилось:
Код:
               TDateTime fTime = Date();
                        PBYTE pbAuth;
                        DWORD cbAuth;
                        if (! CryptEncodeObject(ENC_TYPE, szOID_RSA_signingTime, &fTime, NULL, &cbAuth))
                                {       ShowMessage("Cannot encode object");
                                };
                        memset(&pbAuth,0,cbAuth);

                        CryptEncodeObject(ENC_TYPE, szOID_RSA_signingTime, &fTime, pbAuth, &cbAuth);

                        CRYPT_ATTR_BLOB NowTime;
                        memset(&NowTime,0,sizeof(CRYPT_ATTR_BLOB));
                        NowTime.cbData = cbAuth;
                        NowTime.pbData = pbAuth;
                        CRYPT_ATTRIBUTE Attr;
                        memset(&Attr, 0, sizeof(CRYPT_ATTRIBUTE));
                        Attr.pszObjId = szOID_RSA_signingTime;
                        Attr.cValue = 1;
                        Attr.rgValue = &NowTime;
                        param.cAuthAttr = 1;
                        param.rgAuthAttr = &Attr;

Может перевел, конечно, не правильно. Но в результате у меня программа всегда завершается сообщением "Cannot encode object".
Т.е. она не может подсчитать объем памяти для pbAuth, т.е. для сохранения текущей даты/времени.

Посоветуйте что-нибудь, пожалуйста.
Offline Андрей Писарев  
#6 Оставлено : 17 ноября 2011 г. 17:18:08(UTC)
Андрей *

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

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 13,487
Мужчина
Российская Федерация

Сказал «Спасибо»: 553 раз
Поблагодарили: 2245 раз в 1751 постах
Цитата:
Посоветуйте что-нибудь, пожалуйста.

еще раз поискать... ?

а в старый форум не заглядывал?


Цитата:

По поиску нашел пример. Правда он на Delphi, а у меня программа на Builder`е.


;)
Техническую поддержку оказываем тут
Наша база знаний
Offline PrGeorge  
#7 Оставлено : 17 ноября 2011 г. 17:46:26(UTC)
PrGeorge

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

Группы: Участники
Зарегистрирован: 17.11.2011(UTC)
Сообщений: 4
Откуда: Томск

Старый форум помог. Оказывается не правильно память под переменную выделял. Да и формат даты там какой-то хитрый должен быть.

Спасибо!
Offline Андрей Писарев  
#8 Оставлено : 17 ноября 2011 г. 17:59:46(UTC)
Андрей *

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

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 13,487
Мужчина
Российская Федерация

Сказал «Спасибо»: 553 раз
Поблагодарили: 2245 раз в 1751 постах
PrGeorge написал:
Старый форум помог. Оказывается не правильно память под переменную выделял. Да и формат даты там какой-то хитрый должен быть.

Спасибо!


Всегда пожалуйста...

формат не хитрый...

уж не сравнить с первым постом ;)

Цитата:

PrGeorge

intblob.pbData = "17.11.2011";



Техническую поддержку оказываем тут
Наша база знаний
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest (2)
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.