CryptImportKey в CryptoAPI принимает hPubKey со значением 0 для импорта зашифрованного сеансового ключа

Может ли кто-нибудь объяснить, почему функция CryptImportKey принимает hPubKey со значением 0 (дескриптор ключа дешифрования) при импорте зашифрованного ключевого блоба сеансового типа с другого компьютера?

Среда такая:

ПК №1: генерирует пару ключей обмена ключами (общедоступный / частный) в локальном контейнере ключей (CryptGenKey с AT_KEYEXCHANGE), затем экспортирует общедоступную часть как PUBLICKEYBLOB и отправляет ее на ПК №2.

ПК №2: берет открытый ключевой объект с ПК №1 и импортирует его в локальный контейнер ключей. Создает сеансовый ключ в том же локальном контейнере ключей. Экспортирует локальный ключ сеанса контейнера ключей в SIMPLEBLOB (CryptExportKey), используя открытый ключ, который был импортирован из ключевого большого двоичного объекта клиента (используется для шифрования сеансового ключа).

ПК №1: берет зашифрованный ключевой объект сеанса с ПК №2 и вызывает CryptImportKey, предоставляя контейнер локального ключа hProv, указатель и длину буфера ключевого двоичного объекта, 0 (ноль) для hPubKey и флагов и указатель на HCRYPTKEY. ручка.

После выполнения вышеизложенного я получаю обратно действительный дескриптор и могу вызывать CryptEncrypt и CryptDecrypt, используя полученный дескриптор. Да, если я укажу в CryptImportKey дескриптор пары ключей обмена ключами, сгенерированной на первом шаге выше на ПК № 1, это тоже будет работать. Я просто не понимаю, почему работает 0 для hPubKey, это как если бы CryptoAPI «знает», какой закрытый ключ был для шифрования данных.

Спасибо.


person user654830    schedule 11.03.2011    source источник


Ответы (1)


Единственное, о чем я могу думать, это то, что вы используете это в рамках сеанса (который имеет контекст, поэтому знает закрытый ключ) или что вы на самом деле не шифруете данные. Обратите внимание, что на самом деле можно найти закрытый ключ, используя модуль в качестве уникального ключа, но я не мог понять, что они будут использовать такой метод, не сообщая пользователю.

PS извините, я не могу комментировать ваш вопрос напрямую (пока), поэтому я разместил это из-за длительного периода времени.

person Maarten Bodewes    schedule 01.05.2011