È possibile creare HTTPS 0-RTT con l'aiuto del DNS?

3

Questo articolo fornisce un'implementazione di SNI crittografato in cui una chiave pubblica viene recuperata dal DNS. Sembra un imbroglio, ma immagina questo: se il server pubblica il suo certificato sul suo record DNS, il client non dovrebbe essere in grado di inviare dati crittografati (dal momento che ha recuperato il protocollo del server, la chiave pubblica, ecc. Dal record DNS) proprio nel primo pacchetto, senza strette di mano TLS, e quindi rendendo HTTPS 0-RTT (invece di 1-RTT con TLS 1.3) anche per le nuove connessioni? In una parola, il DNS ora contiene informazioni più ricche di un semplice nome di dominio per la mappatura degli indirizzi IP, per aiutare con l'handshake TLS.

Qualche problema di sicurezza con questo scenario?

    
posta Cyker 29.10.2018 - 14:02
fonte

1 risposta

4

In teoria sarebbe possibile fare un handshake 0-RTT se il certificato è conosciuto in anticipo (come via DNS) e lo scambio di chiavi RSA è fatto. Nello scambio di chiavi RSA il client crea il segreto premaster completo (da cui deriva la chiave di crittografia, ecc.) E lo invia crittografato con la chiave pubblica del server (dal certificato RSA) al server. Se semplifichi un po 'di RSA Kx per non includere un server nel calcolo (vedi commento da dave_thompson_085 di seguito) la chiave di crittografia può essere completamente determinata dal client che potrebbe immediatamente iniziare a inviare dati crittografati.

Tuttavia, lo scambio di chiavi RSA è deprecato e non è più disponibile con TLS 1.3. Il problema con RSA Kx è che un utente malintenzionato potrebbe annusare passivamente tutto il traffico e se in seguito accederà alla chiave privata dei certificati potrà decifrare tutto il traffico precedentemente rilevato. Lo scambio di chiavi Diffie-Hellman fornisce invece la segretezza di inoltro, vale a dire anche se la chiave privata del certificato dei server viene compromessa, il traffico precedentemente sniffato non può essere decodificato.

Tuttavia, Diffie-Hellman Kx non può essere eseguito con 0-RTT poiché ha bisogno dell'input sia del client che del server per calcolare il segreto premaster condiviso: (

    
risposta data 29.10.2018 - 14:22
fonte

Leggi altre domande sui tag