Estoy intentando escribir una función para cifrar y descifrar datos usando NodeJs siguiendo las mejores prácticas actuales.
Para lograr esto, estoy haciendo lo siguiente:
- Tomar una contraseña de usuario final y hacer cumplir los requisitos de seguridad de la contraseña
- Generando 128 bytes aleatorios para una sal
- Hashing la contraseña de usuario con pbkdf2 y la sal
- Generando 16 bytes aleatorios para un IV
- Encriptando mis datos con AES-256-CBC usando la IV, y la contraseña con hash
- Almacenar los datos cifrados como una cadena en el formato
iv:salt:encryptedData
Supongo que usar algo como Argon2 para la contraseña de hash sería superior, aunque todo lo que he leído hasta ahora sobre el cifrado de archivos recomienda pbkdf2.
¿Es seguro almacenar la sal y el IV en el archivo cifrado? Me gustaría solicitar solo una contraseña para descifrar el archivo, por lo que sería preferible. Tengo la impresión de que esto me protege contra un ataque de estilo de mesa de arco iris. No estoy seguro de si esto aumenta significativamente la probabilidad de que alguien pueda descifrar los datos.
¿Hay algo más que pueda hacer para mejorar la seguridad del archivo cifrado?
Este gist contiene mi código exacto: enlace