Originalmente preguntado en enlace pero se sugirió preguntar aquí en su lugar.
Vi muchas preguntas sobre el cifrado en http, como esto . La mayoría de las respuestas que vi dijeron que no hay forma de verificar la identidad del servidor, por lo que es vulnerable al ataque MitM.
Mi pregunta a continuación será ligeramente diferente, ya que se refiere al entorno móvil, donde asumo que la aplicación se descarga desde AppStore o PlayStore. De esta manera, puedo asumir que el pirata informático verifica y no modifica el código y que la clave pública del servidor incluido en la aplicación tampoco se modifica para que pueda verificar la identidad del servidor.
Dadas estas garantías, ¿es posible realizar el cifrado en la capa de aplicación y hay bibliotecas existentes para hacerlo?
Más específicamente, estoy escribiendo una aplicación que se comunica con el servidor HTTP. El servidor está alojado en algunos planes baratos donde no hay HTTPS disponible. Asumiendo que el servidor maneja las solicitudes HTTP usando PHP o Python, es posible implementar el cliente y el servidor, de modo que hagan un apretón de manos al comienzo de la sesión sobre HTTP, para acordar algunas claves de cifrado; después, todos los mensajes se cifran utilizando las claves. Desde el punto de vista de los piratas informáticos, ven el tráfico HTTP entre el cliente y el servidor y ven algunos campos básicos en los encabezados HTTP, por ejemplo. host y punto final, como texto simple pero todo lo demás se encriptan simplemente como cuerpo HTTP o algún argumento de URL.
¿Es eso posible y hay alguna biblioteca que lo haga fácilmente? Hablando de manera intuitiva, solo está implementando TLS en el nivel de la aplicación, por lo que teóricamente es totalmente posible y tiene la misma seguridad que TLS. ¿Echo de menos agujeros de seguridad aquí?