Статус: Новичок
Группы: Участники
Зарегистрирован: 07.08.2019(UTC) Сообщений: 4
Сказал(а) «Спасибо»: 2 раз
|
Здравствуйте. Прошу сильно не пинать, т.к. являюсь новичком в теме КриптоПро. Досталось в наследство приложение - мессенджер, который работает с использованием КриптоПро. В приложение можно добавлять сертификаты ЭЦП, выданные удостоверяющим центром - это является аккаунтом. Соответственно после ввода пароля существует возможность общаться с другими людьми, шифруя сообщения с помощью ЭЦП. При входе в аккаунт происходит проверка пароля ЭЦП. Здесь ошибок не возникает. Таким образом Криптопро в этом приложении в каком то виде работает,т.к. пароль от ключа подходит. При создании чата должно происходить создание сессионных ключей, которые в дальнейшем используются для шифрования/дешифрования сообщений. Это я пока проверить не могу, т.к. сперва отображается список чатов. Однако при попытке получить список чатов с зашифрованными сообщениями, падает при попытке дешифрования сессионного ключа:
E/ERROR: app.komandor.messenger.utils.KomandorException: java.lang.IllegalArgumentException: ru.CryptoPro.JCSP.MSCAPI.MSException: MSCAPI ERROR: 0x80090005 W/System.err: app.komandor.messenger.utils.KomandorException: app.komandor.messenger.utils.KomandorException: java.lang.IllegalArgumentException: ru.CryptoPro.JCSP.MSCAPI.MSException: MSCAPI ERROR: 0x80090005 W/System.err: at app.komandor.messenger.utils.NetworkBoundResource.onFetchFailed(NetworkBoundResource.java:57) W/System.err: at app.komandor.messenger.utils.-$$Lambda$vdYrY9YyLRGQipN8Wka_qgZxh2I.accept(Unknown Source:4) W/System.err: at io.reactivex.internal.operators.flowable.FlowableDoOnEach$DoOnEachSubscriber.onError(FlowableDoOnEach.java:104) W/System.err: at io.reactivex.internal.operators.flowable.FlowableObserveOn$BaseObserveOnSubscriber.checkTerminated(FlowableObserveOn.java:207) W/System.err: at io.reactivex.internal.operators.flowable.FlowableObserveOn$ObserveOnSubscriber.runAsync(FlowableObserveOn.java:392) W/System.err: at io.reactivex.internal.operators.flowable.FlowableObserveOn$BaseObserveOnSubscriber.run(FlowableObserveOn.java:176) W/System.err: at io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:61) W/System.err: at io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:52) W/System.err: at java.util.concurrent.FutureTask.run(FutureTask.java:266) W/System.err: at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:301) W/System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) W/System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) W/System.err: at java.lang.Thread.run(Thread.java:764) W/System.err: Caused by: app.komandor.messenger.utils.KomandorException: java.lang.IllegalArgumentException: ru.CryptoPro.JCSP.MSCAPI.MSException: MSCAPI ERROR: 0x80090005 W/System.err: at app.komandor.messenger.utils.CryptoUtils.decryptSessionKey(CryptoUtils.java:501) W/System.err: at app.komandor.messenger.data.temporary.CryptoStorage.decryptSessionKey(CryptoStorage.java:88) W/System.err: at app.komandor.messenger.data.temporary.CryptoStorage.decryptMessage(CryptoStorage.java:96) W/System.err: at app.komandor.messenger.ui.main.chats.ChatsRepository$1.lambda$null$0$ChatsRepository$1(ChatsRepository.java:65) W/System.err: at app.komandor.messenger.ui.main.chats.-$$Lambda$ChatsRepository$1$Js-7tpid3IQFcLD9G4Rz2z_4_20.apply(Unknown Source:4) W/System.err: at io.reactivex.internal.operators.flowable.FlowableFlatMap$MergeSubscriber.onNext(FlowableFlatMap.java:132) W/System.err: at io.reactivex.internal.operators.flowable.FlowableFromIterable$IteratorSubscription.slowPath(FlowableFromIterable.java:240) W/System.err: at io.reactivex.internal.operators.flowable.FlowableFromIterable$BaseRangeSubscription.request(FlowableFromIterable.java:125) W/System.err: at io.reactivex.internal.operators.flowable.FlowableFlatMap$MergeSubscriber.onSubscribe(FlowableFlatMap.java:117) W/System.err: at io.reactivex.internal.operators.flowable.FlowableFromIterable.subscribe(FlowableFromIterable.java:69) W/System.err: at io.reactivex.internal.operators.flowable.FlowableFromIterable.subscribeActual(FlowableFromIterable.java:47) W/System.err: at io.reactivex.Flowable.subscribe(Flowable.java:13041) W/System.err: at io.reactivex.internal.operators.flowable.FlowableFlatMap.subscribeActual(FlowableFlatMap.java:53) W/System.err: at io.reactivex.Flowable.subscribe(Flowable.java:13041) W/System.err: at io.reactivex.internal.operators.flowable.FlowableToListSingle.subscribeActual(FlowableToListSingle.java:57) W/System.err: at io.reactivex.Single.subscribe(Single.java:2779) W/System.err: at io.reactivex.internal.operators.flowable.FlowableFlatMapSingle$FlatMapSingleSubscriber.onNext(FlowableFlatMapSingle.java:132) W/System.err: at io.reactivex.internal.operators.flowable.FlowableFlatMapMaybe$FlatMapMaybeSubscriber.innerSuccess(FlowableFlatMapMaybe.java:175) W/System.err: at io.reactivex.internal.operators.flowable.FlowableFlatMapMaybe$FlatMapMaybeSubscriber$InnerObserver.onSuccess(FlowableFlatMapMaybe.java:397) W/System.err: at io.reactivex.internal.operators.maybe.MaybeFromCallable.subscribeActual(MaybeFromCallable.java:61) W/System.err: at io.reactivex.Maybe.subscribe(Maybe.java:3727) W/System.err: at io.reactivex.internal.operators.flowable.FlowableFlatMapMaybe$FlatMapMaybeSubscriber.onNext(FlowableFlatMapMaybe.java:132) W/System.err: at io.reactivex.internal.operators.flowable.FlowableObserveOn$ObserveOnSubscriber.runAsync(FlowableObserveOn.java:400) W/System.err: at io.reactivex.internal.operators.flowable.FlowableObserveOn$BaseObserveOnSubscriber.run(FlowableObserveOn.java:176) W/System.err: at io.reactivex.internal.schedulers.ExecutorScheduler$ExecutorWorker$BooleanRunnable.run(ExecutorScheduler.java:260) W/System.err: at io.reactivex.internal.schedulers.ExecutorScheduler$ExecutorWorker.run(ExecutorScheduler.java:225) W/System.err: ... 3 more W/System.err: Caused by: java.lang.IllegalArgumentException: ru.CryptoPro.JCSP.MSCAPI.MSException: MSCAPI ERROR: 0x80090005 W/System.err: at ru.CryptoPro.JCSP.MSCAPI.cl_6.importSessionSecretKey(Unknown Source:8) W/System.err: at ru.CryptoPro.JCSP.Key.cl_8.unwrap(Unknown Source:11) W/System.err: at ru.CryptoPro.JCSP.Cipher.GostCipher.engineUnwrap(Unknown Source:18) W/System.err: at javax.crypto.Cipher.unwrap(Cipher.java:2440) W/System.err: at app.komandor.messenger.utils.CryptoUtils.decryptSessionKey(CryptoUtils.java:499) ... 28 more W/System.err: Caused by: ru.CryptoPro.JCSP.MSCAPI.MSException: MSCAPI ERROR: 0x80090005 W/System.err: at ru.CryptoPro.JCSP.MSCAPI.cl_6.importKey(Unknown Source:89) W/System.err: at ru.CryptoPro.JCSP.MSCAPI.cl_6.importSessionSecretKey(Unknown Source:0) W/System.err: ... 32 more E/ERROR: java.lang.IllegalArgumentException: ru.CryptoPro.JCSP.MSCAPI.MSException: MSCAPI ERROR: 0x80090005 W/System.err: app.komandor.messenger.utils.KomandorException: java.lang.IllegalArgumentException: ru.CryptoPro.JCSP.MSCAPI.MSException: MSCAPI ERROR: 0x80090005 W/System.err: at app.komandor.messenger.ui.main.chats.ChatsViewModel.lambda$updateChats$0$ChatsViewModel(ChatsViewModel.java:51) W/System.err: at app.komandor.messenger.ui.main.chats.-$$Lambda$ChatsViewModel$GuB1ep934dK5td4G13VvqLLk8Qs.accept(Unknown Source:4) W/System.err: at io.reactivex.internal.subscribers.LambdaSubscriber.onNext(LambdaSubscriber.java:65) W/System.err: at io.reactivex.internal.operators.flowable.FlowableConcatArray$ConcatArraySubscriber.onNext(FlowableConcatArray.java:76) W/System.err: at io.reactivex.internal.operators.flowable.FlowableObserveOn$ObserveOnSubscriber.runAsync(FlowableObserveOn.java:400) W/System.err: at io.reactivex.internal.operators.flowable.FlowableObserveOn$BaseObserveOnSubscriber.run(FlowableObserveOn.java:176) W/System.err: at io.reactivex.android.schedulers.HandlerScheduler$ScheduledRunnable.run(HandlerScheduler.java:109) W/System.err: at android.os.Handler.handleCallback(Handler.java:873) W/System.err: at android.os.Handler.dispatchMessage(Handler.java:99) W/System.err: at android.os.Looper.loop(Looper.java:193) W/System.err: at android.app.ActivityThread.main(ActivityThread.java:6745) W/System.err: at java.lang.reflect.Method.invoke(Native Method) W/System.err: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:495) W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:859)
На всякий случай вот код расшифровкиВот так создаются сессионные ключиПрошу прощения, если где то что то было не точно описано, т.к. пока не очень понимаю с какой стороны подходить к решению. Подскажите, пожалуйста, с чего вообще начать?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 3,910 Откуда: Крипто-Про Сказал(а) «Спасибо»: 20 раз Поблагодарили: 685 раз в 646 постах
|
Здравствуйте. Возможно, проблема в unwrap() при расшифровании сессионного ключа. Если используются закрытые/открытые ключи пользователей на алгоритме ГОСТ 2012, то нужны параметры шифрования с идентификатором CryptParamsSpec.OID_Gost28147_89_Rosstandart_TC26_Z_ParamSet, а не Verba0, который задается по умолчанию, если генерировать сессионный ключ с помощью: Код:
final KeyGenerator keyGen = KeyGenerator.getInstance(CIPHER_ALG, JCSP.PROVIDER_NAME);
final SecretKey simm = keyGen.generateKey();
Чтобы был получен ключ с параметрами шифрования OID_Gost28147_89_Rosstandart_TC26_Z_ParamSet, нужно передать их в keyGen.init(...) (см. рук-ва программиста модуля шифрования и примеры). Также эти параметры можно задать для cipher при расширфровании ключа: Код:
Cipher cipher = Cipher.getInstance(CIPHER_ALG + CIPHER_KEY_ALG_PARAMS);
cipher.init(Cipher.UNWRAP_MODE, responderAgree);
key_ = (SecretKey) cipher.unwrap(wrap, null, Cipher.SECRET_KEY);
Если нужен низкоуровневый код, посмотрите пример PKCS7EnvEphTransport в пакете CMS_samples в samples-sources.jar в последнем дистрибутиве JCP. |
|
1 пользователь поблагодарил Евгений Афанасьев за этот пост.
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 07.08.2019(UTC) Сообщений: 4
Сказал(а) «Спасибо»: 2 раз
|
Большое спасибо за ответ! Автор: Евгений Афанасьев Если используются закрытые/открытые ключи пользователей на алгоритме ГОСТ 2012, то нужны параметры шифрования с идентификатором CryptParamsSpec.OID_Gost28147_89_Rosstandart_TC26_Z_ParamSet, а не Verba0, который задается по умолчанию, если генерировать сессионный ключ с помощью: Код:
final KeyGenerator keyGen = KeyGenerator.getInstance(CIPHER_ALG, JCSP.PROVIDER_NAME);
final SecretKey simm = keyGen.generateKey();
Чтобы был получен ключ с параметрами шифрования OID_Gost28147_89_Rosstandart_TC26_Z_ParamSet, нужно передать их в keyGen.init(...) (см. рук-ва программиста модуля шифрования и примеры). Я посмотрел, приватный ключ сертификата пользователя закодирован с помощью алгоритма GOST3410DHEL. К тому же при создании сессионных ключей никаких доп параметров инициализации не задавалось... Фактически создание и дешифровка обратны друг другу с т.з. кода. Может ли быть проблема с самими ключами? Могли они измениться и поэтому не происходит дешифровка? Как то возможно проверить корректность ключей, которые у меня фигурируют при работе? Автор: Евгений Афанасьев Если нужен низкоуровневый код, посмотрите пример PKCS7EnvEphTransport в пакете CMS_samples в samples-sources.jar в последнем дистрибутиве JCP.
За пример спасибо, он очень похож на код из моего приложения. Видимо, руководствовались при разработке этим примером.
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 3,910 Откуда: Крипто-Про Сказал(а) «Спасибо»: 20 раз Поблагодарили: 685 раз в 646 постах
|
Срок действия закрытого ключа не вышел (15 месяцев)? Проверить можно с помощью тестовых ключей, сертификаты можно выпустить в тестовом УЦ. Отредактировано пользователем 9 августа 2019 г. 16:23:48(UTC)
| Причина: Не указана |
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close