La Mengambrea

Sexo, UNIX y rocanrol
2007/02/08

Cómo cifrar mensajes como un espía ruso

En nuestra línea de trabajo siempre es importante disponer de buena criptografía. Uno nunca sabe cuándo la NSA o la Interpol van a ir a meter las narices en los comunicados confidenciales entre La Mengambrea Central Intelligence y sus aliados (vínculos en la barra lateral); las consecuencias de la divulgación de esas comunicaciones serían desastrosas para el mundo.

Esto, aunado a la necesidad de cifrar mensajes hacia operativos en acción tras las líneas enemigas—agentes que no disponen todo el tiempo de equipo de cómputo para descifrar mensajes del comando central—, acarrea la necesidad de un buen sistema de cifrado manual, que sólo requiera lápiz y papel (y vodka). Por ello, hoy le enseñaré el método que el mismísimo David Kahn llamó "el algoritmo mnemónico más avanzado que jamás se ha hecho público". Y también "efectivamente inviolable sin conocimiento previo del sistema y con base en un solo mensaje".

Pero antes, unas palabras de nuestro director de vigilancia de los derechos del público… un pelele insufrible sin sentido del humor.

Este artículo contiene una reconstrucción funcional de un algoritmo criptográfico real utilizado durante la Guerra Fría. Desde esta página puede cifrar y descifrar mensajes usando ese algoritmo, pero no nos engañemos: si la NSA o la Interpol son quienes lo persiguen, esto no le dará más que unos minutos de ventaja. Si su enemigo es una organización más modesta, sin equipo de supercómputo y brigadas de criptólogos profesionales, el sistema es razonablemente seguro; pero incluso en ese caso debería usar las variaciones modernas de este algoritmo, vea los vínculos abajo. El uso de software criptográfico puede ser ilegal en su país o región, consulte a su abogado.

El software incrustado en este artículo requiere Javascript y ha sido probado en Firefox 2 y Opera 9, ambos bajo Linux. Si no funciona en su navegador, y le interesa usarlo, pruebe con uno de esos. Si está usando otro navegador y la cosa esta anda, le agradeceremos que nos lo cuente en un comentario. El software incrustado en este artículo es Copyright © 2007 César Rincón, y se publica bajo la licencia LGPL; vea el código fuente de la página para más detalles.

Bueno, pues eso. Y otra cosa: este artículo hace referencia a procedimientos criptográficos básicos que fueron introducidos en el artículo anterior, que quizá quiera tener a la mano. Ahora conviene hacer un poco de historia.

Número Uno desde Moscú

En 1952, Reino Hayhanen, nativo de Leningrado, un gordo holgazán según las malas lenguas, se estableció en Nueva York. Hayhanen era un operativo de la KGB, entrenado en temas de inteligencia en Finlandia y miembro del Partido Comunista soviético. Hayhanen era un espía, por supuesto. Su jefe inmediato era Vilyam Genrikhovich Fisher, mejor conocido por su alias: Rudolf Abel, el agente soviético de más alto rango que sería capturado en los Estados Unidos.

En los dos años que siguieron a su llegada, Hayhanen nunca se entrevistó en persona con Abel. Se comunicaba con él intercambiando mensajes cifrados, que ocultaban en escondrijos preacordados: una grieta en el pavimento, un ladrillo flojo en el Central Park, ese tipo de cosa. Los mensajes los tecleaban a máquina y luego los microfilmaban. Luego utilizaban un ingenioso procedimiento químico para disolver la base dura de la película, dejando únicamente una delgada capa de emulsión con la imagen. Ese "microfilme suave", como le llamaban, podía doblarse y esconderse en sitios pequeños. En los mensajes, Abel era "Número Uno" (sin chistes de Austin Powers, por favor), y Hayhanen era "Victor".

La respuesta de Moscú al primer mensaje de Hayhanen fue recibida en una moneda hueca, y en algún momento esa moneda se les perdió. No se sabe exáctamente cómo; Kahn especula que el irresponsable Hayhanen simplemente pagó algo con ella. La moneda circuló en la economía hasta el 22 de junio de 1953, en que un repartidor de periódicos la recibió como cambio y le llamó la atención. Pronto se dio cuenta de que podía abrirse, y dentro encontró una microficha en la que se veían 21 renglones de dígitos (la ficha original se ve en la fotografía, arriba). La moneda y su contenido fueron a dar a la policía, y de ahí al FBI, donde de inmediato se pusieron a tratar de descifrar el mensaje.

Por cuatro años, criptólogos expertos se dieron de topes contra la pared, intentando romper el código. Fallaron.

En 1957, Hayhanen (a quien ya me lo estoy imaginando como una especie de Homero Simpson con gabardina) recibió órdenes de Abel, quien estaba muy poco contento con su trabajo, dirigiéndolo de vuelta a la Unión Soviética para que se tomara unas "vacaciones". Hayhanen, profesional como era, decidió mejor desertar: se entregó en la embajada estadounidense en París. Y soltó la sopa: describió el sistema de cifrado y entregó las llaves que había usado. En octubre, Abel fue sometido a juicio. El microfilme, ahora descifrado, fue usado como evidencia en su contra; Hayhanen también testificó contra él, por supuesto. Al final le echaron 30 años en el tanque por espionaje (aunque fue liberado en 1962 a cambio de Gary Powers, piloto de un avión U2 derribado sobre Rusia… pero esa es otra historia).

El algoritmo "VIC"

Al algoritmo descrito por Hayhanen hoy se le llama "VIC", por el nombre en clave del gordito torpe. Y hoy le voy a enseñar a cifrar mensajes con él.

Como lo usaba la KGB durante la Guerra Fría, VIC requiere cuatro parámetros:
  • Una fecha. En el mensaje de Hayhanen, esta era el día "V-J", la victoria (soviética) sobre el Japón: 3 de septiembre de 1945. Nosotros podríamos elegir alguna otra fecha significativa. ¿Qué tal el 12 de octubre de 1492?
  • Alguna canción popular. Las primeras palabras, únicamente. ¿Le parece La Muralla Verde, por los Enanitos Verdes? "Estoy parado sobre la muralla que divide / todo lo que fue de lo que será…"
  • Un "número personal", que es un entero pequeño. Hayhanen usaba el 13, y en algún momento fue "ascendido" a 20. Nosotros podemos usar el 12, que es bonito.
  • Un "indicador de mensaje", un número aleatorio de cinco dígitos, distinto para cada mensaje. Este número aparecía literalmente en el mensaje cifrado, como se explica abajo.
Todos estos parámetros se manipulaban para producir tres llaves numéricas, virtualmente aleatorias:
  • Una llave de 10 posiciones para un straddling checkerboard. Llamaremos a esta llave la "llave A".
  • Una llave para una transposición columnar simple, que llamaremos la "llave B".
  • Una llave para una transposición columnar discontinua, que llamaremos la "llave C".
Estas llaves deben construírse exáctamente de la misma manera tanto para cifrar como para descifrar. Así pues, las siguientes subsecciones son útiles para ambas operaciones.

Derivación de la llave A

El procedimiento mediante el cual se obtiene la llave A es ridículamente complicado. Se generan 15 resultados parciales, que etiquetaremos como A1, A2, … A15, para no perdernos. Este ejemplo es interactivo: si modifica los parámetros, déle al botón "Recalcular" para (¡sorpresa!) recalcular los resultados.

El resultado parcial A1 es un número de 6 dígitos que se obtiene a partir de la fecha acordada: concatene el último dígito del día, el último dígito del mes, y los cuatro dígitos del año. El resultado A2 son los primeros cinco dígitos de A1; el resultado A3 es el último dígito.

Fecha
A1
A2
A3

Ahora debe obtener el indicador de mensaje, un número de cinco dígitos. Si está cifrando, este número simplemente se inventa. Si está descifrando, se extrae del mensaje cifrado: cuente tantos grupos de cinco dígitos desde el final como diga A3, y ese será el indicador. Para fines de este ejemplo, simplemente invéntelo.

Indicador

El resultado A4 se obtiene restando sin acarreo el indicador de mensaje menos A2. El resultado A5 es una expansión de A4 a 10 dígitos, por adición encadenada.

A4
A5

El resultado A6 son los primeros diez caracteres de la canción; el resultado A7 son los siguientes diez caracteres.

Canción
A6
A7

El resultado A8 se obtiene permutando la secuencia de dígitos de 1 a 9, con 0 como último dígito, usando como llave a A6.

llave
texto
A8

El resultado A9 se obtiene de la misma manera, usando como llave a A7.

llave
texto
A9

El resultado A10 se obtiene sumando sin acarreo A5 más A8.

+
A10

El resultado A11 se obtiene realizando una sustitución alfabética sobre A10. El alfabeto origen serán los dígitos de 1 a 9, con cero
como último dígito; el alfabeto destino será A9.

origen
destino
texto
A11

El resultado A12 se obtiene generando 50 dígitos a partir de A11, por adición encadenada. El resultado A13 son los últimos 10 dígitos de A12. Los resultados A14 y A15 son los dos últimos dígitos no-iguales en A12 (si el penúltimo y el último son iguales, pues serán el antepenúltimo y el último, etc.).

semilla
A12
A13
A14
A15

Finalmente, la llave A se obtiene realizando una permutación de los dígitos 1 a 9, con 0 al último otra vez, usando como llave a A13. Note que el cero es considerado el mayor de los dígitos; si ocurre en A13, lo representaremos con una "A" para no olvidarlo.

llave
texto
LLAVE A

Los resultados A12, A14 y A15 son utilizados en las derivaciones de las llaves B y C.

Derivación de las llaves B y C

Este es un procedimiento más simple, pero aún tiene cierta gracia. No se pierda.

Decíamos que cada agente tiene su número personal, y que es un entero corto, digamos, algo entre 5 y 15. Para este ejemplo, puede inventárselo.

Número personal

Los resultados parciales B1 y B2 se generan sumando (esta vez sí con acarreo) al número personal con A14 y A15, respectivamente. B1 y B2 son las longitudes de las llaves B y C.

Número personal
+
B1
Número personal
+
B2

El resultado B3 se obtiene haciendo una transposición de columnas sobre A12, usando a A11 como llave. Si un día hace esto a mano, puede detenerse cuando haya extraído B1+B2 dígitos: la llave B y la llave C se obtienen directamente de B3.

llave
texto
B3
LLAVE B
LLAVE C

¿Facilísimo, no?

No, ya en serio… ¿Aún conmigo, o ya voy solo? Y sí, todo esto lo hacían los espías rusos, a mano, para recibir sus órdenes y entregar la información que consiguieran. Y no hemos acabado, por mucho.

Cifrado de mensajes

Una vez calculadas las llaves, se cifra y se descifra con una combinación de straddling checkerboard, transposición de columnas simple y transposición de columnas discontinua. Pongamos que su mensaje es el siguiente.

Mensaje

El primer paso es construir un straddling checkerboard usando la llave A, y transformar el mensaje en una secuencia de dígitos que llamaremos la "Forma Intermedia I" (FI-1). Como adición, si es necesario rellenaremos FI-1 con nueves para que su longitud sea un múltiplo exacto de cinco (realmente, deberíamos llenar con dígitos aleatorios, pero tengo mis razones para esto).

Llave A
Idioma
Matriz
FI-1

Enseguida, creamos la forma intermedia II haciendo una transposición de columnas simple sobre la FI-1, usando la llave B.

Llave B
Matriz
FI-2

Ahora creamos la forma intermedia III, haciendo una transposición discontinua sobre la FI-2, usando la llave C.

Llave C
Matriz1
Matriz2
FI-3

Finalmente (¡aleluya!), agregamos el indicador en la posición apropiada (recuerde: desde el final, tantos grupos de cinco dígitos como diga A3).

A3
Indicador
Final

Y esta forma final ya puede escribirse a máquina, microfilmarse y esconderse dentro de una moneda hueca. O puede dárselo a una cubana con voz sexy para que la lea en un transmisor de onda corta durante las madrugadas. ¡Las posibilidades son ilimitadas!

Descifrado de mensajes

Exponer en detalle el descifrado de estos mensajes se deja como un ejercicio trivial para el lector.

Y ahora bebemos vodka.


Calculadora VIC

Para cerrar este tema, enseguida tiene usted una calculadora capaz de cifrar y descifrar mensajes usando el algoritmo VIC, sin fastidiarlo con los pasos intermedios.

FechaIndicador
CanciónNo. personal
Idioma


Vínculos y referencias

Todo en inglés, lo siento.
  • El vínculo más importante no es realmente un enlace, sino una referencia bibliográfica: The Codebreakers, por David Kahn, editado por Scribner. Puede comprarlo en Amazon (un poco caro, pero le aseguro que vale cada centavo). Y visite la página de David Kahn.
  • El Cryptographic Compendium, y específicamente, la sección VIC Cipher. Visite también la página de John Savard.
  • Recetas para revolver letras, nuestro artículo anterior, que explica en detalle las operaciones básicas de este procedimiento (esto sí está en español, claro).
  • Number One from Moscow, un artículo de Kahn que describe en detalle el mensaje de Hayhanen; en el sitio web de la mismísima CIA.
  • Famous Cases: Rudolph Ivanovich Abel, en el sitio del FBI… hey, que no se diga que no voy hasta el fondo en mis referencias. Contiene una versión más dramática de la historia del caso Abel, con fotografías (¿ha visto alguna vez una moneda hueca?).
  • PPC-XX, una variante de este algoritmo con cuatro métodos alternativos para derivar las llaves, y SECOM, una variante con un checkerboard extendido (ambos menos rococó que VIC, ciertamente). Y ya que está ahí, vea Cipher Machines and Cryptology, de Dirk Rijmenant.
  • El Cryptography Portal de la Wikipedia.

[Foto superior: su amigable editor descubre… copyright © 2007 César Rincón, algunos derechos reservados; el uso de esta fotografía está permitido bajo los términos de la Licencia de Atribución 2.5 México. Reproducción de la microficha en la moneda, cortesía de la CIA de los Estados Unidos de América, vea su nota de copyright. Foto del Wodka, la piernuda y el Mar Báltico, cortesía del foTOmo's photostream en Flickr, copyright © 2005 foTOmo, algunos derechos reservados; el uso de esta fotografía está permitido bajo los términos de la licencia Attribution 2.0. Foto de la joven bonita sonriente: "now we drink vodka", cortesía del madmonk's photostream en Flickr (parte de su colección Kirguistán, nada menos), copyright © 2006 E. Zarwan, algunos derechos reservados; el uso de esta fotografía está permitido bajo los términos de la licencia Attribution-NoDerivs 2.0. Licencias por Creative Commons. Emblema del martillo y la hoz en el dominio público. Phew.]

7-FEB-2007 - ESPAÑOL - No. 10 -
OPA YO VIAZE UN CORRA PA ECHAR GALLINAS Y PA ECHAR MININOS

03406 01755 02154 21022 69756 12274 62634 65227 87948 41422 29355 29722 09523 85956 41022 56603 77644 87812 72856 48245 12567 67660 45654 48662 82689 20001 20687 87625 79321 28714 17520 14762 27206 24156 07029 28774 75178 22789 06676 32372 87329 30624 05651 65028 06960 67088 62095 08579 12864 77005 69202 17082 99940 52675 50807 94894 44967 58014 51596 12757 79118 53050 76719 49443 58952 86063 82674 76452 92444 20828 87665 97626 74420 44157 96822 72248 30126 46462 77016 60723 85667 49304 18115 69068 76242 07322 10885 44697 69255 97627 26629 86264 56284 26523 20252 42829 26629 09567 46285 47652 16696 72273 04786 18647 45646 26408 53537 56975 22266 03669 66928 85956 52099 01757 09972 45285 29522 44595 46046 58326 72976 22250

Etiquetas: , , , , ,

Enlace permanente   - 16:08 - deje un comentario (hay 20)
Me perdiste a partir de "Derivación de la llave A", pero bueno...
El vodka me gusta con naranja.
Es posible descifrar algoritmos de encriptación tan complicados sin una piedra de rosetta? Es decir, los centíficos del FBI, hubieran podido descifrar todo esto sin la ayuda de Homero Simpsonsky?
Por otro lado, el javascript anda perfecto en IE 7, aunque los botones no salen azules.
Anonymous Anónimo dijo:
Jaja... a mi me gusta en un coco, en la playa :)

(Aunque incluso así, prefiero la ginebra.)

Sí, es posible; Turing y sus amigos se la pasaban haciendo eso en Bletchley Park, durante la Segunda Guerra. Y de hecho, me extraña un poco la efusividad de Kahn, porque este algoritmo no parece realmente tan fuerte: la derivación de las llaves es una complicación espantosa, pero un criptólogo no necesitaría pasar por eso para descifrar un mensaje. Le bastaría romper las tres últimas transformaciones, buscando las llaves numéricas e ignorando todo ese asunto de las fechas y canciones.

Claro, se dice fácil...

Gracias por el tip, del IE. Qué extraño. Parece que IE no entiende selectores CSS 2.1 (input[type=button]). Pero no tengo idea de cómo ponerle las cosas para que lo entienda :/

Eh, ya se me ocurrirá algo después de dormir un poco.
Blogger Crater dijo:
Wow, esto esta bien interesante, debo poner mas atencion
Anonymous Anónimo dijo:
Okey, Crater... [reglazo y jalón de orejas] ¡Pon más atención! :P

No, ya en serio, gracias.

Oigan, ¿alguien usando MSIE me puede decir si los botones ya se ven azules?
Blogger Zereth dijo:
Yo quiero un vodka!


jajaja para mensajes encriptados, una mujer explicando la importancia de los detalles en la relación y no digo nada!

Ni siendo de la Cía garantiza entenderlos.


Muy bueno tu post, y gracias por la sugerencia espirituosa... un vodkita con jugo de uva!


Saludos
Anonymous Anónimo dijo:
Uh no, doc, ese código fue criptoanalizado con éxito hace mucho tiempo (y el inverso también). Resultados preliminares aquí.

Y del vodka... sólo cuide que no sea Selekt, vodka inglés de a 40 pesos el pomo (ilustrado arriba). Sí, tiene bonitos caracteres cirílicos en la botella... pero sólo me tomé lo que se ve de ese vaso, y amanecí con un leve pero perceptible dolor de cabeza :-O
Blogger jobu dijo:
Muy interesante el artículo, de verdad. Complicado para mi pero interesante, me gustó.
Estoy contigo en lo de la ginebra que si a la reina madre de Inglaterra le fue bien, pues a mi lo mismo.
Bombay con tónica(que lleva quinina y eso es sano)y un toque de limón.
Un saludo
Anonymous Anónimo dijo:
Gracias, Jobu... hey, si Homerosky Simpsonov podía con esto, cualquiera puede :)

Acabas de recitar la fórmula de mi copa favorita. Bombay, o al menos Tanqueray. Y yo le pongo más bien una tirita de cáscara de limón.

Difícil de encontrar aquí en México, sin embargo, al menos en fiestas y reuniones (en los bares sí hay, claro). Aquí se usa más el tequila, por supuesto, y el ron y el brandy.
Blogger GwynF dijo:
Entendí la parte sobre el vodka, pero el resto voló muy por encima de mi cabeza. saludos, gwyn
Anonymous Anónimo dijo:
Eh, no problemo, Gwyn, esa es la parte importante :)
Anonymous Anónimo dijo:
¿Qué paso, como estamos? Ya no me habia pasado a saludar por acá, muy interesante el artículo, pero me perdi bastante, mejor me sigo haciendo unas integrales que es lo que estoy viendo ahora en la escuela, que esas si están fáciles.
Blogger Crater dijo:
Por cierto, en IE7 los botones me aparecen amarillos con letra blanca...

aqui es donde vuelvo a decir que los de Mozilla son bien buena onda.

cheers
Blogger jobu dijo:
Si la cáscara del limón la frotas con dos pinzas para hielo sobre la copa soltando el aroma del limón, está fantastico.
Habrá que hacer un curso de como preparar un cóctel.
Ayer probé el Manhattan y añoré mi Bombay.

http://es.wikipedia.org/wiki/Manhattan_(c%C3%B3ctel)


Madre mía como se ha desviado el tema del post.
Bueno yo brindo por vosotros.
Blogger Herel dijo:
Creo que me perdí en alguna de las botellas de vodka. Al menos me ha quedado claro el método "Abel" de descifrado: el espía canta voluntariamente y encima se le aplica el "Roma no paga traidores".
Con lo fáciles que son las claves del tipo "Águila bizca a pez globo. Los tomates de la huerta están verdes, cenamos sopa porque el canario se ha escapado de la jaula."
Anonymous Anónimo dijo:
... y entonces, uno de los espías, al escuchar lo del canario, se marchó enseguida a Trípoli a coordinar la operación de extracción del desertor; y el otro regresó tranquilo a Montecarlo, aliviado por saber que su coartada no había sido invalidada.

Ahí se encuentra con otro espía, y le dice "el mono marrón se rascó la rodilla equivocada", a lo que el otro responde "la mariposa azul se posó sobre el camello enfermo"; y entonces uno se marcha inmediatamente a Nueva York a fotografiar los documentos secretos que le estaban describiendo, y el otro regresa a la base de operaciones en París a reportar el éxito de última misión de su colega.

Y ahí se encuentra a otro espía, y le dice "los ladrillos se están cayendo de la pared". Y el otro le empieza a decir "el dentista paranoico bailó...", pero lo interrumpió el golpe de un ladrillo que le cayó sobre la cabeza.

*bombo, platillo*

Gracias, gracias, estaré aquí toda la semana. ¡Pruebe la milanesa!
Anonymous Anónimo dijo:
Ahem. Usted disculpe el comentario anterior, el responsable ha sido debidamente castigado.

Alfonso, chidísimo, lo de las integrales. Tu vida suena como una fiesta continua :)

Gracias por el reporte, Crater. ¡Maldita sea! Hoy intentará hacerme de una PC con Windows y veré que eso quede bien.

Jobu: ¡Salud!
Blogger antesdelunes dijo:
Interesante post,

¿Has leído por casualidad la trilogía del Criptonomicón de Neal Stephenson? (Código Enigma, Pontifex y Aretusa).

Seguro que te puede gustar.
Anonymous Anónimo dijo:
Muchísimas gracias, Domingo, por esa sugerencia. Como lo puedes ver en mi "perfil" de Blogger, es uno de mis libros favoritos :)

Pero que la recomendación le llegue a quien haya leído esto y le haya gustado. Es una muy buena recomendación.

La página de John Savard, por cierto, uno de los vínculos arriba, incluye un capítulo sobre un algoritmo apropiado para un mazo de cartas (aunque por ahí se dice que el algoritmo de Savard tiene al menos una vulnerabilidad importante).
Blogger conchiSs dijo:
cesar me encantan tus comentarios+ me caes bien con el simple hecho de leerlos, y ps sobre el articulo muy shidoO my interesante y completo. y ps cesar stas guapo jejeje pero no te creas tanto heee!!
Blogger César dijo:
Conchiss... favor que me haces. Lo intentaré... pero ¡no me estás ayudando!

:D

Gracias por saludar, disculpa la demora.
Haga clic aquí para dejar un comentario
g