Attualmente scrivo un'applicazione client che comunica con un server PHP.
L'applicazione stessa richiede credenziali utente valide e ottiene tutte le sue informazioni facendo richieste POST al server PHP. Il primo scenario è sicuro o dovrei usare SSL / TLS invece?
Primo scenario (già implementato):
- L'applicazione client ha una chiave pubblica RSA hardcoded
- L'applicazione genera una chiave AES casuale e una IV ad ogni avvio. (Non usa mai la stessa chiave e IV per crittografare il nome utente e la password)
- L'applicazione client crittografa la chiave AES e IV con la chiave pubblica RSA in una stringa
- Il server PHP decrittografa la stringa e memorizza la chiave AES e IV
- L'applicazione client crittografa il nome utente e la password durante il tentativo di accesso
- Il server PHP riceve i dati crittografati, decodifica i dati e utilizza password_verify per vedere se le credenziali di accesso corrispondono a quelle memorizzate
- Dopo aver effettuato il login con successo, l'applicazione client necessita di alcuni dati utente e richiede un nonce dal server PHP utilizzando il nome utente e la password crittografati
- Il server PHP crittografa il nonce e lo invia all'applicazione client
- L'applicazione client decodifica il nonce e lo invia con la richiesta POST
- Il server PHP dà un'occhiata al database e vede che il nonce è valido
- Il server PHP invia i dati crittografati AES richiesti dall'utente
- L'applicazione client decodifica ora i dati
Secondo scenario:
- Implementazione dell'autenticazione ssl reciproca