El hashing de contraseñas se trata de convertir un < em> contraseña (que es débil, por definición) en una secuencia de bits adecuada para almacenamiento (token de verificación de contraseña) o usar como clave de cifrado (en cuyo caso estamos haciendo derivación de clave basada en contraseña ). Para tolerar el uso de contraseñas, debemos seguir algunas reglas estrictas:
- Use hash lento con muchas iteraciones (es más fácil decirlo que hacerlo, así que no sea creativo y use un estándar bien estudiado como bcrypt o PBKDF2).
-
Nunca reutilice un valor de sal para otra instancia de contraseña . De hecho, si dos contraseñas están encriptadas con la misma sal, entonces atacar una permitirá atacar a la otra "gratis".
Sin embargo, una vez que haya convertido la contraseña en una clave, puede usarla como cualquier clave. Si su sistema de cifrado no es ridículamente frágil, no debería haber ningún problema con el uso de la misma clave para cifrar muchos archivos. En el caso de algo basado en AES, esto implica, de hecho, un nuevo IV para cada archivo. Las propiedades de ese IV dependen del mecanismo de cifrado real; AES-CBC requiere un IV aleatorio, uniforme e impredecible, mientras que algunos modos más nuevos como GCM solo necesitan una repetición IV y por lo tanto funcionan bien con un simple contador.
Tenga en cuenta que muchos esquemas de encriptación basados en contraseña utilizan un sistema de sal y iteraciones para agrupar la contraseña en una secuencia de bits que contienen ambos la clave y la IV. Tales sistemas no se pueden utilizar para más de un archivo; de lo contrario, reutilizará la IV, y eso es un pecado mortal (generalmente peor que reutilizar una sal, que ya es bastante mala). Si desea reutilizar la clave resultante del hashing de contraseña, DEBE generar un nuevo IV para cada ejecución de encriptación.
Además, tenga en cuenta que si dos archivos están cifrados con la misma clave derivada de la contraseña, es probable que sus encabezados incluyan el salt (hay que ponerlo en algún lugar, de modo que esté disponible para el descifrado), por lo que tendrá fugas. La información de que ambos archivos están protegidos con la misma contraseña y, por lo tanto, tienen la misma fuente. Dependiendo de su contexto, esto puede o no ser un problema para usted.
A otras personas les ha parecido conveniente utilizar el expediente simple de almacenar sus diez archivos en un solo archivo Zip y cifrarlos como un solo archivo. Dependiendo de su contexto, esto puede ser aplicable (o no), y es mucho más sencillo de implementar sin dañar la capa criptográfica. En general, el diseño de su propio formato de encriptación y el ensamblaje de algoritmos es un camino lleno de peligros, y no puede saber si lo hizo bien o no (la seguridad no es funcionalidad: no se puede probar). / p>