Supponiamo di avere un'app di messaggistica mobile. C'è un server centrale che gestisce roba (come una directory di utenti, onboarding, ecc.) E ci sono tutti i client.
La mia app è professionale, quindi utilizza la crittografia asimmetrica per inviare messaggi in modo sicuro.
La mia domanda è, in breve, se il client o il server generano la coppia di chiavi pubblica-privata?
Se il client genera la coppia, la coppia può essere generata sul lato client e quindi inviata al server (probabilmente crittografata con la chiave pubblica del server).
Se il server genera la coppia, ho avuto un'idea più complicata:
- Il client genera segreti (
S
) - Il client crittografa il segreto con la chiave pubblica del server
- Il client invia segreto crittografato al server
- Il server decrittografa il segreto crittografato con la chiave privata del server
- Il server genera una coppia di chiavi pubblica-privata per il client
- Server crittografa la chiave privata con segreto (
S
) e la rimuove dalla memoria - Il server invia la chiave privata crittografata al server
- Il client decrittografa la chiave privata crittografata con segreto (
S
), che aveva dall'inizio - Evviva! Il cliente ora ha una chiave privata e la chiave pubblica è sul server !!! :)
Quindi, quale approccio è meglio - se il client o il server generano la coppia di chiavi pubblica-privata da un punto di vista della sicurezza? C'è un modo migliore / più efficiente / più sicuro per farlo rispetto alle mie soluzioni?