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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline AndreyFayv  
#1 Оставлено : 5 апреля 2023 г. 11:22:46(UTC)
AndreyFayv

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

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

Сказал(а) «Спасибо»: 1 раз
Добрый день!
Есть задача зашифровать файл с данными по алгоритму ГОСТ, для последующей передачи на сервер, где его будут дешифровывать.
От сервера у меня есть сертификат (из тестового УЦ КриптоПро) с открытым ключом, по алгоритму
Signature Algorithm : ГОСТ Р 34.11-2012/34.10-2012 256 бит
PublicKey Algorithm : ГОСТ Р 34.10-2012 256 бит (512 bits)

По инструкции разработчика, написал следующий код (Kotlin, JSCP - импортированная java библиотека)
Код:
        val cipher = Cipher.getInstance(JCSP.GOST_CIPHER_NAME,  "JCSP")
        val certificateFactory = CertificateFactory.getInstance("X.509");
        val cert = certificateFactory.generateCertificate(FileInputStream("cert.cer"))
        val key = cert.publicKey
        cipher.init(Cipher.ENCRYPT_MODE, key)
        cipher.update(data.toByteArray())
        val enc = cipher.doFinal()


При запуске приложения, на строке 1 получаю исключение
java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: GOST28147, provider: JCSP, class: ru.CryptoPro.JCSP.Cipher.JCSPGostCipher)

Подскажите, пожалуйста, как это можно решить?
Offline Евгений Афанасьев  
#2 Оставлено : 5 апреля 2023 г. 11:59:40(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 704 раз в 665 постах
Добрый день.
Приведите полный стек ошибки.
Offline AndreyFayv  
#3 Оставлено : 5 апреля 2023 г. 12:09:16(UTC)
AndreyFayv

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

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

Сказал(а) «Спасибо»: 1 раз
Автор: Евгений Афанасьев Перейти к цитате
Добрый день.
Приведите полный стек ошибки.


java.security.NoSuchAlgorithmException: No such algorithm: GOST28147
at java.base/javax.crypto.Cipher.getInstance(Cipher.java:725)
at java.base/javax.crypto.Cipher.getInstance(Cipher.java:625)
at signcheck.controller.web.SignControllerV1.encodeJSONData(SignControllerV1.kt:56)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1067)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:655)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:764)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327)
at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:122)
at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:116)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)
at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126)
at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)
at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:109)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)
at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)
at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)
at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103)
at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)
at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90)
at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)
at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110)
at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)
at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)
at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211)
at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183)
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:354)
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:267)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:360)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:889)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1743)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: GOST28147, provider: JCSP, class: ru.CryptoPro.JCSP.Cipher.JCSPGostCipher)
at java.base/java.security.Provider$Service.newInstance(Provider.java:1901)
at java.base/javax.crypto.Cipher.getInstance(Cipher.java:706)
... 88 more
Caused by: java.lang.NoSuchMethodError: 'boolean ru.CryptoPro.JCP.params.EllipticParamsSpec.isShortNewOID(ru.CryptoPro.JCP.params.OID)'
at ru.CryptoPro.JCSP.Key.PublicKeySpec.<init>(Unknown Source)
at ru.CryptoPro.JCSP.Key.GostKeyFactory.engineGeneratePublic(Unknown Source)
at java.base/java.security.KeyFactory.generatePublic(KeyFactory.java:346)
at ru.CryptoPro.JCP.tools.JarChecker.createPublicKey(Unknown Source)
at ru.CryptoPro.JCP.tools.JarChecker.b(Unknown Source)
at ru.CryptoPro.JCP.tools.JarChecker.c(Unknown Source)
at ru.CryptoPro.JCP.tools.JarChecker.checkJARSign(Unknown Source)
at ru.CryptoPro.JCP.tools.JarChecker.checkURLSign(Unknown Source)
at ru.CryptoPro.JCP.tools.cl_34.run(Unknown Source)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at ru.CryptoPro.JCP.tools.TestVerifyClassJar.run(Unknown Source)
at ru.CryptoPro.JCP.tools.SelfTesterBase.b(Unknown Source)
at ru.CryptoPro.JCP.tools.SelfTesterBase.a(Unknown Source)
at ru.CryptoPro.JCP.tools.SelfTesterBase.checkClassInternal(Unknown Source)
at ru.CryptoPro.JCSP.tools.SelfTester_JavaCSP.checkClass(Unknown Source)
at ru.CryptoPro.JCSP.Starter.checkInternal(Unknown Source)
at ru.CryptoPro.JCSP.Starter.check(Unknown Source)
at ru.CryptoPro.JCSP.Cipher.GostCipher.<init>(Unknown Source)
at ru.CryptoPro.JCSP.Cipher.JCSPGostCipher.<init>(Unknown Source)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)
at java.base/java.security.Provider.newInstanceUtil(Provider.java:154)
at java.base/java.security.Provider$Service.newInstance(Provider.java:1894)
... 89 more

Отредактировано пользователем 5 апреля 2023 г. 12:20:26(UTC)  | Причина: Не указана

Offline Евгений Афанасьев  
#4 Оставлено : 5 апреля 2023 г. 12:23:01(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 704 раз в 665 постах
К проекту подключены все jar? JCP, JCSP, ASN1P, asn1rt и т.д.
Offline AndreyFayv  
#5 Оставлено : 5 апреля 2023 г. 12:55:55(UTC)
AndreyFayv

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

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

Сказал(а) «Спасибо»: 1 раз
Автор: Евгений Афанасьев Перейти к цитате
К проекту подключены все jar? JCP, JCSP, ASN1P, asn1rt и т.д.


Похоже, что да
Вот список подключенного
implementation(files("../libs/ASN1P.jar"))
implementation(files("../libs/AdES-core.jar"))
implementation(files("../libs/CAdES.jar"))
implementation(files("../libs/J6CF.jar"))
implementation(files("../libs/J6Oscar.jar"))
implementation(files("../libs/JCP.jar"))
implementation(files("../libs/JCSP.jar"))
implementation(files("../libs/JCPControlPane.jar"))
implementation(files("../libs/JCPRequest.jar"))
implementation(files("../libs/JCPRevCheck.jar"))
implementation(files("../libs/JCPRevTools.jar"))
implementation(files("../libs/JCPxml.jar"))
implementation(files("../libs/JCryptoP.jar"))
implementation(files("../libs/Rutoken.jar"))
implementation(files("../libs/XAdES.jar"))
implementation(files("../libs/XMLDSigRI.jar"))
implementation(files("../libs/asn1rt.jar"))
implementation(files("../libs/cmsutil.jar"))
implementation(files("../libs/cpSSL.jar"))
implementation(files("../libs/tls_proxy.jar"))

Отредактировано пользователем 5 апреля 2023 г. 12:57:13(UTC)  | Причина: Не указана

Offline AndreyFayv  
#6 Оставлено : 10 апреля 2023 г. 15:36:14(UTC)
AndreyFayv

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

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

Сказал(а) «Спасибо»: 1 раз
Добрый день!
Прошел первичную ошибку - помогла замена всех JAR библиотек CSP в проекте, похоже что из-за разрыва в времени разработки, разошлись по версиям.
Но теперь следующая ошибка, происходит при инициализации Cipher (5 строка)
Код:
        val cipher = Cipher.getInstance(JCSP.GOST_CIPHER_NAME,  "JCSP")
        val certificateFactory = CertificateFactory.getInstance("X.509");
        val cert = certificateFactory.generateCertificate(FileInputStream("cert.cer"))
        val key = cert.publicKey
        cipher.init(Cipher.ENCRYPT_MODE, key)
        cipher.update(data.toByteArray())
        val enc = cipher.doFinal()

"message": "class ru.CryptoPro.JCSP.Key.GostPublicKey cannot be cast to class ru.CryptoPro.JCSP.Key.GostSecretKey (ru.CryptoPro.JCSP.Key.GostPublicKey and ru.CryptoPro.JCSP.Key.GostSecretKey are in unnamed module of loader 'app')",

Я правильно понимаю, что для шифрования мне не подойдет открытый ключ из сертификата?
Как в данном случае будет реализовываться ассиметричное шифрование?

Отредактировано пользователем 10 апреля 2023 г. 16:42:51(UTC)  | Причина: Не указана

Offline Евгений Афанасьев  
#7 Оставлено : 10 апреля 2023 г. 19:29:45(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 704 раз в 665 постах
Да, в случае алгоритма шифрования GOST_CIPHER_NAME можно использовать только SecretKey.
Если вам надо зашифровать сообщение в чей-то адрес (получателя?) и у вас есть его сертификат (т.е. PublicKey в нем), то лучше использовать пример с EnvelopedSignature, см. архив samples-sources.jar, пакет CAdES/enveloped. Если требуется использовать провайдер JCSP, то он должен быть задан провайдером по умолчанию.
thanks 1 пользователь поблагодарил Евгений Афанасьев за этот пост.
AndreyFayv оставлено 10.04.2023(UTC)
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest (3)
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.