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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline МайндпассСемен  
#1 Оставлено : 23 января 2014 г. 18:29:19(UTC)
МайндпассСемен

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

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

Сказал(а) «Спасибо»: 1 раз
При попытки подписи небольшого (16 байт) куска данных происходит падение.
Сертификат и ключ с заданым _keyAlias существуют

Код, вызывающий падение

Дамп


Также keyStore.getKey либо keyStore.getEntry выполняются ОЧЕНЬ долго
Online Евгений Афанасьев  
#2 Оставлено : 23 января 2014 г. 18:49:11(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 596 раз в 566 постах
Добрый день.
Что возвращает stringToChars?
Offline МайндпассСемен  
#3 Оставлено : 23 января 2014 г. 19:12:30(UTC)
МайндпассСемен

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

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

Сказал(а) «Спасибо»: 1 раз
chars (без нуля) - сейчас проверю с финальным нулем
Offline МайндпассСемен  
#4 Оставлено : 23 января 2014 г. 19:45:22(UTC)
МайндпассСемен

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

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

Сказал(а) «Спасибо»: 1 раз
Не помогло ни с +1 ни без него
Код:

static public char[] stringToChars(String string)
    {
        int len = string.length();
        char[] chars = new char[len+1];
        string.getChars(0, string.length(), chars, 0);
        chars[len] = 0;
        return chars;
    }


Также очень долго думает и потом падает

Отредактировано пользователем 23 января 2014 г. 19:46:35(UTC)  | Причина: Дополнение

Online Евгений Афанасьев  
#5 Оставлено : 23 января 2014 г. 19:52:42(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 596 раз в 566 постах
А в самом demo-приложении примеры работают?
Offline МайндпассСемен  
#6 Оставлено : 23 января 2014 г. 20:00:12(UTC)
МайндпассСемен

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

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

Сказал(а) «Спасибо»: 1 раз
В демо-приложении нет настройки об отключении пинкода. При включенном пинкоде - работает.
Online Евгений Афанасьев  
#7 Оставлено : 23 января 2014 г. 20:06:09(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 596 раз в 566 постах
Если пароль на контейнер не установлен, то попробуйте передать null (store.getKey(alias, null)).
Если использовать getKey(alias, null) - окно ввода пин-кода появляется?
Какой алиас вашего ключа?

Отредактировано пользователем 24 января 2014 г. 12:54:32(UTC)  | Причина: Не указана

Offline МайндпассСемен  
#8 Оставлено : 24 января 2014 г. 16:25:06(UTC)
МайндпассСемен

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

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

Сказал(а) «Спасибо»: 1 раз
Один алиас для всего
Код:

private final String _keyAlias = "keySt";


Нельзя же сохранить приватный ключ с нулевым пинкодом? Или вы про пароль к контейнеру, который передается в keyStore.load(null,null)
Online Евгений Афанасьев  
#9 Оставлено : 24 января 2014 г. 16:45:17(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 596 раз в 566 постах
Я про то, что если вызывать store.getKey(), то пароль не важен - должно появиться окно для ввода пин-кода (в функцию можно передать null вместо пароля); если использовать store.getEntry(), то можно передать пароль, и окно для ввода пин-кода не появится. Можно сохранить контейнер без пароля: если не задать его в окне ввода пин-кода при сохранении с помощью setKeyEntry() либо если не задать его в параметрах при сохранении с помощью setEntry().

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

Offline МайндпассСемен  
#10 Оставлено : 24 января 2014 г. 17:09:45(UTC)
МайндпассСемен

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

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

Сказал(а) «Спасибо»: 1 раз
Когда я вызываю store.getKey(alias, null) - я после ОЧЕНЬ ПРОДОЛЖИТЕЛЬНОГО (3 минуты) ожидания получаю ключ,
а после вызова store.getEntry(alias, null) - получаю объект, java.security.KeyStore$TrustedCertificateEntry, который не конвертится к JCPPrivateKeyEntry как указано в примерах.

попытка использовать (полученый через getKey) ключ для подписи - вызывает падение и дамп модуля JNI
Online Евгений Афанасьев  
#11 Оставлено : 24 января 2014 г. 18:18:53(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 596 раз в 566 постах
Попробуйте в ACSPClientApp в коде примера SignExample в ф. sign() поставить load(/*askPinInDialog*/false, keyStoreType, keyAlias, keyPassword, callback), собрать приложение снова, установить и выполнить "подпись данных" на вкладке "Подпись". Запрос пин-кода производиться не должен (сработает getEntry()), подпись должна выполниться.

Отредактировано пользователем 24 января 2014 г. 18:19:27(UTC)  | Причина: Не указана

Offline МайндпассСемен  
#12 Оставлено : 27 января 2014 г. 12:16:34(UTC)
МайндпассСемен

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

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

Сказал(а) «Спасибо»: 1 раз
Как я выяснил, падение возникает при попытке использовать AsyncTask (т.е. фактически другой поток) для подписи.

Если использовать тестовое приложение, то по какой-то причине ПЕРВОЕ обращение к ключу (load) происходит очень долго и блокирует основной поток. А из фонового потока не работает (
Online Евгений Афанасьев  
#13 Оставлено : 27 января 2014 г. 12:57:32(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 596 раз в 566 постах
AsyncTask в demo-приложении или у вас?
ACSP.apk обновили? Запускаете на устройстве или в эмуляторе?
Offline МайндпассСемен  
#14 Оставлено : 27 января 2014 г. 12:59:56(UTC)
МайндпассСемен

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

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

Сказал(а) «Спасибо»: 1 раз
У меня, но в демо тоже проверю.
ACSP.apk обновил из комплекта с SDK, запускаю на устройстве.
Offline МайндпассСемен  
#15 Оставлено : 3 февраля 2014 г. 20:23:06(UTC)
МайндпассСемен

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

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

Сказал(а) «Спасибо»: 1 раз
С char array разобрался, но падение осталось.


В чем все же дело?
Online Евгений Афанасьев  
#16 Оставлено : 3 февраля 2014 г. 21:32:31(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 596 раз в 566 постах
Код:

java.lang.NullPointerException:
02-03 20:20:19.733: INFO/dalvikvm(899): at android.app.AlertDialog.resolveDialogTheme(AlertDialog.java:142)
02-03 20:20:19.733: INFO/dalvikvm(899): at android.app.AlertDialog.<init>(AlertDialog.java:98)

Тут что-то странное...
thanks 1 пользователь поблагодарил Евгений Афанасьев за этот пост.
МайндпассСемен оставлено 04.02.2014(UTC)
Offline МайндпассСемен  
#17 Оставлено : 4 февраля 2014 г. 15:11:43(UTC)
МайндпассСемен

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

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

Сказал(а) «Спасибо»: 1 раз
Суть проблемы с падением выяснена, вопрос закрыт.
Я забыл вызвать CSPConfig.registerActivityContext(this);
Однако в новой версии добавьте соответствующую проверку пожалуйста.
Offline МайндпассСемен  
#18 Оставлено : 4 февраля 2014 г. 16:32:38(UTC)
МайндпассСемен

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

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

Сказал(а) «Спасибо»: 1 раз
Логика работы несколько странная если из приложения выполнять данный код несколько раз.
Код:

...
     KeyStore keyStore = KeyStore.getInstance(JCSP.HD_STORE_NAME, JCSP.PROVIDER_NAME);
     keyStore.load(null, null);
     KeyStore.ProtectionParameter protectedParam =
        new KeyStore.PasswordProtection(pin.toCharArray());

     JCPPrivateKeyEntry entry = (JCPPrivateKeyEntry)
        keyStore.getEntry(_keyAlias, protectedParam);
....
     return sn.sign();



  • При первом вызове с правильным пинкодом долго думает, ничего не говорит и подписывает
  • При последующих вызовах с правильным пинкодом быстро подписывает
  • При последующих вызовах с неправильным пинкодом дает исклюение UnrecoverableEntryException с сообщение Wrong Password
  • При первом вызове с неправильным пинкодом долго думает, и выдает окно ввода пинкода


Как сделать, чтобы в случае неправильного пинкода в первый раз также выбрасывалось исключение?
И чтобы "задумывалось" меньше, отдельной функцией заранее вызвать инициализацию.
Online Евгений Афанасьев  
#19 Оставлено : 27 февраля 2014 г. 15:34:04(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 596 раз в 566 постах
Автор: МайндпассСемен Перейти к цитате

Как сделать, чтобы в случае неправильного пинкода в первый раз также выбрасывалось исключение?

В последнюю сборку добавили класс JCPProtectionParameter, его можно передать в getEntry(), чтобы открытие контейнера производилось в режиме SILENT (см. Doc/progguide.html#JCSPKeyStoreRead). В случае, если пароль задан неправильный, сразу получите исключение.

Отредактировано пользователем 27 февраля 2014 г. 15:34:59(UTC)  | Причина: Не указана

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