¿Se compromete el uso del patrón de relleno fijo AES-ECB?

0

Estoy trabajando en una aplicación donde se ha especificado AES-256-ECB. Se ha solicitado que se incluya un patrón fijo al final del mensaje para permitir que el final de la decodificación asegure que el descifrado haya sido exitoso. Estaba pensando en usar un valor de relleno fijo y agregar 16 bytes de relleno si originalmente no se requería relleno.

Sé que una mejor manera de hacerlo es usar un código de autenticación (y usar AES en un modo diferente) pero el cliente no desea agregar complejidad adicional.

¿El uso de un patrón fijo al final del mensaje comprometerá el cifrado AES-ECB si un atacante adivina la presencia del patrón? (¡Estoy recordando lo que sucedió en la película Imitation Game!)

Actualización: las características de los datos a codificar significan que no se repetirán los mismos datos codificados.

Actualización: agradezco los consejos sobre otros modos, y lo he mencionado yo mismo. Pero por la razón que sea, el BCE es el modo de elección.

    
pregunta Nigel Smith 29.04.2016 - 11:57
fuente

1 respuesta

2

Para responder a su pregunta: Sí. Te enfrentas a dos problemas:

1) El BCE es intrínsecamente inseguro de usar y solo está destinado a ser utilizado como un componente básico para operaciones más seguras. El modo ECB produce la misma salida para la misma entrada cada vez, por lo que es extremadamente determinista.

2) Debido a las propiedades mencionadas en 1, será trivial que un ataque determine el relleno exacto cuando reúne un montón de textos.

Realmente deberías considerar usar un modo de operación más complejo. Le sugiero encarecidamente que utilice CBC (Cipher Block Chianing) o cualquiera de los otros modos más seguros (OFB, CFB, CTR) < busque estos si es necesario.

EDITAR: Te hice una lista a continuación que hace referencia a wikipedia y también explica que ECB no debe utilizarse:

BCE :

  

El modo de cifrado más sencillo es el Libro de códigos electrónicos (ECB)   modo. El mensaje está dividido en bloques, y cada bloque está encriptado.   por separado. La desventaja de este método es que idéntico   los bloques de texto plano se cifran en bloques de texto cifrado idénticos; así,   no oculta bien los patrones de datos. En algunos sentidos, no lo hace.   proporcionar una confidencialidad de mensaje grave, y no se recomienda para   utilizar en protocolos criptográficos en absoluto .

CBC :

  

En el modo CBC, cada bloque de texto plano está en XOR con el anterior   Bloqueo de texto cifrado antes de ser cifrado. De esta manera, cada texto cifrado   El bloque depende de todos los bloques de texto plano procesados hasta ese punto. A   hacer que cada mensaje sea único, debe usarse un vector de inicialización en el   primer bloque CBC ha sido el modo de operación más utilizado.   Sus principales inconvenientes son que el cifrado es secuencial (es decir, no puede   ser paralelizado), y que el mensaje se debe rellenar a un múltiplo de   El tamaño del bloque de cifrado. Una forma de manejar este último problema es a través de   El método conocido como robo de texto cifrado. Tenga en cuenta que un cambio de un bit en   un texto plano o IV afecta a todos los siguientes bloques de texto cifrado.

CFB :

  

El modo de realimentación de cifrado (CFB), un pariente cercano de CBC, crea un bloque   cifrar en una secuencia de cifrado de sincronización automática. La operación es muy   similar; en particular, el descifrado CFB es casi idéntico al CBC   cifrado realizado en sentido inverso.

OFB :

  

El modo de realimentación de salida (OFB) convierte un cifrado de bloque en un síncrono   cifrado de flujo. Genera bloques keystream, que luego son XORed.   con los bloques de texto plano para obtener el texto cifrado. Al igual que con otros   cifrar flujos, voltear un poco en el texto cifrado produce un volteado   bit en el texto plano en la misma ubicación. Esta propiedad permite a muchos   los códigos de corrección de errores funcionan normalmente incluso cuando se aplican antes   cifrado.

CTR :

  

Al igual que OFB, el modo de contador convierte un cifrado de bloque en un cifrado de flujo. Eso   genera el siguiente bloque de cadena clave cifrando valores sucesivos de   un contador". El contador puede ser cualquier función que produzca una secuencia.   que está garantizado para no repetir durante mucho tiempo, aunque un real   El contador incremental por uno es el más simple y popular.

    
respondido por el MSB 29.04.2016 - 13:48
fuente

Lea otras preguntas en las etiquetas