Estoy desarrollando un programa bastante estándar que permite a los usuarios guardar su trabajo en un formato de archivo personalizado y volver a abrirlo más tarde. Ahora me gustaría agregar la capacidad de cifrar el archivo con una contraseña definida por el usuario y me pregunto qué pasos tomar y qué tecnologías usar.
Por lo que he leído sobre el tema, creo que necesito alguna forma de obtener una clave de cifrado a partir de la contraseña, así como algún algoritmo de cifrado simétrico que se usará para cifrar el contenido del archivo relevante. Es necesario que haya datos no cifrados en el archivo por necesidad (número mágico / versión, parámetros de cifrado / sales / IV), así como alguna forma de verificar que esos parámetros no cifrados no se hayan manipulado. Finalmente, al descifrar el archivo necesitamos alguna forma de verificar que la contraseña ingresada sea correcta, sin introducir un posible vector de ataque.
Entonces, ¿qué pasos debo tomar para lograr esto?
¿Qué tecnologías debo usar?
¿Cuál debería ser el diseño general del formato de archivo?
El resultado debe ser lo suficientemente seguro para los estándares de hoy en día para una audiencia objetivo de usuarios privados y pequeñas empresas.