Cifrado VIC

El cifrado VIC era un cifrado 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 a horcajadas supercifrada por doble transposición modificada". Sin embargo, por clasificación general es parte de la familia de cifrados nihilistas.
Posiblemente, fue el cifrado manual más complejo jamás visto, cuando se descubrió por primera vez. El análisis inicial realizado por la Agencia de Seguridad Nacional de los Estados Unidos (NSA) en 1953 no concluyó absolutamente que se tratara de un cifrado manual, pero su ubicación en una moneda hueca de 5 ¢ (más tarde conocida como Hollow Nickel Case) implicaba que podía decodificarse. usando lápiz y papel. El cifrado VIC permaneció intacto hasta que hubo más información disponible sobre su estructura.
Aunque ciertamente no es tan complejo ni seguro como los sistemas de cifrado de flujo o de bloque operados por computadora modernos, en la práctica, los mensajes protegidos por este sistema resistieron todos los intentos de criptoanálisis por parte de la NSA, al menos, desde su descubrimiento en 1953 hasta la deserción de Häyhänen en 1957..
Un salto revolucionario
El cifrado VIC puede considerarse como el pináculo evolutivo de la familia de cifrado nihilista.
El cifrado VIC tiene varios componentes integrados importantes, incluida la adición de cadena mod 10, un generador de Fibonacci retrasado (una fórmula recursiva utilizada para generar una secuencia de dígitos pseudoaleatorios), un tablero de ajedrez a horcajadas y una doble transposición interrumpida.
Hasta el descubrimiento de VIC, generalmente se pensaba que una doble transposición por sí sola era el cifrado más complejo que un agente, en la práctica, podía usar como cifrado de campo.
Historia
Durante la Segunda Guerra Mundial, varias redes de espionaje soviéticas se comunicaron con el Centro de Moscú usando dos cifrados que son esencialmente mejoras evolutivas en el 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 de Lucy en Suiza. La red Rote Kapelle utilizó una versión un poco más débil.
En ambas versiones, el texto sin formato se convirtió primero en dígitos mediante el uso de un tablero de ajedrez a horcajadas en lugar de un cuadrado de Polybius. Esto tiene la ventaja de comprimir ligeramente el texto sin formato, lo que aumenta su distancia de unicidad y también permite que los operadores de radio completen sus transmisiones más rápido y se apaguen antes. Apagar antes reduce el riesgo de que los radiogoniómetros enemigos encuentren al operador. Aumentar la distancia de unicidad aumenta la fuerza contra los ataques estadísticos.
Clausen y Foote escribieron su texto sin formato en inglés y memorizaron las 8 letras más frecuentes del inglés (para llenar la fila superior del tablero de ajedrez) a través de la frase mnemotécnica "a sin to err" (dejando caer la segunda "r"). El tablero de ajedrez estándar en inglés tiene 28 ranuras para caracteres y, en este cifrado, los dos adicionales se convirtieron en "punto final" y "cambio de números". Los números se enviaban mediante un cambio de números, seguido de los dígitos reales del texto sin formato en pares repetidos, seguidos de otro cambio. Luego, de manera similar al Nihilist básico, se agregó un aditivo digital, que se denominó "cierre". Sin embargo, se usó un aditivo diferente cada vez, por lo que finalmente se ocultó un "grupo indicador" tuvo que insertarse para indicar qué aditivo se utilizó.
A diferencia de Nihilist básico, el aditivo se agregó mediante una suma no portadora (módulo 10 de suma por dígitos), lo que produce una salida más uniforme que no filtra tanta información. Más importante aún, el aditivo no se generó a través de una palabra clave, sino seleccionando líneas al azar de almanaques de estadísticas industriales. Dichos libros se consideraban lo suficientemente aburridos como para no despertar sospechas si se registraba a un agente (particularmente porque las historias de portada de los agentes eran como hombres de negocios) y tenían una densidad de entropía tan alta como para proporcionar un aditivo muy seguro. Por supuesto, las cifras de tal libro no están realmente distribuidas de manera uniforme (hay un exceso de '0' y '1' (ver Ley de Benford), y los números secuenciales son probablemente sean algo similares), pero sin embargo tienen una densidad de entropía mucho más alta 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 libro similar (al menos un miembro de Rote Kapelle usó The Good Soldier Schweik), este texto fue convertido a un aditivo digital utilizando una técnica similar a un tablero de ajedrez a horcajadas.
El último desarrollo en este sentido 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 usaban blocs de notas de un solo uso. Sin embargo, a pesar de la perfección teórica de la libreta de un solo uso, en la práctica fueron rotas, mientras que VIC no lo fue. Sin embargo, el cifrado de una sola vez solo podía romperse cuando se reutilizaban las páginas de cifrado, debido a problemas logísticos, y por lo tanto ya no era realmente de una sola vez.
Descripción general de la mecánica
La clave secreta para el cifrado es la siguiente:
- Un corto Frase (por ejemplo, la primera línea de una canción, al menos 20 letras largas)
- A Fecha (escrito numéricamente, sin ceros principales)
- A Personal Number (unique al agente, un número de 1 ó 2 dígitos)
La encriptación también se vio favorecida por el hecho de que el adversario no conocía un grupo de claves de 5 dígitos que era único para cada mensaje. El grupo de claves no era estrictamente un "secreto" (ya que estaba incrustado en claro en el texto cifrado), pero estaba en una ubicación en el texto cifrado que un adversario no conocía.
El cifrado funcionaba de la siguiente manera:
- Use los secretos arriba (Phrase, Date, Keygroup y Número Personal) crear un bloque de 50 dígitos de pseudo números aleatorios
- Utilice este bloque para crear las teclas de mensaje para:
- Un Checkerboard extraño
- Dos transposiciones Columnar
- Encriptar el mensaje Plaintext a través del tablero de control
- Aplicar dos transposiciones al cifertexto resultante (intermediario) a través de dos columnas
- Transposición de Columna 'Standard'
- Transposición Columnal Diagonal
- Inserción del grupo clave en el cifertexto - según lo determinado por el sexto dígito de la fecha
Mecánica detallada
Nota: esta sección rastrea los cálculos haciendo referencia a [Line-X] o similar. Esto es para alinearse con la notación indicada en la descripción del archivo de la CIA.
Derivación de bloques pseudoaleatorios
- [Line-A]: Generar un 5 dígitos al azar Keygroup
- [Line-B]: Escribe los primeros 5 dígitos del secreto Fecha
- [Line-C]: Subtract [Line-B] from [Line-A] by modular arithmetic (digit-by-digit, not 'borrowing' any tens from a neighbouring column)
- [Line-D]: Escribe las primeras 20 letras del secreto Frase
- [Line-E.1 producir2]: Secuencia (ver abajo) los primeros y segundos diez caracteres por separado (para obtener [Line-E.1] & [Line-E.2] respectivamente)
- [Line-F.1]: Escriba los 5 dígitos de [Line-C], luego aplicar Adición de cadena (ver abajo) aplicado para crear cinco dígitos más
- [Line-F.2]: La secuencia digital '1234567890' se escribe (bajo [Line-E.2]) como un ayudante para la codificación al crear [Line-H]
- [Line-G]: Addition of [Line-E.1] to [Line-F.1] - this is digit-by-digit by mod-10 arithmetic, i.e. no 'carrying' over tens to the next column
- [Line-H]: Codificación (ver abajo) de los dígitos en [Line-G] bajo [Line-E.2] como la clave
- [Line-I]: No [Line-I] usó, presumiblemente para evitar confusión (como 'Yo' puede ser mal leído como '1' o 'J')
- [Line-J]: El Secuencia [Line-H]
- [Lines-K,L,M,N,P]: Estas son cinco líneas de 10 dígitos creadas por adición de cadena [Line-H]. Los dos últimos dígitos no iguales se añaden al número personal del agente para determinar la longitud clave de las 2 transposiciones. (Lines K-to-P son infectados un bloque de pseudo-aleatorio basado en clave utilizado para la próxima etapa de encriptación)
- [Line-O]: No [Line-O] utilizado, presumiblemente para evitar confusión (como 'O' puede ser mal leído como cero o 'Q')
Derivación de clave de mensaje
- [Line-Q]: Los primeros 'a' dígitos extraídos de [Lines-K,L,M,N,P] cuando Transposed via [Line-J]. (Donde 'a' es el primer valor resultante de la adición de los últimos dígitos no iguales en [Line-P] al número personal). Estos se utilizan para claver la Transposición Columnar.
- [Line-R]: Los siguientes 'b' dígitos extraídos (después de que los 'a' dígitos han sido extraídos) de [Lines-K,L,M,N,P] cuando se transpone a través [Line-J]. (Donde 'b' es el segundo valor resultante de la adición de los últimos dígitos no iguales en [Line-P] al número personal). Estos se utilizan para claver la Transposición Diagonal.
- [Line-S]: La secuenciación de [Line-P], esto se utiliza como la clave de la tabla de verificación de desplazamiento
Ejemplo de generación de claves
Número personal: 6 Fecha: 13 Sept 1959 // Moon Landing - 13 Sept 1959 ('139195' - truncado a 6 dígitos) Frase: 'Fue la noche antes de Navidad' // de 'Una visita de San Nicolás' - poema Keygroup: 72401 // generado al azar [Line-A]: 72401 // Keygroup [Line-B]: 13919 // Fecha - truncado a 5 dígitos [Line-C]: 69592 // subtract [Line-B] from [Line-A] [Line-D]: TWASTHENIG HTBEFORECH // Frase - truncado a 20 caracteres [Line-E]: 8017942653 6013589427 // via Secuencia [Line-F]: 6959254417 1234567890 // from [Line-C] and chain addition, then '1234567890 ' [Line-G]: 4966196060 // add [Line-E.1] to [Line-F.1] [Line-H]: 3288628787 // codifica [Line-G] con [Line-E.2], [Line-F.2] ayuda [Line-J]: 3178429506 // The Sequencing of [Line-H] [Line-K]: 5064805552 // BLOCK: Chain addition of [Line-H] for 50 digits [Line-L]: 5602850077 [Line-M]: 1620350748 [Line-N]: 7823857125 [Line-P]: 5051328370 Los últimos dos dígitos no iguales son '7' y '0', añadidos al número personal (6) significa que las claves de permutación son de 13 y 6 dígitos de largo. [Line-Q]: 0668005552551 // primeros 13 dígitos de bloque [Line-R]: 758838 // siguiente 6 dígitos de bloque [Line-S]: 5961328470 // Secuencia de [Line-P]
Cifrado de mensajes
Tablero de ajedrez a caballo
Una vez que se ha generado la clave, la primera etapa para cifrar el Mensaje es convertirlo en una serie de dígitos, esto se hace a través de un tablero de ajedrez transversal. La clave (fila de encabezado) para el tablero de ajedrez se basa en [Línea-S]. Luego, una serie previamente acordada de letras comunes que se usan en la segunda fila. El siguiente ejemplo utiliza el nemotécnico inglés 'AT ONE SIR'; sin embargo, el mnemotécnico cirílico utilizado por Hayhanen era 'snegopad', la palabra rusa para nevada.
Las celdas restantes se completan, con el resto del alfabeto/símbolos en orden.
5 | 9 | 6 | 1 | 3 | 2 | 8 | 4 | 7 | 0 | |
---|---|---|---|---|---|---|---|---|---|---|
A | T | O | N | E | S | I | R | |||
6 | B | C | D | F | G | H | J | K | L | M |
8 | P | Q | U | V | W | X | Y | Z | . | / |
A continuación se muestra un ejemplo de codificación:
Ataque al amanecer. Al amanecer quiero decir 500. No 0915 como hiciste la última vez. ' 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 a través de la transposición de columnas estándar codificada por [Line-Q] arriba. (Nota: si la longitud codificada del mensaje no es un múltiplo de 5 en esta etapa, se agrega un dígito adicional)
El mensaje se transpone a través de la Transposición Diagonal codificada por [Línea-R] arriba. El significado de 'diagonal' en este caso es que se emplearon zonas de ruptura triangular para hacer irregular la transposición.
Inserción de grupo de claves
El grupo de claves (sin cifrar) se inserta en el texto cifrado 'P' grupos 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 'suma/resta falsa', en este contexto (y muchas cifras de lápiz y papel) es una suma y resta dígito por dígito sin 'llevar' 39; o 'pedir prestado'. Por ejemplo:
- 1234 + 6789 = 7913
- 1234 - 6789 = 5555
Secuenciación
La secuenciación en este contexto es ordenar los elementos de una entrada del 1 al 10 (donde '0' representa 10). Esto ocurre con letras (donde se usa el orden alfabético) o números (donde se usa el valor numérico). En el caso de valores iguales, entonces el valor más a la izquierda se secuencia primero. Por ejemplo:
- LETTERS: La palabra 'Octopus' se secuencia como '2163475' - (es decir, C=1, primer 'O'=2, segundo 'O'=3,...)
- NUMBERS: El número 90210 es secuenciado como '34215' - (por orden numérico. Cero es valorado en '10' en términos de orden)
Suma de cadenas
La adición en cadena es similar a un registro de desplazamiento de retroalimentación lineal, mediante el cual se genera un flujo de números como salida (y se retroalimenta como entrada) a un número semilla. Dentro de la cadena VIC Cipher, la adición funciona (1) tomando el número original (semilla), (2) sumando en falso los primeros dos dígitos, (3) colocando este nuevo número al final de la cadena. Esto continúa, sin embargo, los dígitos que se agregan se incrementan en uno. Por ejemplo, si la semilla fue '90210', las primeras 5 iteraciones se muestran a continuación:
90210 // Valor inicial de la semilla 90210 9 // 9 = 9+0 (primeros dos dígitos) 90210 92 // 2 = 0+2 (nexto dos...) 90210 923 // 3 = 2+1 90210 9231 // 1 = 1+0 90210 92319 // 9 = 0+9; note cómo se alimenta el primer '9' generado
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 cifrado) 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. Debe verse que al escribir la serie '1234567890' (mostrado como [Línea-F.2]) debajo de [Línea.E.2] cada valor de 0-9 tiene otro encima. Simplemente reemplace cada dígito en el número a codificar con el que está arriba en la secuencia de teclas.
Clave | (Line E.2) | 6 | 0 | 1 | 3 | 5 | 8 | 9 | 4 | 2 | 7 |
---|---|---|---|---|---|---|---|---|---|---|---|
Aide | (Line F.2) | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 |
Por ejemplo, el número 90210 tendría codificaciones como sigue; 2}}),,({ce {0->7}}),,({ce {2->0}}),,({ce {1->6}}),,({ce {0->7}})}" xmlns="http://www.w3.org/1998/Math/MathML">()9restablecimiento restablecimiento 2),()0restablecimiento restablecimiento 7),()2restablecimiento restablecimiento 0),()1restablecimiento restablecimiento 6),()0restablecimiento restablecimiento 7){splaystyle ({ce {9-principal2}}),, {ce {c {c {c}}),, {c {c {c {c {c {c {c {c}}}}}}),, {, {cccccHFF}}}}}}}}} {,}}}}}}}}}}}}}}}} {, {,}}}}}}}}}}}}}}}}}}} {2}}),,({ce {0->7}}),,({ce {2->0}}),,({ce {1->6}}),,({ce {0->7}})}" aria-hidden="true" class="mwe-math-fallback-image-inline" src="https://wikimedia.org/api/rest_v1/media/math/render/svg/6eeb6a91aac3a7075360e11becc6599256661345" style="vertical-align: -0.838ex; width:53.77ex; height:2.843ex;"/>.
Entonces, la salida sería: '27067'.
Descifrado
Para descifrar el Cifrado VIC es el siguiente:
- Extraiga el grupo clave - Conociendo el sexto dígito de la fecha secreta, retire los 5 dígitos del grupo clave del cifertexto
- Generar las claves del mensaje - Usando el conocimiento de los diversos secretos (Phrase, Date, Personal Number, Keygroup) generan las claves de la misma manera que el proceso de cifrado
- Decrypt the Ciphertext - Mediante el conocimiento de las Claves de Mensaje para las transposiciones y el tablero de control de desplazamiento descifrarlas
Cripanálisis
El cifrado es uno de los cifrados de lápiz y papel más fuertes que se usan en el mundo real, y la NSA no lo descifró (en términos de determinar el algoritmo subyacente) en ese momento. 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 parte 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 grupo de claves) generaría aproximadamente 38 bits de entropía en términos de fuerza de la clave del mensaje. 38 bits está sujeto a un ataque de fuerza bruta en menos de un día en las computadoras modernas.
Contenido relacionado
Pozo de fuego
CNC
Geoffrey de Havilland