¿Comprobar HMAC después de completar el descifrado o antes?

1

He escrito una pieza de software que encripta simétricamente archivos grandes (multi-megabyte). El texto simple se cifra, después del cifrado, el HMAC se calcula y se escribe en el encabezado del archivo. Durante el cifrado, actualizo HMAC continuamente, utilizando como fragmentos de entrada de datos cifrados (cifrar y luego MAC). No hay sumas de comprobación en cada fragmento, por lo que la única posibilidad de verificar si el archivo cifrado fue comprometido es leer el archivo cifrado completo, calcular el HMAC de todo el archivo y compararlo con el valor almacenado en el encabezado del archivo cifrado.

Mi pregunta: sobre el descifrado, ¿es mejor autenticar primero los datos cifrados y luego intentar descifrarlos o continuar con el descifrado y al final comparar HMAC del encabezado del archivo con el HMAC real del cifrado? datos?

Aquí están mis consideraciones:

1. El cálculo de HMAC antes del descifrado me parece, a primera vista, más "seguro". Por otro lado, primero tengo que leer el archivo completo, calcular y comparar HMAC, y luego leer el archivo completo UNA VEZ MÁS - esta vez para descifrar texto sin formato. Esto disminuye el rendimiento, especialmente si el archivo de entrada es grande, pero no almacenamos texto sin cifrar descifrado posiblemente comprometido en el disco (o en cualquier otro lugar), por lo que si el texto en claro está comprometido, el usuario general no puede acceder a TODO.

2. La otra opción es descifrar el archivo inmediatamente, escribir la salida descifrada en el disco, después de procesar el archivo completo, calcular HMAC: si no es igual al valor HMAC del encabezado del archivo, devuelva error "archivo dañado" y elimine la salida descifrada del disco (ya que consideramos que no es válido). Este mecanismo aumenta la velocidad general del proceso de descifrado, ya que leemos el archivo de entrada solo una vez. Por otro lado, si el archivo de entrada está comprometido, hemos escrito datos descifrados innecesarios en el disco, ya que, dado que la comparación HMAC falló, deberían borrarse (y serán) eliminados después de la verificación HMAC.

¿La escritura de datos descifrados de un archivo cifrado potencialmente manipulado compromete la seguridad? ¿Cómo ayudaría a un atacante? Como suponemos que el atacante sabe todo, excepto la contraseña, podría descifrar el archivo comprometido como se describe en la opción 2. Pero no puedo decir si esto lo ayudaría de alguna manera.

De lo contrario, suponemos que las contraseñas seguras y muy largas generadas aleatoriamente se utilizan para el cifrado, el cifrado utilizado también es seguro, la autenticación de la contraseña se realiza a través de KDF (PBKDF2, scrypt, lo que sea), por lo que, tal como se describe anteriormente, mi única la preocupación es cómo realizar la autenticación correctamente.

EDITAR: Por favor, responde NO como "primero debes cifrar, luego HMAC". La pregunta NO es sobre esto. Siempre cifro, luego HMAC. La pregunta es: ¿debo HMAC, luego descifrar o viceversa?

Gracias por su atención.

    
pregunta Acetylator 24.06.2015 - 15:20
fuente

1 respuesta

2

Exención de responsabilidad obligatoria: Si es posible, no implemente su propio criptográfico.

Verifique primero la validez del archivo descifrado y luego descifrelo sin importar si el MAC coincide con la forma más segura de hacerlo. Después de esto, asegúrese de que, si se produce algún error, siempre se devuelva el mismo tipo de error.

Revelar cualquier información sobre el motivo de una falla es un grave riesgo de seguridad. Por ejemplo, si un mal MAC y un mal relleno en el archivo descifrado devuelven diferentes mensajes de error, se puede montar un ataque de Oracle oracle . Algunos ataques oraculares de relleno, como trece afortunados , solo necesitan notar una diferencia en el tiempo para montar un ataque en tu cripto . Es por esto que siempre es más seguro descifrar el archivo, independientemente de la falta de coincidencia de MAC.

Según la primitiva criptográfica y el modo de operación en el que esté utilizando diferentes ataques, se deben considerar.

    
respondido por el Juha Kivekäs 24.06.2015 - 16:43
fuente

Lea otras preguntas en las etiquetas