Estoy creando una aplicación en la que los usuarios envían archivos con una contraseña para cifrarlos a un servidor a través de ssl. Luego pueden compartir los archivos cifrados con las personas
Luego construiré una aplicación de escritorio en C ++ donde un usuario puede seleccionar el archivo y descifrarlo localmente en su escritorio con una contraseña
Opción 1: PGP Lo primero que pensé fue usar pgp, ahora si almacenaba de forma segura un par de llaves privadas y públicas en el servidor, todos los archivos de los usuarios se podrían cifrar con la contraseña de los usuarios con la contraseña. Pero mi aplicación de escritorio no podrá descifrar el archivo con solo una contraseña. Tendría que incluir la clave privada en mi aplicación de escritorio.
Pregunta 1: si mi aplicación de escritorio está compilada, un atacante podría descompilar la aplicación y apoderarse de la clave privada. ¿Existe alguna manera de almacenar datos de forma segura en un programa compilado para evitar dicha violación?
Opción2: AES Otro método que pensé fue que utilizaba un algoritmo de hash para codificar la contraseña de los usuarios y luego utilizaba ese hash como clave para cifrar el archivo utilizando el cifrado AES. Luego, en mi aplicación de escritorio, uso el mismo algoritmo de hash para recrear la clave cuando el destinatario del archivo ingresa la contraseña para descifrar el archivo
Pregunta 2: el mismo problema, si un asistente descompila mi programa y ve qué algoritmo de hashing estoy usando de nuevo al cuadrado, ahora solo pueden generar hashes y fuerza bruta para abrir el archivo
Pregunta 3: ¿Alguien sabe de una mejor manera de implementar esto?