Para mi ingenua mente, parece que el cifrado de un documento con AES debería ser el siguiente:
HumanPassword --- | hash | - > tecla --- | AES | - > Texto cifrado
plaintext|--^
Y el descifrado de esta manera:
HumanPassword --- | hash | - > tecla --- | AES | - > Texto sin formato
ciphertext|--^
Y como tal, parece que el paquete cifrado (el archivo de Excel) no debería contener el hash de la contraseña humana , y además, sería inseguro que no sea seguro. hazlo .
Uno de mis compañeros de trabajo dice que "si el archivo no contenga el hash, ¿con qué compararía la contraseña?"
Me parece que no tiene que hacer ninguna comparación. Debe descifrar con cualquier clave que obtenga del hash, y si funcionó, el resultado no será un disparate. Si no funcionó, Excel debería ver el disparate y decir "Contraseña incorrecta, nincompoop". Pero no debería tener el hash en el archivo. No debería necesitar comparar nada.
Sin embargo, parece que sí tiene el hash en el archivo.
Cuando mi compañero de trabajo y yo seleccionamos este archivo, descubrimos que efectivamente había un valor de hash allí, y ahora estamos ejecutando ataques de diccionario y de fuerza bruta contra él.
Supongo que mi pregunta es esta:
¿Por qué un documento cifrado de MS Office 2010 necesita almacenar el hash de la contraseña?
Y, si las preguntas secundarias son apropiadas en SE,
Si no es absolutamente necesario, ¿por qué Microsoft eligió hacerlo? ¿No es menos seguro si el algoritmo hash no es muy bueno?