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

Уведомление

Icon
Error

2 Страницы<12
Опции
К последнему сообщению К первому непрочитанному
Offline Depish  
#11 Оставлено : 19 октября 2021 г. 10:25:01(UTC)
Depish

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

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

Сказал(а) «Спасибо»: 10 раз
Автор: Андрей * Перейти к цитате
Первая ошибка - нет проверок результатов функций.

Какая функция выдаёт отказ и какую ошибку?


Проверки есть, просто я убрал их для краткости, ошибок нет и подпись создается, на выходе 2 файла что прикреплял выше

Вот полный пример:

Отредактировано пользователем 19 октября 2021 г. 10:26:59(UTC)  | Причина: Не указана

Offline Depish  
#12 Оставлено : 19 октября 2021 г. 13:23:58(UTC)
Depish

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

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

Сказал(а) «Спасибо»: 10 раз
Автор: Андрей * Перейти к цитате
Первая ошибка - нет проверок результатов функций.

Какая функция выдаёт отказ и какую ошибку?


ping
Offline two_oceans  
#13 Оставлено : 19 октября 2021 г. 18:09:06(UTC)
two_oceans

Статус: Эксперт

Группы: Участники
Зарегистрирован: 05.03.2015(UTC)
Сообщений: 1,602
Российская Федерация
Откуда: Иркутская область

Сказал(а) «Спасибо»: 110 раз
Поблагодарили: 393 раз в 366 постах
Автор: Андрей * Перейти к цитате
p.s.
ошибка в 17 строке.
Спасибо порадовали. Ага, а убийца - дворецкий. Написано в теме где еще не было исходников.
Автор: Depish Перейти к цитате
Автор: Андрей * Перейти к цитате
если подпись отсоединенная - то сначала её загружаем CryptMsgUpdate ( с true = целиком)
Сделал как в примере но ошибка не исчезла, что я делаю не так?
Пример в спойлере
...
CryptMsgControl(hMsg, 0, CMSG_CTRL_ADD_SIGNER, &signer);
CryptMsgControl(hMsg, 0, CMSG_CTRL_ADD_CERT, &coSignerBlob);
...
Автор: Depish Перейти к цитате
Проверки есть, просто я убрал их для краткости, ошибок нет и подпись создается, на выходе 2 файла что прикреплял выше

Вот полный пример:
...
if (!CadesMsgAddEnhancedSignature(hMsg, &cosignPara)) {
...
Добрый день. Вот так интересно дополнили пример, что даже функция стала другой. Лично мне не совсем понятна эта строка:
Цитата:
signer.HashAlgorithm.pszObjId = (LPSTR)GetHashOid(context);
Позвольте тоже построить дикую теорию на этом. Смысл в том, что вероятно эта функция вернула гост-2001 вместо гост-2012. Тогда хэш был посчитан по другому алгоритму и должна была быть ошибка о несогласованности алгоритма хэша и алгоритма ключа. Однако если хэш был сохранен как значение, то длина у гост-2001 и гост-2012 256 бит одинакова, то есть значение одного можно загрузить в другой и подписать, тогда ошибки не будет, но хэш при проверке покажется неверным. Можете указать что возвратила эта функция и для ясности еще и посчитать хеши подписываемых данных утилитой
Код:
cpverify.exe -mk -alg GR3411 filename.txt -inverted_halfbytes 0
cpverify.exe -mk -alg GR3411_2012_256 filename.txt -inverted_halfbytes 0

Отредактировано пользователем 19 октября 2021 г. 18:41:42(UTC)  | Причина: Не указана

thanks 1 пользователь поблагодарил two_oceans за этот пост.
Depish оставлено 20.10.2021(UTC)
Offline Depish  
#14 Оставлено : 19 октября 2021 г. 20:20:45(UTC)
Depish

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

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

Сказал(а) «Спасибо»: 10 раз
Автор: two_oceans Перейти к цитате
Добрый день. Вот так интересно дополнили пример, что даже функция стала другой. Лично мне не совсем понятна эта строка:
Цитата:
signer.HashAlgorithm.pszObjId = (LPSTR)GetHashOid(context);
Позвольте тоже построить дикую теорию на этом. Смысл в том, что вероятно эта функция вернула гост-2001 вместо гост-2012. Тогда хэш был посчитан по другому алгоритму и должна была быть ошибка о несогласованности алгоритма хэша и алгоритма ключа. Однако если хэш был сохранен как значение, то длина у гост-2001 и гост-2012 256 бит одинакова, то есть значение одного можно загрузить в другой и подписать, тогда ошибки не будет, но хэш при проверке покажется неверным. Можете указать что возвратила эта функция и для ясности еще и посчитать хеши подписываемых данных утилитой
Код:
cpverify.exe -mk -alg GR3411 filename.txt -inverted_halfbytes 0
cpverify.exe -mk -alg GR3411_2012_256 filename.txt -inverted_halfbytes 0


Доброго времени суток!

Вот вывод утилиты:
Код:

>cpverify.exe -mk -alg GR3411 testdoc.docx -inverted_halfbytes 0
EF41B84C17DF4166CFF80C01E38707E541BA347081404A8B1771BC37170D4DD5
>cpverify.exe -mk -alg GR3411_2012_256 testdoc.docx -inverted_halfbytes 0
178A4F63943C8F6D11BA682F2E608029AFBD00424E36313AAA77421AD4FECBEB


Тело функции:
Код:

const char* GetHashOid(PCCERT_CONTEXT pCert) {
	const char* pKeyAlg = pCert->pCertInfo->SubjectPublicKeyInfo.Algorithm.pszObjId;
	if (strcmp(pKeyAlg, szOID_CP_GOST_R3410EL) == 0) {
		return szOID_CP_GOST_R3411;
	} else if (strcmp(pKeyAlg, szOID_CP_GOST_R3410_12_256) == 0) {
		return szOID_CP_GOST_R3411_12_256;
	}
	else if (strcmp(pKeyAlg, szOID_CP_GOST_R3410_12_512) == 0) {
		return szOID_CP_GOST_R3411_12_512;
	}
	return NULL;
}


C моими сертификатами возвращается szOID_CP_GOST_R3411_12_256 т.е. "1.2.643.7.1.1.2.2'

Заменил
Код:

if (!CadesMsgAddEnhancedSignature(hMsg, &cosignPara)) {

На
Код:

    CryptMsgControl(hMsg, 0, CMSG_CTRL_ADD_SIGNER, &signer);
    CryptMsgControl(hMsg, 0, CMSG_CTRL_ADD_CERT, &coSignerBlob);

Но ничего не поменялось, так же создаются две подписи с неверным хешом.

Файлы с подписями:
Fajjly s podpisjami.zip (19kb) загружен 1 раз(а).

Offline Андрей *  
#15 Оставлено : 19 октября 2021 г. 21:09:39(UTC)
Андрей *

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

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

Сказал «Спасибо»: 492 раз
Поблагодарили: 2034 раз в 1578 постах
там, где 1 подпись - хеш правильный, но не вложен сертификат,
где 2 подписи - вложен сертификат для второй подписи, но хеш не тот.

Snimok ehkrana ot 2021-10-19 22-09-07.png (30kb) загружен 7 раз(а).
Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Андрей * за этот пост.
Depish оставлено 20.10.2021(UTC)
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
2 Страницы<12
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.