Tengo entendido que los cifrados de bloque como AES no tienen ningún mecanismo incorporado para verificar la integridad de los datos en el descifrado, aunque algunos modos de operación pueden proporcionar eso.
He jugado con 7-zip, que utiliza AES-256 / CBC. Cifre un montón de archivos y lo corrompí deliberadamente, poniendo a cero un par de bytes. Observé que, como era de esperar, cuanto antes pusiera a cero los bytes, más archivos se corromperían.
También noté que proporcionar una contraseña incorrecta no detendría la descompresión. Solo después de descomprimir todo el archivo, 7-zip informaría que la contraseña podría estar equivocada. Dado que guarda las sumas de comprobación de los archivos, puede determinar si están dañados. Esto tiene sentido.
Ahora ingrese Adobe Acrobat X. Encripté un PDF (AES-256 nuevamente). Para mi sorpresa, los bytes corruptos en el archivo cifrado parecían no tener un efecto observable en el resultado. Tenga en cuenta que Acrobat X también encripta los metadatos, y edité algo más allá de donde yo esperaría que los metadatos fueran de todos modos.
Todavía pude ver la lectura del archivo completo. Luego eliminé la contraseña de los archivos original y "dañado" e hice comparaciones byte a byte. Noté que además de algunos rangos de direcciones donde presumo que los metadatos están almacenados (ya que difieren cada vez que descifro el mismo archivo), solo había un bloque único donde 16 bytes (coincidentemente el tamaño del bloque de AES) son diferentes.
Acrobat también parece poder verificar si una contraseña es correcta sin intentar descifrar nada, lo que implica que tiene un hash (o algo) almacenado en alguna parte.
- ¿Tiene sentido hacer eso (verificar que una contraseña o clave es correcta sin intentar descifrar)? ¿No haría eso más fácil para un atacante la fuerza bruta de la contraseña?
- ¿Tengo razón al suponer que Acrobat usa el BCE? ¿Hay alguna ventaja?
- ¿Cómo se comportan los modos AE cuando se trata de:
- La verificación de una clave es correcta antes de intentar el descifrado
- Si un byte de texto cifrado se daña accidentalmente, ¿cómo afecta eso a lo que viene después?