El equipo de desarrolladores del que formo parte está intentando desarrollar una forma segura de intercambiar datos confidenciales entre un servidor y dispositivos móviles.
Hemos creado el siguiente algoritmo:
-
El dispositivo genera una clave RSA privada y envía la clave pública al servidor.
-
El servidor genera una clave AES única para el usuario y utiliza la clave pública RSA para cifrarla y enviarla de vuelta al dispositivo.
-
El dispositivo obtiene la clave AES. Lo utiliza para cifrar la contraseña y el nombre de usuario y lo envía al servidor.
-
El servidor descifra el nombre de usuario y la contraseña. Si hay una coincidencia, la clave AES se usa para una comunicación segura por X cantidad de tiempo o hasta el cierre de sesión. De lo contrario, el proceso debe reiniciarse.
¿Es lo suficientemente seguro? ¿Hay formas de mejorarlo? ¿Cuáles son las fallas?
Editar: Después de leer los comentarios, ¿cuál es una alternativa más segura y por qué?
Edit2: Ok, lo entiendo. No usaré mi propia implementación, encontraré algo ya probado y comprobado.