Ci sono due client e un server. Ogni client genera una coppia di chiavi RSA e carica la chiave pubblica sul server. Il server associa la chiave pubblica all'identificatore utente specificato durante il caricamento.
Quindi il client A deve condividere i dati con il client B. Richiede al server la chiave pubblica del client B. L'impronta digitale della chiave pubblica viene presentata all'utente per la verifica visiva. È responsabilità dell'utente A decidere se si fida della chiave pubblica dell'utente B e viceversa.
Dopo che entrambi gli utenti si fidano delle chiavi pubbliche, possono crittografare i dati l'uno per l'altro. Il client A crittografa i dati con la chiave pubblica del client B, li carica sul server. Il client B scarica i dati e li decodifica.
I client comunicano con il server utilizzando TLS implementato dal sistema operativo. Il server autentica i client utilizzando OAuth2 con token MAC.
Anche se la domanda più importante è, ovviamente, se questo sistema da questa prospettiva ha già alcuni problemi di sicurezza, la domanda di questo post riguarda i certificati.
In una situazione del genere, quando l'obiettivo più alto è quello di fornire la crittografia end-to-end, e una delle decisioni è far sì che gli utenti verifichino le rispettive chiavi pubbliche, c'è qualche vantaggio di avere certificati autofirmati in Oltre alle sole chiavi pubbliche?
Si dice, ad esempio, che il certificato autofirmato garantisce che qualcuno che lo ha generato abbia anche la chiave privata corrispondente. Quando non sono coinvolti certificati, esiste un rischio per la sicurezza del client A che crittografa qualcosa con ciò che pensa sia una chiave pubblica del client B, ma in realtà non è una chiave pubblica?