Статус: Новичок
Группы: Участники
Зарегистрирован: 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);
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,322 Сказал «Спасибо»: 549 раз Поблагодарили: 2208 раз в 1723 постах
|
Здравствуйте.
а) выделять с избытком б) попробовать до реального подписания - подписать тестовые данные ("тест") и посмотреть, сколько будет занимать отсоединенная cms (не PAdES), (30кб ... 700 кб). А если будет CRL на 2 Мб? ) |
|
|
|
|
Статус: Эксперт
Группы: Участники
Зарегистрирован: 05.03.2015(UTC) Сообщений: 1,602 Откуда: Иркутская область Сказал(а) «Спасибо»: 110 раз Поблагодарили: 395 раз в 366 постах
|
Вообще, соглашусь, что 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)
| Причина: Не указана
|
1 пользователь поблагодарил two_oceans за этот пост.
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 21.11.2010(UTC) Сообщений: 1,098
Сказал(а) «Спасибо»: 7 раз Поблагодарили: 151 раз в 136 постах
|
В чём, простите, проблема? Выделить буфер 4-8-16 МБ и (если надо) перекопировать данные подписи в буфер нужного размера. Задлянафига эти рассуждения и оценки размера подписи, если рулят даже не "большие батальоны", а просто - "маленькие отделения"?
|
|
|
|
Статус: Эксперт
Группы: Участники
Зарегистрирован: 05.03.2015(UTC) Сообщений: 1,602 Откуда: Иркутская область Сказал(а) «Спасибо»: 110 раз Поблагодарили: 395 раз в 366 постах
|
Соглашусь, что выделить 4 Мб не проблема.
Оценки в основном для того, что криптография как обычно составлена из кучи промежуточных стадий и часто оказывается, что тупо увеличив конечный буфер мы ничего не решим, потому что где-то в середине буфер также ограничен меньшим значением и допустим посчитать хэш файла кусками по 20 байт или 30 Мб можно, а кусками по 32 Мб все крашится. Или кто-то решил, что в сертификате вот никак не может находиться больше 1023 оидов (почему не 1024?) и тому подобные ограничения на ровном месте, которые нигде не описаны, ни на какие стандарты не опираются, просто кто-то решил, что они "разумно большие". А увеличив конечный размер выше какого-то предела мы окажемся "неразумно большими". Поэтому приходится увеличивать очень осторожно. Вот и все, в этом суть рассуждений.
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,322 Сказал «Спасибо»: 549 раз Поблагодарили: 2208 раз в 1723 постах
|
Автор: two_oceans Однако: 1) последнее время Минкомсвязь фактически приравнивает срок действия ключа УЦ к сроку действия пользовательского ключа и УЦ перевыпускают сертификаты через год с хвостиком (хотя сам срок сертификата на годы вперед). Чтобы накопить за год 2 Мб в списке отзыва... мне кажется, что естественных причин недостаточно, надо порядком накосячить в самом УЦ. Поэтому чаще CRL будет меньшего размера;
Крупные УЦ - имеют крупные CRL. Крупные УЦ - чаще всего встречаются среди пользователей ПО. Далее - сокращение АУЦ => меньше количество CRL, но больший их размер. Примеры больших CRL: http://cdp.skbkontur.ru/cdp/skbkontur-q1-2020.crlhttp://tax4.tensor.ru/te...rca-2019_cp_gost2012.crlhttp://tax4.tensor.ru/te...nsorca-2021_gost2012.crlhttp://tax4.tensor.ru/te...rca-2021_cp_gost2012.crl Snimok ehkrana ot 2021-09-08 10-51-36.png (15kb) загружен 9 раз(а).Автор: two_oceans Если неполадки из-за самой ocsp службы, возможно проще сменить адрес tsp. ..OCSP - от УЦ, в котором получали сертификат. TSP - может быть от другого УЦ. Как смена TSP адреса решит проблему с OCSP-ответами для сертификата подписанта? |
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,322 Сказал «Спасибо»: 549 раз Поблагодарили: 2208 раз в 1723 постах
|
Автор: basid В чём, простите, проблема? Выделить буфер 4-8-16 МБ и (если надо) перекопировать данные подписи в буфер нужного размера. Задлянафига эти рассуждения и оценки размера подписи, если рулят даже не "большие батальоны", а просто - "маленькие отделения"? Мы про PAdES. А не CMS. Напомню: Цитата: Вопрос: а как узнать размер подписи, если нам сначала нужно до подписания зарезервировать этот размер тут sap.PreClose(hashtable);
Элементарные вопросы от пользователей: почему мой исходный файл 50 Кб PDF после подписания то 1мб, то 200 Кб? |
|
|
|
|
Статус: Эксперт
Группы: Участники
Зарегистрирован: 05.03.2015(UTC) Сообщений: 1,602 Откуда: Иркутская область Сказал(а) «Спасибо»: 110 раз Поблагодарили: 395 раз в 366 постах
|
Автор: Андрей * Как смена TSP адреса решит проблему с OCSP-ответами для сертификата подписанта? Да, я перепутал. В том смысле, что на tsp также по идее проверяются цепочки и получается ocsp-ответ, но не идет в подпись. Цитата:Крупные УЦ - чаще всего встречаются среди пользователей ПО. В этом смысле да, конечно. Цитата:Далее - сокращение АУЦ => меньше количество CRL, но больший их размер. На снимке всего 3 УЦ с размером больше чем я ожидал, но Вы правы. Собственно, у меня как раз есть в августе полученный сертификат от Контура, идентификатор ключа совпадает, просто не интересовался какой размер у CRL. Причем большинство попавшихся на глаза записей - последние 3 месяца. Видимо, действительно следствие сокращения количества АУЦ. P.S. Пока разбирался, наткнулся на галочку - "отключить списки отзыва" в свойствах контекста сертификата. Она случайно не поможет от раздувания подписи списком отзыва?
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close