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