Passa al contenuto principale

7.1. Algorithm Negotiation (Negoziazione dell'algoritmo)

7.1. Algorithm Negotiation (Negoziazione dell'algoritmo)

Lo scambio di chiavi inizia con ciascuna parte che invia il seguente pacchetto:

byte         SSH_MSG_KEXINIT
byte[16] cookie (byte casuali)
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 (riservato per estensione futura)

Ciascuna delle liste di nomi di algoritmi DEVE essere un elenco separato da virgole di nomi di algoritmi. Ciascun algoritmo supportato (consentito) DEVE essere elencato in ordine di preferenza, dal più al meno preferito.

Il primo algoritmo in ciascuna lista di nomi DEVE essere l'algoritmo preferito (ipotizzato). Ciascuna lista di nomi DEVE contenere almeno un nome di algoritmo.

Selezione dell'algoritmo: Iterare sugli algoritmi del client, uno alla volta. Scegliere il primo algoritmo che soddisfa i requisiti ed è anche supportato dal server. Se non può essere trovato nessun algoritmo che soddisfi tutte le condizioni, la connessione fallisce, e entrambe le parti DEVONO disconnettersi.

Una volta che una parte ha inviato un messaggio SSH_MSG_KEXINIT per lo scambio di chiavi, fino a quando non ha inviato un messaggio SSH_MSG_NEWKEYS (Sezione 7.3), NON DEVE inviare nessun messaggio diverso da:

  • Messaggi generici del livello di trasporto (da 1 a 19) (ma SSH_MSG_SERVICE_REQUEST e SSH_MSG_SERVICE_ACCEPT NON DEVONO essere inviati)
  • Messaggi di negoziazione dell'algoritmo (da 20 a 29) (ma ulteriori messaggi SSH_MSG_KEXINIT NON DEVONO essere inviati)
  • Messaggi specifici del metodo di scambio chiavi (da 30 a 49)