| ||||
| ||||
Предположим, я хочу проверить подпись. Для этого у меня есть хэш, есть открытый ключ отправителя, есть сама подпись. Для проверки мне надо открыть handle провайдера с некоторых конетейнером ключей, после чего туда импортировать открытый ключ. Вопрос: где хранится этот импортированный ключ? Варианты: 1. на том же носителе, к которому приписан этот контейнер; 2. в памяти, привязанной к процессу (треду), но общей для всех handle'ов, открытых для этого контейнера; 3. в памяти, привязанной к handle'у провайдера; 4. где-то ещё. Если верен вариант 3, то правильно я понимаю, что можно открывать любой контейнер, например, дефолтный, и импортировать туда, причем никаких конфликтов не будет (если, например, открыть еще раз тот же контейнер и импортировать другой ключ первый останется?) | ||||
Ответы: | ||||
| ||||
При проверке подписи не требуется закрытый ключ из контейнера. Поэтому, открытый ключ загружается в любой открытый контекст подходящего (по алгоритмам) провайдера. Как правило, для проверки подписи используется контекст, полученный при вызове CryptAcquireContext с флажком CRYPT_VERIFYCONTEXT, т.е. без доступа к какому-либо контейнеру с закрытыми ключами. Разумеется, хендл ключа доступен приложению, открывшему его, пока хендл не освободят (CryptDestroyKey) или не закроют контекст провайдера (CryptReleaseContext), куда он был загружен. | ||||