Sto progettando un'applicazione web in cui gli utenti scambieranno brevi messaggi con il server molto frequentemente (ad esempio, alcuni caratteri al secondo). Voglio che l'intera comunicazione sia riservata, ma le prestazioni (percepite) devono essere accettabili. Ho avuto questa idea di mettere HTTP e HTTPS per lavorare insieme usando il seguente schema:
Il browser richiederà due chiavi (piuttosto grandi) dal server tramite HTTPS, quindi le memorizzerà in memoria (in linea di principio, sto pensando a tasti a tempo, cioè dati casuali). Quindi, i contenuti di ciascun messaggio saranno XORed con la prima chiave (senza alcun riutilizzo, ovviamente) e inviati via HTTP. Il server invierà la risposta nello stesso modo, usando l'altra chiave. Quando uno o entrambi i tasti stanno per essere esauriti, ne verrà richiesto un altro e così via.
La logica alla base di questo è che sia la richiesta XOR sia quella HTTP sono economiche per i piccoli messaggi, quindi le prestazioni percepite saranno buone. Le chiamate HTTPS, più costose, non saranno cruciali nel tempo e trarranno vantaggio dalla più ampia scala delle chiavi scambiate. È possibile utilizzare un altro codice di flusso al posto di one-time-pads e in futuro (se correttamente supportato ovunque) si potrebbero utilizzare WebSockets invece di richieste HTTP.
Questo tipo di cose è già stato usato prima? Questo potrebbe proteggere adeguatamente la comunicazione, o è un'idea stupida, per qualsiasi motivo? Non sono riuscito a vedere nessuna discrepanza, ma mi piacerebbe sentire l'opinione di persone più esperte prima di passare troppo tempo a questo.