logo Обзор КриптоПро NGate для защищённого доступа к корпоративным ресурсам
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Dim  
#1 Оставлено : 19 января 2009 г. 12:39:44(UTC)
Dim

Статус: Активный участник

Группы: Участники
Зарегистрирован: 10.04.2008(UTC)
Сообщений: 153
Откуда: Новороссийск

Поблагодарили: 14 раз в 8 постах
У меня есть контейнер с закрытым ключом, есть файл сертификата. Как проверить соответствие открытого ключа, закрытому?
Offline Kirill Sobolev  
#2 Оставлено : 19 января 2009 г. 14:13:58(UTC)
Кирилл Соболев

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

Группы: Участники
Зарегистрирован: 25.12.2007(UTC)
Сообщений: 1,731
Мужчина
Откуда: КРИПТО-ПРО

Поблагодарили: 175 раз в 167 постах
C помощью функций
CryptExportPublicKeyInfo
CertComparePublicKeyInfo
Техническую поддержку оказываем тут
Наша база знаний
Offline Dim  
#3 Оставлено : 19 января 2009 г. 14:30:38(UTC)
Dim

Статус: Активный участник

Группы: Участники
Зарегистрирован: 10.04.2008(UTC)
Сообщений: 153
Откуда: Новороссийск

Поблагодарили: 14 раз в 8 постах
Спасибо! Щас буду юзать.
Offline AlexEr81  
#4 Оставлено : 16 октября 2018 г. 10:10:00(UTC)
AlexEr81

Статус: Активный участник

Группы: Участники
Зарегистрирован: 09.11.2012(UTC)
Сообщений: 64
Откуда: Ростовская область

Сказал(а) «Спасибо»: 8 раз
Поблагодарили: 1 раз в 1 постах
CryptExportPublicKeyInfo вызывает запрос пароля от контейнера,
а как КриптоПро проверяет соответствие? ведь если в панели управления при установке личного сертификата вручную указать чужой контейнер КриптоПро CSP выдаёт что закрытый ключ не соответствует открытому при этом пароль не вводится.
Offline Lenadmin  
#5 Оставлено : 11 ноября 2019 г. 21:02:39(UTC)
Lenadmin

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

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

Сказал(а) «Спасибо»: 4 раз
Воспользуюсь темой, спрошу.

Правильно ли я понял, ответы автору темы подразумевали, что сертификат уже установлен в контейнер?
Или же рекомендованные функции извлекают информацию вне зависимости от привязанного сертификата?

Но как сделать то же самое в командной строке/пакетнике?
Если я хочу через cmd установить сертификат в контейнер, то как мне узнать, в какой контейнер его поставить, с каким связать?

Какой командой проверить соответствие открытого ключа контейнеру / закрытому ключу для последующей установки и связывания с этим подходящим контейнером?

Действительно, в Крипто Про есть галочка "найти контейнер автоматически". Значит, может существовать и некая команда проверки соответствия?
Offline Александр Лавник  
#6 Оставлено : 11 ноября 2019 г. 21:26:11(UTC)
Александр Лавник

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

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

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

Команда установки сертификата с автоматическим определением нужного ключевого контейнера:

Код:
csptest -ipsec -reg -autocont -mycert путь_к_файлу_сертификата
Техническую поддержку оказываем тут
Наша база знаний
thanks 2 пользователей поблагодарили Александр Лавник за этот пост.
Андрей Писарев оставлено 11.11.2019(UTC), Lenadmin оставлено 11.11.2019(UTC)
Offline Lenadmin  
#7 Оставлено : 11 ноября 2019 г. 21:54:38(UTC)
Lenadmin

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

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

Сказал(а) «Спасибо»: 4 раз
Автор: Александр Лавник Перейти к цитате

Команда установки сертификата с автоматическим определением нужного ключевого контейнера:

Код:
csptest -ipsec -reg -autocont -mycert путь_к_файлу_сертификата


Спасибо, но ... часто установке сертификата в контейнер предшествует копирование контейнера с флэшки в реестр.
И важно бы ограничить область такого автопоиска - или реестром, или флэшкой.
Но как поведет себя автопоиск в общем случае, не свяжет ли сертификат с первым попавшимся из подходящих контейнеров, скажем, на флэшке, вместо реестра?




Offline Андрей Писарев  
#8 Оставлено : 11 ноября 2019 г. 21:58:55(UTC)
Андрей Писарев

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

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 8,534
Мужчина

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

Перед запуском установки - отключите внешний носитель с контейнерами.
Техническую поддержку оказываем тут
Наша база знаний
Offline Lenadmin  
#9 Оставлено : 11 ноября 2019 г. 22:14:34(UTC)
Lenadmin

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

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

Сказал(а) «Спасибо»: 4 раз
Автор: Андрей Писарев Перейти к цитате
Здравствуйте.

Перед запуском установки - отключите внешний носитель с контейнерами.


Такое решение конечно, имеет право на жизнь )
Но если в цикле происходит поиск и установка десятков, сотен сертификатов, то решение уже не кажется столь удобным.
Следующий контейнер в цикле ищется снова по сертификату, а носитель будет отключен )
Пока я попытаюсь найти возможность сделать все в одном цикле.

Отредактировано пользователем 11 ноября 2019 г. 22:17:42(UTC)  | Причина: Не указана

Offline Андрей Писарев  
#10 Оставлено : 11 ноября 2019 г. 22:33:55(UTC)
Андрей Писарев

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

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 8,534
Мужчина

Сказал «Спасибо»: 309 раз
Поблагодарили: 1199 раз в 936 постах
Автор: Lenadmin Перейти к цитате
Автор: Андрей Писарев Перейти к цитате
Здравствуйте.

Перед запуском установки - отключите внешний носитель с контейнерами.


Такое решение конечно, имеет право на жизнь )
Но если в цикле происходит поиск и установка десятков, сотен сертификатов, то решение уже не кажется столь удобным.
Следующий контейнер в цикле ищется снова по сертификату, а носитель будет отключен )
Пока я попытаюсь найти возможность сделать все в одном цикле.


Вы не желаете устанавливать ссылку на контейнер, который есть на флешке и который, возможно, находится в первую очередь при перечислении, так?
Но и отключать не желаете флешку при этом.



Автор: Lenadmin Перейти к цитате

Но если в цикле происходит поиск и установка десятков, сотен сертификатов, то решение уже не кажется столь удобным.

Каким образом это связано с удобством. Вы с флешки массово выполняете распростанение и не можете ее отключать на время установки сертификатов?
Утилита вызывается для конкретного сертификата - она каждый раз будет перечислять контейнеры и чем больше их (по сути в 2 раза - если копируете всё с флешки в реестр?), тем больше потребуется времени.
Техническую поддержку оказываем тут
Наша база знаний
Offline Андрей Писарев  
#11 Оставлено : 11 ноября 2019 г. 22:35:06(UTC)
Андрей Писарев

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

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 8,534
Мужчина

Сказал «Спасибо»: 309 раз
Поблагодарили: 1199 раз в 936 постах
Автор: Lenadmin Перейти к цитате

Пока я попытаюсь найти возможность сделать все в одном цикле.


Программно, да, можно.

Техническую поддержку оказываем тут
Наша база знаний
Offline two_oceans  
#12 Оставлено : 12 ноября 2019 г. 6:40:33(UTC)
two_oceans

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

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

Сказал(а) «Спасибо»: 49 раз
Поблагодарили: 168 раз в 158 постах
Автор: Андрей Писарев Перейти к цитате
Автор: Lenadmin Перейти к цитате
Автор: Андрей Писарев Перейти к цитате
Перед запуском установки - отключите внешний носитель с контейнерами.
Следующий контейнер в цикле ищется снова по сертификату, а носитель будет отключен )
Пока я попытаюсь найти возможность сделать все в одном цикле.
Вы не желаете устанавливать ссылку на контейнер, который есть на флешке и который, возможно, находится в первую очередь при перечислении, так?
Но и отключать не желаете флешку при этом.
Чтобы избежать квадратичного увеличения времени, можно воспользоваться тем фактом что криптопровайдер перечисляет только контейнеры в корне диска, но не во вложенных папках. Тогда одно из двух: 1) сначала скопировать одним циклом все контейнеры, потом их перенести в папку допустим "ok", не отключая носителя - будут доступны только копии контейнеров из реестра, можно запускать второй цикл установки;

2) если хотите копировать не все, а только конкретные контейнеры, то можете провести дополнительный шаг - считать из name.key в каждом контейнере имя контейнера и где-то запомнить чтобы сто раз не читать. Допустим, скопировали, на флешке имя контейнера "A", в реестре "A_copy" (копия от оригинала отличается "хвостиком"), запустили автоустановку, получили информацию об установленной в хранилище связи "A" или "A_copy", заменили хвостик (получили "A" и знаем что автоустановка соотнесла А с нашим сертификатом), передвинули контейнер с именем "A" на флешке в папку "ok". Если связь установилась с передвинутым контейнером "A", то запускаем автоустановку еще раз (теперь уже на флешке не найдется). Пока не додумал как сделать выделенное жирным в батнике (из API делается поиском установленного сертификата в хранилище и запросом его свойства привязки), но думаю схема рабочая.

Вариация: автосвязать сначала с флешкой, узнать с чем связалось, скопировать в реестр, передвинуть на флешке, автосвязать снова. Вообще конечно наверно лучше в начале делать проверку не установлен ли уже и если установлен, пропускать.

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

thanks 1 пользователь поблагодарил two_oceans за этот пост.
Lenadmin оставлено 12.11.2019(UTC)
Offline Lenadmin  
#13 Оставлено : 12 ноября 2019 г. 10:23:13(UTC)
Lenadmin

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

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

Сказал(а) «Спасибо»: 4 раз
Автор: two_oceans Перейти к цитате
Тогда одно из двух: 1) сначала скопировать одним циклом все контейнеры, потом их перенести в папку допустим "ok", не отключая носителя - будут доступны только копии контейнеров из реестра, можно запускать второй цикл установки;

2) если хотите копировать не все, а только конкретные контейнеры, то можете провести дополнительный шаг - считать из name.key в каждом контейнере имя контейнера и где-то запомнить чтобы сто раз не читать. Допустим, скопировали, на флешке имя контейнера "A", в реестре "A_copy" (копия от оригинала отличается "хвостиком"), запустили автоустановку, получили информацию об установленной в хранилище связи "A" или "A_copy", заменили хвостик (получили "A" и знаем что автоустановка соотнесла А с нашим сертификатом), передвинули контейнер с именем "A" на флешке в папку "ok". Если связь установилась с передвинутым контейнером "A", то запускаем автоустановку еще раз (теперь уже на флешке не найдется). Пока не додумал как сделать выделенное жирным в батнике (из API делается поиском установленного сертификата в хранилище и запросом его свойства привязки), но думаю схема рабочая.

Вариация: автосвязать сначала с флешкой, узнать с чем связалось, скопировать в реестр, передвинуть на флешке, автосвязать снова. Вообще конечно наверно лучше в начале делать проверку не установлен ли уже и если установлен, пропускать.


Да, есть в этом неплохие идеи, спасибо.
Хотя вроде бы, задача типичная, и удивило, что нет простой функции проверки соответствия.
Парадокс: мы не знаем, какой копировать контейнер, пока его не установим через автопоиск :)

Да, у пользователя нет прав на владение всеми контейнерами. Потому копировать их все, чтобы автопоиск произвел потом установку, а потом удалять лишние контейнеры - выглядит достаточно неэффективно, искусственно.

Логичнее было бы произвести поиск подходящего контейнера ДО того, как он копирован, и ДО того, как установлен в связке с открытым ключом. Но я пока не знаю такой функции.

В контейнере закрытого ключа есть реквизиты - Имя, уникальное имя, FQCN, срок действия и все? Можно искать по ним, если контейнеры аккуратно названы.
Но это неоднозначно. Придется, видимо, манипулировать контейнерами и извлекать информацию о привязке после автопоиска.

Просто я надеялся, что функция проверки соответствия существует, но если нет - буду искать в других направлениях.
Offline two_oceans  
#14 Оставлено : 14 ноября 2019 г. 13:08:54(UTC)
two_oceans

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

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

Сказал(а) «Спасибо»: 49 раз
Поблагодарили: 168 раз в 158 постах
Автор: Lenadmin Перейти к цитате
Логичнее было бы произвести поиск подходящего контейнера ДО того, как он копирован, и ДО того, как установлен в связке с открытым ключом. Но я пока не знаю такой функции.
Другими словами, сытимитировать автопоиск по открытому ключу или идентификатору ключа субъекта. Простой функции тоже логично что нет - Crypto Api не регламентирует формат и место хранения ключа, даже автопоиск по сертификату не обязателен. Просто криптопровайдер должен знать как его найти по строке связи.
Автор: Lenadmin Перейти к цитате
В контейнере закрытого ключа есть реквизиты - Имя, уникальное имя, FQCN, срок действия и все? Можно искать по ним, если контейнеры аккуратно названы.
В контейнере хранится срок действия контейнера (не совпадающий со сроком сертификата для некоторых УЦ) и имя. Но это необязательно, контейнер не разрушится если удалить имя (файл name.key), срок также можно стереть утилитой. Может присутствовать сертификат в контейнере, а может и нет. Уникальное имя, FQCN зависят в том числе от места расположения контейнера, то есть в самом контейнере не хранятся, хотя (в полной форме) там фигурирует и контрольная сумма от имени/содержимого. То есть искать 100% можно только по открытому ключу, все остальное - частное решение и тупик.

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

thanks 1 пользователь поблагодарил two_oceans за этот пост.
Lenadmin оставлено 16.11.2019(UTC)
Offline Lenadmin  
#15 Оставлено : 16 ноября 2019 г. 19:15:14(UTC)
Lenadmin

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

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

Сказал(а) «Спасибо»: 4 раз
Автор: two_oceans Перейти к цитате



Спасибо за идеи.

Интересно. УЦ, вроде бы, "выдает" открытые ключи после генерации закрытого ключа. На основе некоего запроса сертификата.
Или просто регистрирует у себя открытый ключ, родившийся в паре с закрытым, формирует цепочку сертификатов до доверенного корневого ? )
Т.е. правильно ли я понял, что теоретически, открытый ключ генерируется вместе с закрытым один раз, и является таким же уникальным?
И не вычисляется заново каждый раз далее, а просто сравнивается?

Просто я видел на другом форуме, по-моему, предлагали идею
Цитата:
Проверяется соответствие двух ключей одной паре тоже просто - сначала исходный блок данных шифруется одним ключом, потом расшифровывается вторым. Если расшифрованные данные равны исходному блоку, то ключи могут использоваться как одна пара.


И я уже подумывал спросить как зашифровать и расшифровать средствами командной строки и csptest.
Но если произвести сравнение, разобравшись в ASN.1 - то это теоретически, проще.
Offline two_oceans  
#16 Оставлено : 18 ноября 2019 г. 8:07:18(UTC)
two_oceans

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

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

Сказал(а) «Спасибо»: 49 раз
Поблагодарили: 168 раз в 158 постах
Автор: Lenadmin Перейти к цитате
Интересно. УЦ, вроде бы, "выдает" открытые ключи после генерации закрытого ключа. На основе некоего запроса сертификата.
Или просто регистрирует у себя открытый ключ, родившийся в паре с закрытым, формирует цепочку сертификатов до доверенного корневого ? )
Т.е. правильно ли я понял, что теоретически, открытый ключ генерируется вместе с закрытым один раз, и является таким же уникальным?
И не вычисляется заново каждый раз далее, а просто сравнивается?
Как Вы уже поняли в сертификате содержится открытый ключ. Более того, запрос на сертификат по формату это почти тоже самое что и сертификат (без информации вносимой УЦ, подписи УЦ и подписанный закрытым ключом, соответствующим открытому ключу в запросе - так УЦ "проверяет", что у клиента есть закрытый ключ; иногда добавляются дополнительные подписи агента УЦ). Поэтому открытый ключ содержится в запросе на сертификат (практический пример: можно извлечь его с помощью openssl как из запроса на сертификат, так и из сертификата). Поэтому в общем случае открытый ключ действительно "рождается" вместе с закрытым, а УЦ заверяет принадлежность открытого ключа (ключевой пары) конкретному пользователю.

Насчет уникальности все сложно - теоретически по обобщенному алгоритму открытый ключ не уникален. Однако в нормативах практической реализации, например, в rfc или госте закреплены такие огранения и параметры, что ключ становится уникальным или около того. Вероятность совпадения исчезающе мала.
Автор: Lenadmin Перейти к цитате
Просто я видел на другом форуме, по-моему, предлагали идею
Цитата:
Проверяется соответствие двух ключей одной паре тоже просто - сначала исходный блок данных шифруется одним ключом, потом расшифровывается вторым. Если расшифрованные данные равны исходному блоку, то ключи могут использоваться как одна пара.
И я уже подумывал спросить как зашифровать и расшифровать средствами командной строки и csptest.
Это хрестоматийный пример определения пары ключей. ТОчнее тут проверяются не ключи, а само преобразование одного значения блока в другое значение, поэтому таким способом возможны и ложноположительные срабатывания (ключи другой длины или других алгоритмов могут случайно преобразовать конкретное значение блока правильно), после успеха на одном блоке надо проверить еще несколько значений блока. Особенно это актуально для гост, так как ключ шифрования симметричный, вырабатывается из ассиметричных ключей. То есть теоретически возможна ключевая пара гост-2001 дающая в точности тот же ключ шифрования (с поправкой на другие узлы замены), что и пара гост-2012.
Автор: Lenadmin Перейти к цитате
Но если произвести сравнение, разобравшись в ASN.1 - то это теоретически, проще.
Да, но при таком сравнении мы не вникаем в специфику алгоритма и ключа, можно найти только ключи соответствующие стандарту одного алгоритма, что собственно и требуется при установке сертификатов. В предыдущем сообщении я специально писал об обертке (блобе) открытого ключа, в котором кроме самого значения открытого ключа указаны еще и оиды параметров алгоритма, а не о "голом" значении ключа (64 байта в гост-2001/2012 256), так сравнение не примет за одинаковые ключи, когда ключи разных алгоритмов (например, точка открытого ключа гост та же, но выбрана по другим параметрам).
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.