Основные вопросы по Microsoft CryptoAPI - PullRequest
2 голосов
/ 22 сентября 2009

Я просматривал 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 открытый ключ какой-либо существующей пары открытый / закрытый ключ? Я полагаю, что нет.

1 Ответ

4 голосов
/ 23 сентября 2009

Это было много вопросов. Позвольте мне попытаться ответить на них:

CSP хранит пары открытых закрытых ключей между сессиями. Означает ли это, что они хранятся неопределенно долго?

Да, до тех пор, пока они не будут явно удалены при вызове CryptAcquireContext с флагом CRYPT_DELETEKEYSET.

Какого значения эти контейнеры и какие пары ключей они содержат?

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

Есть ли способ получить дескриптор одной из пар ключей?

CryptAcquireContext, за которым следует CryptGetUserKey.

Мне кажется, что это ключевой контейнер может содержать: 1 пару ключей подписи, 1 пару ключей обмена ключами, любое количество ключей PUBLIC либо подписи, либо типа key_exchange, любое количество ключей сеанса. Это правильно?

Да и нет. Импортированные открытые ключи и ключи сеанса логически не находятся ни в каком конкретном контейнере ключей.

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

Да.

Каков обычный метод создание / присвоение имен контейнерам ключей? Как кто-то не топает контейнер других приложений?

В большинстве приложений используется GUID.

это означает, что cryptsignkey будет найти закрытый ключ, созданный cryptkeygen с соответствующим Параметр Alg_id (значения CALG_RSA_KEYX или CALG_RSA_SIGN).

Да.

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

Это зависит от выбранного типа блоба, но большинство блобов начинаются с BLOBHEADER , который содержит тип ключа.

, если я экспортирую PUBLICKEYBLOB и перевезти его в другой среда. Должен ли я импортировать это капля в новой среде, прежде чем я можно использовать для проверки подписи?

Да.

Есть ли импорт PUBLICKEYBLOB заменить открытый ключ какой-либо существующей пары открытый / закрытый ключ?

номер

...