Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 3,977 Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 708 раз в 669 постах
|
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 20.06.2012(UTC) Сообщений: 16
|
Новожилова Елена написал:А при чем здесь КриптоПро PDF? Вы создаете подпись формата CMS, в PDF - другой формат подписи. Пример CMS_samples/CMS из samples_src.jar позволяет создать валидную подпись в PDF. Этот пример я и использую.
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 20.06.2012(UTC) Сообщений: 16
|
Это я уже видел и воспользовался, чем смог. У вас нет случайно тестового примера подписи PDF из web? Мне не хватает последнего шага. Я явно что-то небольшое упускаю. Получаю валидную подпись с невалидным контентом.
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 20.06.2012(UTC) Сообщений: 16
|
Хотелось бы вернуться к теме. Использую из примеров CMSSign метод createCMS. В методе присутствует вычисление подписи: Код:
// Signature.getInstance
final Signature signature = Signature.getInstance(JCP.GOST_EL_SIGN_NAME);
byte[] sign;
signature.initSign(keys[i]);
signature.update(data);
sign = signature.sign();
Я пытаюсь подписывать внешним инструментом. Вместо Код: signature.initSign(keys[i]);
signature.update(data);
sign = signature.sign();
data кидаю в init.dat и запускаю: Код:cryptcp -sign -uMy -dn "S.Nazarov" -pin 1234567890 -der init.dat sign.cryptcp.dat -sshttp://cryptopro.ru/tsp/tsp.srf
затем sign.cryptcp.dat загружаю обратно. Достаю оттуда подпись примерно так: Код: private static byte[] getSignature(byte[] data) throws Exception {
try {
CMSSignedData sd = new CMSSignedData(data);
ContentInfo contentInfo = sd.getContentInfo();
byte[] signature = null;
Collection c = sd.getSignerInfos().getSigners();
Iterator i = c.iterator();
while(i.hasNext()) {
SignerInformation si = (SignerInformation)i.next();
SignerInfo info = si.toASN1Structure();
signature = si.getSignature();
}
return signature;
} catch(CMSException e) {
e.printStackTrace();
} catch(IOException e) {
e.printStackTrace();
}
return null;
}
Подпись подставляю в изначальный текст. По идее должно сработать. Но полученный блок данных верификацию не проходит. Проверяю by CMSVerify. Что тут может быть не так? cryptcp и JCP механизмы криптографии должны совпадать по идее? Или есть нюансы? Если проверять by Signature.verify, при первоначальных исходниках, проверка возвращает true. После cryptcp, возвращает false. Может мои предположения о возможности подстановке подписи имеют какой-то логический изъян?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 3,977 Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 708 раз в 669 постах
|
Используйте пример CMSVerify.CMSVerify(), а не CMS.CMSVerify(), т.к. для подписи использовались подписанные аттрибуты, а не данные. Отредактировано пользователем 3 сентября 2012 г. 22:03:21(UTC)
| Причина: Не указана |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 20.06.2012(UTC) Сообщений: 16
|
afev написал:Используйте пример CMSVerify.CMSVerify(), а не CMS.CMSVerify(), т.к. для подписи использовались подписанные аттрибуты, а не данные. Я использовал CMSVerify.CMSVerify(). А что по поводу самой идеи? cryptcp и JCP используют одинаковые алгоритмы? Нет ли здесь каких-нибудь нюансов?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 3,977 Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 708 раз в 669 постах
|
Я взял вашу подпись из вложения в начале поста (ведь она сформирована так, как в написали выше) - она у меня проверилась. |
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 3,977 Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 708 раз в 669 постах
|
Или вы извлекаете подпись (64 байта), полученную в cryptcp, и подставляете ее в CMS подпись? Но в cryptcp у вас, скорее всего, формируется УЭЦП, а в ней подпись осуществляется не на данных (createCMS), а на подписанных аттрибутах (createhashCMS), потому в исходной подписи (куда помещается подпись) должны быть те же аттрибуты. Отредактировано пользователем 3 сентября 2012 г. 22:33:38(UTC)
| Причина: Не указана |
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close