Los algoritmos de Llave Privada (o cifrado simétrico) usan la misma llave para la encriptación y desencriptación (o una es fácilmente derivable de la otra). Este es el acercamiento más sencillo a la encriptación de datos, es matemáticamente menos complicado que la criptografía de llave pública y ha sido usado por varios siglos.
La siguiente terminología se usa frecuentemente al examinar cifrados simétricos.
Cifrados en Bloque: un bloque de cifrado transforma bloques de texto plano de n-bits a bloques de texto cifrado de n-bits bajo la influencia de una llave k. En general se asume que la llave es escogida aleatoriamente, para una llave fija, un bloque cifrado es una biyección, definiendo una permutación de vectores de n-bits. Cada llave potencialmente (pero no necesariamente) define una biyección diferente. Para mensajes de texto plano que exceden un bloque de longitud se usan varios modos de operación para cifrados en bloque.
Cifrados de Flujo: consiste en una máquina de estados que retorna para cada transición de estado un bit de información. Este flujo de salida de bits se llama comúnmente la llave corriente. La encriptación puede ser implementada solo con darle la exclusividad de la llave corriente al mensaje de texto plano.
La máquina de estados no es más que un generador de números seudo-aleatorios. Por ejemplo, podríamos construir una de un cifrado en bloque encriptando repetidamente su propia salida. Típicamente, se usan construcciones más elaboradas para cifrados de flujo para obtener una alta velocidad.
Algunos de los más bien conocidos cifrados de flujo son RC4 y SEAL. Varios cifrados de flujo se basan en registros de cambio de retroalimentación lineal (LFSR - Linear-Feedback Shift Registers), tales como A5/1 usado en GSM. Estos tienen el beneficio de ser muy rápidos (varias veces más rápidos que los cifrados en bloque usuales).
SSSC (Self-Synchronizing Stream Ciphers - Cifrados de Flujo de Sincronizado Propio): La clase de cifrados de flujo de sincronizado propio, convenientemente, tiene la propiedad de que corrige el flujo de salida después del cambio de bits o aún cuando se pierden bits después de un corto tiempo (digamos, algunos cientos de bits).
Los SSSCs pueden ser construidos usando cifrados en bloque en una manera relacionada a CFB. Asuma que ya encriptamos n bits del mensaje y conocemos ese tanto del texto cifrado (donde dice n nótese la longitud del bloque del cifrado). Luego, producimos un nuevo bit de llave de arranque (ver arriba) encriptando los n bits de texto cifrado. Tomamos un bit de la salida del cifrado para que sea el nuevo bit de la llave de arranque. Ahora moviendo un bit más podemos iterar este procedimiento para toda la longitud del mensaje.
El cifrado en bloque usado debe tener un tamaño de bloque suficientemente largo para evitar ataques de substitución, por ejemplo.
Substitución y transposición: substitución significa reemplazar símbolos o grupos de símbolos por otros símbolos o grupos de símbolos. Transposición, por otro lado, significa permutar los símbolos en un bloque. Ninguna de estas operaciones por si sola provee de suficiente seguridad, pero mediante su combinación pueden ser construidos cifrados fuertes. Por una Red de Substitución-Permutación (SPN - Substitution Permutation Network), nos referimos a un cifrado compuesto de un número de etapas, cada una involucrando substituciones y permutaciones. Ejemplos bien conocidos de SPNs son DES y CAST-128.
S-Boxes: tablas de búsqueda que mapean n bits a m bits (donde n y m son iguales frecuentemente). Hay varias maneras de construir buenas S-boxes para cifrados, así como varias maneras de medirlas. Algunos diseñadores usan una aproximación matemática rigurosa al usar funciones curvilíneas (o relacionadas) para crear S-boxes que puedan ser probadas como resistentes contra algunos ataques particulares. Otros diseñadores usan aproximaciones heurísticas, lo cual conduciría a que las s-boxes sean más difíciles de manejar en pruebas matemáticas, pero pueden tener beneficios adicionales (como varias opciones diferentes de implementación).
La S-Box puede ser la única parte no lineal del cifrado. Este es el caso del cifrado en bloque DES, y de esta manera debe ser considerado como la parte más importante del algoritmo. De hecho, muchos consideran a las S-boxes DES tan buenas que las usan en sus propios diseños (por ejemplo, Serpent).
Redes Feistel: una red Feistel es una manera general de construir cifrados en bloque desde funciones simples. La idea original fue usada en el cifrado en bloque Lucifer, inventado por Horst Feistel. Muchas variaciones han sido concebidas de la versión original.
Dicho de manera sencilla, la red Feistel standard toma una función de n bits a n bits y produce una función inversa de 2n bits a 2n bits. La función básica sobre la cual se basa la estructura es llamada comúnmente de redondeo. La propiedad esencial de las redes de Feistel que las hace tan útiles en diseño de cifrados es que la función de redondeo no necesita ser invertible, pero la función resultante siempre lo es.
Si la función de redondeo depende de, digamos, k bits de una llave, entonces el cifrado Feistel requiere rk bits de la llave donde r es el número de redondeo usado.
La seguridad de la estructura Feistel no es obvia, pero análisis de DES han demostrado que es una buena manera de construir cifrados. Es obligatorio que el cifrado Feistel tenga suficientes redondeos, pero solo añadiendo más redondeos no siempre garantiza la seguridad.
La operación de tomar la llave de usuario y expandirla en rk bits para los redondeos de Feistel se llama "key scheduling". Esta operación, no siempre es lineal, por lo tanto descubrir alguno de los rk bits de las llaves de redondeo no provee de información directamente sobre la llave actual del usuario. Existen muchos cifrados que tienen esta estructura básica; Lucifer, DES, y Twofish, solo para nombrar algunos.
Expansión, Permutación: estas son herramientas comúnmente usadas en la mezcla de bits en la función de redondeo. Son operaciones lineales, por lo que no son suficientes para garantizar la seguridad. Sin embargo, cuando son usadas con buenas S-boxes no lineales (como en DES) son vitales para la seguridad ya que propagan las operaciones no lineales uniformemente sobre todos los bits.
Operaciones de "corte de bits" (operaciones lógicas XOR, AND, OR, NOT y permutaciones de bit): La idea sobre implementaciones de operaciones de corte a cifrados en bloque se le debe a Eli Biham. Es una práctica común en máquinas de vectores realizar una operación paralela. Sin embargo, Biham lo aplicó en máquinas en serie usando registros tan grandes como los que tienen las computadoras modernas. El término "corte de bits" se le debe a Matthew Kwan.
Básicamente todos los cifrados en bloque pueden ser escritos a la manera de "corte de bits", pero operaciones tales como la suma y la multiplicación pueden volverse muy lentas. Por otro lado, las permutaciones casi son libres tal que solo requieren nombrar los registros nuevamente y esto puede hacerse a nivel de código. De esta manera, por ejemplo, en la búsqueda exhaustiva DES usando técnicas de "corte de bits", uno puede incrementar la llave actual en una fracción del tiempo que usualmente se necesita para "key scheduling". El finalista de AES, Serpent está diseñado para ser implementado usando solo operaciones de "corte de bits". Esto lo hace particularmente eficiente en las arquitecturas modernas con muchos registros.
Muchos cifrados comúnmente usados son los cifrados en bloque. Los cifrados en bloque transforman un bloque de tamaño fijo de datos (comúnmente 64 bits) en otro bloque de datos de tamaño fijo (posiblemente también de 64 bits) usando una función seleccionada por la llave. Si la llave, el bloque de entrada y el bloque de salida tienen todos los n bits, un cifrado en bloque básicamente define un mapeo uno a uno desde los n-bit enteros a las permutaciones de n-bit enteros.
Si el mismo bloque se encripta dos veces con la misma llave, el texto cifrado resultante es también el mismo (este modo de encriptación es llamado libro de código electrónico o ECB - Electronic Code Book). Esta información puede ser útil para un atacante. El causar que textos planos idénticos sean encriptados a diferentes textos cifrados en bloque, tres modos standard se usan comúnmente:
CBC (Cipher Block Chaining - Encadenamiento de Cifrado en Bloque): un bloque de texto cifrado se obtiene primero realizando un XOR del bloque de texto plano con el bloque de texto cifrado anterior, y encriptando el valor resultante. De esta manera, los primeros bloques influyen en los bloques que les siguen, lo cual incrementa el número de bits de texto plano en los que un bit de texto cifrado depende, pero también lleva a la sincronización de problemas si un bloque se pierde.
CFB (Cipher FeedBack - Cifrado de Retroalimentación): el k-esimo bloque de texto cifrado es obtenido encriptando el (k-1)-esimo bloque y aplicando el XOR al resultado y al texto plano. El modo CFB tiene una propiedad de auto sincronismo: tan pronto como n (el tamaño del bloque) bits perdidos del texto cifrado han sido recibidos correctamente, la desencriptación será correcta, a pesar de posibles errores de transmisión temprana. Interesantemente, un ciclo de retroalimentación de CFB puede también ser usado como un generador de números seudo-aleatorios si uno simplemente alimenta un bloque de datos verdaderamente aleatorios con sus bloques siguientes en cero en la rutina de encriptación (aunque el periodo esperado de este PRNG sería de solo 2n/2 donde n es el tamaño del bloque del cifrado).
OFB (Output FeedBack - Retroalimentación de Salida): el cifrado es usado como un generador sincrónico de flujos de llaves, a cuya salida se le aplica un XOR con el texto plano para obtener el texto cifrado, bloque a bloque. El flujo de llaves es producido por una encriptación iterativa, comenzando con un vector de inicialización, el cual, junto con la llave, es aceptado de antemano.
Se puede encontrar más información sobre modos de cifrado en "Handbook of Applied Cryptography" de Menezes.
El One-Time Pad (OTP) es el único cifrado que ha sido probado como incondicionalmente seguro, e inquebrantable en la práctica. Ha sido probado también que cualquier cifrado inquebrantable e incondicionalmente seguro debe ser en principio un One-Time Pad.
El cifrado Vernam (inventado por G. Vernam en 1917) es una famosa instancia de un OTP. Este cifrado es muy simple: toma un flujo de bits que contenga el mensaje en texto plano, y un flujo de bits aleatorios y secretos de la misma longitud que el texto plano, el cual es considerado la llave. Para encriptar el texto plano con la llave, se aplica un OR exclusivo secuencialmente entre cada par de bits llave y el bit de de texto plano para obtener el bit de texto cifrado. Si la llave es realmente aleatoria, se puede probar que un atacante no tiene manera de decidir que texto plano supuesto es más acertado que cualquier otro cuando solo se tiene el texto cifrado y no hay información sobre el texto plano.
El problema práctico es que la llave no tiene un tamaño pequeño y constante, sino que tiene el mismo tamaño del mensaje, y una parte de la llave no se debería usar nunca dos veces (o el cifrado podría romperse). De esta manera, hemos trasladado el problema de intercambiar datos secretos por el problema de intercambiar llaves aleatorias secretas de la misma longitud. Sin embargo, este cifrado, supuestamente, ha estado en uso generalizado desde su invención, y mucho más desde la prueba de seguridad por Claude Shannon en 1949. Aunque la verdad es que la seguridad de este cifrado fue conjeturada anteriormente, fue Shannon quien encontró como probarla formalmente.
Se puede encontrar más información, por ejemplo, en el libro escrito por: Doug Stinson, Criptografía: Teoría y Práctica.
El Standard de Encripción de Datos (DES - Data Encryption Standard) en un algoritmo desarrollado a mediados de los 70s. Se convirtió en un standard por el US National Institute of Standards and Technology (NIST), y fué adoptado por otros varios gobiernos en todo el mundo. Fué y todavía es extensamente usado, especialmente en la industria financiera.
DES es un cifrado en bloque con una longitud de 64 bits por bloque. Usa llaves de 56 bits. Esto lo hace susceptible a una búsqueda exhaustiva de la llave con computadores modernas y hardware de propósitos especiales. DES es lo suficientemente fuerte para dejar fuera a hackers aleatorios e individuos, pero es fácilmente quebrantable con hardware especial por el gobierno, organizaciones criminales, o grandes corporaciones. DES se está volviendo demasiado débil y no debe ser usado en aplicaciones nuevas. Como consecuencia, NIST propuso en 2004 retirar el standard DES.
Una variante de DES, Triple-DES (también 3DES) está basada en el uso de DES 3 veces (normalmente en una secuencia de encriptación-desencriptación-encriptación con 3 llaves diferentes y sin relación entre ellas). Podría decirse que el Triple-DES es más fuerte que el DES simple, sin embargo, es bastante más lento comparado a algunos nuevos cifrados en bloque.
No obstante, aunque DES parezca ser de poco interés para las aplicaciones de hoy hay varias razones para seguir considerándolo importante. Fué el primer cifrado en bloque que fué extensamente desplegado en el sector público. De esta manera jugó un rol importante en la construcción de una criptografía fuerte para el público.
Además, el diseño fué excepcionalmente bueno para un cifrado que fué hecho para ser usado solo unos pocos años. DES a probado ser un cifrado muy fuerte y tomó más de una década que sean desarrollados ataques criptoanalíticos interesantes (Sin subestimar los esfuerzos pioneros que llevaron a este gran avance). El desarrollo de criptoanálisis diferenciales y criptoanálisis lineales abrió caminos para entender realmente el diseño de cifrados en bloque.
Aunque al momento de la introducción de DES, su diseño se mantuvo en secreto, esto no desanimó su análisis, al contrario. Algo de información fué publicada sobre su diseño, y uno de los diseñadores originales, Don Coppersmith, comentó que habían descubierto ideas similares a las del criptoanálisis diferencial ya mientras diseñaban DES en 1974. Sin embargo, solo fué cuestión de tiempo para que estas ideas fundamentales fueran redescubiertas.
Aún hoy, cuando DES no es más considerado como una solución práctica, se usa frecuentemente para describir nuevas técnicas de criptoanálisis. Es notable que aún hoy, no hay técnicas criptoanalíticas que puedan quebrar completamente a DES de una manera estructurada, es más, la única debilidad real conocida es el pequeño tamaño de su llave (y quizás el pequeño tamaño de bloque).
En respuesta a la creciente viabilidad de ataques contra DES, NIST lanzó un llamado para propuestas para un sucesor oficial que resuelva las necesidades de seguridad del siglo 21. Este sucesor se llama Standard Avanzado de Encriptación (AES - Advanced Encryption Standard). Cinco algoritmos llegaron a la segunda ronda, donde Rijndael fué seleccionado como el standard final. Ahora tendremos un vistazo rápido a cada uno de ellos y a sus peculiaridades criptográficas.
Todos los cifrados tienen un tamaño de bloque de 128 bits y soportan llaves de 128, 192 y 256 bits. Los tamaños de llaves más bien largos son probablemente requeridos para la construcción de funciones de Hash eficientes.
El AES (Rijndael): fué diseñado por dos criptógrafos belgas, Joan Daemen y Vincent Rijmen. Se puede encontrar una exposición minuciosa en el libro escrito por sus diseñadores (The Design of Rijndael, AES - The Advanced Encryption Standard, Springer, 2002).
Rijndael sigue con la tradición de cifrados en cuadro (está basado en ideas similares al cifrado en cuadro). NIST dió como sus razones para elegir a Rijndael que se comporta muy bien en hardware y software en un amplio espectro de ambientes en todos los modos posibles. Tiene un tiempo de montaje de llave excelente y bajos requerimientos de memoria, en adición sus operaciones son fáciles de defender contra ataques de tiempo y poderosos.
NIST indicó que los cinco finalistas tenían una seguridad adecuada y que no había nada malo con los otros cuatro cifrados. Después de que todos los análisis y comentarios recibidos fueran considerados, NIST consideró a Rijndael la mejor opción para el AES. Los otros cuatro finalistas se mencionan abajo.
MARS por Zunic, IBM: este es un diseño nuevo e interesante(que usa un tipo especial de red de Feistel), el cual depende mucho del set de instrucciones disponible en los procesadores de 32 bits modernos. Esto tiene el beneficio de que en esas maquinas especificas es eficiente, pero puede traer dificultades de implementación en arquitecturas más baratas como las smart cards.
RC6 por Rivest, Robshaw y Yin, RSA Laboratories: RC6 sigue las ideas de RC5 - pero con varias mejoras. Por ejemplo, intenta evitar algunos ataques diferenciales contra las rotaciones de datos dependientes de RC5. Sin embargo, hay algunos ataques que llegan bastante lejos, y no está claro si RC6 está bien analizado.
Serpent por Anderson, Biham y Knudsen: Serpent tiene un diseño básicamente conservador pero en muchos aspectos innovador.
Serpent es un algoritmo de cifrado simétrico de bloques que quedó finalista en el concurso Advanced Encryption Standard del NIST, tras Rijndael. Serpent fue diseñado por Ross Anderson, Eli Biham y Lars Knudsen.
Como otros participantes del AES Serpent usa un tamaño de bloque de 128 bits y soporta tamaños de clave de 128, 192 y 256 bits de longitud. El cifrado consiste en 32 rondas de substitución-permutación operando sobre cuatro bloques de 32 bits. Cada ronda usa 32 copias de la misma S-Box de 4-bit a 4-bit. Serpent se diseñó para que las operaciones se realizasen en paralelo, usando 32 desplazamientos de 1 bit.
Serpent adoptó una visión mucho más cauta que otros participantes al AES, optando por un mayor margen de seguridad. Los diseñadores afirmaron que 16 rondas serían suficientes para lo métodos conocidos de ataque, pero especificaron 32 rondas para asegurarse de la robustez del algortimo contra futuros descubrimientos en criptoanálisis. El sitio oficial puede ser visto en Serpent.
Twofish: es un nuevo cifrado en bloque diseñado por Counterpane (cuyo fundador y CTO es Bruce Schenier). El diseño es altamente delicado, con muchas maneras alternativas de implementación. Es criptoanalizado en detalle, por el autorizado "equipo extendido de TwoFish". Es básicamente un cifrado Feistel, pero utiliza varias ideas diferentes.
El tamaño de bloque en Twofish es de 128 bits y el tamaño de clave puede llegar hasta 256 bits. Twofish llegó a la ronda final del concurso del NIST, pero no fue elegido para la estandarización. TwoFish quedó tercero, tras Rijndael y Serpent.
Twofish fue diseñado por Bruce Schneier, John Kelsey, Doug Withing, David Wagner, Chris Hall y Niels Ferguson. El Extended Twofish team, que realizó más profundos criptoanálisis de Twofish y otros participantes a AES incluyen a Stefan Lucks, Tadayoshi Kohno, y Mike Stay.
Twofish se relaciona con el método de cifrado por bloques anterior Blowfish. Las características distintivas de Twofish son el uso de S-boxes pre-computadas con llaves dependientes, y una llave-horario relativamente compleja. Twofish coje prestados algunos elementos de otros diseños: por ejemplo, el Pseudo-Hadamard transforman (PHT) de la familia SAFER de cifrado. Twofish utiliza la misma estructura de Feistel que el DES.
En la mayoría de las plataformas de software Twofish es levemente más lento que Rijndael (el algoritmo elegido para AES) para las llaves de 128 bits, pero algo más rápido para las llaves de 256 bits.
Este cifrado tiene S-boxes dependientes de llaves como Blowfish (otro cifrado de Bruce Schneier).
El sitio oficial puede ser visto aquí.
Blowfish: fué diseñado por Bruce Shneier. Es un cifrado en bloque con un tamaño de bloque de 64 bits y llaves de longitud variable (de hasta 448 bits). Ha ganado una justa cantidad de aceptación en un número de aplicaciones, incluyendo Nautilus y PGPfone.
Blowfish utiliza la idea de S-boxes aleatorias. Mientras hace "key scheduling", se generan grandes tablas de lookup seudo-aleatorias haciendo varias encriptaciones. Las tablas dependen de la llave provista por el usuario de una manera muy compleja. Este acercamiento ha sido probado siendo altamente resistente contra varios ataques como el criptoanálisis diferencial y lineal. Desafortunadamente esto también significa que no es el algoritmo seleccionado para ambientes donde no hay mucha memoria disponible (algo como 4096 bytes).
Los únicos ataques conocidos contra Blowfish se basan en sus pobres clases de llaves.
CAST-128: es un criptosistema parecido a DES de Red de Substitución-Permutación (SPN) el cual aparenta tener una buena resistencia al criptoanálisis diferencial, lineal y de llave relacionada. Tiene la estructura de Feistel y utiliza ocho S-boxes fijas. CAST-128 soporta longitudes de llave variables entre 40 y 128 bits. Esto se describe en la RFC 2144.
IDEA (International Data Encryption Algorithm): es un algoritmo desarrollado en ETH Zurich en Suiza por Xuejia Lai. Usa una llave de 128 bits y generalmente se considera muy seguro. Ha sido uno de los mejores algoritmos públicos conocidos por un tiempo (antes de que el standard AES comenzara su segunda ronda, ver arriba). Ha circulado varios años y no se han publicado ataques prácticos a pesar de numerosos intentos de analizarlo.
Uno de los mejores ataques usa la imposible idea diferencial de Biham, Shamir y Biryukov. Pueden atacar solo 4.5 redondeos de IDEA, lo que no supone riesgos sobre el total de 8.5 redondeos usados en IDEA.
IDEA está patentado en Estados Unidos y en la mayoría de los países Europeos.
Rabbit: es un cifrado de flujo reciente, basado en iterar un set de funciones no lineales acopladas. Se caracteriza por su alta performance en software. Una descripción detallada y un análisis de seguridad de Rabbit está disponible desde el sitio web de sus diseñadores.
RC4: es un cifrado de flujo diseñado por Ron Rivest para RSA Data Security, Inc. Este cifrado era un secreto comercial hasta que alguien publicó código fuente de un algoritmo en usenet, declarando que era equivalente a RC4. Hay evidencia muy fuerte de que el algoritmo publicado es efectivamente equivalente a RC4. El algoritmo es muy rápido. Su seguridad es desconocida, pero quebrarla no parece trivial. Debido a su velocidad puede tener uso en ciertas aplicaciones. Acepta llaves de longitud arbitraria.
RC4 es esencialmente un generador de números seudo aleatorios y a la salida del generador se le aplica un XOR con el flujo de datos. Por esta razón, es muy importante que la misma llave RC4 nunca sea usada para encriptar dos flujos de datos diferentes.
En esta sección se listan algunos de los cifrados famosos del pasado con links a información más completa donde sea posible.
Fish: fue usado por la armada alemana en WWII para cifrar comunicaciones del alto comando. Fue producido por un cifrado de flujo llamado la máquina de Lorentz. Fish fue el nombre que se le dio por criptoanalistas británicos. Fue importante porque le causó muchas dificultades a los analistas británicos, quienes finalmente desarrollaron una máquina llamada Colossus, que podría decirse fue la primera, o una de las primeras, computadoras digitales.
La máquina Colossus puede haber sido un factor importante en el planeamiento y éxito del ataque de los aliados en Normanda. Dada la inteligencia producida por el criptoanálisis de Fish, las fuerzas aliadas conocieron las posiciones de muchas divisiones alemanas.
Enigma: fue otro cifrado usado por los alemanes en la segunda Guerra Mundial. La máquina usó muchos rotores y parecía una máquina de escribir. Sin embargo, primero matemáticos polacos y luego británicos fueron capaces de seguir adelante con el desarrollo de la máquina. La mayoría de las comunicaciones que usaban la versión básica de Enigma fueron descifradas por analistas británicos en Bletchley Park con un par de horas de intercepción. Uno de los más fuertes Enigma fueron usados en comunicaciones submarinas, pero los analistas británicos se las arreglaron para quebrarlas con grandes implicancias para la batalla en el Atlántico.
Hay muchos buenos libros sobre Enigma y Bletchley Park. En adición, el trabajo de la mayor figura del criptoanálisis británico, Alan Turing, fué explicado en muchos artículos y libros. Recientemente sus notas originales sobre criptoanálisis de esos tiempos fueron reveladas al público.
Este cifrado, o una variante de él, es usada por el programa de Unix, crypt. Es poco probable que alguna variante de Enigma pueda ser considerada muy segura por los estándares de hoy.
El cifrado Vernam: se describe en detalle arriba cuando se describe OTP
Cifrado de substitución: es uno de los métodos básicos de lápiz y papel. Haga una tabla listando primero su alfabeto en orden en la primera celda, y después haga una permutación aleatoria del alfabeto en la segunda celda. Entonces puede encriptar cualquier caracter del alfabeto solo mirando en la primera celda y escribiendo el caracter aleatorio de la segunda celda. La llave de este método es la permutación del alfabeto en la segunda celda. La desencriptación funciona a la inversa.
Este método es susceptible al análisis de frecuencia, tanto como el tamaño del alfabeto sea pequeño. Los cifrados en bloque modernos pueden ser vistos como una variante de esta idea, en el sentido de que intentan ocultar el mensaje bajo un alfabeto largo que depende de la llave. En el caso del cifrado en bloque la permutación se genera por la llave privada y el espacio de llave no podría cubrir todas las posibles permutaciones.
Vigenere: este cifrado usa aritmética de reloj para añadir juntos la llave y el mensaje. La diferencia entre OTP y Vigenere es que en Vigenere reusamos explícitamente la llave corta varias veces para un mensaje.
Métodos para atacar el cifrado Vigenere son el test Kasiski, índice de coincidencia, etc. Estos llevan a métodos efectivos los cuales quiebran hasta mensajes muy cortos (relativo al tamaño de la llave, por supuesto).
Cifrado Hill: este cifrado usa matrices en aritmética de reloj, y es altamente susceptible a los conocidos ataques de texto plano.