Los esquemas habituales de verificación de contraseña almacenan un hash de contraseña con sal y el salt. Si el hash es bueno y costoso computacional, se considera seguro.
Sin embargo, una versión alternativa (utilizada en Microsoft Office y probablemente en otros lugares) genera N bytes aleatorios (por ejemplo, 16 bytes) y un hash de M bytes de los N bytes (por ejemplo, 16 bytes adicionales), los concatena y cifra el N concatenado + M bytes usando un algoritmo de cifrado y una clave derivada de la contraseña.
Para verificar la contraseña, los bytes N + M se descifran, los primeros N bytes se procesan y se comparan con los M bytes descifrados. Si coinciden, la contraseña se considera verificada.
Para mis ojos no entrenados, la introducción de datos aleatorios (de longitud suficiente) hace que este sistema sea seguro contra cualquier esquema de búsqueda de tablas, incluso si el hash es débil. Parece que solo depende de la fuerza del cifrado y la longitud de la clave.
¿Estoy equivocado? Donde?