Título anterior: Cómo generar claves para cifrar mensajes individuales en una aplicación similar a un chat
Estoy trabajando en una aplicación que efectivamente equivale a una aplicación de chat personalizada. Existe cierta lógica de negocios específica del proyecto que me impide usar una aplicación de chat existente y hace que sea prohibitivo el costo de personalizar una aplicación de chat de código abierto para satisfacer nuestras necesidades.
Para la privacidad y seguridad del usuario, me gustaría que los mensajes estuvieran cifrados de extremo a extremo. Dado que los usuarios se reunirán en persona antes de comenzar a usar la aplicación, tendrán la oportunidad de decidir una contraseña en ese momento. Por este motivo, preferiría no utilizar la criptografía de clave pública, ya que el código más complejo y el requisito para el intercambio seguro de claves significa que sería más probable que cometiera errores críticos en la implementación.
Mi preocupación es que a un atacante le sería mucho más fácil deducir el contenido de los mensajes futuros si cada mensaje se cifrara con la misma clave y un mensaje se descifrara. Debido a esto, pensé que podría ser inteligente cifrar cada mensaje con una clave separada derivada de la contraseña acordada en persona.
Sin embargo, suponiendo que el atacante podría averiguar el funcionamiento interno de la aplicación, incluida la parte que deriva la clave por mensaje de la contraseña, ¿cómo podría evitar que el atacante pueda deducir el error? ¿Clave para los mensajes subsiguientes si un mensaje ha sido comprometido?
Por favor, dígame si esta es una pregunta tonta y hay una manera más fácil de resolver el problema.
Editar : Después de un poco más de investigación, resulta que lo que estoy buscando es una forma de implementar adelante secreto en una aplicación que usa clave secreta o criptografía simétrica.