stringtranslate.com

Solitario (cifrado)

El algoritmo criptográfico Solitaire fue diseñado por Bruce Schneier a petición de Neal Stephenson para su uso en su novela Cryptonomicon , en la que los agentes de campo lo utilizan para comunicarse de forma segura sin tener que depender de la electrónica o tener que llevar herramientas incriminatorias. [1] Fue diseñado para ser un criptosistema manual calculado con una baraja de cartas común y corriente . En Cryptonomicon , este algoritmo se llamó originalmente Pontifex para ocultar el hecho de que implicaba naipes.

Una de las motivaciones detrás de la creación del Solitario es que en entornos totalitarios , una baraja de cartas es mucho más asequible (y menos incriminatoria) que un ordenador personal con una serie de utilidades criptológicas. Sin embargo, como advierte Schneier en el apéndice de Cryptonomicon , prácticamente todo el mundo interesado en el criptoanálisis conocerá ahora este algoritmo, por lo que llevar una baraja de cartas también puede considerarse incriminatorio. Además, los análisis han revelado fallos en el cifrado, por lo que ahora se considera inseguro.

Cifrado y descifrado

Este algoritmo utiliza una baraja estándar de 52 cartas del mismo palo y dos comodines que se distinguen entre sí, llamados comodín A y comodín B. Para simplificar, en este ejemplo solo se utilizarán dos palos, tréboles y diamantes. A cada carta se le asigna un valor numérico: los tréboles se numerarán del 1 al 13 (del As al Rey) y los diamantes se numerarán del 14 al 26 de la misma manera. A los comodines se les asignarán los valores de 27 y 28. Por lo tanto, la jota de tréboles tendrá el valor 11 y el dos de diamantes tendrá el valor 15. (En una baraja completa, los palos se valoran en el orden del bridge: tréboles, diamantes, corazones, picas, con las cartas del mismo palo numeradas del 1 al 52 y los comodines numerados 53 y 54.)

Para comenzar a cifrar o descifrar, se colocan las cartas boca arriba en un orden previamente acordado. La persona que descifre un mensaje debe tener una baraja dispuesta en el mismo orden que la baraja utilizada por la persona que cifró el mensaje. El orden que se decide inicialmente depende de los destinatarios; es preferible mezclar la baraja de forma perfectamente aleatoria, aunque existen muchos otros métodos.

El algoritmo genera un flujo de claves , una secuencia de valores que se combinan con el mensaje para cifrarlo y descifrarlo. Cada valor del flujo de claves se utiliza para cifrar un carácter del mensaje, por lo que el flujo de claves debe tener al menos la misma longitud que el mensaje. Si el flujo de claves es más largo que el mensaje, este puede rellenarse con un carácter repetido adicional, lo que impide al atacante conocer la longitud exacta del mensaje.

Para cifrar un mensaje:

  1. Elimine toda la puntuación y los espacios, dejando solo las 26 letras de la A a la Z.
  2. Convierte cada letra a su valor numérico natural, A = 1, B = 2, ..., Z = 26.
  3. Genere un valor de flujo de clave para cada letra del mensaje utilizando el algoritmo de flujo de clave que se indica a continuación.
  4. Agregue cada valor de flujo de clave al número de texto sin formato correspondiente, restando 26 si el valor resultante es mayor que 26. (En matemáticas, esto se llama aritmética modular ).
  5. Convierte los números resultantes nuevamente en letras. Esta secuencia de letras es el texto cifrado .

Para descifrar un texto cifrado:

  1. Convierte cada letra del texto cifrado a su valor numérico natural.
  2. Genere un valor de flujo de clave para cada letra del texto cifrado.
  3. Reste cada valor de flujo de clave del valor de texto cifrado correspondiente, agregando 26 si el valor resultante es menor que 1.
  4. Convierte los números resultantes nuevamente en letras.

Algoritmo de flujo de claves

Este algoritmo genera valores de secuencia de claves moviendo cartas dentro del mazo. El algoritmo de secuencia de claves es determinista , por lo que los valores de secuencia de claves dependen solo del orden inicial del mazo. Se supone que el mazo es una matriz circular, lo que significa que si alguna vez una carta necesita avanzar por debajo de la carta inferior del mazo, simplemente rotará de nuevo hacia la parte superior (en otras palabras, la primera carta sigue a la última). Por ejemplo, tomemos este mazo inicial:

Realice estos pasos para generar un carácter del flujo de claves.

  1. Localiza el comodín A y muévelo un lugar hacia abajo en el mazo. Si es la última carta, se convierte en la segunda carta. No hay forma de que se convierta en la primera carta. El mazo ahora luce así:
    • 1 4 7 10 13 16 19 22 25 B 3 6 9 12 15 18 21 24 2 A 5 8 11 14 17 20 23 26
  2. Localiza el comodín B y muévelo dos lugares hacia abajo en la baraja. Ten en cuenta que si es la penúltima carta, se convierte en la segunda carta al dar la vuelta. Si es la última carta, se convierte en la tercera carta. No hay forma de que se convierta en la primera carta.
    • 1 4 7 10 13 16 19 22 25 3 6 B 9 12 15 18 21 24 2 A 5 8 11 14 17 20 23 26
  3. Realizar un "triple corte": dividir la baraja en tres secciones delimitadas por los comodines e intercambiar la sección superior con la inferior. Los comodines y las cartas que se encuentran entre ellos se dejan intactos.
    • 5 8 11 14 17 20 23 26 B 9 12 15 18 21 24 2 A 1 4 7 10 13 16 19 22 25 3 6
  4. Realizar un "corte de recuento": observar el valor de la carta que se encuentra en la parte inferior de la baraja. Si la carta es un comodín, considerar su valor como 27 (53 si se utiliza una baraja completa). Retirar esa cantidad de cartas de la parte superior de la baraja e insertarlas justo encima de la última carta de la baraja.
    • 23 26 B 9 12 15 18 21 24 2 A 1 4 7 10 13 16 19 22 25 3 5 8 11 14 17 20 6
  5. Ahora, observe el valor de la carta superior. Nuevamente, cualquiera de los comodines cuenta como 27 (53 cuando se usa una baraja completa). Cuente esta cantidad de lugares debajo de esa carta y tome el valor de esa carta como el siguiente valor en el flujo de claves. Si la carta contada es cualquiera de los comodines, ignórelo y repita el algoritmo del flujo de claves. En este ejemplo, la carta superior es 23, por lo que la carta número 24, que es 11, determina el valor del flujo de claves. (Tenga en cuenta que ninguna carta cambia de lugar en este paso; este paso simplemente determina el valor del flujo de claves).

Criptoanálisis

En 1999, Paul Crowley descubrió que existe un sesgo hacia la repetición de caracteres en el flujo de claves, que se producen aproximadamente cada 1/22,5 caracteres en lugar de los 1/26 esperados. [2] Como resultado, Solitaire filtra información a una tasa de aproximadamente 0,0005 bits por carácter. [3] Si bien su seguridad puede ser adecuada para mensajes muy cortos, en general Solitaire se considera inseguro.

Crowley también se dio cuenta de que, en algunos casos, hay dos configuraciones de mazo diferentes que dan como resultado la misma configuración después de ejecutar el algoritmo de flujo de claves. Por ejemplo, cuando el comodín A está en la parte inferior o superior del mazo, se convertirá en la segunda carta después del paso 1. Esto significa que el algoritmo no siempre es reversible, como Schneier había afirmado originalmente. [2]

En 2019 Daniel Shiu propuso modificaciones al algoritmo que aumentarían su seguridad, a costa de hacer más difícil para el usuario su implementación manual. [3]

Referencias

  1. ^ Schneier, Bruce (mayo de 1999). "Solitaire" . Consultado el 2 de julio de 2006 .
  2. ^ ab Crowley, Paul. "Problemas con "Solitaire" de Bruce Schneier" . Consultado el 26 de marzo de 2018 .
  3. ^ ab Shiu, Daniel (13 de septiembre de 2019). "Análisis del Solitario". arXiv : 1909.06300 [cs.CR].

Enlaces externos