7.1. Algorithm Negotiation (Négociation d'algorithme)
7.1. Algorithm Negotiation (Négociation d'algorithme)
L'échange de clés commence par chaque côté envoyant le paquet suivant:
byte SSH_MSG_KEXINIT
byte[16] cookie (octets aléatoires)
name-list kex_algorithms
name-list server_host_key_algorithms
name-list encryption_algorithms_client_to_server
name-list encryption_algorithms_server_to_client
name-list mac_algorithms_client_to_server
name-list mac_algorithms_server_to_client
name-list compression_algorithms_client_to_server
name-list compression_algorithms_server_to_client
name-list languages_client_to_server
name-list languages_server_to_client
boolean first_kex_packet_follows
uint32 0 (réservé pour extension future)
Chacune des listes de noms d'algorithmes DOIT être une liste séparée par des virgules de noms d'algorithmes. Chaque algorithme pris en charge (autorisé) DOIT être listé par ordre de préférence, du plus au moins préféré.
Le premier algorithme dans chaque liste de noms DOIT être l'algorithme préféré (deviné). Chaque liste de noms DOIT contenir au moins un nom d'algorithme.
Sélection d'algorithme: Itérer sur les algorithmes du client, un à la fois. Choisir le premier algorithme qui satisfait les exigences et est également pris en charge par le serveur. Si aucun algorithme satisfaisant toutes les conditions ne peut être trouvé, la connexion échoue, et les deux parties DOIVENT se déconnecter.
Une fois qu'une partie a envoyé un message SSH_MSG_KEXINIT pour l'échange de clés, jusqu'à ce qu'elle ait envoyé un message SSH_MSG_NEWKEYS (Section 7.3), elle NE DOIT PAS envoyer de messages autres que:
- Messages génériques de la couche transport (1 à 19) (mais SSH_MSG_SERVICE_REQUEST et SSH_MSG_SERVICE_ACCEPT NE DOIVENT PAS être envoyés)
- Messages de négociation d'algorithme (20 à 29) (mais d'autres messages SSH_MSG_KEXINIT NE DOIVENT PAS être envoyés)
- Messages de méthode d'échange de clés spécifiques (30 à 49)