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


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

Примечание

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

 

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

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

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

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

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

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

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