¿Por qué no debería ' t utilizo el cifrado ECB?
On febrero 18, 2021 by adminEstoy usando Java para generar cadenas encriptadas y recibo esta advertencia en el momento de la compilación:
No se debe utilizar el modo de cifrado ECB
Así que me pregunto por qué no debería utilizar ECB y qué puedo utilizar en su lugar ?
Comentarios
- Los comentarios no son para una discusión extendida; esta conversación ha sido movida al chat .
- ¿Trabajas en zoom?;)
Responder
¿Por qué no debería utilizar el cifrado ECB?
La razón principal para no utilizar el cifrado modo ECB es que no es semánticamente seguro — es decir, simplemente observar el texto cifrado encriptado por ECB puede filtrar información sobre el texto sin formato (incluso más allá de su longitud, que todos los esquemas de cifrado que aceptan textos planos arbitrariamente largos se filtrarán hasta cierto punto).
Específico lmente, el problema con el modo ECB es que cifrar el mismo bloque (de 8 o 16 bytes, o por grande que sea el tamaño del bloque del cifrado subyacente) de texto plano usando el modo ECB siempre produce el mismo bloque de texto cifrado. Esto puede permitir a un atacante:
- detectar si dos mensajes cifrados con ECB son idénticos;
- detectar si dos mensajes cifrados con ECB comparten un prefijo común;
- detectar si dos mensajes cifrados con ECB comparten otras subcadenas comunes, siempre que esas subcadenas estén alineadas en los límites del bloque; o
- detectar si (y dónde) un solo mensaje encriptado por ECB contiene datos repetitivos (como largas series de espacios o bytes nulos, campos de encabezado repetidos o frases repetidas coincidentemente en el texto).
Hay «una agradable demostración gráfica de esta debilidad en Wikipedia, donde la misma imagen (sin procesar, sin comprimir) se cifra usando el modo ECB y un modo de cifrado semánticamente seguro (como CBC, CTR, CFB u OFB):
Si bien este escenario es algo artificial (normalmente no se cifrarían imágenes sin procesar como esta), demuestra muy bien el problema con el modo ECB: las áreas repetitivas en la imagen de entrada dan como resultado patrones repetitivos en la salida cifrada, de modo que muchas características a gran escala de la imagen siguen siendo reconocibles a pesar del cifrado. En el mundo real, un criptoanalista ataca a cifrado basado sería más probable que el esquema buscara tales patrones en un volcado hexadecimal del texto cifrado, pero el principio es el mismo.
Un caso real de esta debilidad del cifrado ECB que contribuye a un compromiso de datos del mundo real es dada por la filtración de la base de datos de contraseñas de Adobe de 2013, como se describe en esta respuesta . En este caso, un elemento que contribuyó a la gravedad de la filtración fue que, en lugar de codificarlas correctamente , Adobe había cifrado las contraseñas utilizando el modo ECB. Esto permitió a los atacantes localizar rápidamente contraseñas compartidas por varias cuentas, o compartir un prefijo común con otras contraseñas (como contraseña1 y contraseña2 ), y también reveló la longitud aproximada de cada una contraseña.
El modo de cifrado ECB también tiene otras debilidades, como el hecho de que es muy maleable : ya que cada El bloque de texto plano se cifra por separado, un atacante puede generar fácilmente nuevos textos cifrados válidos juntando bloques de textos cifrados previamente observados.
Sin embargo, la maleabilidad solo es un problema si el cifrado ECB se utiliza sin un código de autenticación de mensajes y, en esta situación, es compartido (hasta cierto punto) por todos los demás modos de cifrado no autenticados , como el CBC, CTR, CFB y OFB antes mencionados. Por lo tanto, no puede considerarse realmente una debilidad específica del modo ECB, aunque tiende a ser un problema adicional cuando cada vez que se usa el modo ECB.
¿Qué debo usar en su lugar?
Debe usar cualquier cifrado autenticado modo, como GCM , EAX o OCB .
Personalmente, para mensajes cortos, «me gusta bastante el modo SIV ( RFC 5279 ), que proporciona una capa adicional de resistencia al mal uso. (Muchos otros modos de encriptación se romperán bastante mal si el mismo IV / nonce se usa accidentalmente para encriptar varios mensajes. El modo SIV conserva todas sus propiedades de seguridad en esta situación, excepto para filtrar si los mensajes encriptados son idénticos.)
También puede utilizar cualquier modo de cifrado tradicional semánticamente seguro (como CBC o CTR ), combinado con un código de autenticación de mensajes (como HMAC ) mediante el Cifrar -entonces-MAC construcción. (Es decir, primero debe cifrar el mensaje, luego calcular una MAC del texto cifrado y agregarlo al texto cifrado). Siempre que se asegure de verificar la MAC antes de intentar descifrar el mensaje, esta construcción lo protegerá de las diversas vulnerabilidades de estos modos a los ataques activos (texto cifrado elegido).
Para cifrado de disco o aplicaciones similares que requieren la capacidad de modificar partes del texto cifrado sin volver a cifrar todos los datos, debe utilizar un modo cifrado diseñado para tal fin, como XTS . Tenga en cuenta que estos modos generalmente carecen de resistencia a los ataques activos y pueden tener otras debilidades que deben entenderse antes de usarlos. Si es posible, deben combinarse con alguna forma de protección de integridad, como una MAC en un árbol hash .
Comentarios
- ¿Qué sugeriría en los casos en los que se desee poder leer / escribir bloques de un almacén de datos en una secuencia arbitraria, preferiblemente mientras se hace un mapa de bloques de todos unos a un bloque de unos? Mi inclinación sería cifrar xorizando los datos del bloque con un hash muy simple del número de bloque, deshaciendo / repitiendo la operación xor si arroja un bloque de todos unos, usando ECB en el resultado y xoring con el complemento del resultado de cifrar un bloque de todos unos [ese complemento sólo necesita calcularse una vez para cada clave]. ¿Le parecería un buen enfoque?
- @supercat: Esa ' es básicamente cifrado de disco , para que puedas usar modos diseñados para eso. Creo que XTS se considera una buena opción, aunque, como todos los modos de cifrado de disco, tiene sus limitaciones (que debe comprender antes de usarlo). Si es posible, debe combinarse con un MAC de algún tipo para defenderse de ataques activos.
- @IlmariKaronen: creo que al decir " don ' t usar ECB " es un poco exagerado. Entiendo los riesgos, pero muchas veces (a menos que su documento -lo que está encriptando- no sea ' sea muy secreto, y el adversario no ' no tiene demasiadas capacidades, etc.), debería estar bien.
- @giorgim: No hay ' realmente una razón utilizar ECB (excepto como componente básico para otros modos). Prácticamente cualquier biblioteca de cifrado proporciona al menos el modo CBC o CTR, y si no es así, ' son triviales de implementar usted mismo. Coloque un HMAC (o CMAC) encima de eso, y ' estará listo.
- @giorgim: Incluso si no ' No tenemos ningún modo MAC o AE disponible, usar CBC sigue siendo estrictamente mejor que ECB. Si tiene una función MAC, CBC-then-MAC es un modo AE perfectamente bueno.
Respuesta
No debe utilizar el modo ECB porque cifrará bloques de mensajes idénticos (es decir, la cantidad de datos cifrados en cada invocación del cifrado en bloque) en bloques de texto cifrado idénticos. Esto es un problema porque revelará si los mismos bloques de mensajes se cifran varias veces. Wikipedia tiene una muy buena ilustración de este problema .
Comentarios
- Comentarios no son para una discusión extensa; esta conversación ha sido movida al chat .
Responder
Como lo mencionó @Guut Boy, ECB no es semánticamente seguro, en el sentido de que si un mensaje con bloques idénticos está encriptado, entonces un atacante obtiene cierta ventaja de tener información en texto plano, solo observando CipherText.
Utilice preferiblemente el modo CBC para cifrar mensajes largos. Este modo introduce un parámetro adicional llamado IV (Valor Inicial), se inicializa con el número de sesión para evitar ataques en el caso de cifrar el mismo mensaje dos veces.
Comentarios
- IV significa vector de inicialización, no valor inicial.
- 1. Este no es un buen consejo. Usar cifrado sin la autenticación ignora aproximadamente una década de consejos de los criptógrafos. Sería mejor usar cifrado autenticado, como recomienda Ilmari Karonen. 2. Esta respuesta parece ser reemplazada por Ilmari Karonen ' s respuesta.
- Además de eso, el hecho es que el IV debe ser impredecible para un atacante (es decir, indistinguible de aleatorio), y esta respuesta dice que debe usar el número de sesión, que comúnmente no es aleatorio en absoluto.
Deja una respuesta