it-swarm-es.com

Ventajas y desventajas de Stream vs Block Ciphers

Los algoritmos de cifrado como Blowfish, AES, RC4, DES y Seal se implementan en una de dos categorías de cifrados. ¿Cuáles son las ventajas/desventajas del tipo de cifrado?

66
Eric Warriner

Si bien ambos son cifrados simétricos, los cifrados de flujo se basan en generar un flujo de clave criptográfico "infinito", y usarlo para cifrar un bit o byte a la vez (similar al pad de una sola vez), mientras que los cifrados de bloque funcionan en fragmentos de datos más grandes (es decir, bloques) a la vez, a menudo combinando bloques para mayor seguridad (por ejemplo, AES en modo CBC).

  • Los cifrados de flujo suelen ser más rápidos que el bloque, pero eso tiene su propio precio.
  • Los cifrados de bloque generalmente requieren más memoria, ya que funcionan en grandes cantidades de datos y a menudo tienen "transferencia" de bloques anteriores, mientras que los cifrados de flujo funcionan solo en unos pocos bits a la vez tienen requisitos de memoria relativamente bajos (y, por lo tanto, son más baratos) implementar en escenarios limitados, como dispositivos integrados, firmware y hardware especialmente).
  • Los cifrados de flujo son más difíciles de implementar correctamente y son propensos a debilidades basadas en el uso, ya que los principios son similares a los de una sola vez, el flujo de claves tiene requisitos muy estrictos. Por otro lado, esa suele ser la parte difícil y puede descargarse, por ejemplo, a Una caja externa.
  • Debido a que los cifrados de bloque encriptan un bloque completo a la vez (y además tienen modos de "retroalimentación" que son los más recomendados), son más susceptibles al ruido en la transmisión, es decir, si se desordena una parte de los datos, el resto probablemente sea irrecuperable Mientras que con los cifrados de flujo, los bytes se encriptan individualmente sin conexión a otros fragmentos de datos (en la mayoría de los modos/cifrados) y, a menudo, admiten interrupciones en la línea.
  • Además, los cifrados de flujo no proporcionan protección o autenticación de integridad, mientras que algunos cifrados de bloque (según el modo) pueden proporcionar protección de integridad, además de confidencialidad.
  • Debido a todo lo anterior, los cifrados de flujo son generalmente mejores para los casos en que la cantidad de datos es desconocida o continua, como los flujos de red. Los cifrados de bloque, por otro lado, o más útiles cuando se conoce previamente la cantidad de datos, como un archivo, campos de datos o protocolos de solicitud/respuesta, como HTTP, donde la longitud del mensaje total ya se conoce en el comenzando.
48
AviD

Un cifrado de bloque es un algoritmo versátil que implementa una permutación de valores dependiente de la clave que son secuencias de un número fijo de bits (llamados "bloques"). Se puede usar para varios roles en muchos tipos de protocolos criptográficos. Una de esas funciones es el cifrado masivo de largas secuencias de datos; Para lograr tal cosa, el cifrado de bloque debe usarse con un apropiado modo de operación (también conocido como "modo de encadenamiento"), el tradicional es CBC y el modo más moderno y moderno es CTR.

Un cifrado de flujo es un algoritmo especializado para el cifrado masivo de flujos largos de datos. La idea es que, al perder la versatilidad del cifrado de bloque, sería posible crear un algoritmo más eficiente (es decir, algo que cifra los datos ¡más rápido).

Tanto los cifrados de bloque con un modo de cifrado orientado a la transmisión como los cifrados de transmisión pueden tener problemas de seguridad si se usa la misma clave dos veces, para dos transmisiones distintas, sin tener un apropiado, único/aleatorio suficiente ¡Vector de inicialización. Para el cifrado CBC, el IV debe ser una nueva secuencia de bits uniformemente aleatoria, del mismo tamaño que un bloque, para cada mensaje nuevo. Los buenos cifrados de flujo también aceptan un IV. Un cifrado de flujo tradicional llamado RC4 no tiene IV (su especificación no indica dónde o cómo podría insertarse un IV), lo que condujo a un gran caos y dio un mal nombre al concepto de cifrado de flujo.

Para obtener cifrados de flujo más nuevos, más seguros (y más rápidos), consulte cartera de eSTREAM . Estos algoritmos han sido sometidos a un análisis bastante exhaustivo por parte de muchos criptógrafos y se consideran "bastante seguros".

Un cifrado de flujo se puede convertir en un Generador de números pseudoaleatorios encriptando una secuencia larga de bytes de valor cero. En realidad, muchos (pero no todos) los cifrados de flujo funcionan internamente al ser un PRNG, generando una larga secuencia de bytes pseudoaleatorios dependientes de la clave, que posteriormente se combina (mediante XOR bit a bit) con los datos para cifrar (o descifrar), por lo que cifrar bytes cero es equivalente a omitir el XOR por completo. Por lo tanto, los cifrados de flujo a menudo se usan como PRNG personalizados.

26
Thomas Pornin

Una ventaja de los cifrados de flujo que no se han mencionado anteriormente es que no necesitan relleno (los cifrados de bloque funcionan en bloques completos, por lo que si no tiene suficientes datos debe generar algo más de alguna manera). Y sorpresa (no realmente, la criptografía es el campo donde Murphy está en todas partes), el relleno puede hacerse mal, como se ejemplifica, por ejemplo, en Practical Padding Oracle Attacks .

Además, la seguridad de los cifrados de bloque depende en gran medida de su modo de operación, todavía se ve que el BCE se usa aquí y allá a veces y no es mucho mejor que ninguna criptografía.

Básicamente no se puede decir que uno es mejor que el otro, uno tiene que mirar un criptosistema completo para hacer un juicio de seguridad.

9
Bruno Rohée

Stream Ciphers cifra los datos de texto sin formato con una secuencia aleatoria de bits (generalmente con un XOR porque se puede revertir fácilmente). Si tiene datos de 128 bits, utilizará un strem psedurandom de 128 bits ( su clave) para encriptar.

Block Ciphers cifra los datos de texto sin formato un bloque a la vez con la misma transformación (basada en la clave). Entonces, tiene sus datos de 128 bits, el cifrado los divide en bloques (como 4 bloques de 32 bits) y aplica la misma transformación a cada bloque obteniendo 4 bloques cifrados, que combinados formarán el criptograma final.

Por supuesto, debido a esto, los cifrados de bloque son más seguros pero caros de usar en términos de complejidad de hardware involucrada. Los cifrados de flujo son más rápidos y "baratos", pero pueden ser susceptibles a problemas de seguridad si se implementan incorrectamente.

1
gbr