Я просматривал MSDN, пытаясь понять crytoapi. Ниже приведены некоторые вопросы и предположения о том, как все может работать. Любые ответы или подтверждения или опровержения моих предположений очень ценятся.
Согласно примечанию, которое я нашел в http://msdn.microsoft.com/en-us/library/ms867086.aspx,, CSP хранит пары открытых закрытых ключей между сеансами.
* Does that mean they are kept indefinitely? If so, whatever signature or exchange key pairs are extant when the CSP is closed remain.
* Of what value are these containers and any key pairs they contain? I guess they could be used to sign things without obtaining a handle to a key pair.
* Is there any way to get a handle to one of the key pairs?
Мне кажется, что ключевой контейнер может содержать:
* 1 signature key pair
* 1 key exchange key pair
* any number of PUBLIC keys of either signature or key_exchange type
* any number of session keys
Это правильно? Уничтожены непарные ключи при закрытии контейнера?
Каков обычный метод создания / именования контейнеров ключей? Как удержаться от нажатия на контейнер других приложений? Мне нужен контейнер с открытыми / закрытыми ключами, поэтому временный контейнер, упомянутый в разделе примечаний cryptacquirecontext, не применим.
Возможно используйте имя создания, состоящее из некоторой фиксированной части плюс порядковый номер. Может удалить контейнер, когда закончите.
cryptsignhash указывает, что для подписи хэша должен использоваться либо закрытый ключ подписи, либо обмен ключами. Я предполагаю, что это означает, что cryptsignkey найдет закрытый ключ, созданный cryptkeygen с соответствующим параметром Alg_id (значения CALG_RSA_KEYX или CALG_RSA_SIGN).
Если я экспортирую ключ, содержит ли блок ключей информацию о том, какой это ключ?
если я экспортирую PUBLICKEYBLOB и перенесу его в другую среду. Нужно ли импортировать этот BLOB-объект в новую среду, прежде чем я смогу использовать его для проверки подписи? cryptverifysignature нуждается в дескрипторе ключа, поэтому он должен быть импортирован первым. Заменяет ли импорт PUBLICKEYBLOB открытый ключ какой-либо существующей пары открытый / закрытый ключ? Я полагаю, что нет.