Actualmente escribo una aplicación cliente que se comunica con un servidor PHP.
La aplicación en sí misma requiere credenciales de usuario válidas y obtiene toda su información haciendo solicitudes POST al servidor PHP. ¿Es seguro el primer escenario o debo usar SSL / TLS en su lugar?
1er escenario (ya implementado):
- La aplicación cliente tiene una clave pública RSA codificada
- La aplicación genera una clave AES aleatoria y IV en cada inicio. (Nunca use la misma clave y IV para cifrar el nombre de usuario y la contraseña)
- La aplicación del cliente cifra la clave AES y la IV con una clave pública RSA en una cadena
- El servidor PHP descifra la cadena y almacena la clave AES y IV
- La aplicación del cliente cifra el nombre de usuario y la contraseña cuando se intenta iniciar sesión
- El servidor PHP recibe los datos cifrados, descifra los datos y usa password_verify para ver si las credenciales de inicio de sesión coinciden con las almacenadas
- Después de iniciar sesión correctamente, la aplicación cliente necesita algunos datos de usuario y solicita un nonce del servidor PHP usando el nombre de usuario y la contraseña cifrados
- El servidor PHP cifra el nonce y lo envía a la aplicación cliente
- La aplicación cliente descifra el nonce y lo envía con la solicitud POST
- El servidor PHP echa un vistazo a la base de datos y ve que el nonce es válido
- El servidor PHP envía los datos cifrados AES que el usuario solicitó
- La aplicación cliente ahora descifra los datos
2do escenario:
- Implementando autenticación ssl mutua