stringtranslate.com

Cifrado de flujo

El funcionamiento del generador de flujo de claves en A5/1 , un cifrador de flujo basado en LFSR utilizado 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 simple se combinan con un flujo de dígitos cifrados pseudoaleatorios ( flujo de claves ). En un cifrado de flujo, cada dígito de texto simple se cifra de a uno por 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 es típicamente un bit y la operación de combinación es una operación exclusiva-o (XOR).

El flujo de claves pseudoaleatorio se genera normalmente en serie a partir de un valor de semilla aleatorio mediante registros de desplazamiento digitales . El valor de semilla sirve como clave criptográfica para descifrar el flujo de texto cifrado. Los cifrados de flujo representan un enfoque diferente al cifrado simétrico de los cifrados de bloque . Los cifrados de 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 , se utiliza un primitivo de cifrado de bloque de tal manera que actúa eficazmente como un cifrado de flujo. Los cifrados de flujo normalmente se ejecutan a una 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 (consulte ataques de cifrado de flujo ); por ejemplo, cuando el mismo estado inicial (semilla) se utiliza dos veces.

Inspiración suelta del bloc de notas de un solo uso

Los cifrados de flujo pueden considerarse una aproximación a la acción de un cifrado irrompible probado, el block de un solo uso (OTP). Un block 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 simple 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 simple 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 block de un solo uso no se ha utilizado ampliamente, excepto para 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 más conveniente, como 128 bits. Basándose en esta clave, genera un flujo de claves pseudoaleatorio que se puede combinar con los dígitos del texto sin formato de manera similar al bloc 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 el bloc de un solo uso ya no se sostiene. Es muy posible que un cifrado de flujo sea completamente inseguro. [ cita requerida ]

Tipos

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

Cifrados de flujo sincrónico

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

En un cifrado de flujo sincrónico, se genera un flujo de dígitos pseudoaleatorios independientemente de los mensajes de texto simple y cifrado, y luego se combina con el texto simple (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 simple mediante la operación o exclusiva (XOR). Esto se denomina cifrado de flujo aditivo binario .

En un cifrado de flujo sincrónico, el emisor y el receptor deben estar exactamente sincronizados 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 sistemáticamente varios desfases 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 agregarse o perderse, solo se ve afectado un único dígito del texto simple 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 sincrónico 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 correspondiente del texto simple; por ejemplo, invertir un bit en el texto cifrado hace que el mismo bit se invierta en el texto simple.

Cifradores de flujo con sincronización automática

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 autosincronizados , cifrados de flujo asincrónicos o cifrado automático de texto ( 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 a un máximo de N dígitos de texto sin formato.

Un ejemplo de un cifrado de flujo con sincronización automática 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 binarios suelen construirse utilizando registros de desplazamiento con retroalimentación lineal (LFSR, por sus siglas en inglés), ya que se pueden implementar fácilmente en hardware y se pueden analizar matemáticamente sin problemas. Sin embargo, el uso de LFSR por sí solo no es suficiente 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 utilizar n LFSR en paralelo, y combinar sus salidas mediante 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 introducir las salidas de varios LFSR paralelos en una función booleana no lineal para formar un generador de combinación . Varias propiedades de dicha función de combinación son fundamentales para garantizar la seguridad del esquema resultante, por ejemplo, para evitar ataques de correlación .

Generadores controlados por reloj

Normalmente, los LFSR se escalonan regularmente. Un enfoque para introducir la no linealidad es hacer que el LFSR se sincronice de forma irregular, controlado por la salida de un segundo LFSR. Estos generadores incluyen el generador de parada y marcha, el generador de escalón alterno y el generador de contracción .

Un generador de pasos alternados consta de tres LFSR, que llamaremos LFSR0, LFSR1 y LFSR2 para mayor comodidad. La salida de uno de los registros decide cuál de los otros dos se utilizará; por ejemplo, si LFSR2 genera un 0, se sincroniza LFSR0, y si genera un 1, se sincroniza LFSR1 en su lugar. 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 de parada y marcha (Beth y Piper, 1984) consta de dos LFSR. Un LFSR se sincroniza si la salida de un segundo es un 1; de lo contrario, repite su salida anterior. Esta salida se combina luego (en algunas versiones) con la salida de un tercer LFSR sincronizado a una frecuencia regular.

El generador de encogimiento 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 la salida del primer LFSR es 0, la salida del segundo se descarta y el generador no emite 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 búfer la salida.

Generador de filtros

Otro enfoque para mejorar la seguridad de un LFSR es pasar todo el estado de un solo 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 control 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 largo 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 incluso de sesgos sutiles que permitirían a los atacantes distinguir un flujo de ruido aleatorio y libre de relaciones detectables entre flujos de claves que corresponden a claves relacionadas o nonces 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 simple 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 este podría tener otras debilidades.

Para utilizar de forma segura un cifrado de flujo sincrónico seguro es necesario no reutilizar nunca el mismo flujo de claves dos veces. Por lo general, eso significa que se debe proporcionar un nonce o una clave diferentes en 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 : los mensajes cifrados pueden haber sido modificados durante el tránsito.

Los períodos cortos para los cifrados de flujo han sido una preocupación práctica. Por ejemplo, los cifrados de bloques de 64 bits como DES se pueden utilizar para generar un flujo de claves en modo de retroalimentación de salida (OFB). Sin embargo, cuando no se utiliza la 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 bajo. Por ejemplo, si se realiza el cifrado a una velocidad de 8 megabytes por segundo, un flujo de período 2 32 bloques se repetirá después de aproximadamente una hora.

Algunas aplicaciones que utilizan el cifrado de flujo RC4 son atacables debido a debilidades en la rutina de configuración de clave de RC4; las aplicaciones nuevas deberían evitar RC4 o asegurarse de que todas las claves sean únicas e idealmente no relacionadas (como las generadas por un CSPRNG bien inicializado 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 simple viene en cantidades de longitud desconocida, como una conexión inalámbrica segura. Si se utilizara un cifrado de bloque (que no funcione en un 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 implementación, ya que los cifrados de bloque no pueden trabajar 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 32 bits de texto simple, 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 la 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 puede enviar a otros dispositivos, como un equipo de radio, que realizará la operación XOR como parte de su función. Este último dispositivo se puede diseñar y utilizar 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

Véase también

Notas

  1. ^ Deane, Arthur; Kraus, Aaron (2021). "Capítulo 3: Dominio 3: Arquitectura e ingeniería de seguridad". Referencia oficial de (ISC)2 CISSP CBK (sexta edición). Hoboken, Nueva Jersey: John Wiley & Sons, Inc. pág. 232. ISBN 978-1-119-78999-4.
  2. ^ "Haz el ChaCha: Mejor rendimiento móvil con criptografía". 23 de febrero de 2015.
  3. ^ Garcia, Flavio D.; de Koning Gans, Gerhard; Muijrers, Ruben; van Rossum, Peter; Verdult, Roel; Schreur, Ronny Wichers; Jacobs, Bart (4 de octubre de 2008). "Dismantling MIFARE Classic" (PDF) . 13th European Symposium on Research in Computer Security (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 Bluetooth". Avances en criptología – CRYPTO 2005 (PDF) . Apuntes de clase en informática. Vol. 3621. Santa Bárbara, California, EE. UU. pp. 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 del consumo de energía de los algoritmos RC4 y AES en redes LAN inalámbricas" (PDF) . IEEE Globecom . Archivado desde el original (PDF) el 2013-12-03.

Referencias

Enlaces externos