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.
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:
Para descifrar un texto cifrado:
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.
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]