Escribo una aplicación móvil y necesito autenticar a los usuarios contra el servidor. El lado del servidor está escrito en php. No puedo usar cookies para almacenar SID (ID de sesión), por lo que decidí enviarlas a cada solicitud utilizando el método GET.
Más tarde, decidí que enviar el mismo SID no es lo suficientemente seguro, por lo que decidí usar una nueva cadena en cada solicitud. Server y Mobile client han almacenado la misma cadena aleatoria (llamémosla salt ). Al final de cada solicitud, el servidor envía una cadena aleatoria al cliente móvil y, en la siguiente solicitud, el cliente móvil envía a la versión del servidor el hash de salt + cadena aleatoria . El servidor crea el hash desde salt + cadena aleatoria y lo compara con uno recibido del cliente móvil para autorizarlo.
Ahora mi pregunta es:
-
Si hubiera un ataque de hombre en el medio, ¿qué tan difícil será romper el hash y encontrar la porción de sal de los hashes?
-
¿Cómo podría hacerlo más difícil? (p. ej., no usar la fórmula salt + cadena aleatoria , pero salt_1st_half + cadena aleatoria + salt_2nd_half o hashing varias veces según la longitud del nombre de usuario u otros "trucos")
PS: planeo usar la función crypt de php con el algoritmo blowfish en el servidor
EDIT
Decidí que enviar el mismo SID cada vez no es lo suficientemente seguro
¿Por qué? Debido a que transferiré algunos datos confidenciales del usuario (ubicación real, ..), y cualquier persona que capture SID podría cambiar sipmemente estos datos, o usar el SID actual para fingir que es otra persona y podría obtener otros datos confidenciales de la aplicación (y no lo haría). no se trate de ningún error o error de aplicación, ya que un usuario normal con ese SID tendría acceso a estos datos). Es por eso que decidí cambiar SID después de cada solicitud y agregar algunos cálculos y validación de SID.