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

Уведомление

Icon
Error

3 Страницы123>
Опции
К последнему сообщению К первому непрочитанному
Offline avorobev  
#1 Оставлено : 18 июня 2012 г. 14:59:21(UTC)
avorobev

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

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

Добрый день!

У меня стоит задача подписывать PDF документы с помощью УЭЦП. Разработка ведется на .NET. Как подписать PDF документ простой подписью, я нашел в примерах КриптоПро .NET. Собственно там это делается даже не с помощью КриптоПро .NET, а с помощью iTextSharp. Но как подписать PDF с помощью УЭЦП? Как работать с TSP и OCSP? Есть ли где-то примеры, как это сделать на .NET? Буду благодарен за любую помощь.

С уважением,
Александр
Offline avorobev  
#2 Оставлено : 19 июня 2012 г. 13:51:31(UTC)
avorobev

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

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

Ладно, пока ответов нет, продолжу в одностороннем порядке. :)

В iTextSharp есть примеры, как подписать PDF с помощью УЭЦП.
http://itextpdf.sourceforge.net/howtosign.html#signtsocspcs

Но, к сожалению, iTextSharp умеет работать только с RSA и DSA криптопровайдерами. Можно конечно попытаться написать свои аналогичные классы для работы с криптопровайдером Gost3410, но и тут есть свои препятствия. Например, в одном из мест iTextSharp хочет получить параметры криптопровайдера для закрытого ключа. Но метод Gost3410CryptoServiceProvider.ExportParameters(true) возвращает exception:

System.Security.Cryptography.CryptographicException was unhandled by user code
Message=Bulk user key export from CSP is not supported.
Source=CryptoPro.Sharpei.Base


Так что данный путь, видимо, не приведет к успеху.

Отредактировано пользователем 19 июня 2012 г. 14:10:21(UTC)  | Причина: Не указана

Offline avorobev  
#3 Оставлено : 19 июня 2012 г. 13:59:02(UTC)
avorobev

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

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

Второй вариант - это взять пример подписи PDF простой подписью из примеров КриптоПро .NET (\simple35\Pdf\Sign.cs). Но попробовать заменить блок кода

Код:
ContentInfo contentInfo = new ContentInfo(ss.ToArray());
SignedCms signedCms = new SignedCms(contentInfo, true);
CmsSigner cmsSigner = new CmsSigner(certificate);
signedCms.ComputeSignature(cmsSigner, false);
byte[] pk = signedCms.Encode();

на вычисление УЭЦП с помощью COM библиотеки cadescom.dll.
И там тоже, как я понимаю, будут свои подводные камни. Но более важный вопрос, будет ли это вообще работать? Является ли такой подход правильным? Будет ли создана при этом УЭЦП и будет ли PDF правильно ею подписан? Ведь PDF должен быть подписан по стандарту PAdES, который является некоей комбинацией CAdES и XAdES применительно к PDF.

Отредактировано пользователем 19 июня 2012 г. 14:03:44(UTC)  | Причина: Не указана

Offline avorobev  
#4 Оставлено : 19 июня 2012 г. 14:05:12(UTC)
avorobev

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

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

А вообще закономерный вопрос: почему в КриптоПро .NET нет никаких классов для работы с УЭЦП?
Или почему то, что уже сделано вами в продукте КриптоПро PDF нельзя оформить как библиотеку для разработчиков?

Отредактировано пользователем 19 июня 2012 г. 14:54:39(UTC)  | Причина: Не указана

Offline khomenko  
#5 Оставлено : 19 июня 2012 г. 15:47:58(UTC)
Михаил Хоменко

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

Группы: Администраторы, Участники
Зарегистрирован: 28.04.2010(UTC)
Сообщений: 140
Мужчина
Откуда: Крипто-Про

Поблагодарили: 15 раз в 14 постах
Добрый день,
Специалист занимающийся PDF сейчас в отпуске, сможет ответить в среду-чертверг.

В КриптоПро .NET специальные классы для работы с УЭЦП были бы избыточны.
Работа с УЭЦП реализована через COM объекты (библиотека cadescom.dll), с которыми .NET умеет общаться.
Offline avorobev  
#6 Оставлено : 19 июня 2012 г. 16:05:44(UTC)
avorobev

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

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

khomenko написал:
Специалист занимающийся PDF сейчас в отпуске, сможет ответить в среду-чертверг.

Ну что ж, придется подождать. Для нас это важный вопрос.

khomenko написал:
В КриптоПро .NET специальные классы для работы с УЭЦП были бы избыточны.
Работа с УЭЦП реализована через COM объекты (библиотека cadescom.dll), с которыми .NET умеет общаться.

Ну как Вам сказать, это было бы просто намного удобнее, чем работать с COM объектами. Да и функционал имеющихся у вас C/C++ библиотек намного обширней, чем COM. Тем более, что подобных вопросов у вас на форуме десятки. И во всех говориться, что для .NET у вас ничего такого нет. А вопрос подписания PDF с помощью УЭЦП становится все более актуальным для многих компаний, которые внедряют электронный документооборот. Я имею в виду вопрос программного подписания, а не ручного с помощью КриптоПро PDF.

Спасибо за ответы. Про cadescom.dll пойду спрашивать в другую ветку.



Отредактировано пользователем 19 июня 2012 г. 17:40:52(UTC)  | Причина: Не указана

Offline khomenko  
#7 Оставлено : 20 июня 2012 г. 13:08:35(UTC)
Михаил Хоменко

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

Группы: Администраторы, Участники
Зарегистрирован: 28.04.2010(UTC)
Сообщений: 140
Мужчина
Откуда: Крипто-Про

Поблагодарили: 15 раз в 14 постах
Создать УЭЦП под PDF можно с помощью библиотеки cadescom.
Достаточно заменить создание подписи через SignedCms, на создание
открепленной подписи через объекты cadescom. В остальном пример (\simple35\Pdf\Sign.cs)
остается без изменений. Подводных камней быть не должно :)

Для использования нативных вызовов есть PInvoke.
Если в КриптоПро .NET делать обертки над нативным cades, придется затащить и весь advapi, crypt32 и т.д., встают вопросы размера дистрибутива, целесообразности, полноты и т.п
А так разработчик сам выбирает минимальный, необходимый набор функций, структур и пр. и реализует в своём приложении.
Offline Павел Смирнов  
#8 Оставлено : 20 июня 2012 г. 13:24:02(UTC)
Павел Смирнов

Статус: Вам и не снилось

Группы: Администраторы
Зарегистрирован: 24.12.2007(UTC)
Сообщений: 831
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 1 раз
Поблагодарили: 48 раз в 44 постах
avorobev написал:
Да и функционал имеющихся у вас C/C++ библиотек намного обширней, чем COM.

Уговорите MS расширить возможности подписей формата CMS в .NET до уровня того, что можно сделать через CryptoAPI, а там и мы подтянемся. :)
Техническую поддержку оказываем тут.
Наша база знаний.
Offline avorobev  
#9 Оставлено : 20 июня 2012 г. 13:30:59(UTC)
avorobev

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

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

Смирнов написал:
avorobev написал:
Да и функционал имеющихся у вас C/C++ библиотек намного обширней, чем COM.

Уговорите MS расширить возможности подписей формата CMS в .NET до уровня того, что можно сделать через CryptoAPI, а там и мы подтянемся. :)

:))
Offline avorobev  
#10 Оставлено : 20 июня 2012 г. 13:34:27(UTC)
avorobev

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

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

khomenko написал:
Создать УЭЦП под PDF можно с помощью библиотеки cadescom.
Достаточно заменить создание подписи через SignedCms, на создание
открепленной подписи через объекты cadescom. В остальном пример (\simple35\Pdf\Sign.cs)
остается без изменений. Подводных камней быть не должно :)

Спасибо за ответ. В этом направлении я и иду.

Будет ли достаточно использовать код из примера 1?
http://cpdn.cryptopro.ru...escomsamplesigndata.html

И еще вопрос в том, будет ли это полностью соответствовать стандарту PAdES? Будет ли это аналогом усовершенствованной подписи, сделанной вручную с помощью КриптоПро PDF?

Отредактировано пользователем 20 июня 2012 г. 13:36:15(UTC)  | Причина: Не указана

RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
3 Страницы123>
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.