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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline ЛюдмилаKR  
#1 Оставлено : 7 сентября 2021 г. 14:19:53(UTC)
ЛюдмилаKR

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

Группы: Участники
Зарегистрирован: 10.12.2020(UTC)
Сообщений: 1

Сказал(а) «Спасибо»: 1 раз
Я разрабатываю библиотеку, которая устанавливает квалифицированную ЭЦП в PDF документ. Я использовала пример из .Net SDK и данный форум.
Мой код(C#):
string tspServerAddress = "http://tax4.tensor.ru/tsp/tsp.srf";
int intCSize = 44000;
Dictionary<iTextSharp.text.pdf.PdfName, int> hashtable = new Dictionary<iTextSharp.text.pdf.PdfName, int>();
hashtable[iTextSharp.text.pdf.PdfName.CONTENTS] = intCSize * 2 + 2;
sap.PreClose(hashtable);
string signature = null;
byte[] pk = null;
Stream rangeStream = sap.GetRangeStream();
MemoryStream contentStream = new MemoryStream();
rangeStream.CopyTo(contentStream);
byte[] content = contentStream.ToArray();
CPSigner cps = new CPSigner();
CAPICOM.Store store = new Store();
store.Open(CAPICOM.CAPICOM_STORE_LOCATION.CAPICOM_CURRENT_USER_STORE, "My",
CAPICOM.CAPICOM_STORE_OPEN_MODE.CAPICOM_STORE_OPEN_READ_ONLY);
var certificates = store.Certificates as CAPICOM.Certificates;
bool bo = false;
var en = certificates.GetEnumerator();
while (!bo)
{
en.MoveNext();
CAPICOM.Certificate cert1 = en.Current as CAPICOM.Certificate;
var s1 = cert1.SerialNumber;
if (s1 == cert.SerialNumber)
{
cps.Certificate = cert1;
bo = true;
}
}

cps.Options = CAPICOM_CERTIFICATE_INCLUDE_OPTION.CAPICOM_CERTIFICATE_INCLUDE_END_ENTITY_ONLY;
cps.TSAAddress = tspServerAddress;
CadesSignedData csd = new CadesSignedData();
csd.DisplayData = CADESCOM_DISPLAY_DATA.CADESCOM_DISPLAY_DATA_NONE;//.CADESCOM_DISPLAY_DATA_ATTRIBUTE;
csd.ContentEncoding = CADESCOM_CONTENT_ENCODING_TYPE.CADESCOM_BASE64_TO_BINARY;
csd.Content = Convert.ToBase64String(content);

// Создание и проверка подписи CAdES BES
signature = csd.SignCades(cps, CADESCOM_CADES_TYPE.CADESCOM_CADES_BES, true, CAdESCOM.CAPICOM_ENCODING_TYPE.CAPICOM_ENCODE_BASE64);
signature = csd.EnhanceCades(CADESCOM_CADES_TYPE.CADESCOM_CADES_DEFAULT, tspServerAddress, CAdESCOM.CAPICOM_ENCODING_TYPE.CAPICOM_ENCODE_BASE64);
csd.VerifyCades(signature, CADESCOM_CADES_TYPE.CADESCOM_CADES_DEFAULT, true);
pk = Convert.FromBase64String(signature);
// Помещаем подпись в документ
byte[] outc = new byte[pk.Length];

iTextSharp.text.pdf.PdfDictionary dic2 = new iTextSharp.text.pdf.PdfDictionary();
Array.Copy(pk, 0, outc, 0, pk.Length);
dic2.Put(iTextSharp.text.pdf.PdfName.CONTENTS, new iTextSharp.text.pdf.PdfString(outc).SetHexWriting(true));

Несколько месяцев библиотека работала, пользователи подписывали и вдруг ошибки посыпались: "Длина результирующего массива недостаточна. Проверьте значения destindex и length, а также нижние границы массива."
Взяла у пользователя якобы проблемный pdf файл и отладкой посмотрела и увидела, что подписывая один и тот же документ одной и той же подписью функция EnhanceCades возвращает разного размера результат, а точнее размер два: 40 553 и 528 985.
В техподдержке написали: "гост подпись всегда разная.
xlt1 подпись тем более разная.
насчет размера тоже непонятно. в среднем для xlt1 это примерно 31кб. но может быть и больше. если у tsp службы нет ocsp адреса, то xlt1 из-за crl может распухнуть в неопределенный размер (0,7Мб и выше)
постарайтесь создавать массивы по фактическому размеру подписи.
"
Вопрос: а как узнать размер подписи, если нам сначала нужно до подписания зарезервировать этот размер тут sap.PreClose(hashtable);
Offline Андрей *  
#2 Оставлено : 7 сентября 2021 г. 14:50:54(UTC)
Андрей *

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

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

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

а) выделять с избытком
б) попробовать до реального подписания - подписать тестовые данные ("тест") и посмотреть, сколько будет занимать отсоединенная cms (не PAdES), (30кб ... 700 кб). А если будет CRL на 2 Мб? )
Техническую поддержку оказываем тут
Наша база знаний
Offline two_oceans  
#3 Оставлено : 8 сентября 2021 г. 7:23:55(UTC)
two_oceans

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

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

Сказал(а) «Спасибо»: 90 раз
Поблагодарили: 319 раз в 300 постах
Вообще, соглашусь, что CRL может быть и 2 Мб. Еще вариант - кэшировать пин и выполнять несколько попыток: при неудаче увеличивать размер на некий шаг, при удаче сохранять максимальный размер подписи для будущего использования.

Однако: 1) последнее время Минкомсвязь фактически приравнивает срок действия ключа УЦ к сроку действия пользовательского ключа и УЦ перевыпускают сертификаты через год с хвостиком (хотя сам срок сертификата на годы вперед). Чтобы накопить за год 2 Мб в списке отзыва... мне кажется, что естественных причин недостаточно, надо порядком накосячить в самом УЦ. Поэтому чаще CRL будет меньшего размера; 2) мне кажется, подстраивать размер, это немного не тот способ решения проблемы - лечите симптомы, а не причину.
Цитата:
подписывая один и тот же документ одной и той же подписью функция EnhanceCades возвращает разного размера результат, а точнее размер два: 40 553 и 528 985. ... в среднем для xlt1 это примерно 31кб. но может быть и больше. если у tsp службы нет ocsp адреса, то xlt1 из-за crl может распухнуть в неопределенный размер (0,7Мб и выше)
Если это одна и та же подпись и одна и та же tsp служба, то очевидно, что для нее в принципе либо есть ocsp, либо нет. Надо полагать, по каким-то причинам ocsp то доступен, то недоступен. В случае такого "мигания" сервиса ocsp, полагаю предварительная калибровка размера через "тест" не подойдет. Нет никакой гарантии, что "работающий" сервис в следующий момент не "отключится". Если неполадки из-за Интернета, то надо стабилизировать Интернет. Если неполадки из-за самой ocsp службы, возможно проще сменить адрес tsp.

Отредактировано пользователем 8 сентября 2021 г. 7:29:47(UTC)  | Причина: Не указана

thanks 1 пользователь поблагодарил two_oceans за этот пост.
ЛюдмилаKR оставлено 08.09.2021(UTC)
Offline basid  
#4 Оставлено : 8 сентября 2021 г. 7:45:57(UTC)
basid

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

Группы: Участники
Зарегистрирован: 21.11.2010(UTC)
Сообщений: 845

Сказал(а) «Спасибо»: 5 раз
Поблагодарили: 110 раз в 99 постах
В чём, простите, проблема? Выделить буфер 4-8-16 МБ и (если надо) перекопировать данные подписи в буфер нужного размера.
Задлянафига эти рассуждения и оценки размера подписи, если рулят даже не "большие батальоны", а просто - "маленькие отделения"?
Offline two_oceans  
#5 Оставлено : 8 сентября 2021 г. 8:27:57(UTC)
two_oceans

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

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

Сказал(а) «Спасибо»: 90 раз
Поблагодарили: 319 раз в 300 постах
Соглашусь, что выделить 4 Мб не проблема.

Оценки в основном для того, что криптография как обычно составлена из кучи промежуточных стадий и часто оказывается, что тупо увеличив конечный буфер мы ничего не решим, потому что где-то в середине буфер также ограничен меньшим значением и допустим посчитать хэш файла кусками по 20 байт или 30 Мб можно, а кусками по 32 Мб все крашится. Или кто-то решил, что в сертификате вот никак не может находиться больше 1023 оидов (почему не 1024?) и тому подобные ограничения на ровном месте, которые нигде не описаны, ни на какие стандарты не опираются, просто кто-то решил, что они "разумно большие". А увеличив конечный размер выше какого-то предела мы окажемся "неразумно большими". Поэтому приходится увеличивать очень осторожно. Вот и все, в этом суть рассуждений.
Offline Андрей *  
#6 Оставлено : 8 сентября 2021 г. 9:53:04(UTC)
Андрей *

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

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

Сказал «Спасибо»: 393 раз
Поблагодарили: 1611 раз в 1238 постах
Автор: two_oceans Перейти к цитате

Однако: 1) последнее время Минкомсвязь фактически приравнивает срок действия ключа УЦ к сроку действия пользовательского ключа и УЦ перевыпускают сертификаты через год с хвостиком (хотя сам срок сертификата на годы вперед). Чтобы накопить за год 2 Мб в списке отзыва... мне кажется, что естественных причин недостаточно, надо порядком накосячить в самом УЦ. Поэтому чаще CRL будет меньшего размера;

Крупные УЦ - имеют крупные CRL.
Крупные УЦ - чаще всего встречаются среди пользователей ПО.
Далее - сокращение АУЦ => меньше количество CRL, но больший их размер.


Примеры больших CRL:
http://cdp.skbkontur.ru/cdp/skbkontur-q1-2020.crl
http://tax4.tensor.ru/te...rca-2019_cp_gost2012.crl
http://tax4.tensor.ru/te...nsorca-2021_gost2012.crl
http://tax4.tensor.ru/te...rca-2021_cp_gost2012.crl
Snimok ehkrana ot 2021-09-08 10-51-36.png (15kb) загружен 7 раз(а).


Автор: two_oceans Перейти к цитате

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

..OCSP - от УЦ, в котором получали сертификат.
TSP - может быть от другого УЦ.
Как смена TSP адреса решит проблему с OCSP-ответами для сертификата подписанта?

Техническую поддержку оказываем тут
Наша база знаний
Offline Андрей *  
#7 Оставлено : 8 сентября 2021 г. 9:57:24(UTC)
Андрей *

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

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

Сказал «Спасибо»: 393 раз
Поблагодарили: 1611 раз в 1238 постах
Автор: basid Перейти к цитате
В чём, простите, проблема? Выделить буфер 4-8-16 МБ и (если надо) перекопировать данные подписи в буфер нужного размера.
Задлянафига эти рассуждения и оценки размера подписи, если рулят даже не "большие батальоны", а просто - "маленькие отделения"?


Мы про PAdES. А не CMS.
Напомню:
Цитата:

Вопрос: а как узнать размер подписи, если нам сначала нужно до подписания зарезервировать этот размер тут sap.PreClose(hashtable);


Элементарные вопросы от пользователей:
почему мой исходный файл 50 Кб PDF после подписания то 1мб, то 200 Кб?
Техническую поддержку оказываем тут
Наша база знаний
Offline two_oceans  
#8 Оставлено : 8 сентября 2021 г. 10:59:30(UTC)
two_oceans

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

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

Сказал(а) «Спасибо»: 90 раз
Поблагодарили: 319 раз в 300 постах
Автор: Андрей * Перейти к цитате
Как смена TSP адреса решит проблему с OCSP-ответами для сертификата подписанта?
Да, я перепутал. В том смысле, что на tsp также по идее проверяются цепочки и получается ocsp-ответ, но не идет в подпись.
Цитата:
Крупные УЦ - чаще всего встречаются среди пользователей ПО.
В этом смысле да, конечно.
Цитата:
Далее - сокращение АУЦ => меньше количество CRL, но больший их размер.
На снимке всего 3 УЦ с размером больше чем я ожидал, но Вы правы. Собственно, у меня как раз есть в августе полученный сертификат от Контура, идентификатор ключа совпадает, просто не интересовался какой размер у CRL. Причем большинство попавшихся на глаза записей - последние 3 месяца. Видимо, действительно следствие сокращения количества АУЦ.

P.S. Пока разбирался, наткнулся на галочку - "отключить списки отзыва" в свойствах контекста сертификата. Она случайно не поможет от раздувания подписи списком отзыва?
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.