Per favore perdonami se la mia domanda è una riformulazione di un problema comune, ma non sono sicuro di cosa cercare!
Il mio caso d'uso è un programma client-server. Il server viene eseguito sul PC dell'utente e il client viene eseguito sui dispositivi mobili. I client devono essere abbinati al server in modo sicuro (ad es. Inserire un PIN o una password una tantum) e una volta completato l'accoppiamento, è necessario assicurarsi che il client possa verificare in sicurezza il server, prima di trasmettere i dati riservati da di volta in volta.
In precedenza nella mia ricerca ho pensato che sarebbe stato possibile utilizzare le chiavi RSA, ma questo approccio sembrava troppo nuovo e complesso da implementare in modo sicuro.
La mia idea attuale è di implementare uno schema come questo:
- All'accoppiamento iniziale, scambio di chiavi Diffie-Hellman tra client e server
- Server visualizza un PIN casuale e il client lo inserisce per la verifica (impedendo il mitm). Sono consentiti solo un paio di tentativi PIN errati prima che il tentativo di abbinamento venga interrotto.
- Poiché il server e il client ora concordano su una chiave segreta, possiamo semplicemente crittografare tutte le comunicazioni con questa chiave. Sebbene il server possa avere più client noti (ad esempio fino a dieci client), il server potrebbe semplicemente controllare qualsiasi connessione in entrata con tutte e dieci queste chiavi. E poiché il client utilizza la stessa chiave segreta, se il server è un impostore, la decrittografia non sarà possibile.
Ora la mia domanda è uno schema ragionevole o esiste un protocollo standard chiaro che può raggiungere obiettivi simili?