| 
	Статус: Новичок
 Группы: Участники
Зарегистрирован: 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,970  Сказал «Спасибо»: 605 разПоблагодарили: 2346 раз в 1842 постах
 
 | 
            
		      
                Здравствуйте.
 а) выделять с избытком
 б) попробовать до реального подписания - подписать тестовые данные ("тест") и посмотреть, сколько будет занимать отсоединенная cms (не PAdES), (30кб ... 700 кб). А если будет CRL на 2 Мб? )
 | 
|  | 
    | 
             | 
            
         | 
    |  | 
        
        
        
    
        
            
            
    | 
	Статус: Эксперт
 Группы: Участники
 Зарегистрирован: 05.03.2015(UTC) Сообщений: 1,602  Откуда: Иркутская областьСказал(а) «Спасибо»: 110 разПоблагодарили: 397 раз в 367 постах
 
 | 
            
		      
                Вообще, соглашусь, что 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,143
 
 Сказал(а) «Спасибо»: 7 разПоблагодарили: 160 раз в 145 постах
 
 | 
            
		      
                В чём, простите, проблема? Выделить буфер 4-8-16 МБ и (если надо) перекопировать данные подписи в буфер нужного размера.Задлянафига эти рассуждения и оценки размера подписи, если рулят даже не "большие батальоны", а просто - "маленькие отделения"?
 | 
    | 
             | 
            
         | 
    |  | 
        
        
        
    
        
            
            
    | 
	Статус: Эксперт
 Группы: Участники
 Зарегистрирован: 05.03.2015(UTC) Сообщений: 1,602  Откуда: Иркутская областьСказал(а) «Спасибо»: 110 разПоблагодарили: 397 раз в 367 постах
 
 | 
            
		      
                Соглашусь, что выделить 4 Мб не проблема.
 Оценки в основном для того, что криптография как обычно составлена из кучи промежуточных стадий и часто оказывается, что тупо увеличив конечный буфер мы ничего не решим, потому что где-то в середине буфер также ограничен меньшим значением и допустим посчитать хэш файла кусками по 20 байт или 30 Мб можно, а кусками по 32 Мб все крашится. Или кто-то решил, что в сертификате вот никак не может находиться больше 1023 оидов (почему не 1024?) и тому подобные ограничения на ровном месте, которые нигде не описаны, ни на какие стандарты не опираются, просто кто-то решил, что они "разумно большие". А увеличив конечный размер выше какого-то предела мы окажемся "неразумно большими". Поэтому приходится увеличивать очень осторожно. Вот и все, в этом суть рассуждений.
 | 
    | 
             | 
            
         | 
    |  | 
        
        
        
            
        
            
            
    | 
	Статус: Сотрудник
 Группы: Участники
 Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,970  Сказал «Спасибо»: 605 разПоблагодарили: 2346 раз в 1842 постах
 
 | 
            
		      
                Автор: 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,970  Сказал «Спасибо»: 605 разПоблагодарили: 2346 раз в 1842 постах
 
 | 
            
		      
                Автор: basid  В чём, простите, проблема? Выделить буфер 4-8-16 МБ и (если надо) перекопировать данные подписи в буфер нужного размера.Задлянафига эти рассуждения и оценки размера подписи, если рулят даже не "большие батальоны", а просто - "маленькие отделения"?
 Мы про PAdES. А не CMS. Напомню:  Цитата:Вопрос: а как узнать размер подписи, если нам сначала нужно до подписания зарезервировать этот размер тут sap.PreClose(hashtable);
 Элементарные вопросы от пользователей:  почему мой исходный файл 50 Кб PDF после подписания то 1мб, то 200 Кб?  | 
|  | 
    | 
             | 
            
         | 
    |  | 
        
        
        
            
        
            
            
    | 
	Статус: Эксперт
 Группы: Участники
 Зарегистрирован: 05.03.2015(UTC) Сообщений: 1,602  Откуда: Иркутская областьСказал(а) «Спасибо»: 110 разПоблагодарили: 397 раз в 367 постах
 
 | 
            
		      
                Автор: Андрей *  Как смена 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