7.1. Algorithm Negotiation (Algorithmusaushandlung)
7.1. Algorithm Negotiation (Algorithmusaushandlung)
Der Schlüsselaustausch beginnt damit, dass jede Seite das folgende Paket sendet:
byte SSH_MSG_KEXINIT
byte[16] cookie (zufällige Bytes)
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 (für zukünftige Erweiterung reserviert)
Jede der Algorithmusnamen-Listen MUSS eine kommagetrennte Liste von Algorithmusnamen sein. Jeder unterstützte (erlaubte) Algorithmus MUSS in Reihenfolge der Präferenz aufgelistet werden, vom bevorzugtesten bis zum am wenigsten bevorzugten.
Der erste Algorithmus in jeder Namen-Liste MUSS der bevorzugte (vermutete) Algorithmus sein. Jede Namen-Liste MUSS mindestens einen Algorithmusnamen enthalten.
Algorithmusauswahl: Iteriere über die Algorithmen des Clients, einen nach dem anderen. Wähle den ersten Algorithmus, der die Anforderungen erfüllt und auch vom Server unterstützt wird. Wenn kein Algorithmus gefunden werden kann, der alle Bedingungen erfüllt, schlägt die Verbindung fehl, und beide Seiten MÜSSEN sich trennen.
Sobald eine Partei eine SSH_MSG_KEXINIT-Nachricht für den Schlüsselaustausch gesendet hat, DARF sie bis zum Senden einer SSH_MSG_NEWKEYS-Nachricht (Abschnitt 7.3) keine anderen Nachrichten senden als:
- Generische Transportschicht-Nachrichten (1 bis 19) (aber SSH_MSG_SERVICE_REQUEST und SSH_MSG_SERVICE_ACCEPT DÜRFEN NICHT gesendet werden)
- Algorithmusaushandlungs-Nachrichten (20 bis 29) (aber weitere SSH_MSG_KEXINIT-Nachrichten DÜRFEN NICHT gesendet werden)
- Spezifische Schlüsselaustausch-Methoden-Nachrichten (30 bis 49)