El algoritmo criptográfico Solitaire es un cifrado de flujo con retroalimentación de salida que fue desarrollado por Bruce Schneier a pedido del escritor Neil Stevenson .
Stevenson necesitaba un algoritmo de cifrado que permitiera a los agentes de su libro Cryptonomicon intercambiar información secreta sin despertar sospechas. Solitaire era ideal para estos requisitos, ya que permitía a los agentes cifrar mensajes sin el uso de dispositivos electrónicos o cualquier dispositivo comprometedor. En el libro, el algoritmo se llamó "Pontifex" para ocultar el hecho de que las tarjetas se usaban para el cifrado.
"Solitario" heredó su confiabilidad de la aleatoriedad inherente de la posición de las cartas al barajar la baraja. Al manipular una simple baraja de cartas, la persona que codifica el mensaje puede crear una secuencia aleatoria de caracteres que luego se combinan con el mensaje. Este algoritmo puede parecer bastante poco fiable, pero según el propio Schneier, Solitaire puede resistir incluso el ataque de los oponentes militares más poderosos con una gran financiación, ordenadores potentes y excelentes criptoanalistas, y es el mejor algoritmo criptográfico del mundo implementado con "lápiz y papel". [una]
La idea principal de este algoritmo es que genera el llamado "gamma" de números del 1 al 26. Para el cifrado, es necesario generar el número de "gamma" igual al número de letras en el texto. Luego súmales módulo 26 a cada una de las letras del texto. Por ejemplo, considere el proceso de encriptación del primer mensaje del libro "Cryptonomicon" "NO USAR PC":
1) Dividimos los mensajes en grupos de cinco caracteres (esto no tiene nada que ver con el cifrado, simplemente se acepta), para complementar el último grupo, si es necesario, use X. En nuestro caso, obtenemos:
2) Use Solitario para generar diez escalas (detalles a continuación), digamos que son:
3) Traducimos las letras del mensaje a números: A=1, B=2, etc., obtenemos:
4) De la misma manera, traducimos las "escalas":
5) Añadir el mensaje y el módulo 26 “gamma”:
6) Traducimos la cantidad recibida de nuevo en letras:
Si tiene suficiente práctica, puede intentar "agregar" letras de inmediato, lo que acelerará significativamente el proceso de cifrado.
La idea principal del descifrado es que el destinatario genera los mismos "gamma" y los sustrae del texto cifrado.
1) Dividimos el texto cifrado en grupos de cinco caracteres:
2) Usamos una baraja de cartas para generar “gammas”. Si el destinatario usa la misma clave que el remitente, entonces la "gamma" será la misma:
3) Traducimos el texto cifrado de letras a números:
4) Hacemos lo mismo con "escalas":
5) Restar gamma del módulo de texto cifrado 26:
6) Traducimos la cantidad recibida de nuevo en letras:
Como puede ver, el proceso de descifrado es absolutamente similar al proceso de cifrado. Este ejemplo es bastante simple, pero al convertir mensajes de mayor tamaño, primero debe deshacerse de los signos de puntuación.
Pasemos a la generación de "gamma". Esta es la parte más importante del algoritmo, todo lo anterior es cierto para cualquier cifrado de flujo con retroalimentación de salida . La misma parte se aplica directamente solo a Solitario.
Solitaire genera "gammas" usando una baraja de cartas. Una baraja de cartas consta de 54 cartas, lo que nos da el número de permutaciones igual a 54!, que es aproximadamente igual a 2.3·10 71 . Aún mejor, aparte de los comodines, hay 52 cartas en la baraja y 26 letras en el alfabeto. Para cifrar, necesita una baraja con 54 cartas, y los comodines deben diferir de alguna manera entre sí. Designemos condicionalmente uno de los comodines A y el otro B. Para "iniciar" el mazo, debe organizar las cartas en un orden determinado, esta será la clave. Luego, debe tomar las cartas boca abajo, ahora puede generar "gamma".
1) Encuentra el comodín A, muévelo una carta hacia abajo, es decir, cambia de lugar con la carta que está debajo.
2) Encuentra el comodín B, muévelo dos cartas hacia abajo. Así, si las cartas se colocaran en este orden antes del primer paso:
luego después del segundo paso:
Si primero tenemos, por ejemplo,
entonces al final obtenemos
3) Realizamos un "triple corte", es decir, cambiamos las cartas de encima del primer comodín por las cartas de debajo del segundo comodín. Es decir, si el mazo se ve así:
entonces después de este paso irá a:
Como puede ver, aquí "primero" y "segundo" se refieren al orden en que aparecen los comodines en la baraja. Lo más importante que debe recordar es que los comodines y las cartas entre ellos no se mueven ni cambian de ninguna manera durante este paso. Y si el mazo se ve así antes de este paso:
A ... B,luego, después del tercer paso, nada cambiará.
4) Miramos la carta inferior de la baraja, la ponemos en línea con un número del 1 al 53.
Hacemos esto de la siguiente manera: si el palo de la carta es de tréboles, entonces este valor corresponde al que se muestra en la carta; si son diamantes, entonces el valor es más 13; si hay corazones, entonces el valor es más 26; espadas - valor más 39. Cualquier comodín - 53. Ahora contamos el mismo número de cartas, comenzando desde la primera, y las colocamos entre la carta inferior y el resto de la baraja.
Si el mazo originalmente se veía así:
entonces después de este paso irá a:
La razón por la que la última carta permanece en su lugar es para que este paso sea reversible. Si la parte inferior de la baraja era un comodín, permanece sin cambios después de este paso.
5) Encontramos un mapa con el que se creará la “gamma”. Para ello, comparamos la carta superior con un número del 1 al 53, como en el cuarto paso. Contamos este número de cartas. Anotamos la carta que se encuentra debajo de la que contamos en papel, dejándola en la baraja (si golpeamos el comodín, comenzamos nuevamente desde el primer paso). Este es el mapa que nos interesa. Tenga en cuenta que este paso no cambia el orden de las cartas en la baraja.
6) Traducimos la tarjeta del quinto paso a un número. Esto se hace de la misma manera que en el cuarto paso con una excepción. Como hay 26 letras en el alfabeto, numeramos los tréboles y los corazones del 1 al 13, y las picas y los diamantes del 14 al 26. Luego pasamos a las letras.
Estos pasos deben realizarse para cifrar un carácter. Al repetir los mismos seis pasos para cada carácter sin cifrar, ciframos todo el texto sin cifrar.
En general, no es necesario cumplir con las reglas de numeración de tarjetas que se dan aquí, lo principal es que ambas personas se adhieren al mismo esquema.
Antes de comenzar el cifrado, debe preparar una plataforma. Esta es quizás la parte más importante, porque la forma más fácil de descifrar el Solitario es averiguar qué clave se está utilizando. Para que la clave sea realmente confiable, debe seguir los siguientes métodos:
Con todo esto, no hay que olvidar que en inglés solo hay 1,4 bits de aleatoriedad por carácter, por lo que el autor del algoritmo aconseja cifrar frases de al menos 80 caracteres para preparar una baraja.
Aunque el artículo del autor original del algoritmo establece que es reversible, la situación en la que el comodín termina en la parte inferior de la baraja y luego se mueve hacia la parte superior cuando se inicia la baraja hace que el proceso sea irreversible. Vale la pena señalar aquí que los generadores de números pseudoaleatorios no reversibles tienen períodos más cortos y tienden a repetirse. De hecho, al usar el algoritmo Solitario, es posible generar un número del 1 al 26, es decir, cada uno de ellos debería salir con una probabilidad de 1/26, pero en realidad esta probabilidad es mayor: 1/22,5. [2]
También puede crear una versión rusa de este cifrado, por ejemplo, al eliminar la letra "e" del alfabeto, obtenemos 32 caracteres más 2 cartas del análogo de comodines, en total: 34, es decir, una baraja regular sin, digamos, un par de seises. Una gran desventaja de tal uso es una disminución en la fuerza de la tecla. Esta opción es probablemente la óptima, ya que en el caso de dejar 52 tarjetas y realizar cálculos similares a los de la versión original, pero módulo 32, tenemos la posibilidad de análisis de frecuencia. Otra opción es idear una transformación del texto original escrito con las 33 letras del alfabeto ruso en un texto que contenga solo unas 26 letras. [3]
Una desventaja es que el cifrado y descifrado lleva mucho tiempo. Pero en comparación con otros cifrados similares, esta vez es aceptable. Por ejemplo, el cifrado real utilizado por los espías soviéticos, descrito por David Kann , tarda la misma cantidad de tiempo en cifrar un mensaje lo suficientemente grande como Solitaire: aproximadamente una noche.
Además, debe cumplir con las siguientes reglas: