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

Уведомление

Icon
Error

2 Страницы<12
Опции
К последнему сообщению К первому непрочитанному
Offline Евгений Афанасьев  
#11 Оставлено : 23 августа 2012 г. 16:46:02(UTC)
Евгений Афанасьев

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 06.12.2008(UTC)
Сообщений: 3,977
Российская Федерация
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 708 раз в 669 постах
Offline С.Е.Назаров  
#12 Оставлено : 23 августа 2012 г. 19:34:06(UTC)
С.Е.Назаров

Статус: Участник

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

Новожилова Елена написал:
А при чем здесь КриптоПро PDF? Вы создаете подпись формата CMS, в PDF - другой формат подписи.

Пример CMS_samples/CMS из samples_src.jar позволяет создать валидную подпись в PDF. Этот пример я и использую.
Offline С.Е.Назаров  
#13 Оставлено : 23 августа 2012 г. 19:43:29(UTC)
С.Е.Назаров

Статус: Участник

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


Это я уже видел и воспользовался, чем смог.
У вас нет случайно тестового примера подписи PDF из web? Мне не хватает последнего шага. Я явно что-то небольшое упускаю. Получаю валидную подпись с невалидным контентом.
Offline С.Е.Назаров  
#14 Оставлено : 3 сентября 2012 г. 18:51:20(UTC)
С.Е.Назаров

Статус: Участник

Группы: Участники
Зарегистрирован: 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.
Может мои предположения о возможности подстановке подписи имеют какой-то логический изъян?
Offline Евгений Афанасьев  
#15 Оставлено : 3 сентября 2012 г. 22:02:32(UTC)
Евгений Афанасьев

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 06.12.2008(UTC)
Сообщений: 3,977
Российская Федерация
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 708 раз в 669 постах
Используйте пример CMSVerify.CMSVerify(), а не CMS.CMSVerify(), т.к. для подписи использовались подписанные аттрибуты, а не данные.

Отредактировано пользователем 3 сентября 2012 г. 22:03:21(UTC)  | Причина: Не указана

Offline С.Е.Назаров  
#16 Оставлено : 3 сентября 2012 г. 22:14:10(UTC)
С.Е.Назаров

Статус: Участник

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

afev написал:
Используйте пример CMSVerify.CMSVerify(), а не CMS.CMSVerify(), т.к. для подписи использовались подписанные аттрибуты, а не данные.

Я использовал CMSVerify.CMSVerify().

А что по поводу самой идеи? cryptcp и JCP используют одинаковые алгоритмы? Нет ли здесь каких-нибудь нюансов?
Offline Евгений Афанасьев  
#17 Оставлено : 3 сентября 2012 г. 22:25:39(UTC)
Евгений Афанасьев

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 06.12.2008(UTC)
Сообщений: 3,977
Российская Федерация
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 708 раз в 669 постах
Я взял вашу подпись из вложения в начале поста (ведь она сформирована так, как в написали выше) - она у меня проверилась.
Offline Евгений Афанасьев  
#18 Оставлено : 3 сентября 2012 г. 22:30:17(UTC)
Евгений Афанасьев

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 06.12.2008(UTC)
Сообщений: 3,977
Российская Федерация
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 708 раз в 669 постах
Или вы извлекаете подпись (64 байта), полученную в cryptcp, и подставляете ее в CMS подпись?
Но в cryptcp у вас, скорее всего, формируется УЭЦП, а в ней подпись осуществляется не на данных (createCMS), а на подписанных аттрибутах (createhashCMS), потому в исходной подписи (куда помещается подпись) должны быть те же аттрибуты.

Отредактировано пользователем 3 сентября 2012 г. 22:33:38(UTC)  | Причина: Не указана

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