Поделиться через


Обмен ключами сеансов вручную

Заметка

В процедуре, описанной в этом разделе, предполагается, что пользователи (или клиенты CryptoAPI) уже имеют собственный набор пар открытых и закрытых ключей и также получили открытых ключей друг друга.

 

На следующем рисунке показано, как использовать эту процедуру для отправки зашифрованного сообщения.

отправки зашифрованного сообщения

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

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

Ниже приведены шаги по отправке зашифрованного ключа сеанса.

Отправка зашифрованного ключа сеанса

  1. Создайте случайный ключ сеанса с помощью функции CryptGenKey.
  2. Зашифруйте сообщение с помощью ключа сеанса. Эта процедура рассматривается в шифровании и расшифровке данных.
  3. Экспортируйте ключ сеанса в ключ BLOB с помощью функции CryptExportKey, указывая, что ключ шифруется с помощью открытого ключа конечного пользователя.
  4. Отправьте зашифрованное сообщение и зашифрованное blOB-объект ключа конечному пользователю.
  5. Конечный пользователь импортирует ключ BLOB-объекта в свою или ее CSP с помощью функции CryptImportKey. Это автоматически расшифровывает ключ сеанса, если открытый ключ целевого пользователя был указан на шаге 3.
  6. Затем конечный пользователь может расшифровать сообщение с помощью ключа сеанса, следуя процедуре, описанной в шифровании данных и расшифровке.