stringtranslate.com

Cifrado de flujo

El funcionamiento del generador de flujo de claves en A5/1 , un cifrado de flujo basado en LFSR que se utiliza para cifrar conversaciones de teléfonos móviles.

Un cifrado de flujo es un cifrado de clave simétrica en el que los dígitos de texto sin formato se combinan con un flujo de dígitos de cifrado pseudoaleatorio ( keystream ). En un cifrado de flujo, cada dígito de texto plano se cifra uno a la vez con el dígito correspondiente del flujo de claves, para dar un dígito del flujo de texto cifrado . Dado que el cifrado de cada dígito depende del estado actual del cifrado, también se lo conoce como cifrado de estado . En la práctica, un dígito suele ser un bit y la operación de combinación es un o exclusivo (XOR).

El flujo de claves pseudoaleatorio generalmente se genera en serie a partir de un valor inicial aleatorio utilizando registros de desplazamiento digitales . El valor inicial sirve como clave criptográfica para descifrar el flujo de texto cifrado. Los cifrados de flujo representan un enfoque diferente al cifrado simétrico del cifrado de bloques . Los cifrados en bloque operan en grandes bloques de dígitos con una transformación fija e invariable. Esta distinción no siempre es clara: en algunos modos de operación , una primitiva de cifrado de bloque se utiliza de tal manera que actúa efectivamente como un cifrado de flujo. Los cifrados de flujo normalmente se ejecutan a mayor velocidad que los cifrados de bloque y tienen una menor complejidad de hardware. Sin embargo, los cifrados de flujo pueden ser susceptibles a violaciones de seguridad (ver ataques de cifrado de flujo ); por ejemplo, cuando se utiliza dos veces el mismo estado inicial (semilla).

Inspiración suelta en el bloc de notas de una sola vez

Se puede considerar que los cifrados de flujo se aproximan a la acción de un cifrado irrompible probado, el bloc de un solo uso (OTP). Un teclado de un solo uso utiliza un flujo de claves de dígitos completamente aleatorios . El flujo de claves se combina con los dígitos del texto sin formato, uno a la vez, para formar el texto cifrado. Claude E. Shannon demostró que este sistema era seguro en 1949. [1] Sin embargo, el flujo de claves debe generarse completamente al azar con al menos la misma longitud que el texto sin formato y no puede usarse más de una vez. Esto hace que el sistema sea complicado de implementar en muchas aplicaciones prácticas y, como resultado, el bloc de un solo uso no se ha utilizado ampliamente, excepto en las aplicaciones más críticas. La generación, distribución y gestión de claves son fundamentales para esas aplicaciones.

Un cifrado de flujo utiliza una clave mucho más pequeña y conveniente, como la de 128 bits. Con base en esta clave, genera un flujo de claves pseudoaleatorio que se puede combinar con los dígitos de texto sin formato de manera similar al pad de un solo uso. Sin embargo, esto tiene un costo. El flujo de claves ahora es pseudoaleatorio y, por lo tanto, no es verdaderamente aleatorio. La prueba de seguridad asociada con la libreta de un solo uso ya no es válida. Es muy posible que un cifrado de flujo sea completamente inseguro. [ cita necesaria ]

Tipos

Un cifrado de flujo genera elementos sucesivos del flujo de claves en función de un estado interno. Este estado se actualiza esencialmente de dos maneras: si el estado cambia independientemente de los mensajes de texto sin formato o de texto cifrado , el cifrado se clasifica como un cifrado de flujo sincrónico . Por el contrario, los cifrados de flujo autosincronizados actualizan su estado basándose en dígitos de texto sin formato o texto cifrado anteriores. Un sistema que incorpora el texto plano en la clave también se conoce como cifrado de clave automática o cifrado de autoclave.

Cifrados de flujo sincrónicos

Máquina de cifrado Lorenz SZ utilizada por el ejército alemán durante la Segunda Guerra Mundial

En un cifrado de flujo síncrono, se genera un flujo de dígitos pseudoaleatorios independientemente de los mensajes de texto sin formato y de texto cifrado, y luego se combina con el texto sin formato (para cifrar) o el texto cifrado (para descifrar). En la forma más común, se utilizan dígitos binarios ( bits ) y el flujo de claves se combina con el texto sin formato mediante la operación exclusiva u (XOR). Esto se denomina cifrado de flujo aditivo binario .

En un cifrado de flujo síncrono, el remitente y el receptor deben estar exactamente en sintonía para que el descifrado sea exitoso. Si se agregan o eliminan dígitos del mensaje durante la transmisión, se pierde la sincronización. Para restablecer la sincronización, se pueden probar varias compensaciones sistemáticamente para obtener el descifrado correcto. Otro enfoque es etiquetar el texto cifrado con marcadores en puntos regulares de la salida.

Sin embargo, si un dígito se corrompe durante la transmisión, en lugar de agregarlo o perderlo, solo se ve afectado un dígito del texto sin formato y el error no se propaga a otras partes del mensaje. Esta propiedad es útil cuando la tasa de errores de transmisión es alta; sin embargo, hace que sea menos probable que el error se detecte sin mecanismos adicionales. Además, debido a esta propiedad, los cifrados de flujo síncrono son muy susceptibles a ataques activos : si un atacante puede cambiar un dígito en el texto cifrado, podría realizar cambios predecibles en el bit de texto sin formato correspondiente; por ejemplo, invertir un bit en el texto cifrado hace que se invierta el mismo bit en el texto sin formato.

Cifradores de flujo autosincronizables

Otro enfoque utiliza varios de los N dígitos de texto cifrado anteriores para calcular el flujo de claves. Estos esquemas se conocen como cifrados de flujo autosincrónicos , cifrados de flujo asíncronos o clave automática de texto cifrado ( CTAK ). La idea de la autosincronización fue patentada en 1946 y tiene la ventaja de que el receptor se sincronizará automáticamente con el generador de flujo de claves después de recibir N dígitos de texto cifrado, lo que facilita la recuperación si se eliminan o agregan dígitos al flujo de mensajes. Los errores de un solo dígito tienen un efecto limitado y afectan solo hasta N dígitos de texto sin formato.

Un ejemplo de cifrado de flujo autosincronizable es un cifrado de bloque en modo de retroalimentación de cifrado (CFB) .

Basado en registros de desplazamiento de retroalimentación lineal

Los cifrados de flujo binario a menudo se construyen utilizando registros de desplazamiento de retroalimentación lineal (LFSR) porque pueden implementarse fácilmente en hardware y pueden analizarse matemáticamente fácilmente. Sin embargo, el uso de LFSR por sí solo es insuficiente para proporcionar una buena seguridad. Se han propuesto varios esquemas para aumentar la seguridad de los LFSR.

Funciones de combinación no lineales

Un enfoque es usar n LFSR en paralelo, sus salidas combinadas usando una función booleana binaria de n entradas ( F ).

Debido a que los LFSR son inherentemente lineales, una técnica para eliminar la linealidad es alimentar las salidas de varios LFSR paralelos a una función booleana no lineal para formar un generador combinado . Varias propiedades de dicha función de combinación son críticas para garantizar la seguridad del esquema resultante, por ejemplo para evitar ataques de correlación .

Generadores controlados por reloj

Normalmente, los LFSR se actualizan periódicamente. Una forma de introducir la no linealidad es hacer que el LFSR tenga una frecuencia irregular, controlado por la salida de un segundo LFSR. Dichos generadores incluyen el generador de parada y arranque, el generador de pasos alternos y el generador de contracción .

Un generador de pasos alternos consta de tres LFSR, que llamaremos LFSR0, LFSR1 y LFSR2 por conveniencia. La salida de uno de los registros decide cuál de los otros dos se utilizará; por ejemplo, si LFSR2 genera un 0, LFSR0 se sincroniza, y si genera un 1, LFSR1 se sincroniza. La salida es el OR exclusivo del último bit producido por LFSR0 y LFSR1. El estado inicial de los tres LFSR es la clave.

El generador stop-and-go (Beth y Piper, 1984) consta de dos LFSR. Un LFSR se sincroniza si la salida de un segundo es 1; de lo contrario, repite su salida anterior. Luego, esta salida se combina (en algunas versiones) con la salida de un tercer LFSR sincronizado a una frecuencia regular.

El generador de contracción adopta un enfoque diferente. Se utilizan dos LFSR, ambos sincronizados regularmente. Si la salida del primer LFSR es 1, la salida del segundo LFSR se convierte en la salida del generador. Sin embargo, si el primer LFSR genera 0, la salida del segundo se descarta y el generador no genera ningún bit. Este mecanismo sufre ataques de sincronización en el segundo generador, ya que la velocidad de la salida es variable de una manera que depende del estado del segundo generador. Esto se puede aliviar almacenando en buffer la salida.

Generador de filtros

Otro enfoque para mejorar la seguridad de un LFSR es pasar todo el estado de un único LFSR a una función de filtrado no lineal .

Otros diseños

RC4 es uno de los diseños de cifrado de flujo más utilizados.

En lugar de un dispositivo de accionamiento lineal, se puede utilizar una función de actualización no lineal. Por ejemplo, Klimov y Shamir propusieron funciones triangulares ( funciones T ) con un solo ciclo en palabras de n bits.

Seguridad

Para que un cifrado de flujo sea seguro, su flujo de claves debe tener un período grande y debe ser imposible recuperar la clave del cifrado o el estado interno del flujo de claves. Los criptógrafos también exigen que el flujo de claves esté libre de sesgos incluso sutiles que permitirían a los atacantes distinguir un flujo del ruido aleatorio, y libre de relaciones detectables entre flujos de claves que correspondan a claves relacionadas o datos criptográficos relacionados . Esto debería ser cierto para todas las claves (no debería haber claves débiles ), incluso si el atacante puede conocer o elegir algún texto plano o cifrado .

Al igual que con otros ataques en criptografía, los ataques de cifrado de flujo pueden ser de certificación , por lo que no son necesariamente formas prácticas de romper el cifrado, pero indican que el cifrado podría tener otras debilidades.

El uso seguro de un cifrado de flujo síncrono requiere que nunca se reutilice el mismo flujo de claves dos veces. Esto generalmente significa que se debe proporcionar un nonce o clave diferente para cada invocación del cifrado. Los diseñadores de aplicaciones también deben reconocer que la mayoría de los cifrados de flujo no proporcionan autenticidad sino privacidad : es posible que los mensajes cifrados aún se hayan modificado en tránsito.

Los períodos cortos para los cifrados de flujo han sido una preocupación práctica. Por ejemplo, se pueden utilizar cifrados de bloques de 64 bits como DES para generar un flujo de claves en modo de retroalimentación de salida (OFB). Sin embargo, cuando no se utiliza retroalimentación completa, el flujo resultante tiene un período de alrededor de 2,32 bloques en promedio; para muchas aplicaciones, el período es demasiado corto. Por ejemplo, si el cifrado se realiza a una velocidad de 8 megabytes por segundo, se repetirá un flujo de período 2 x 32 bloques después de aproximadamente media hora. [ dudoso ]

Algunas aplicaciones que utilizan el cifrado de flujo RC4 son atacables debido a debilidades en la rutina de configuración de claves de RC4; Las nuevas aplicaciones deben evitar RC4 o asegurarse de que todas las claves sean únicas e idealmente no relacionadas (como las generadas por un CSPRNG bien sembrado o una función hash criptográfica ) y que los primeros bytes del flujo de claves se descarten.

Los elementos de los cifrados de flujo suelen ser mucho más sencillos de entender que los cifrados de bloque y, por lo tanto, es menos probable que oculten debilidades accidentales o maliciosas.

Uso

Los cifrados de flujo se utilizan a menudo por su velocidad y simplicidad de implementación en hardware y en aplicaciones donde el texto sin formato viene en cantidades de longitud incognoscible, como una conexión inalámbrica segura . Si se utilizara un cifrado de bloque (que no funciona en modo de cifrado de flujo) en este tipo de aplicación, el diseñador tendría que elegir entre la eficiencia de transmisión o la complejidad de la implementación, ya que los cifrados de bloque no pueden funcionar directamente en bloques más cortos que su tamaño de bloque. Por ejemplo, si un cifrado de bloque de 128 bits recibiera ráfagas separadas de texto sin formato de 32 bits, tres cuartas partes de los datos transmitidos serían relleno . Los cifrados de bloque deben usarse en modo de robo de texto cifrado o terminación de bloque residual para evitar el relleno, mientras que los cifrados de flujo eliminan este problema al operar naturalmente en la unidad más pequeña que se puede transmitir (generalmente bytes).

Otra ventaja de los cifrados de flujo en criptografía militar es que el flujo de cifrado se puede generar en una caja separada que está sujeta a estrictas medidas de seguridad y se envía a otros dispositivos, como un aparato de radio, que realizará la operación XOR como parte de su función. Este último dispositivo puede diseñarse y utilizarse en entornos menos estrictos.

ChaCha se está convirtiendo en el cifrado de flujo más utilizado en software; [2] otros incluyen: RC4 , A5/1 , A5/2 , Chameleon, FISH , Helix , ISAAC , MUGI , Panama , Phelix , Pike , Salsa20 , SEAL , SOBER , SOBER-128 y WAKE .

Comparación

Trivialidades

Ver también

Notas

  1. ^ Deane, Arturo; Kraus, Aaron (2021). "Capítulo 3: Dominio 3: Arquitectura e ingeniería de seguridad". La referencia oficial (ISC) 2 CISSP CBK (6ª ed.). Hoboken, Nueva Jersey: John Wiley & Sons, Inc. p. 232.ISBN​ 978-1-119-78999-4.
  2. ^ "Haga ChaCha: mejor rendimiento móvil con criptografía". 23 de febrero de 2015.
  3. ^ García, Flavio D.; de Koning Gans, Gerhard; Muijrers, Rubén; van Rossum, Peter; Verdult, Roel; Schreur, Ronny Wichers; Jacobs, Bart (4 de octubre de 2008). «Desmontando MIFARE Classic» (PDF) . 13º Simposio europeo sobre investigación en seguridad informática (ESORICS 2008), LNCS, Springer. Archivado desde el original (PDF) el 23 de febrero de 2021 . Consultado el 25 de junio de 2022 .
  4. ^ Lu, Yi; Meier, Willi; Vaudenay, Serge (2005). "El ataque de correlación condicional: un ataque práctico al cifrado de Bluetooth". Avances en criptología - CRYPTO 2005 (PDF) . Apuntes de conferencias sobre informática. vol. 3621. Santa Bárbara, California, Estados Unidos. págs. 97-117. CiteSeerX 10.1.1.323.9416 . doi :10.1007/11535218_7. ISBN  978-3-540-28114-6. {{cite book}}: |journal=ignorado ( ayuda )CS1 maint: location missing publisher (link)
  5. ^ Banik, Subhadeep; Maitra, Subhamoy; Sarkar, Santanu (2013). "Un ataque de falla diferencial en MICKEY 2.0". Archivo ePrint de criptología .
  6. ^ P. Prasithsangaree y P. Krishnamurthy (2003). "Análisis de Consumo Energético de Algoritmos RC4 y AES en LAN Inalámbricas" (PDF) . IEEE Globecom . Archivado desde el original (PDF) el 3 de diciembre de 2013.

Referencias

enlaces externos