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

Уведомление

Icon
Error

2 Страницы12>
Опции
К последнему сообщению К первому непрочитанному
Offline poisondog  
#1 Оставлено : 21 февраля 2018 г. 14:00:02(UTC)
poisondog

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

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

Сказал(а) «Спасибо»: 1 раз
Добрый день. Пытаюсь зашифровать XML, тестовый пример из samples-sources/xmlSign/CryptXML.java отработал отлично - получилось и зашифровать и расшифровать.
Но когда попытался изменить алгоритмы из примера

Код:
KeyTwix twix = CertGen.generateTwix1(JCP.GOST_EL_DH_EPH_NAME, "Crypto", 
   JCP.GOST_EL_SIGN_NAME, JCP.PROVIDER_NAME, "CN=cert")


на использование современных алгоритмов ГОСТ3410-2012 и ГОСТ3411

Код:
KeyTwix twix = CertGen.generateTwix1(JCP.GOST_EL_2012_512_NAME, JCP.PROVIDER_NAME,
                JCP.GOST_SIGN_2012_512_NAME, JCP.PROVIDER_NAME, "CN=cert");


возникли проблемы при расшифровке

Код:
фев 21, 2018 1:47:27 PM org.apache.xml.security.encryption.XMLCipher decryptToByteArray
SEVERE: XMLCipher::decryptElement called without a key and unable to resolve
Exception in thread "main" org.apache.xml.security.encryption.XMLEncryptionException: No Key Encryption Key loaded and cannot determine using key resolvers
	at org.apache.xml.security.encryption.XMLCipher.decryptToByteArray(XMLCipher.java:1651)
	at org.apache.xml.security.encryption.XMLCipher.decryptElement(XMLCipher.java:1560)
	at org.apache.xml.security.encryption.XMLCipher.doFinal(XMLCipher.java:876)
	at ru.crypto.XmlDecryptor.decrypt(XmlDecryptor.java:34)
	at ru.EntryPoint.main(EntryPoint.java:30)


На этапе шифрования проблем нет, только при дешифровке. Визуально сравнив зашифрованные XML не увидел разницы в узлах.
ОС Ubuntu 16, Java 8, JCP 5.0.39267, библиотеки в $JAVA_HOME/jre/lib/ext положил. Прошу помочь с решением проблемы.

Отредактировано пользователем 21 февраля 2018 г. 14:06:35(UTC)  | Причина: Не указана

Offline Евгений Афанасьев  
#2 Оставлено : 21 февраля 2018 г. 14:25:18(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 715 раз в 675 постах
Здравствуйте.
Проверим примеры.
Пока можно включить логирование для JCP (JCPLogger) и xmlsec (он использует commons.logging), т.к. xmlsec имеет свойство скрывать исключения:
-Djava.util.logging.config.file=log.properties
где log.properties содержит:
org.apache.commons.logging.Log=org.apache.commons.logging.impl.Jdk14Logger
handlers=java.util.logging.ConsoleHandler
.level=ALL
java.util.logging.ConsoleHandler.level = ALL
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter

Отредактировано пользователем 21 февраля 2018 г. 14:28:39(UTC)  | Причина: Не указана

Offline poisondog  
#3 Оставлено : 21 февраля 2018 г. 15:28:14(UTC)
poisondog

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

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

Сказал(а) «Спасибо»: 1 раз
После включения логирования вывод такой(верхнюю часть не включаю)

Код:
фев 21, 2018 3:18:56 PM org.apache.xml.security.algorithms.JCEMapper getJCEKeyAlgorithmFromURI
FINE: Request for URI urn:ietf:params:xml:ns:cpxmlsec:algorithms:gost28147
фев 21, 2018 3:18:56 PM org.apache.xml.security.encryption.XMLCipher decryptKey
FINE: JCE Key Algorithm: GOST28147
фев 21, 2018 3:18:56 PM org.apache.xml.security.algorithms.JCEMapper translateURItoJCEID
FINE: Request for URI urn:ietf:params:xml:ns:cpxmlsec:algorithms:transport-gost2001
фев 21, 2018 3:18:56 PM org.apache.xml.security.encryption.XMLCipher constructCipher
FINE: JCE Algorithm = GostTransport
фев 21, 2018 3:18:56 PM org.apache.xml.security.keys.keyresolver.implementations.EncryptedKeyResolver engineLookupAndResolveSecretKey
FINE: org.apache.xml.security.encryption.XMLEncryptionException: Ключ подписи нельзя использоваться для этой операции.
Original Exception was java.security.InvalidKeyException: Ключ подписи нельзя использоваться для этой операции.
фев 21, 2018 3:18:56 PM org.apache.xml.security.keys.KeyInfo getSecretKey
FINE: I couldn't find a secret key using the per-KeyInfo key resolvers
фев 21, 2018 3:18:56 PM org.apache.xml.security.keys.KeyInfo getSecretKey
FINE: I couldn't find a secret key using the system-wide key resolvers
фев 21, 2018 3:18:56 PM org.apache.xml.security.encryption.XMLCipher decryptToByteArray
SEVERE: XMLCipher::decryptElement called without a key and unable to resolve
Exception in thread "main" org.apache.xml.security.encryption.XMLEncryptionException: No Key Encryption Key loaded and cannot determine using key resolvers
	at org.apache.xml.security.encryption.XMLCipher.decryptToByteArray(XMLCipher.java:1651)
	at org.apache.xml.security.encryption.XMLCipher.decryptElement(XMLCipher.java:1560)
	at org.apache.xml.security.encryption.XMLCipher.doFinal(XMLCipher.java:876)
	at ru.iteco.crypto.XmlDecryptor.decrypt(XmlDecryptor.java:34)
	at ru.iteco.EntryPoint.main(EntryPoint.java:32)

Отредактировано пользователем 21 февраля 2018 г. 15:53:13(UTC)  | Причина: Не указана

Offline Евгений Афанасьев  
#4 Оставлено : 21 февраля 2018 г. 17:14:57(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 715 раз в 675 постах
Попробуйте сгенерировать JCP.GOST_DH_2012_512_NAME.
Offline poisondog  
#5 Оставлено : 21 февраля 2018 г. 17:37:54(UTC)
poisondog

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

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

Сказал(а) «Спасибо»: 1 раз
Заменил на JCP.GOST_DH_2012_512_NAME и изменил имя провайдера на Crypto(иначе выдает ошибку что у данного провайдера нет такого алгоритма)
Код:
        KeyTwix twix = CertGen.generateTwix1(JCP.GOST_DH_2012_512_NAME, "Crypto",
                JCP.GOST_SIGN_2012_512_NAME, JCP.PROVIDER_NAME, "CN=cert");


Вывод такой:
Код:
фев 21, 2018 5:25:44 PM org.apache.xml.security.algorithms.JCEMapper translateURItoJCEID
FINE: Request for URI urn:ietf:params:xml:ns:cpxmlsec:algorithms:gost28147
фев 21, 2018 5:25:44 PM org.apache.xml.security.encryption.XMLCipher decryptToByteArray
FINE: JCE Algorithm = GostJCE/CBC/ISO10126Padding
фев 21, 2018 5:25:44 PM ru.CryptoPro.JCP.tools.SelfTester checkClass
FINE: [main] class: ru.CryptoPro.Crypto.Cipher.GostCoreCipher, URL: file:/usr/lib/jvm/java-8-oracle/jre/lib/ext/JCryptoP.jar
фев 21, 2018 5:25:44 PM ru.CryptoPro.JCP.tools.SelfTester a
FINE: [main] check URL: file:/usr/lib/jvm/java-8-oracle/jre/lib/ext/JCP.jar
фев 21, 2018 5:25:44 PM ru.CryptoPro.JCP.tools.SelfTester a
FINE: [main] check URL: file:/usr/lib/jvm/java-8-oracle/jre/lib/ext/JCryptoP.jar
фев 21, 2018 5:25:44 PM ru.CryptoPro.Crypto.Cipher.GostCoreCipher engineSetMode
FINER: ENTRY
фев 21, 2018 5:25:44 PM ru.CryptoPro.Crypto.Cipher.GostCoreCipher engineSetMode
FINER: RETURN
фев 21, 2018 5:25:44 PM ru.CryptoPro.Crypto.Cipher.GostCoreCipher engineSetMode
FINER: ENTRY
фев 21, 2018 5:25:44 PM ru.CryptoPro.Crypto.Cipher.GostCoreCipher engineSetMode
FINER: RETURN
фев 21, 2018 5:25:44 PM ru.CryptoPro.Crypto.Cipher.GostCoreCipher engineInit
FINER: ENTRY
фев 21, 2018 5:25:44 PM ru.CryptoPro.Crypto.Cipher.GostCoreCipher engineInit
FINER: RETURN
фев 21, 2018 5:25:44 PM ru.CryptoPro.Crypto.Cipher.BaseGostCipher engineDoFinal
FINER: ENTRY
Exception in thread "main" org.apache.xml.security.encryption.XMLEncryptionException: Ошибка при выполнении операции шифрования данных.
Original Exception was javax.crypto.BadPaddingException: Ошибка при выполнении операции шифрования данных.
	at org.apache.xml.security.encryption.XMLCipher.decryptToByteArray(XMLCipher.java:1715)
	at org.apache.xml.security.encryption.XMLCipher.decryptElement(XMLCipher.java:1560)
	at org.apache.xml.security.encryption.XMLCipher.doFinal(XMLCipher.java:876)
	at ru.iteco.crypto.XmlDecryptor.decrypt(XmlDecryptor.java:34)
	at ru.iteco.EntryPoint.withTwix(EntryPoint.java:40)
	at ru.iteco.EntryPoint.main(EntryPoint.java:28)
javax.crypto.BadPaddingException: Ошибка при выполнении операции шифрования данных.
	at ru.CryptoPro.Crypto.Cipher.BaseGostCipher.a(Unknown Source)
	at ru.CryptoPro.Crypto.Cipher.BaseGostCipher.engineDoFinal(Unknown Source)
	at javax.crypto.Cipher.doFinal(Cipher.java:2222)
	at org.apache.xml.security.encryption.XMLCipher.decryptToByteArray(XMLCipher.java:1711)
	at org.apache.xml.security.encryption.XMLCipher.decryptElement(XMLCipher.java:1560)
	at org.apache.xml.security.encryption.XMLCipher.doFinal(XMLCipher.java:876)
	at ru.iteco.crypto.XmlDecryptor.decrypt(XmlDecryptor.java:34)
	at ru.iteco.EntryPoint.withTwix(EntryPoint.java:40)
	at ru.iteco.EntryPoint.main(EntryPoint.java:28)


также пробовал вместо JCP.GOST_SIGN_2012_512_NAME использовать JCP.GOST_SIGN_DH_2012_512_NAME. Вывод был аналогичным
Offline Евгений Афанасьев  
#6 Оставлено : 28 февраля 2018 г. 15:43:24(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 715 раз в 675 постах
Проблема в том, что параметры шифрования по умолчанию у ГОСТ 2001 и ГОСТ 2012 ключей разные, а XMLCipher (xmlsec) ограничен в возможностях настройки шифратора. Поэтому нужно при использовании ГОСТ 2012 задать параметры секретного ключа перед его генерацией так, чтобы они совпали с параметрами ключа получателя:
Код:

// ф. public static Document encrypt(Document doc, X509Certificate cert) в CryptXML:

// Вместо

KeyGenerator kg = KeyGenerator.getInstance("GOST28147");
kg.init(CryptParamsSpec.getInstance(CryptParamsSpec.Rosstandart_TC26_Z)); <-- для ГОСТ 2012
SecretKey sessionKey = kg.generateKey();

Offline poisondog  
#7 Оставлено : 1 марта 2018 г. 17:54:54(UTC)
poisondog

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

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

Сказал(а) «Спасибо»: 1 раз
Спасибо. Чуть продвинулся. Теперь другая ошибка
Код:
мар 01, 2018 5:47:09 PM org.apache.xml.security.encryption.XMLCipher decryptToByteArray
SEVERE: XMLCipher::decryptElement called without a key and unable to resolve
Exception in thread "main" org.apache.xml.security.encryption.XMLEncryptionException: No Key Encryption Key loaded and cannot determine using key resolvers
	at org.apache.xml.security.encryption.XMLCipher.decryptToByteArray(XMLCipher.java:1651)
	at org.apache.xml.security.encryption.XMLCipher.decryptElement(XMLCipher.java:1560)
	at org.apache.xml.security.encryption.XMLCipher.doFinal(XMLCipher.java:876)
	at ru.iteco.CryptXML.decrypt(CryptXML.java:202)
	at ru.iteco.CryptXML.main(CryptXML.java:70)
CryptXML.java (11kb) загружен 23 раз(а).

На всякий случай приложил файл CryptXML.java, который запускаю.
Offline Евгений Афанасьев  
#8 Оставлено : 1 марта 2018 г. 19:15:22(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 715 раз в 675 постах
Включите, пожалуйста, логирование еще раз.
Offline poisondog  
#9 Оставлено : 2 марта 2018 г. 9:35:32(UTC)
poisondog

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

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

Сказал(а) «Спасибо»: 1 раз
Ошибка та же самая, а не другая. Прошу прощения. Приложил файл с выводом программы
output-java-csp-5.0.39267.txt (134kb) загружен 16 раз(а).
Offline Евгений Афанасьев  
#10 Оставлено : 2 марта 2018 г. 10:53:15(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 715 раз в 675 постах
Original Exception was java.security.InvalidKeyException: Ключ подписи нельзя использоваться для этой операции.
Ключ обмена используете?
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest (2)
2 Страницы12>
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.