stringtranslate.com

Cifrado VIC

Diagrama de flujo del cifrado VIC

El código VIC era un código de lápiz y papel utilizado por el espía soviético Reino Häyhänen , cuyo nombre en código era "VICTOR".

Si se le diera al cifrado un nombre técnico moderno, se lo conocería como "sustitución monoalfabética bipartita supercifrada por doble transposición modificada". [1] Sin embargo, según la clasificación general, es parte de la familia de cifrados nihilistas .

Se podría decir que fue el código manual más complejo que se haya visto jamás, cuando se descubrió por primera vez. El análisis inicial realizado por la Agencia de Seguridad Nacional de Estados Unidos (NSA) en 1953 no concluyó con certeza que se tratara de un código manual, pero su ubicación en una moneda de 5 centavos ahuecada (más tarde conocida como Hollow Nickel Case ) implicaba que podía descifrarse utilizando lápiz y papel. El código VIC permaneció intacto hasta que se dispuso de más información sobre su estructura.

Aunque ciertamente no es tan complejo o seguro como los cifrados de flujo o de bloque operados por computadora modernos , en la práctica los mensajes protegidos por él resistieron todos los intentos de criptoanálisis por parte de al menos la NSA desde su descubrimiento en 1953 hasta la deserción de Häyhänen en 1957.

Un salto revolucionario

El cifrado VIC puede considerarse el pináculo evolutivo de la familia de cifrados nihilistas .

El cifrado VIC tiene varios componentes integrados importantes, entre ellos la adición de cadena módulo 10 , un generador de Fibonacci rezagado (una fórmula recursiva utilizada para generar una secuencia de dígitos pseudoaleatorios ), un tablero de ajedrez a caballo y una transposición doble interrumpida .

Hasta el descubrimiento de VIC, se creía generalmente que una doble transposición por sí sola era el cifrado más complejo que un agente, en la práctica, podía utilizar como cifrado de campo.

Historia

Durante la Segunda Guerra Mundial , varias redes de espionaje soviéticas se comunicaban con el Centro de Moscú utilizando dos sistemas de cifrado que son esencialmente mejoras evolutivas del cifrado nihilista básico. Una versión muy fuerte fue utilizada por Max Clausen en la red de Richard Sorge en Japón , y por Alexander Foote en la red de espionaje Lucy en Suiza . [2] Una versión ligeramente más débil fue utilizada por la red Rote Kapelle . [3]

En ambas versiones, el texto simple se convirtió primero en dígitos mediante el uso de un tablero de ajedrez en lugar de un cuadrado de Polibio . Esto tiene la ventaja de comprimir ligeramente el texto simple, aumentando así su distancia de unicidad y también permitiendo a los operadores de radio completar sus transmisiones más rápido y apagar antes. Apagar antes reduce el riesgo de que el operador sea encontrado por los radiogoniómetros enemigos . Aumentar la distancia de unicidad aumenta la resistencia contra los ataques estadísticos.

Clausen y Foote escribieron su texto en claro en inglés y memorizaron las 8 letras más frecuentes del inglés (para llenar la fila superior del tablero de ajedrez) mediante la frase mnemotécnica "a sin to err" (omitiendo la segunda "r"). El tablero de ajedrez inglés estándar tiene 28 espacios para caracteres y en este cifrado los dos adicionales se convirtieron en "punto" y "desplazamiento de números". Los números se enviaban mediante un desplazamiento de números, seguido de los dígitos reales del texto en claro en pares repetidos, seguido de otro desplazamiento. Luego, de manera similar al Nihilist básico, se agregó un aditivo digital, que se llamó "cierre". Sin embargo, se usó un aditivo diferente cada vez, por lo que finalmente se tuvo que insertar un "grupo indicador" oculto para indicar qué aditivo se usó.

A diferencia del nihilismo básico, el aditivo se añadía mediante una suma no portadora (suma dígito a dígito módulo 10), lo que producía un resultado más uniforme que no filtraba tanta información. Más importante aún, el aditivo no se generaba mediante una palabra clave, sino seleccionando líneas al azar de almanaques de estadísticas industriales. Se consideraba que esos libros eran lo suficientemente aburridos como para no despertar sospechas si se buscaba a un agente (en particular porque las historias de tapadera de los agentes eran hombres de negocios) y que tenían una densidad de entropía tan alta que proporcionaban un aditivo muy seguro. Por supuesto, las cifras de un libro de este tipo no están realmente distribuidas de manera uniforme (hay un exceso de "0" y "1" (véase la Ley de Benford ), y es probable que los números secuenciales sean algo similares), pero, sin embargo, tienen una densidad de entropía mucho mayor que las frases de contraseña y similares; en cualquier caso, en la práctica parece que nunca se han criptoanalizado con éxito.

La versión más débil generó el aditivo a partir del texto de una novela o un libro similar (al menos un miembro de Rote Kapelle utilizó The Good Soldier Schweik ). Este texto se convirtió en aditivo digital utilizando una técnica similar a un tablero de ajedrez.

El desarrollo definitivo en esta línea fue el cifrado VIC, utilizado en la década de 1950 por Reino Häyhänen . En ese momento, la mayoría de los agentes soviéticos utilizaban libretas de un solo uso . Sin embargo, a pesar de la perfección teórica de las libretas de un solo uso, en la práctica se rompían , mientras que el VIC no. Sin embargo, el cifrado de un solo uso solo podía romperse cuando se reutilizaban las páginas cifradas, debido a problemas logísticos, y por lo tanto ya no era verdaderamente de un solo uso. [4]

Resumen de mecánica

La clave secreta para el cifrado es la siguiente:

El cifrado también contaba con la ayuda del adversario, que desconocía un grupo de claves de cinco dígitos que era exclusivo de cada mensaje. El grupo de claves no era estrictamente un "secreto" (ya que estaba incrustado en el texto cifrado), pero se encontraba en una ubicación del texto cifrado que el adversario desconocía.

El código funcionaba básicamente de la siguiente manera:

  1. Utilice los secretos anteriores (Frase, Fecha, Grupo de teclas y Número personal) para crear un bloque de 50 dígitos de números pseudoaleatorios.
  2. Utilice este bloque para crear las claves de mensaje para:
    1. Un tablero de ajedrez a caballo entre dos aguas
    2. Dos transposiciones en columnas
  3. Cifrar el mensaje de texto simple mediante el tablero de ajedrez
  4. Aplicar dos transposiciones al texto cifrado resultante (intermediario) a través de dos columnas
    1. Una transposición en columna "estándar"
    2. Una transposición columnar diagonal
  5. Inserción del grupo de claves en el texto cifrado, según lo determinado por el sexto dígito de la fecha

Mecánica detallada

Nota: en esta sección se hace un seguimiento de los cálculos haciendo referencia a [Line-X] o similar. Esto es para alinearlo con la notación indicada en la descripción del archivo de la CIA. [1]

Derivación de bloques pseudoaleatorios

Derivación de la clave del mensaje

Ejemplo de generación de claves

Número personal: 6Fecha: 13 de septiembre de 1959 // Aterrizaje en la Luna - 13 de septiembre de 1959 ('139195' - truncado a 6 dígitos)Frase: 'Era la noche antes de Navidad' // de 'Una visita de San Nicolás' - poemaGrupo de claves: 72401 // generado aleatoriamente[Línea A]: 72401 // Grupo de teclas[Línea B]: 13919 // Fecha - truncada a 5 dígitos [Línea-C]: 69592 // restar [Línea-B] de [Línea-A][Línea D]: TWASTHENIG HTBEFORECH // Frase - truncada a 20 caracteres[Línea-E]: 8017942653 6013589427 // vía secuenciación[Línea-F]: 6959254417 1234567890 // de [Línea-C] y suma en cadena, luego '1234567890'[Línea-G]: 4966196060 // agrega [Línea-E.1] a [Línea-F.1][Línea-H]: 3288628787 // codifica [Línea-G] con [Línea-E.2], [Línea-F.2] ayuda[Línea-J]: 3178429506 // La secuenciación de [Línea-H][Línea-K]: 5064805552 // BLOQUE: Adición en cadena de [Línea-H] para 50 dígitos[Línea-L]: 5602850077[Línea-M]: 1620350748[Línea-N]: 7823857125[Línea-P]: 5051328370Los dos últimos dígitos no iguales son '7' y '0', sumados al Número Personal (6), significa que las claves de permutación tienen 13 y 6 dígitos de longitud. [Línea-Q]: 0668005552551 // primeros 13 dígitos del bloque[Línea-R]: 758838 // siguientes 6 dígitos del bloque[Línea-S]: 5961328470 // Secuenciación de [Línea-P]

Cifrado de mensajes

Tablero de ajedrez a horcajadas

Una vez que se ha generado la clave, la primera etapa del cifrado del mensaje consiste en convertirlo en una serie de dígitos mediante un tablero de ajedrez . La clave (fila de encabezado) del tablero de ajedrez se basa en [Línea-S]. Luego, se utiliza una serie de letras comunes previamente acordadas en la segunda fila. El ejemplo siguiente utiliza la mnemotecnia inglesa 'AT ONE SIR'; sin embargo, la mnemotecnia cirílica utilizada por Hayhanen era 'snegopad', la palabra rusa para nevada.

Las celdas restantes se rellenan, y el resto del alfabeto se rellena en orden, seguido de .(punto) y /(símbolo de cambio de número, indicando que los siguientes símbolos hasta el próximo cambio de número son números; vea el ejemplo a continuación).

A continuación se muestra un ejemplo de codificación, donde los números:

MENSAJE: 'Ataque al amanecer. Por amanecer me refiero a las 05:00, no a las 09:15 como la última vez'.Codificación de símbolos individuales: ATAQUE AL AMANECER (...) 0 9 1 5 5 9 9 5 69 64 5 9 66 5 83 3 80 000 999 111 555 80Código final: 59956 96459 66583 38765 88665 83376 02538 00005 55000 00080 87319 80000 99911 15558 06776 42881 86667 66675 49976 0287-

Transposiciones: transposición columnar

El mensaje se transpone mediante la transposición en columnas estándar codificada por [Line-Q] anterior. (Nota: si la longitud codificada del mensaje no es múltiplo de 5 en esta etapa, se agrega un dígito adicional)

El mensaje se transpone luego a través de la transposición diagonal indicada por [Line-R] arriba. El significado de "diagonal" en este caso es que se emplearon zonas de disrupción triangulares para hacer que la transposición fuera irregular.

Inserción de grupo de teclas

El grupo de claves (sin cifrar) se inserta en los grupos de texto cifrado 'P' desde el final; donde 'P' es el sexto dígito no utilizado de la fecha.

Suma/resta modular

La suma o resta modular, también conocida como "falsa suma/resta", en este contexto (y en muchos sistemas de cifrado con lápiz y papel) es una suma y resta dígito por dígito sin "llevar" ni "tomar prestado". Por ejemplo:

Secuenciación

En este contexto, la secuenciación consiste en ordenar los elementos de una entrada de 1 a 10 (donde "0" representa 10). Esto se hace con letras (en cuyo caso se utiliza el orden alfabético) o con números (en cuyo caso se utiliza un valor numérico). En caso de que los valores sean iguales, se ordena primero el valor situado más a la izquierda. Por ejemplo:

Adición de cadena

La suma en cadena es similar a un registro de desplazamiento de retroalimentación lineal , en el que se genera un flujo de números como salida (y se retroalimenta como entrada) a un número inicial. En el cifrado VIC, la suma en cadena funciona (1) tomando el número inicial original, (2) sumando falsamente los dos primeros dígitos y (3) colocando este nuevo número al final de la cadena. Esto continúa, sin embargo, los dígitos que se suman se incrementan en uno. Por ejemplo, si el número inicial era '90210', las primeras 5 iteraciones se muestran a continuación:

90210 // Valor inicial de la semilla90210 9         // 9 = 9+0 (primeros dos dígitos)90210 9 2        // 2 = 0+2 (los dos siguientes...)90210 92 3       // 3 = 2+190210 923 1      // 1 = 1+090210 9231 9     // 9 = 0+9; observe cómo el primer '9' generado se retroalimenta
Codificación de dígitos

El paso de codificación reemplaza cada dígito de un número (es decir, [Línea-G] en el código) con uno de una secuencia de teclas (es decir, [Línea-E.2]) que representa su posición en el orden del 1 al 10. Se debe observar que al escribir la serie '1234567890' (que se muestra como [Línea-F.2]) debajo de [Línea.E.2], cada valor del 0 al 9 tiene otro encima. Simplemente reemplace cada dígito del número que se va a codificar con el que está encima de él en la secuencia de teclas.

Por ejemplo, el número '90210' tendría codificaciones como las siguientes: .

Entonces el resultado sería: '27067'.

Descifrado

El descifrado del código VIC es el siguiente:

Criptoanálisis

El cifrado es uno de los cifrados de lápiz y papel más fuertes que se utilizan actualmente en el mundo real, y la NSA no lo descifró (en términos de determinar el algoritmo subyacente) en su momento. [1] Sin embargo, con el advenimiento de la informática moderna y la divulgación pública del algoritmo, esto no se consideraría un cifrado fuerte. Se puede observar que la mayoría de la entropía en la clave secreta converge a un número de 10 dígitos [Línea-H]. Este número de 10 dígitos es aproximadamente 34 bits de entropía, combinado con el último dígito de la fecha (necesario para identificar dónde está el KeyGroup) daría alrededor de 38 bits de entropía en términos de fuerza de la clave del mensaje. 38 bits están sujetos a un ataque de fuerza bruta en menos de un día en las computadoras modernas.

Véase también

Referencias

  1. ^ abc David Kahn. "El número uno de Moscú". 1993.
  2. ^ Kahn, David (1996). Los descifradores de códigos . Scribner. pág. 650.
  3. ^ Kahn, David (1996). Los descifradores de códigos . Scribner. pág. 652.
  4. ^ "VENONA: una visión general" (PDF) . www.nsa.gov . Archivado desde el original (PDF) el 4 de marzo de 2016 . Consultado el 12 de enero de 2022 .

Enlaces externos