El algoritmo criptográfico Solitaire fue diseñado por Bruce Schneier a petición de Neal Stephenson para su uso en su novela Criptonomicón, 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 sistema criptográfico manual calculado con una baraja ordinaria de jugar a las cartas . En Criptonomicón, este algoritmo se llamó originalmente Pontifex para ocultar el hecho de que se trataba de jugar a las cartas.
Una de las motivaciones detrás de la creación de Solitaire es que en entornos totalitarios, una baraja de cartas es mucho más asequible (y menos incriminatoria) que una computadora personal con una variedad de utilidades criptológicas. Sin embargo, como advierte Schneier en el apéndice de Criptonomicón, casi todas las personas interesadas en el criptoanálisis ahora conocerán este algoritmo, por lo que llevar una baraja de cartas también puede considerarse incriminatorio.
Desde su creación, el análisis ha revelado fallas en el cifrado. Ahora se considera inseguro.
Este algoritmo utiliza una baraja de cartas estándar con 52 cartas del mismo palo y dos comodines que se distinguen entre sí, llamados el comodín A y el comodín B. En aras de la simplicidad, 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ía el valor 11 y el dos de diamantes tendría el valor 15. (En una baraja de cartas llena, los palos se valoran en orden de puente: tréboles, diamantes, corazones, espadas, con las cartas del mismo palo numeradas del 1 al 52, y los comodines numerados 53 y 54.)
Para comenzar el cifrado o descifrado, coloque la baraja de cartas boca arriba en el orden acordado previamente. La persona que descifra un mensaje debe tener una baraja dispuesta en el mismo orden que la baraja utilizada por la persona que cifró el mensaje. La forma en que se decide inicialmente el pedido depende de los destinatarios; Es preferible barajar el mazo perfectamente al azar, 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 ser al menos tan largo como el mensaje. Si el flujo de claves es más largo que el mensaje, el mensaje puede rellenarse con un carácter repetido adicional, negando así al atacante el conocimiento de la longitud exacta del mensaje.
Para cifrar un mensaje (se asume que se refiere al inglés, idioma original de la novela, con alfabeto de 26 letras):
Para descifrar un texto cifrado:
Este algoritmo genera valores de flujo clave moviendo cartas dentro del mazo. El algoritmo de la secuencia de claves es determinista, por lo que los valores de la secuencia de claves dependen solo del orden inicial de la plataforma. Se supone que la baraja es una matriz circular, lo que significa que si una carta alguna vez necesita avanzar por debajo de la carta inferior en la baraja, simplemente rotará hacia la parte superior (en otras palabras, la primera carta sigue a la última). Tomaremos por ejemplo este mazo de inicio:
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 la secuencia clave, lo que ocurre aproximadamente cada 1 / 22.5 caracteres en lugar del esperado 1/26.[2] Como resultado, Solitaire filtra información a una velocidad de aproximadamente 0,0005 bits por caracter.[3] Si bien su seguridad quizás sea adecuada para mensajes muy cortos, en general Solitaire se considera inseguro.
Crowley también notó que, en algunos casos, hay dos configuraciones de plataforma 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 del mazo o en la parte 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 dificultar al usuario la implementación manual.[3]