Articulo de referencia

Solitario (cifrado)

El algoritmo criptográfico Solitario fue diseñado por Bruce Schneier a petición de Neal Stephenson para su uso en su novela Cryptonomicon , en la que agentes de campo lo utiliza...

El algoritmo criptográfico Solitario fue diseñado por Bruce Schneier a petición de Neal Stephenson para su uso en su novela Cryptonomicon , en la que agentes de campo lo utilizan para comunicarse de forma segura sin depender de dispositivos electrónicos ni portar herramientas comprometedoras. [ 1 ] Fue diseñado como un criptosistema manual calculado con una baraja de cartas común . En Cryptonomicon , este algoritmo se denominó originalmente Pontifex para ocultar que implicaba el uso de cartas.

Una de las motivaciones para la creación del Solitario es que, en entornos totalitarios , una baraja de cartas resulta mucho más asequible (y menos incriminatoria) que un ordenador personal con diversas herramientas criptográficas. Sin embargo, como advierte Schneier en el apéndice de Cryptonomicon , prácticamente cualquier persona interesada en el criptoanálisis conoce ahora este algoritmo, por lo que llevar una baraja de cartas también podría 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 y dos comodines, que se distinguen entre sí: el comodín A y el comodín B. Para simplificar, en este ejemplo solo se usarán dos palos: tréboles y diamantes. A cada carta se le asigna un valor numérico: los tréboles se numeran del 1 al 13 (del As al Rey) y los diamantes del 14 al 26, respectivamente. A los comodines se les asignan los valores 27 y 28. Así, la jota de tréboles tendría el valor 11 y el dos de diamantes el valor 15. (En una baraja completa, los palos se numeran según el orden del bridge: tréboles, diamantes, corazones y picas, con las cartas numeradas del 1 al 52 y los comodines numerados del 53 al 54).

Para comenzar el cifrado o descifrado, coloque la baraja boca arriba en el orden previamente acordado. La persona que descifra el mensaje debe tener una baraja dispuesta en el mismo orden que la que usó quien lo cifró. El orden inicial lo deciden los destinatarios; barajar la baraja de forma completamente aleatoria es preferible, aunque existen muchos otros métodos.

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

Para cifrar un mensaje:

  1. Elimine toda la puntuación y los espacios, dejando solo las 26 letras A–Z.
  2. Convierte cada letra a su valor numérico natural, A = 1, B = 2, ..., Z = 26.
  3. Genera un valor de secuencia de claves para cada letra del mensaje utilizando el algoritmo de secuencia de claves que se muestra a continuación.
  4. Suma cada valor de la secuencia de claves al número de texto plano correspondiente, restando 26 si el valor resultante es mayor que 26. (En matemáticas, esto se denomina aritmética modular ).
  5. Convierte los números resultantes de nuevo 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. Genera un valor de flujo de claves para cada letra del texto cifrado.
  3. Resta cada valor de la secuencia de claves del valor del texto cifrado correspondiente, sumando 26 si el valor resultante es menor que 1.
  4. Convierte los números resultantes de nuevo en letras.

Algoritmo de flujo de claves

Este algoritmo genera valores de secuencia de claves moviendo las cartas dentro de la baraja. El algoritmo de secuencia de claves es determinista , por lo que los valores de la secuencia de claves dependen únicamente del orden inicial de la baraja. Se supone que la baraja es una matriz circular, lo que significa que si una carta necesita avanzar por debajo de la carta inferior de la baraja, simplemente volverá a la parte superior (en otras palabras, la primera carta sigue a la última). Por ejemplo, considere esta baraja inicial:

  • 1 4 7 10 13 16 19 22 25 B 3 6 9 12 15 18 21 24 A 2 5 8 11 14 17 20 23 26

Siga estos pasos para generar un carácter de la secuencia de claves.

  1. Localiza el comodín A y muévelo una posición hacia abajo en la baraja. Si es la última carta, se convierte en la segunda. No hay forma de que se convierta en la primera. La baraja ahora se ve 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 desplázalo dos posiciones hacia abajo en la baraja. Observa que si es la penúltima carta, se convierte en la segunda al dar la vuelta completa. Si es la última, se convierte en la tercera. No hay forma de que se convierta en la primera.
    • 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. Realiza un "triple corte": divide la baraja en tres secciones delimitadas por los comodines e intercambia la sección superior con la inferior. Los comodines y las cartas que se encuentran entre ellos permanecen 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. Realiza un "corte por conteo": observa el valor de la carta que se encuentra al final de la baraja. Si la carta es un comodín, asígnale un valor de 27 (53 si usas una baraja completa). Retira esa cantidad de cartas de la parte superior de la baraja e insértalas justo encima de la última carta.
    • 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 posiciones debajo de esa carta y tome su valor como el siguiente valor en la secuencia de claves. Si la carta contada es cualquiera de los comodines, ignórela y repita el algoritmo de la secuencia de claves. En este ejemplo, la carta superior es 23, por lo que la carta número 24, que es 11, determina el valor de la secuencia de claves. (Tenga en cuenta que ninguna carta cambia de posición en este paso; este paso simplemente determina el valor de la secuencia de claves).

Criptoanálisis

En 1999, Paul Crowley descubrió que existe un sesgo hacia la repetición de caracteres en la secuencia de claves, que aparecen aproximadamente cada 1/22,5 caracteres en lugar del esperado 1/26. [ 2 ] Como resultado, Solitario 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 Solitario se considera inseguro.

Crowley también observó que, en algunos casos, existen dos configuraciones de baraja diferentes que dan como resultado la misma configuración tras ejecutar el algoritmo de secuencia de claves. Por ejemplo, cuando el comodín A se encuentra en la parte inferior o superior de la baraja, se convierte 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 dificultar su implementación manual por parte del usuario. [ 3 ]

Referencias

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