Para generar la clave de 256 bits para los cifrados de bloque, se utiliza el algoritmo de hash seguro SHA-256. Este algoritmo comprime la clave de usuario proporcionada por el usuario (que consta de contraseña y / o archivo de clave) a una clave de tamaño fijo de 256 bits. Esta transformación es unidireccional, es decir, es computacionalmente inviable invertir la función hash o encontrar un segundo mensaje que se comprima al mismo hash.
El ataque recientemente descubierto contra SHA-1 [2] no afecta la seguridad de SHA-256. SHA-256 todavía se considera muy seguro [3].
Derivación clave:
Si solo se usa una contraseña (es decir, no hay archivo de clave), la contraseña más una sal aleatoria de 128 bits se codifica con SHA-256 para formar la clave final (pero tenga en cuenta que hay algún preprocesamiento: Protección contra ataques de diccionario). La sal aleatoria evita ataques basados en hashes precalculados.
Cuando se utiliza la contraseña y el archivo de clave, la clave final se deriva de la siguiente manera: SHA-256 (SHA-256 (contraseña), contenido del archivo de clave), es decir, el hash de la contraseña maestra se concatena con los bytes del archivo de clave y el byte resultante la cadena se vuelve hash con SHA-256 nuevamente. Si el archivo de clave no contiene exactamente 32 bytes (256 bits), también se combinan con SHA-256 para formar una clave de 256 bits. La fórmula anterior cambia a: SHA-256 (SHA-256 (contraseña), SHA-256 (contenido del archivo clave)).