Passa al contenuto principale

7. Handshake crittografico e di trasporto

7. Handshake crittografico e di trasporto

QUIC si basa su un handshake crittografico e di trasporto combinato per ridurre al minimo la latenza di instaurazione della connessione. QUIC utilizza il frame CRYPTO (Sezione 19.6) per trasmettere l'handshake crittografico. La versione 1 di QUIC utilizza TLS 1.3 come descritto in [QUIC-TLS]; una versione diversa di QUIC potrebbe utilizzare un protocollo di handshake crittografico diverso.

QUIC fornisce una consegna affidabile e ordinata dei dati di handshake crittografico. La protezione dei pacchetti QUIC viene utilizzata per cifrare quanto più possibile del protocollo di handshake. L'handshake crittografico DEVE fornire le seguenti proprietà:

  • scambio di chiavi autenticato, dove

    • un server è sempre autenticato,
    • un client è facoltativamente autenticato,
    • ogni connessione produce chiavi distinte e non correlate,
    • il materiale di chiave è utilizzabile per la protezione dei pacchetti sia per i pacchetti 0-RTT che 1-RTT, e
    • le chiavi 1-RTT hanno segretezza in avanti
  • scambio autenticato di valori per i parametri di trasporto di entrambi gli endpoint, e protezione della riservatezza per i parametri di trasporto del server (vedere Sezione 7.4)

  • negoziazione autenticata di un protocollo applicativo (TLS utilizza ALPN [ALPN] per questo scopo)

Il frame CRYPTO può essere inviato in diversi spazi di numeri di pacchetto (Sezione 12.3). Gli offset utilizzati dai frame CRYPTO per garantire la consegna ordinata dei dati di handshake crittografico partono da zero in ciascuno spazio di numeri di pacchetto.

[QUIC-TLS] descrive come TLS 1.3 viene utilizzato con QUIC.

7.1 Esempi di flussi di handshake

I dettagli di come TLS è integrato con QUIC sono forniti in [QUIC-TLS], ma alcuni esempi di come viene utilizzato l'handshake sono forniti qui.

7.2 Negoziazione degli ID di connessione

Un ID di connessione viene utilizzato per garantire un instradamento coerente dei pacchetti. L'intestazione lunga contiene due ID di connessione: l'ID di connessione di destinazione è scelto dal destinatario del pacchetto e viene utilizzato per fornire un instradamento coerente; l'ID di connessione sorgente viene utilizzato per impostare l'ID di connessione di destinazione utilizzato dal peer.

7.3 Autenticazione degli ID di connessione

La scelta che ogni endpoint fa riguardo agli ID di connessione durante l'handshake è autenticata includendo tutti i valori inviati nei parametri di trasporto; vedere Sezione 7.4.

7.4 Parametri di trasporto

Durante l'instaurazione della connessione, entrambi gli endpoint fanno dichiarazioni autenticate dei loro parametri di trasporto. Gli endpoint DEVONO conformarsi alle restrizioni implicite in questi parametri; la descrizione di ciascun parametro include regole per la sua gestione.

7.5 Buffering dei messaggi crittografici

Le implementazioni devono mantenere un buffer di dati CRYPTO ricevuti fuori ordine.