Penso che la chiave sia capire la differenza tra accettabilità e preferenze. Ogni lato ha una serie di cipheresi accettate e un ordine di preferenza tra quelle cifrarie. Le ciphersuites non accettate non sono considerate per le preferenze.
A causa della progettazione del protocollo TLS, il client invia il suo insieme di cifrarie accettate al server. Invia questo set come una lista ordinata e l'ordine indica le preferenze del cliente. Il server non mostra mai al client cosa accetta o quali sono le sue preferenze. Effettua una selezione e dice al cliente che cos'è questa selezione. Ecco perché il server ha l'autorizzazione finale per selezionare la ciphersuite. Il server non ha tuttavia un'autorizzazione completa: non può far sì che il client usi una ciphersuite che il client non desidera.
Dal punto di vista del cliente, il server non ha un set accettabile, o preferenze. Tutto il cliente sa che il server ha scelto una particolare ciphersuite tra quelle offerte dal client.
Il server deve selezionare una ciphersuite che sia accettabile sia per il client che per il server. Se c'è qualche ciphersuite che il client accetta ma il server no, il server non lo prenderà affatto in considerazione. Allo stesso modo, se c'è qualche ciphersuite che il server accetta ma non il client, il server non può selezionarlo (ciò violerebbe il protocollo e il client interromperà la connessione).
Qualsiasi ciphersuite che sia nella lista delle preferenze del cliente sia nell'elenco delle preferenze del server è costruttiva accettabile per entrambe le parti. Tra i ciphersuites reciprocamente accettabili, il server ha l'autorità di decidere quale scegliere.
Potrebbe sceglierne uno a caso, o in base alla fase della luna, o potrebbe prendere un hash della concatenazione delle due liste modulo la dimensione del set accettabile reciprocamente e usarlo come indice nel mutuo- elenco accettabile ordinato in ordine alfabetico inverso della trasformazione rot13 dei nomi ciphersuite ufficiali. Oppure può fare la sua scelta in modo più sano, e OpenSSL offre i due modi che hanno un senso: tra i set accettabili, scegli quello che il server preferisce di più, o quello che il cliente preferisce di più.