Статус: Новичок
Группы: Участники
Зарегистрирован: 20.08.2015(UTC) Сообщений: 9
Сказал(а) «Спасибо»: 1 раз
|
Добрый день! Есть задача подписать pdf на стороне клиента. Сделал решение, которое работает на алгоритмах SHA1 RSA. Пытаюсь заставить его работать на ГОСТ алгоритмах, но при проверке подписи в Adobe Reader, контент документа изменен и подпись не действительна. Работает так. Клиенту на подпись отправляется AuthenticatedAttributeBytes: Код:
var sgn = new PdfPKCS7(null, new[] {cert}, "SHA1", false);
Stream data = sap.GetRangeStream();
HashAlgorithm myhash = HashAlgorithm.Create("GOST3411");
byte[] messageHash = myhash.ComputeHash(data);
var now = DateTime.Now;
signaturedto = new SignatureDTO
{
Hash = messageHash,
AuthenticatedAttributeBytes = sgn.getAuthenticatedAttributeBytes(messageHash, now, null, null, CryptoStandard.CADES),
Now = now,
SignatureAppearance = sap,
Sign = sgn,
Stream = os
};
С помощью CAPICOM в IE клиента строка подписывается и отправляется на сервер. То что подписал пользователь помещается в newArray и далее: Код:
ClassPass.Result.Sign.SetExternalDigest(newArray, null, "RSA");
byte[] encodedSig = ClassPass.Result.Sign.GetEncodedPKCS7(ClassPass.Result.Hash, ClassPass.Result.Now, null, null, null, CryptoStandard.CADES);
byte[] paddedSig = new byte[8192];
Array.Copy(encodedSig, 0, paddedSig, 0, encodedSig.Length);
PdfDictionary pdfDic = new PdfDictionary();
pdfDic.Put(PdfName.CONTENTS, new PdfString(paddedSig).SetHexWriting(true));
ClassPass.Result.SignatureAppearance.Close(pdfDic);
result = "Файл подписанного отношения сформирован и сохранен";
return result;
таким образом, подпись считывается правильно, но хэш с исходным документом не совпадает. Я думаю проблема в SHA1 и RSA, которые остались от первоначального кода, но я не знаю как сделать это более правильно. В каком направлении копать?
|
|
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 26.08.2010(UTC) Сообщений: 259 Откуда: Moscow
Сказал(а) «Спасибо»: 4 раз Поблагодарили: 11 раз в 10 постах
|
Проблема в том, что CAPICOM подписывает не совсем то что ей передают. Обсуждалось и не раз. не помню точно, но вроде добавляет 0х00 после каждого исходного байта.
|
|
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 20.08.2015(UTC) Сообщений: 9
Сказал(а) «Спасибо»: 1 раз
|
Цитата:Проблема в том, что CAPICOM подписывает не совсем то что ей передают. Обсуждалось и не раз. не помню точно, но вроде добавляет 0х00 после каждого исходного байта. Я сталкивался с несколькими проблемами в использовании CAPICOM и решил их. До перехода на сертификаты с ГОСТ алгоритмами проблем уже не было и подписи определялись как действительные. Если в двух словах, то проверяется четность отправляемых байт и отсутствие символов в UTF16 из-за которых возникают ошибки.
|
|
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 20.08.2015(UTC) Сообщений: 9
Сказал(а) «Спасибо»: 1 раз
|
Здравствуйте! Вопрос всё еще актуальный. Необходимо подписать pdf на стороне клиента, какие есть варианты?
|
|
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,453  Откуда: КРИПТО-ПРО Сказал «Спасибо»: 38 раз Поблагодарили: 748 раз в 643 постах
|
|
|
|
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 20.08.2015(UTC) Сообщений: 9
Сказал(а) «Спасибо»: 1 раз
|
Автор: maxdm  Закрытый ключ при данном варианте должен храниться на сервере?
|
|
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 22.01.2008(UTC) Сообщений: 675   Откуда: Йошкар-Ола Сказал «Спасибо»: 3 раз Поблагодарили: 95 раз в 68 постах
|
user111, а если бы у вас была библиотека, которая бы подписывала PDF прямо в браузере, с помощью чистого JavaScript, с хранением закрытого ключа только на клиенте, без отправки какой-либо информации на сервер (кроме запросов на OCSP и TSP ответы), то такая библиотека отвечала бы вашим задачам? |
С уважением, Юрий Строжевский |
|
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 20.08.2015(UTC) Сообщений: 9
Сказал(а) «Спасибо»: 1 раз
|
Юрий, pdf файл находится на сервере и желательно, чтобы клиент подписывал только его хэш. Это нужно для того, чтобы клиент совершал минимум действий для подписи файла.
|
|
|
|
|
|
Статус: Вам и не снилось
Группы: Администраторы
Зарегистрирован: 24.12.2007(UTC) Сообщений: 831 Откуда: Крипто-Про
Сказал(а) «Спасибо»: 1 раз Поблагодарили: 48 раз в 44 постах
|
В КриптоПро DSS Lite ключ хранится у клиента. |
|
|
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 22.01.2008(UTC) Сообщений: 675   Откуда: Йошкар-Ола Сказал «Спасибо»: 3 раз Поблагодарили: 95 раз в 68 постах
|
Автор: user111  Юрий, pdf файл находится на сервере и желательно, чтобы клиент подписывал только его хэш. Это нужно для того, чтобы клиент совершал минимум действий для подписи файла. На самом деле здесь присутствие файла на клиенте или на сервере маловажно: при наличии файла на сервере скрипт может его автоматически скачать на клиент, автоматически же подписать и отправить обратно на сервер. |
С уважением, Юрий Строжевский |
|
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close