Los algoritmos de cifrado como Blowfish, AES, RC4, DES y Seal se implementan en una de dos categorías de cifrado. ¿Cuáles son las ventajas / desventajas del tipo de cifrado?
Respuesta
Si bien ambos son cifrados simétricos, los cifrados de flujo se basan en generar un flujo de claves criptográfico «infinito» y usarlo para cifrar un bit o un byte a la vez (similar al pad de una sola vez), mientras que los cifrados de bloque funcionan en grandes cantidades de datos (es decir, bloques) a la vez, a menudo combinando bloques para seguridad adicional (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 normalmente requieren más memoria, ya que funcionan con grandes cantidades de datos y a menudo tienen un «traspaso» de bloques anteriores, mientras que, dado 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 de implementar en escenarios limitados como dispositivos integrados, firmware y especialmente hardware) .
- Los cifrados de flujo son más difíciles de implementar correctamente y propensos a debilidades en función del uso; dado que los principios son similares a los de un solo uso, el flujo de claves tiene requisitos muy estrictos. Por otro lado, » Suele ser la parte complicada y se puede descargar a, por ejemplo, una caja externa.
- Debido a que los cifrados de bloque cifran 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 estropea una parte del datos, todo el resto probablemente sea irrecuperable. Mientras que con los cifrados de flujo, los bytes se cifran individualmente sin conexión con otros fragmentos de datos (en la mayoría de los cifrados / modos) y, a menudo, tienen soporte para interrupciones en la línea.
- Además, los cifrados de flujo no brindan protección de integridad o autenticación, mientras que algunos cifrados de bloque (según el modo) pueden brindar protección de integridad, además de confidencialidad.
- Debido a todo lo anterior , los cifrados de flujo suelen ser mejores para los casos en los que la cantidad de datos es desconocida o continua, como los flujos de red. Cifras en bloque, por otro lado, o más útiles cuando la cantidad de datos es pre-conocida, 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.
Comentarios
- La segunda viñeta no es precisa. La diferencia en la memoria debido a que » se transfiere » de los bloques anteriores es insignificante y mucho menor que la diferencia en la memoria de un algoritmo a otro ( Por ejemplo, compare RC4, con sus 256 bytes de estado interno, con AES, con 0 bytes de estado interno en algunas implicaciones). La última viñeta hace distinciones falsas y es un mal consejo.
- @ D.W. La segunda viñeta fue » en general «, como suele ser el caso (pero acepto que no es estrictamente exacto).
- @DW ¿Tiene alguna base para su comentario sobre la última viñeta? ¿Dónde está la distinción falsa y por qué dices que este es un mal consejo?
- Sí, tengo una base para mi comentario sobre la última viñeta. Simplemente parece confuso en todos los ámbitos. Los cifrados en bloque están bien para transmitir datos; consulte, por ejemplo, el modo CBC, el modo CTR, etc., para conocer varios modos de funcionamiento que funcionan bien con la transmisión de datos. Los cifrados en bloque no están restringidos a los casos en los que la cantidad de datos se conoce de antemano. ‘ No tengo conocimiento de ninguna razón para considerar los cifrados de flujo mejores que los cifrados de bloque para los datos de flujo continuo (a pesar del nombre).
- D.W. es correcta: la palabra ‘ Stream ‘ en Stream Cipher refleja que hay una secuencia de claves, una secuencia de bits que se combina con texto plano para producir el texto cifrado. No refleja la composición de texto sin formato. Evidentemente este es un detalle que suele confundir a desarrolladores e ingenieros con los que suele estar implícito este último. Los cifrados de bloque se pueden usar para manipular bien el texto sin formato de transmisión. También suele resultar confuso que los cifrados en bloque se puedan utilizar como cifrado de flujo con un modo de funcionamiento adecuado y cuando el tamaño del bloque es atómico (por ejemplo, 1 byte).
Respuesta
Un bloque de cifrado es un algoritmo versátil que implementa una clave permutación dependiente de valores que son secuencias de un número fijo de bits (llamados «bloques»). Se puede utilizar para varios roles en muchos tipos de protocolos criptográficos. Una de esas funciones es el cifrado masivo de grandes flujos de datos; Para lograr tal cosa, el cifrado de bloque debe usarse con un modo de operación apropiado (también conocido como «modo de encadenamiento»), el tradicional es CBC, y el El modo más moderno de moda es CTR.
Un stream cipher es un algoritmo especializado con el propósito de cifrar en masa grandes flujos de datos. La idea es que, al perder la versatilidad del cifrado de bloques, sería posible crear un algoritmo más eficiente (es decir, algo que cifre los datos más rápido ).
Ambos cifrados de bloques con un modo de cifrado orientado a flujo y cifrados de flujo, pueden tener problemas de seguridad si se usa la misma clave dos veces, para dos flujos distintos, sin tener un Vector de inicialización apropiado, único / aleatorio. Para el cifrado CBC, el IV debe ser una nueva secuencia uniformemente aleatoria de bits, 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 se podría insertar un IV), lo que generó mucho caos y dio un mal nombre al concepto de cifrado de flujo.
Para obtener cifrado de flujo más nuevo, más seguro (y más rápido), consulte el eSTREAM portfolio . Estos algoritmos han pasado por un análisis bastante completo por muchos criptógrafos y se consideran «bastante seguros».
Un cifrado de flujo se puede convertir en un generador de números pseudoaleatorios encriptando una larga secuencia de bytes de valor cero. En realidad, muchos (pero no todos) los cifrados de flujo funcionan internamente al ser un PRNG, generando una secuencia larga de bytes pseudoaleatorios dependientes de la clave, que posteriormente se combinan (mediante XOR bit a bit) con los datos para cifrar (o descifrar), por lo que cifrar cero bytes equivale a omitir el XOR por completo. Por lo tanto, los cifrados de flujo se utilizan a menudo como PRNG personalizado.
Comentarios
- Olvidó mencionar cuál es generalmente más seguro (flujo vs bloque).
- No lo olvidé, porque la afirmación no tiene sentido general. Tanto los cifrados de bloque como los cifrados de flujo pueden proporcionar la seguridad adecuada, si se aplican correctamente y no ‘ t tienen debilidades estructurales.
- » la versatilidad del cifrado en bloque » Tengo problemas con esta parte. ¿Qué hace que un cifrado de bloques sea inherentemente más versátil? Los cifrados en bloque se pueden utilizar para cifrar y autenticar tanto los flujos (por ejemplo, TLS) como los datos empaquetados (por ejemplo, ESP) y lo mismo para los cifrados de flujo (por ejemplo, TLS o DTLS). Hay casos en los que un cifrado de flujo parece más » natural » (por ejemplo, cifrado de audio) o un cifrado de bloque parece más » natural » (p. Ej., Encriptar discos) pero no ‘ veo muchas brechas en las aplicaciones razonables para cualquiera.
Respuesta
Una ventaja de los cifrados de flujo que no se han mencionado anteriormente es que no «no necesita relleno (los cifrados de bloque funcionan en bloques completos, por lo que si no tiene suficientes datos, debe generar algunos más de alguna manera). Y sorpresa (no realmente, la criptografía es el campo donde Murphy está en todas partes), el relleno se puede hacer incorrecto, 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 veo que el BCE se usa aquí y allá a veces y no es mucho mejor que ninguna cripto Todo.
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.
Comentarios
- en su primer párrafo: hay modos de operación para cifrados de bloque que no ‘ no necesitan relleno, ya sea: por ejemplo, modo CTR. Por tanto, esta no es una ventaja exclusiva de los cifrados de flujo. Pero haga +1 en su último párrafo, ¡bien dicho!
- Bueno, yo ‘ diría que CTR y OFB son construcciones para hacer un cifrado de flujo a partir de un cifrado de bloque. Eso ‘ es otra gran cosa con los cifrados de bloque, pueden usarse fácilmente como bloques de construcción para otras cosas, ya sean cifrados de flujo o hashes unidireccionales. Los cifrados de flujo no son tan versátiles.
- Olvidó mencionar cuál es generalmente más seguro (flujo vs bloque).
- Ninguno es más seguro por naturaleza, ‘ s realmente cómo los usa.
Responder
Stream Ciphers encripta los datos en texto plano con un flujo aleatorio de bits (generalmente con un XOR porque se puede invertir fácilmente). Si tiene datos de 128 bits, utilizará un strem psedurandom de 128 bits (su clave) para encriptar.
Block Ciphers encripta los datos de texto sin formato un bloque a la vez con la misma transformación (basada en la clave ).Entonces tienes tus datos de 128 bits, el cifrado los rompe 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.
De Por supuesto, debido a esto, los Block Cyphers son más seguros pero costosos 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.
Comentarios
- El último párrafo tiene varios errores fácticos. Los cifrados en bloque no son más seguros en general, ni necesariamente peores en hardware. Los cifrados de flujo no son necesariamente más rápidos o más baratos.
- @DW: no obstante, los cifrados de flujo son generalmente más rápidos o más baratos que los cifrados en bloque, porque ‘ s the deal: un algoritmo menos versátil que se negocia para mejorar el rendimiento. Un cifrado de flujo que resulta ser más lento y más caro que AES / CTR simplemente no se usa en absoluto.
- Olvidó mencionar cuál es generalmente más seguro (flujo vs bloque).
Respuesta
Los datos (lo que se debe cifrar) generalmente vienen en secuencias. Para cifrarlo, necesitamos emplear un cifrado de flujo, es decir, un algoritmo de cifrado adecuado para su uso en un flujo de datos. Un flujo es una secuencia de bits (o bytes) de longitud arbitraria, variable o no especificada.
Los mejores cifrados que hemos inventado hasta ahora suelen ser cifrados en bloque. Un cifrado de bloque es capaz de cifrar un solo bloque de datos de tamaño fijo; y, por la evidencia que nos rodea, aparentemente es más fácil construir buenos cifrados de bloque que cifrados de flujo.
Sin embargo, buenas noticias. Utilizando un cifrado de bloque dado en algunos patrones particulares (un «modo de operación»), y con la ayuda de estrategias de relleno particulares, podemos transformar cualquier cifrado de bloque en un cifrado de flujo. Eso significa que podemos usar los mejores cifrados, que son cifrados en bloque, para cifrar cualquier dato, la mayoría de los cuales vienen en secuencias.
Comentarios
- la segunda oración parece engañosa. Puede cifrar la transmisión de datos utilizando un cifrado de bloque, utilizando cualquiera de los modos de operación estándar: por ejemplo, modo CBC, modo CTR, etc. AES-CBC sigue siendo un cifrado de bloque. De hecho, casi todos los modos de operación estándar para cifrados de bloques ya admiten la transmisión de datos. Además, un cifrado de bloques no es seguro sin un modo de operación, por lo que ‘ no es como un modo de operación, es algo opcional que solo necesita cuando desea cifrar datos de transmisión. .