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

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

Среда такая:

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

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

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

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

Спасибо.

1 Ответ

0 голосов
/ 01 мая 2011

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

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

...