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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Depish  
#1 Оставлено : 14 октября 2021 г. 10:29:20(UTC)
Depish

Статус: Участник

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

Сказал(а) «Спасибо»: 10 раз
Необходимо добавлять доплнительно подписи к существующим в документе, как это можно сделать на C++ ?
Использовал пример с сайта MSDN с соподписью, но хеши у подписий становятся неверным, хотя изначальная подпись была верной.
Offline Андрей *  
#2 Оставлено : 14 октября 2021 г. 11:20:55(UTC)
Андрей *

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

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

Сказал «Спасибо»: 390 раз
Поблагодарили: 1610 раз в 1237 постах
Здравствуйте.


Покажите на тестовых примерах, приложите файлы\подписи.
какой код вообще, может кто-то заметит ошибку.

p.s.
ошибка в 17 строке.
Техническую поддержку оказываем тут
Наша база знаний
Offline Depish  
#3 Оставлено : 14 октября 2021 г. 12:22:19(UTC)
Depish

Статус: Участник

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

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


Покажите на тестовых примерах, приложите файлы\подписи.
какой код вообще, может кто-то заметит ошибку.

p.s.
ошибка в 17 строке.


Вот код (в споилере), убрал всякие проверки, так как очень слиьно код раздувает, читать долго и нудно. В коде все отрабатывает и не падает.

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

Offline Андрей *  
#4 Оставлено : 14 октября 2021 г. 13:43:50(UTC)
Андрей *

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

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

Сказал «Спасибо»: 390 раз
Поблагодарили: 1610 раз в 1237 постах
приложить файл, файл подписи (с двумя внутри) можете?
Техническую поддержку оказываем тут
Наша база знаний
Offline Depish  
#5 Оставлено : 14 октября 2021 г. 13:54:43(UTC)
Depish

Статус: Участник

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

Сказал(а) «Спасибо»: 10 раз
Автор: Андрей * Перейти к цитате

приложить файл, файл подписи (с двумя внутри) можете?



1234.pdf (35kb) загружен 1 раз(а). 1234.pdf.dat.cosign (3kb) загружен 1 раз(а). 1234.pdf.dat (1kb) загружен 1 раз(а).

фаил .dat это с одной подписью а .cosign с двумя
Offline Андрей *  
#6 Оставлено : 14 октября 2021 г. 14:15:02(UTC)
Андрей *

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

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

Сказал «Спасибо»: 390 раз
Поблагодарили: 1610 раз в 1237 постах
Вот как пример.. исправляйте у себя.



Эта конференция требует регистрации перед тем как вы сможете увидеть скрытые сообщения.

Техническую поддержку оказываем тут
Наша база знаний
thanks 4 пользователей поблагодарили Андрей * за этот пост.
Depish оставлено 14.10.2021(UTC), two_oceans оставлено 15.10.2021(UTC), LONG11 оставлено 16.10.2021(UTC), infocentre оставлено 18.10.2021(UTC)
Offline Андрей *  
#7 Оставлено : 14 октября 2021 г. 14:18:25(UTC)
Андрей *

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

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

Сказал «Спасибо»: 390 раз
Поблагодарили: 1610 раз в 1237 постах
Автор: Depish Перейти к цитате
Автор: Андрей * Перейти к цитате

приложить файл, файл подписи (с двумя внутри) можете?



1234.pdf (35kb) загружен 1 раз(а). 1234.pdf.dat.cosign (3kb) загружен 1 раз(а). 1234.pdf.dat (1kb) загружен 1 раз(а).

фаил .dat это с одной подписью а .cosign с двумя



да, хеш у второй неправильный: 3F539A213E97C802CC229D474C6AA32A825A360B2A933A949FD925208D9CE1BB

Snimok ehkrana ot 2021-10-14 15-17-27.png (31kb) загружен 5 раз(а).
Snimok ehkrana ot 2021-10-14 15-17-09.png (29kb) загружен 6 раз(а).
Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Андрей * за этот пост.
Depish оставлено 14.10.2021(UTC)
Offline Андрей *  
#8 Оставлено : 18 октября 2021 г. 10:57:49(UTC)
Андрей *

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

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

Сказал «Спасибо»: 390 раз
Поблагодарили: 1610 раз в 1237 постах
если подпись отсоединенная - то сначала её загружаем CryptMsgUpdate ( с true = целиком)
Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Андрей * за этот пост.
Depish оставлено 19.10.2021(UTC)
Offline Depish  
#9 Оставлено : 19 октября 2021 г. 10:17:47(UTC)
Depish

Статус: Участник

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

Сказал(а) «Спасибо»: 10 раз
Автор: Андрей * Перейти к цитате
если подпись отсоединенная - то сначала её загружаем CryptMsgUpdate ( с true = целиком)


Сделал как в примере но ошибка не исчезла, что я делаю не так?
Пример в спойлере

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

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

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

Сказал «Спасибо»: 390 раз
Поблагодарили: 1610 раз в 1237 постах
Первая ошибка - нет проверок результатов функций.

Какая функция выдаёт отказ и какую ошибку?
Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Андрей * за этот пост.
Depish оставлено 19.10.2021(UTC)
Offline Depish  
#11 Оставлено : 19 октября 2021 г. 10:25:01(UTC)
Depish

Статус: Участник

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

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

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


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

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

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

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

Статус: Участник

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

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

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


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

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

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

Сказал(а) «Спасибо»: 90 раз
Поблагодарили: 318 раз в 300 постах
Автор: Андрей * Перейти к цитате
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)
Сообщений: 29
Российская Федерация

Сказал(а) «Спасибо»: 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)
Сообщений: 10,637
Мужчина
Российская Федерация

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

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