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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Konstantin Agile  
#1 Оставлено : 17 августа 2021 г. 20:12:09(UTC)
Konstantin Agile

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

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

Добрый день, участники форума!
В каких случаях возможно поведение ниже и как можно его исправить? Кто еще сталкивался с такой проблемой?

Ожидаемое поведение:
При подписании одного документа (одна криптографическая операция) через Крипто Про CSP пин-код (пароль) от контейнера ЭЦП запрашивается только один раз.

Фактическое поведение:
При подписании одного документа через Крипто Про CSP пин-код (пароль) от контейнера ЭЦП запрашивается два раза. То есть во всплывающем модальном окне вводится корректный пароль, окно закрывается и сразу же открывается такое же окно ввода пароля повторно. После второго ввода корректного пароля криптографическая операции подписания документа выполняется. По логам событий Windows видно, что выполнялась только одна криптографическая операция CPCSignHash.

В логах событий Windows следующие записи:
  1. 10:39:30 "КриптоПро CSP. cpcsp: CPCAcquireContext (pszContainer=\\.\Aktiv Rutoken lite 0\{depersonalization}, dwFlags=0x0). Result=1, Err=0x0. hProv=531628273"
  2. 10:41:57 "КриптоПро CSP. cpcsp: CPCReleaseContext (hProv=531628273, dwFlags=0x0). Result=1, Err=0x80090020"
  3. 10:41:57 "КриптоПро CSP. cpcsp: CPCAcquireContext (pszContainer=\\.\Aktiv Rutoken lite 0\{depersonalization}, dwFlags=0x0). Result=1, Err=0x0. hProv=1507852432."
  4. 10:46:05 "КриптоПро CSP. cpcsp: CPCSignHash (hProv=1507852432, hHash={depersonalization}, dwKeySpec=1, dwFlags=0x0). Result=1, Err=0x0."
  5. 10:46:05 "КриптоПро CSP. cpcsp: CPCReleaseContext (hProv=1507852432, dwFlags=0x0). Result=1, Err=0x80090020"

Условия воспроизведения:
- Версия КриптоПро CSP 4.0.9963
- Версия ядра СКЗИ 4.0.9019 КС1
- Лицензия КриптоПро встроена в сертификат ЭЦП

Похожая проблема https://sedkazna.ru/foru...c&catid=7&id=864

Отредактировано пользователем 17 августа 2021 г. 20:26:04(UTC)  | Причина: Не указана

Offline Андрей *  
#2 Оставлено : 18 августа 2021 г. 0:07:50(UTC)
Андрей *

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

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

Сказал «Спасибо»: 388 раз
Поблагодарили: 1587 раз в 1221 постах
Здравствуйте.

Цитата:

При подписании одного документа через
Крипто Про CSP пин-код (пароль) от контейнера ЭЦП запрашивается два раза.


В каком ПО?
Техническую поддержку оказываем тут
Наша база знаний
Offline two_oceans  
#3 Оставлено : 18 августа 2021 г. 13:59:28(UTC)
two_oceans

Статус: Эксперт

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

Сказал(а) «Спасибо»: 90 раз
Поблагодарили: 313 раз в 295 постах
Да, я тоже думаю на ПО - дело в том, что некоторые программисты "по всем правилам" вызывают функцию CryptSignHash дважды. Первый раз просто для получения размера памяти, второй - собственно для подписания. Лично меня двойной запрос раздражает, поэтому в моей программке выбирается заранее размер памяти для RAW подписи по алгоритму.
Offline Андрей *  
#4 Оставлено : 18 августа 2021 г. 14:02:00(UTC)
Андрей *

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

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

Сказал «Спасибо»: 388 раз
Поблагодарили: 1587 раз в 1221 постах
Автор: two_oceans Перейти к цитате
Да, я тоже думаю на ПО - дело в том, что некоторые программисты "по всем правилам" вызывают функцию CryptSignHash дважды. Первый раз просто для получения размера памяти, второй - собственно для подписания. Лично меня двойной запрос раздражает, поэтому в моей программке выбирается заранее размер памяти для RAW подписи по алгоритму.


Когда заранее пишется под конкретный алгоритм(Id) - известен размер.
А по правилам - дважды.
Техническую поддержку оказываем тут
Наша база знаний
Offline Konstantin Agile  
#5 Оставлено : 18 августа 2021 г. 16:45:40(UTC)
Konstantin Agile

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

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

Автор: Андрей * Перейти к цитате
Здравствуйте.

Цитата:

При подписании одного документа через
Крипто Про CSP пин-код (пароль) от контейнера ЭЦП запрашивается два раза.


В каком ПО?


В Контур.Плагин 3.12.0.441.
Какое это имеет значение, если анализируется лог самого КриптоПро CSP? Или в логе КриптоПро CSP некоторые вызовы API из внешнего ПО могут не отражаться?
Offline Konstantin Agile  
#6 Оставлено : 18 августа 2021 г. 16:47:13(UTC)
Konstantin Agile

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

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

Автор: two_oceans Перейти к цитате
Да, я тоже думаю на ПО - дело в том, что некоторые программисты "по всем правилам" вызывают функцию CryptSignHash дважды. Первый раз просто для получения размера памяти, второй - собственно для подписания. Лично меня двойной запрос раздражает, поэтому в моей программке выбирается заранее размер памяти для RAW подписи по алгоритму.


Если функция CryptSignHash вызывается дважды, тогда почему в логе КриптоПро CSP только один вызов?
Offline Андрей *  
#7 Оставлено : 18 августа 2021 г. 16:55:25(UTC)
Андрей *

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

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

Сказал «Спасибо»: 388 раз
Поблагодарили: 1587 раз в 1221 постах
Автор: Konstantin Agile Перейти к цитате
Автор: Андрей * Перейти к цитате
Здравствуйте.

Цитата:

При подписании одного документа через
Крипто Про CSP пин-код (пароль) от контейнера ЭЦП запрашивается два раза.


В каком ПО?


В Контур.Плагин 3.12.0.441.
Какое это имеет значение, если анализируется лог самого КриптоПро CSP? Или в логе КриптоПро CSP некоторые вызовы API из внешнего ПО могут не отражаться?


Как какое...
А если ПО захотело проверить наличие ЗК - пароль не должен требоваться?

Проверили - ок, можно подписывать.

Техническую поддержку оказываем тут
Наша база знаний
Offline Андрей *  
#8 Оставлено : 18 августа 2021 г. 16:58:52(UTC)
Андрей *

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

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

Сказал «Спасибо»: 388 раз
Поблагодарили: 1587 раз в 1221 постах
Проверьте поведение на актуальной сертифицированной сборке 5R2.
Техническую поддержку оказываем тут
Наша база знаний
Offline Андрей *  
#9 Оставлено : 18 августа 2021 г. 17:00:48(UTC)
Андрей *

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

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

Сказал «Спасибо»: 388 раз
Поблагодарили: 1587 раз в 1221 постах
в логе подключение и отключение было: CPCReleaseContext
второе подключение (в котором был вызов CryptSignHash) было уже с другим указателем (hProv)
Техническую поддержку оказываем тут
Наша база знаний
Offline Konstantin Agile  
#10 Оставлено : 18 августа 2021 г. 18:20:28(UTC)
Konstantin Agile

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

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

Автор: Андрей * Перейти к цитате
Автор: Konstantin Agile Перейти к цитате
Автор: Андрей * Перейти к цитате
Здравствуйте.

Цитата:

При подписании одного документа через
Крипто Про CSP пин-код (пароль) от контейнера ЭЦП запрашивается два раза.


В каком ПО?


В Контур.Плагин 3.12.0.441.
Какое это имеет значение, если анализируется лог самого КриптоПро CSP? Или в логе КриптоПро CSP некоторые вызовы API из внешнего ПО могут не отражаться?


Как какое...
А если ПО захотело проверить наличие ЗК - пароль не должен требоваться?

Проверили - ок, можно подписывать.



Какой вызов в логе КриптоПРО CSP соответствует запросу наличия ЗК?
Наличие ЗК можно проверить по сертификату для этого ввод пароля ведь не требуется.


Offline Konstantin Agile  
#11 Оставлено : 18 августа 2021 г. 18:22:40(UTC)
Konstantin Agile

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

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

Автор: Андрей * Перейти к цитате
в логе подключение и отключение было: CPCReleaseContext
второе подключение (в котором был вызов CryptSignHash) было уже с другим указателем (hProv)


Между первой парой вызовов CPCAcquireContext и CPCReleaseContext не было других операций.
Что могло в таком случае кроме CryptSignHash вызвать модальное окно запроса пароля?

Offline two_oceans  
#12 Оставлено : 19 августа 2021 г. 6:14:17(UTC)
two_oceans

Статус: Эксперт

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

Сказал(а) «Спасибо»: 90 раз
Поблагодарили: 313 раз в 295 постах
Автор: Konstantin Agile Перейти к цитате
Какой вызов в логе КриптоПРО CSP соответствует запросу наличия ЗК?

Между первой парой вызовов CPCAcquireContext и CPCReleaseContext не было других операций.
Что могло в таком случае кроме CryptSignHash вызвать модальное окно запроса пароля?
Насчет того, какой вызов соответствует запросу пароля тут давненько идут баталии, полной правды пока не видел. В теории можно вызвать CryptAcquireContext (создать hProv), потом установить для hProv параметр с пин-кодом и запроса не будет при всех операциях с этим hProv (а то и с этим контейнером - если закэшируется пароль в хранилище). Из этого как бы следует, что CryptAcquireContext не запрашивает пароль. В теории.

Также очевидно что если к моменту вызова CryptSignHash пин-код не сохранен средствами криптопровайдера, не закэширован в хранилище (за это отвечает Microsoft CryptoApi) и не установлен для конкретного hProv, то CryptSignHash вызовет обращение к закрытому ключу и запрос пин-кода точно будет. Про то, что в промежутке между CryptAcquireContext и CryptSignHash - не ясно, в теории тоже не должно спрашивать.

Например, при подписи xml хэш считается минимум 2 раза, подписывается только последний. Иногда для первого вычисления хэша также вызывают контекст с контейнером вместо VERIFY_CONTEXT.

Кроме того, мне вспоминается поведение КриптоПро CSP когда у меня запрашивались пин-коды от трех "первых попавшихся" контейнеров и если в них не находилось нужного, выдавалась ошибка. Не очень хорошо помню при какой ситуации это было. При "автоопределении" контейнера, соответствующего сертификату или при вызове CryptAcquireCertificatePrivateKey.
Автор: Konstantin Agile Перейти к цитате
Наличие ЗК можно проверить по сертификату для этого ввод пароля ведь не требуется.
Сертификат это сертификат, в нем не хранится ссылка на контейнер ЗК. В хранилище ссылка хранится, но некоторым плагинам этого мало и они перечисляют сами контейнеры, а вдруг токен не вставлен. Контуровская диагностика активно продвигает драйверы рутокена, что на самом деле контейнер не на токене - алгоритм не волнует. Так что и плагин может быть написан с упором на токены. Более того, диагностика еще и выдает рекомендацию использовать КС1 вместо КС2.
Автор: Konstantin Agile Перейти к цитате
Что могло в таком случае кроме CryptSignHash вызвать модальное окно запроса пароля?
Модальное окно запроса пароля? Серьезно? Модальное - это когда не дает переключиться на какое-то другое (родительское) окно, на версии 4 мне такое не встречалось - для этого надо специально передавать hwnd родительского окна.

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