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

Уведомление

Icon
Error

3 Страницы<123>
Опции
К последнему сообщению К первому непрочитанному
Offline Евгений Афанасьев  
#11 Оставлено : 4 февраля 2014 г. 13:23:18(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 714 раз в 674 постах
А у себя пробовали сначала зашифровать в cryptcp, а потом расшифровать в jcp?
Offline vitek-n  
#12 Оставлено : 4 февраля 2014 г. 15:27:28(UTC)
vitek-n

Статус: Новичок

Группы: Участники
Зарегистрирован: 03.02.2014(UTC)
Сообщений: 4
Российская Федерация
Откуда: Ярославль

Да попробовал

Использовал Ваш пример CMSSignAndEncrypt для создания подписанного и зашифрованного файла.
Полученный файл успешно расшифровался, как Вашим примером, так и утилитой.
Для шифрования я использовал оригинальный (расшифрованный) файл.

Я попытался разобраться в чем разница между файлами от заказчика и моего. Я расшифровал оба файла утилитой cryptcp.
После расшифровки файлов оказалось, файл, созданный с помощью вашего примера, это подписанный файл в DER формате, а другой это Base64 файл (----- BEGIN PKCS7 SIGNED ----- ...).

Похоже файл зашифрован не тем алгоритмом, который представлен в примере. Но так как файл расшифровывается Вашей утилитой, то он корректный и может быть расшифрован JCP.

Возможно, необходимо использовать другие параметры для расшифровки. Ошибка вылетает в самом конце, на этапе получения симметричного ключа, поэтому все параметры для расшифровки к этому моменту уже должны быть известны.

Вы можете подсказать, что посмотреть и как изменить код, чтобы расшифровать файл?

Спасибо

Отредактировано пользователем 5 февраля 2014 г. 9:39:45(UTC)  | Причина: Не указана

Offline Евгений Афанасьев  
#13 Оставлено : 5 февраля 2014 г. 9:50:47(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 714 раз в 674 постах
Приложить файл можете?
Offline vitek-n  
#14 Оставлено : 5 февраля 2014 г. 11:33:23(UTC)
vitek-n

Статус: Новичок

Группы: Участники
Зарегистрирован: 03.02.2014(UTC)
Сообщений: 4
Российская Федерация
Откуда: Ярославль

Переслал в личном сообщении
Offline kvvn  
#15 Оставлено : 4 июня 2014 г. 17:07:42(UTC)
kvvn

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

Группы: Участники
Зарегистрирован: 10.04.2014(UTC)
Сообщений: 10
Откуда: Киев

Сказал(а) «Спасибо»: 1 раз
Автор: vitek-n Перейти к цитате
Да попробовал

Использовал Ваш пример CMSSignAndEncrypt для создания подписанного и зашифрованного файла.
Полученный файл успешно расшифровался, как Вашим примером, так и утилитой.
Для шифрования я использовал оригинальный (расшифрованный) файл.

Я попытался разобраться в чем разница между файлами от заказчика и моего. Я расшифровал оба файла утилитой cryptcp.
После расшифровки файлов оказалось, файл, созданный с помощью вашего примера, это подписанный файл в DER формате, а другой это Base64 файл (----- BEGIN PKCS7 SIGNED ----- ...).

Похоже файл зашифрован не тем алгоритмом, который представлен в примере. Но так как файл расшифровывается Вашей утилитой, то он корректный и может быть расшифрован JCP.

Возможно, необходимо использовать другие параметры для расшифровки. Ошибка вылетает в самом конце, на этапе получения симметричного ключа, поэтому все параметры для расшифровки к этому моменту уже должны быть известны.

Вы можете подсказать, что посмотреть и как изменить код, чтобы расшифровать файл?

Спасибо


Добрый день.
Подскажите, пожалуйста, удалось ли решить проблему? Если да то натолкните на пути решения.
Offline smie  
#16 Оставлено : 6 мая 2015 г. 12:24:59(UTC)
smie

Статус: Новичок

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

Автор: vitek-n Перейти к цитате

Ошибка вылетает позже на строке:
Код:
 final SecretKey simmKey = (SecretKey) cipher.unwrap(wrapKey, null, Cipher.SECRET_KEY);


Цитата:
04.02.2014 10:21:56 ru.CryptoPro.JCP.tools.Starter check
INFO: Loading JCP 1.0.54 36641
04.02.2014 10:21:56 ru.CryptoPro.JCP.tools.Starter check
INFO: JCP loaded.
Exception in thread "main" java.security.InvalidKeyException: Wrapped key is invalid
at ru.CryptoPro.JCP.Key.SecretKeySpec.unwrap(Unknown Source)
at ru.CryptoPro.Crypto.Cipher.GostCipher.engineUnwrap(Unknown Source)
at ru.CryptoPro.Crypto.Cipher.Padding5Cipher.engineUnwrap(Unknown Source)
at javax.crypto.Cipher.unwrap(DashoA13*..)
at CMS_samples.CMSDecrypt.main(CMSDecrypt.java:121)



Получаю точно такую же ошибку.
Кто-то может помочь разобраться?
Offline Евгений Афанасьев  
#17 Оставлено : 6 мая 2015 г. 12:47:01(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 714 раз в 674 постах
Возможно, режим шифрования отличается.
Offline smie  
#18 Оставлено : 6 мая 2015 г. 12:55:42(UTC)
smie

Статус: Новичок

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

Автор: afev Перейти к цитате
Возможно, режим шифрования отличается.


Код:

    protected byte[] decrypt(final byte[] data, final PrivateKey responderKey) throws Exception {
        Asn1BerDecodeBuffer dbuf = new Asn1BerDecodeBuffer(data);
        final ContentInfo all = new ContentInfo();
        all.decode(dbuf);
        dbuf.reset();
        final EnvelopedData cms = (EnvelopedData) all.content;

        KeyTransRecipientInfo keytrans = new KeyTransRecipientInfo();
        if (cms.recipientInfos.elements[0].getChoiceID() == RecipientInfo._KTRI)
            keytrans =
                    (KeyTransRecipientInfo) (cms.recipientInfos.elements[0].getElement());
        final Asn1BerEncodeBuffer ebuf = new Asn1BerEncodeBuffer();
        dbuf = new Asn1BerDecodeBuffer(keytrans.encryptedKey.value);
        final GostR3410_KeyTransport encrKey = new GostR3410_KeyTransport();
        encrKey.decode(dbuf);
        dbuf.reset();
        encrKey.sessionEncryptedKey.encode(ebuf);
        final byte[] wrapKey = ebuf.getMsgCopy();
        ebuf.reset();
        encrKey.transportParameters.ephemeralPublicKey.encode(ebuf);
        final byte[] encodedPub = ebuf.getMsgCopy();
        ebuf.reset();
        final byte[] sv = encrKey.transportParameters.ukm.value;
        final Gost28147_89_Parameters params =
                (Gost28147_89_Parameters) cms.encryptedContentInfo.contentEncryptionAlgorithm.parameters;
        final byte[] iv = params.iv.value;
        final OID cipherOID = new OID(params.encryptionParamSet.value);
        final byte[] text = cms.encryptedContentInfo.encryptedContent.value;

        //отправитель - открытый ключ из cms
        final X509EncodedKeySpec pspec = new X509EncodedKeySpec(encodedPub);
        final KeyFactory kf = KeyFactory.getInstance(JCP.GOST_DH_NAME);
        final PublicKey senderPublic = kf.generatePublic(pspec);

        // выработка ключа согласования получателем
        final KeyAgreement responderKeyAgree =
                KeyAgreement.getInstance(JCP.GOST_DH_NAME, CryptoProvider.PROVIDER_NAME);
        responderKeyAgree.init(responderKey, new IvParameterSpec(sv), null);
        responderKeyAgree.doPhase(senderPublic, true);
        final SecretKey responderSecret = responderKeyAgree
                .generateSecret("GOST28147");

        // Расшифрование симметричного ключа.
        final Cipher cipher = Cipher.getInstance(CIPHER_MODE, CryptoProvider.PROVIDER_NAME);
        cipher.init(Cipher.UNWRAP_MODE, responderSecret, (SecureRandom) null);
        //cipher.init(Cipher.UNWRAP_MODE, responderSecret);
        final SecretKey simmKey = (SecretKey) cipher.unwrap(wrapKey, null, Cipher.SECRET_KEY);

        // Расшифрование текста на симметричном ключе.
        final GostCipherSpec spec = new GostCipherSpec(iv, cipherOID);
        cipher.init(Cipher.DECRYPT_MODE, simmKey, spec, null);
        return cipher.doFinal(text, 0, text.length);
    }


Вот так расшифровываю данные.

Подскажите пожалуйста, как тут можно изменить режим?
Offline Евгений Афанасьев  
#19 Оставлено : 6 мая 2015 г. 13:02:46(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 714 раз в 674 постах
Вы уверены, что используете правильный ключ (responderKey)? Попробуйте расшифровать с помощью EnvelopedSignature из CAdES.jar, примеры есть в samples-sources.jar, в пакете CAdES/enveloped, описание в CAdES-javadoc.jar (JCP 2.0). Коротко - как-то так:
Код:

ByteArrayOutputStream decryptedByteDataStream = new ByteArrayOutputStream();
EnvelopedSignature signature = new EnvelopedSignature(new ByteArrayInputStream(<зашифрованное сообщение>));
signature.decrypt(<сертификат получателя>, <закрытый ключ получателя - responderKey>, decryptedByteDataStream);
byte[] decryptedData = decryptedByteDataStream.toByteArray();
Offline smie  
#20 Оставлено : 6 мая 2015 г. 13:17:20(UTC)
smie

Статус: Новичок

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

Автор: afev Перейти к цитате
Вы уверены, что используете правильный ключ (responderKey)? Попробуйте расшифровать с помощью EnvelopedSignature из CAdES.jar, примеры есть в samples-sources.jar, в пакете CAdES/enveloped, описание в CAdES-javadoc.jar (JCP 2.0). Коротко - как-то так:
Код:

ByteArrayOutputStream decryptedByteDataStream = new ByteArrayOutputStream();
EnvelopedSignature signature = new EnvelopedSignature(new ByteArrayInputStream(<зашифрованное сообщение>));
signature.decrypt(<сертификат получателя>, <закрытый ключ получателя - responderKey>, decryptedByteDataStream);
byte[] decryptedData = decryptedByteDataStream.toByteArray();


Есть другая возможность проверить? Лицензия на 2.0 версию закончилась и нет возможности запустить этот пример.

Но в ключе уверен. Сверял серийные номера сертификата на который были зашифрованы данные и тот что я использую.

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