Протоколы безопасного сетевого взаимодействия

Переговоры об алгоритме


Обмен ключа начинается каждой стороной с посылки следующего пакета:

SSH_MSG_KEXINIT cookie (random bytes) kex_algorithms server_host_key_algoritms encryption_algorithms_client_to_server encryption_algorithms_server_to_client mac_algorithms_client_to_server mac_algorithms_ server _to_client compression_algorithms_client_to_server compression_algorithms_ server _to_client languages_client_to_server languages_ server _to_client first_kex_packet_follows

Таблица 22.2. Параметры переговоров

Cookie Должно быть случайным числом, созданным отправителем. Цель создания этого cookie следующая: сделать так, чтобы ни одна из сторон не могла полностью определить ключи и идентификатор сессии
Kex_algorithms

Алгоритмы обмена ключей, которые были определены выше. Первым алгоритмом должен быть самый предпочтительный. Если обе строны сделают один и тот же выбор, то этот алгоритм и должен использоваться. В противном случае следующий алгоритм должен применяться для выбора метода обмена ключа: повторять по каждому kex алгоритму клиента. Выбрать первый алгоритм, который удовлетворяет следующиим условиям:

  • сервер также поддерживает данный алгоритм;
  • если алгоритм требует шифрования ключом сервера, существует алгоритм шифрования у серверной части server_host_key_algorithms, который также поддерживается клиентом;
  • если алгоритм требует подписи ключом сервера, существует алгоритм подписи у серверной части server_host_key_algoritms, который также поддерживается клиентом;
  • если нет алгоритма, который удовлетворяет всем этим условиям, соединение прерывается.
Server_host_key_algoritms

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

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

Encryption_algorithms

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

"none" должно быть явно указано в списке, если это принимается

Mac_algorithms

Список возможных МАС-алгоритмов в порядке предпочтения. Выбранный алгоритм МАС должен быть первым в списке клиента, а также существовать в списке сервера. Если такого алгоритма нет, стороны должны разорвать соединение.

"none" должно быть явно указано в списке, если это принимаемо.

Compression_algorithms

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

"none" должно быть явно указано в списке, если это принимается

Languages Список тегов языков в порядке предпочтения в соответствии с RFC-1766. Оба участника могут игнорировать этот список. Если нет предпочтений по языку, список должен быть пустым
First_kex_packet_follows Признак того, что следующим пакетом будет обмен ключа. Если пакет с обменом ключа будет послан, значение должно быть true. Если нет, то значение должно быть false.

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

После получения SSH_MSG_KEXINIT пакета от другой стороны, каждый участник будет знать, правильно ли были сделаны предположения. Если каким-либо из участников были сделаны неправильные предположения, а последнее поле было true, то следующий пакет должен молча игнорироваться, и обе стороны должны затем выполнить повторный KEXINIT. Если предположения правильные, обмен ключа должен быть продолжен с использованием выбранного метода.

После обмена пакетом KEXINIT выполняется алгоритм обмена ключа. Он может включать обмен несколькими пакетами, как определено в конкретном методе обмена ключа.



Содержание раздела