Articulo de referencia

Código (criptografía)

Un fragmento del " Telegrama Zimmermann " descifrado por los criptoanalistas de la Inteligencia Naval británica . La palabra Arizona no figuraba en el libro de códigos alemán y,...

Un fragmento del " Telegrama Zimmermann " descifrado por los criptoanalistas de la Inteligencia Naval británica . La palabra Arizona no figuraba en el libro de códigos alemán y, por lo tanto, tuvo que dividirse en sílabas fonéticas.
Páginas parcialmente quemadas de un libro de códigos de dos partes de la KGB soviética de la Segunda Guerra Mundial

En criptología , un código es un método utilizado para encriptar un mensaje que opera a nivel de significado; es decir, las palabras o frases se convierten en otra cosa. Un código podría transformar "cambio" en "CVGDK" o "salón de cócteles". La Agencia de Seguridad Nacional de EE. UU. definió un código como "un criptosistema de sustitución en el que los elementos del texto plano son principalmente palabras, frases u oraciones, y los equivalentes del código (llamados "grupos de código") suelen consistir en letras o dígitos (o ambos) en combinaciones sin significado de idéntica longitud". [ 1 ] : Vol. I, pág. 12 Se necesita un libro de códigos para encriptar y desencriptar las frases o palabras.

Por el contrario, los cifrados encriptan los mensajes a nivel de letras individuales, o pequeños grupos de letras, o incluso, en los cifrados modernos, bits individuales . Los mensajes pueden transformarse primero mediante un código y luego mediante un cifrado. [ 2 ] Este cifrado múltiple , o "supercifrado", tiene como objetivo dificultar el criptoanálisis .

Otra comparación entre códigos y cifrados es que un código generalmente representa una letra o grupos de letras directamente sin usar matemáticas. Así, los números se configuran para representar estos tres valores: 1001 = A, 1002 = B, 1003 = C, ... . El mensaje resultante sería 1001 1002 1003 para comunicar ABC. Los cifrados, en cambio, utilizan una fórmula matemática para representar letras o grupos de letras. Por ejemplo, A = 1, B = 2, C = 3, ... . De esta forma, el mensaje ABC se obtiene multiplicando el valor de cada letra por 13. El mensaje ABC sería entonces 13 26 39.

Los códigos presentan diversos inconvenientes, como la susceptibilidad al criptoanálisis y la dificultad de gestionar los engorrosos libros de códigos , por lo que los cifrados son ahora la técnica dominante en la criptografía moderna.

En cambio, dado que los códigos son representacionales, no son susceptibles al análisis matemático de los elementos individuales del diccionario de códigos. En el ejemplo, el mensaje 13 26 39 se puede descifrar dividiendo cada número entre 13 y ordenándolos alfabéticamente. Sin embargo, el enfoque del criptoanálisis de diccionarios de códigos radica en la frecuencia comparativa de los elementos individuales del código, comparándolos con la frecuencia de las letras en los mensajes de texto plano mediante análisis de frecuencia . En el ejemplo anterior, el grupo de códigos 1001, 1002, 1003 podría aparecer más de una vez, y esa frecuencia podría coincidir con la cantidad de veces que aparece ABC en los mensajes de texto plano.

(En el pasado, o en contextos no técnicos, los términos código y cifrado se utilizan a menudo para referirse a cualquier forma de encriptación ).

Códigos de una y dos partes

Los códigos se definen mediante "libros de códigos" (físicos o conceptuales), que son diccionarios de grupos de códigos con su texto plano correspondiente. Originalmente, los grupos de códigos se asignaban en el orden del texto plano para facilitar su diseño o codificación. Por ejemplo, en un código que utiliza grupos de códigos numéricos, una palabra en texto plano que comience con "a" tendría un grupo de bajo valor, mientras que una que comience con "z" tendría un grupo de alto valor. El mismo libro de códigos podía utilizarse para "codificar" un mensaje en texto plano en un mensaje codificado o "texto codificado", y para "decodificar" un texto codificado de nuevo en un mensaje en texto plano.

Para dificultar la labor de los criptógrafos, los creadores de códigos diseñaron códigos sin una relación predecible entre los grupos de códigos y el orden del texto plano correspondiente. En la práctica, esto significaba que ahora se necesitaban dos libros de códigos: uno para encontrar los grupos de códigos para la codificación y otro para buscar los grupos de códigos y encontrar el texto plano para la decodificación. Estos códigos de "dos partes" requerían más esfuerzo para su desarrollo y el doble de esfuerzo para su distribución (y su eliminación segura al ser reemplazados), pero eran más difíciles de descifrar. El Telegrama Zimmermann de enero de 1917 utilizó el sistema de código diplomático alemán "0075" de dos partes, que contenía más de 10 000 frases y palabras individuales. [ 3 ]

Código de un solo uso

Un código de un solo uso es una palabra, frase o símbolo preestablecido que se utiliza únicamente una vez para transmitir un mensaje sencillo, a menudo la señal para ejecutar o abortar un plan, o para confirmar su éxito o fracaso. Estos códigos suelen estar diseñados para integrarse en conversaciones aparentemente inocentes. Si se utilizan correctamente, son prácticamente indetectables, aunque un analista capacitado que supervise las comunicaciones de alguien que ya ha despertado sospechas podría reconocer un comentario como «La tía Bertha se ha puesto de parto» como una señal ominosa. Algunos ejemplos famosos de códigos de un solo uso son:

  • En la Biblia, Jonatán establece un código con David , quien se esconde del padre de Jonatán, el rey Saúl. Si, durante la práctica de tiro con arco, Jonatán le dice al sirviente que recoge las flechas: «Las flechas están de este lado», David puede regresar a salvo a la corte; si la orden es: «Las flechas están más allá», David debe huir. [ 4 ]
  • "Una si es por tierra; dos si es por mar" en " El viaje de Paul Revere ", popularizado en el poema de Henry Wadsworth Longfellow.
  • "Subid al monte Niitaka": la señal para que los aviones japoneses comenzaran el ataque a Pearl Harbor.
  • Durante la Segunda Guerra Mundial, el servicio internacional de la British Broadcasting Corporation incluía con frecuencia " mensajes personales " en su programación habitual. Esta aparentemente incoherente sucesión de mensajes leídos por los locutores eran en realidad códigos de un solo uso destinados a los agentes del Special Operations Executive (SOE) que operaban tras las líneas enemigas. Un ejemplo podría ser "La princesa lleva zapatos rojos" o "El gato de Mimi está dormido debajo de la mesa". Cada mensaje codificado se leía dos veces. De esta forma, la Resistencia francesa recibió instrucciones para comenzar a sabotear las vías férreas y otros medios de transporte la noche anterior al Día D.
  • "Sobre toda España, el cielo está despejado" fue la señal (transmitida por radio) que dio inicio a la revuelta militar nacionalista en España el 17 de julio de 1936.

A veces, los mensajes no se planifican con antelación y se basan en información compartida que, idealmente, solo conocen los destinatarios. Un ejemplo es el telegrama enviado al presidente estadounidense Harry Truman , que se encontraba en la Conferencia de Potsdam para reunirse con el primer ministro soviético Joseph Stalin , informándole del primer ensayo exitoso de una bomba atómica .

"Operado esta mañana. El diagnóstico aún no está completo, pero los resultados parecen satisfactorios y ya superan las expectativas. Es necesario un comunicado de prensa local debido al gran interés que ha despertado. El Dr. Groves está satisfecho. Regresa mañana. Les mantendré informados."

Código idiota

Un código idiota es un código creado por las partes que lo utilizan. Este tipo de comunicación es similar a las señales manuales que usan los ejércitos en el campo de batalla.

Ejemplo: Cualquier oración donde se usen las palabras "día" y "noche" significa "ataque". La ubicación mencionada en la siguiente oración especifica el lugar que será atacado.

  • Texto plano: Ataque X.
  • Código: Caminamos día y noche por las calles, ¡pero no pudimos encontrarlo! Mañana nos dirigiremos a X.

Un uso temprano del término parece ser por George Perrault, un personaje en el libro de ciencia ficción Friday [ 5 ] de Robert A. Heinlein :

El código más simple, y por lo tanto imposible de descifrar. El primer anuncio indicaba a la persona o personas interesadas que realizaran la acción número siete, o que esperaran la número siete, o mencionaba algo designado como siete. Este dice lo mismo con respecto al código número diez. Pero el significado de los números no se puede deducir mediante análisis estadístico, ya que el código puede modificarse mucho antes de alcanzar un universo estadístico útil. Es un código para idiotas... y un código para idiotas nunca se puede descifrar si el usuario tiene el buen juicio de no recurrir a él con demasiada frecuencia.

El experto en terrorismo Magnus Ranstorp afirmó que los hombres que llevaron a cabo los ataques del 11 de septiembre en Estados Unidos utilizaron correo electrónico básico y lo que él denomina "código idiota" para discutir sus planes. [ 6 ]

Criptoanálisis de códigos

Si bien resolver un cifrado de sustitución monoalfabética es fácil, descifrar incluso un código simple es difícil. Descifrar un mensaje codificado es un poco como intentar traducir un documento escrito en un idioma extranjero; la tarea consiste básicamente en crear un "diccionario" de los grupos de códigos y las palabras en texto plano que representan.

Una pista clave para comprender un código simple es que algunas palabras son más comunes que otras, como "the" o "a" en inglés. En los mensajes telegráficos, el grupo de códigos para "STOP" (es decir, fin de oración o párrafo) suele ser muy común. Esto ayuda a definir la estructura del mensaje en términos de oraciones, si bien no necesariamente su significado, lo cual resulta útil desde el punto de vista criptoanalítico.

Se puede avanzar más en la lucha contra un código recopilando muchos textos cifrados con el mismo código y luego utilizando información de otras fuentes.

  • espías
  • periódicos
  • Charla diplomática en un cóctel
  • el lugar desde donde se envió un mensaje
  • a dónde se enviaba (es decir, análisis de tráfico )
  • la hora en que se envió el mensaje,
  • eventos ocurridos antes y después de que se enviara el mensaje
  • los hábitos normales de las personas que envían los mensajes codificados
  • etc.

Por ejemplo, un grupo de códigos específico que se encuentra casi exclusivamente en mensajes de un ejército determinado y en ningún otro lugar podría indicar quién es el comandante de ese ejército. Un grupo de códigos que aparece en mensajes previos a un ataque a una ubicación específica podría representar precisamente esa ubicación.

Las pistas pueden revelar de inmediato las definiciones de los grupos de códigos. A medida que se determinan, estos grupos pueden acumular gradualmente una masa crítica, revelándose cada vez más a partir del contexto y las conjeturas fundamentadas. Los códigos simples de una sola parte son más vulnerables a estas conjeturas que los de dos partes, ya que si se determina que el código "26839" de un código de una sola parte significa "bulldozer", entonces es probable que el código inferior "17598" signifique una palabra en texto plano que comience con "a" o "b".

Se pueden utilizar diversas técnicas para introducir información en un mensaje cifrado, por ejemplo, realizando una incursión en un lugar y hora específicos contra un enemigo y analizando posteriormente los mensajes cifrados enviados. Los errores de codificación son una herramienta especialmente útil para descifrar un código; es común que las personas cometan errores, a veces desastrosos. La introducción de datos y la explotación de errores también funcionan contra los cifrados.

  • La forma más obvia y, al menos en principio, la más sencilla de descifrar un código es robar el libro de códigos mediante sobornos, robos o asaltos —procedimientos que a veces se glorifican con la expresión "criptografía práctica" —, y esta es una debilidad tanto para los códigos como para las claves de cifrado, aunque los libros de códigos suelen ser más grandes y se utilizan durante más tiempo que las claves de cifrado . Si bien un buen código puede ser más difícil de descifrar que una clave de cifrado, la necesidad de escribir y distribuir libros de códigos resulta sumamente problemática.

Crear un nuevo código es como construir un nuevo idioma y escribir su diccionario; antes de la llegada de las computadoras, era una tarea sumamente compleja. Si un código se ve comprometido, hay que rehacer todo el proceso, lo que implica mucho trabajo tanto para los criptógrafos como para los usuarios. En la práctica, cuando los códigos se utilizaban ampliamente, solían modificarse periódicamente para dificultar la labor de los descifradores y limitar la vida útil de los libros de códigos robados o copiados.

Una vez creados los códigos, la distribución del libro de códigos resulta logísticamente engorrosa y aumenta las probabilidades de que el código se vea comprometido. Existe un dicho que afirma que "tres personas pueden guardar un secreto si dos de ellas están muertas" ( Benjamin Franklin - Wikiquote ), y aunque pueda ser una exageración, un secreto se vuelve más difícil de guardar si se comparte entre varias personas. Se puede pensar que los códigos son razonablemente seguros si solo los utilizan unas pocas personas cuidadosas, pero si ejércitos enteros usan el mismo libro de códigos, la seguridad se vuelve mucho más difícil.

En cambio, la seguridad de los cifrados generalmente depende de la protección de las claves de cifrado. Si bien las claves de cifrado pueden ser robadas y reveladas, son mucho más fáciles de cambiar y distribuir.

Supercifrado

Era común cifrar un mensaje después de codificarlo, para aumentar la dificultad del criptoanálisis. Con un código numérico, esto se hacía habitualmente con un aditivo: simplemente un número clave largo que se añadía dígito a dígito a los grupos del código, módulo 10. A diferencia de los libros de códigos, los aditivos se cambiaban con frecuencia. El famoso código de la Armada japonesa, JN-25 , era de este tipo.

Referencias

  1. Historia de la seguridad de las comunicaciones en EE. UU.; las conferencias de David G. Boak, archivadas el 18 de septiembre de 2016 en Wayback Machine , Agencia de Seguridad Nacional (NSA), volumen I, 1973, volumen II, 1981, publicado parcialmente en 2008, partes adicionales desclasificadas el 14 de octubre de 2015.
  2. "16.2: Cifrados de sustitución" . Matemáticas LibreTexts . 22 de enero de 2020. Archivado del original el 19 de septiembre de 2021. Consultado el 19 de septiembre de 2021 .
  3. "Telegrama Zimmermann: El borrador original" Archivado el 27/04/2021 en Wayback Machine , 2007, Joachim von zur Gathen, "Cryptologia", Volumen 31, Número 1
  4. 1 Samuel 20:20-22
  5. Viernes (1982) de Robert A. Heinlein
  6. Radio Free Europe / Radio Liberty: "Oriente Medio: militantes islámicos llevan la yihad a Internet" Por Jeffrey Donovan , 16 de junio de 2004.

Fuentes

  • Kahn, David (1996). Los descifradores de códigos  : La historia completa de la comunicación secreta desde la antigüedad hasta Internet . Scribner.
  • Pickover, Cliff (2000). Criptorronas: Códigos y escritura secreta . Pomegranate Communications. ISBN 978-0-7649-1251-1.
  • Boak, David G. (julio de 1973) [1966]. "Códigos" (PDF) . Historia de la seguridad de las comunicaciones en EE. UU.; las conferencias de David G. Boak, vol. I (edición de revisión de desclasificación de 2015  ). Ft. George G. Meade, MD: Agencia de Seguridad Nacional de EE. UU. págs. 21–32 . Recuperado el 23 de abril de 2017 . 
  • Códigos de campo del ejército estadounidense en las fuerzas expedicionarias estadounidenses durante la Primera Guerra Mundial , William Friedman, Departamento de Guerra de EE. UU., junio de 1942. Incluye numerosos ejemplos en su apéndice, entre ellos un "código de béisbol" (pág.  254).

Véase también

  • Este artículo, o una versión anterior del mismo, incorpora material del libro Codes, Ciphers, & Codebreaking de Greg Goebel .