Enviado por Bruce Schneier
Bruce Schneier
Bruce Schneier diseñó un algoritmo de cifrado seguro que emplea únicamente una baraja de póker de 54 cartas. Se trata de un algoritmo de cifrado en ristra o flujo ("stream", en inglés), y ha sido diseñado para que sea sencillo y fácil de realizar a mano, sin apoyo informático. El algoritmo se llama "Solitario" y fue creado para la novela Cryptonomicon (2000), de Neal Stephenson (publicada en castellano en tres volúmenes por Ediciones B a lo largo del año 2002 con el título Criptonomicón).
El algoritmo se basa en mover las cartas del mazo siguiendo una serie de pasos, y combinar sus resultados con el documento a cifrar. La clave está constituida por la disposición inicial de las 54 cartas de la baraja de póker, por lo que su fortaleza aparente es de 54! (54 factorial), aproximadamente 236 bits.
Se da la curiosa circunstancia de que este algoritmo parece lo bastante seguro como para que sea considerado como tecnología militar de doble uso (como las minas o las balas de ametralladora) por parte del gobierno estadounidense. Este hecho podría suponer la ilegalidad de exportar el conocimiento de dicho algoritmo a países extranjeros.
Sin embargo la legislación de EE.UU. protege la libertad de expresión escrita, por lo que se permitiría la exportación sin problemas si el algoritmo se describiese en un libro editado de forma legal, con ISBN, etc. Y eso es precisamente lo que se hace en la novela de Neal Stephenson, en la que "solitaire" aparece como un apéndice.
Parece increíble que un algoritmo criptográfico tan sencillo, que puede memorizarse y utilizarse de forma manual, pueda estar sujeto a legislación militar. Pero la legislación norteamericana es así. En cualquier caso Bruce Schneier ha tomado la iniciativa y ha decidido publicar una página web en la que describe con todo detalle el algoritmo, proporciona ejemplos, consejos de uso, código fuente para los que deseen utilizarlo con un ordenador y vectores de prueba para comprobar que las implementaciones son correctas.
El documento original está escrito en inglés, pero Jesús Cea Avión se ha encargado de traducirlo al castellano y hablar con Bruce Schenier para que añada enlaces a la traducción. En este momento, además de la versión en inglés y la versión en castellano recientemente traducida, existen también traducciones oficiales al francés y al alemán.
Nota publicado en el boletín "Una-Al-Día", de Hispasec, el 28-9-1999
En la novela Criptonomicón, de Neal Stephenson, el personaje Enoch Root describe un criptosistema llamado "Pontifex" a otro personaje llamado Randy Waterhouse, y más tarde le revela que los pasos del algoritmo están pensados para desarrollarse usando una baraja de cartas. Estos dos personajes intercambian varios mensajes cifrados utilizando este sistema. El sistema se llama "Solitario" (en la novela, "Pontifex" es un nombre clave que pretende disimular el hecho de que se emplee una baraja) y lo diseñé para permitir a un agente el comunicarse de forma segura sin tener que depender de la electrónica o de tener que llevar herramientas incriminadoras. Un agente podría encontrarse en una situación en la que simplemente no tiene acceso a un ordenador, o puede ser perseguido si posee herramientas para comunicaciones secretas. Pero una baraja... ¿Qué hay de malo en ello?
Solitario obtiene su seguridad de la aleatoriedad inherente a las cartas bien barajadas. Manipulando la baraja, un comunicante puede crear una cadena de letras "aleatorias" que luego combina con su mensaje. Por supuesto Solitario puede ser simulado con un ordenador, pero está diseñado para ser utilizado a mano.
Solitario puede parecer "low-tech", pero se pretende que su seguridad sea "high-tech". Diseñé Solitario para que fuera seguro incluso contra adversarios militares bien financiados, con los ordenadores más potentes y los criptoanalistas más inteligentes. Por supuesto, no existe ninguna garantía de que alguien encuentre un ataque contra Solitario (permanezcan atentos a esta página para futuras actualizaciones), pero el algoritmo es ciertamente mejor que cualquier otro cifrado de lápiz y papel que haya visto nunca.
No es rápido, no obstante. El cifrar o descifrar un mensaje razonablemente largo puede llevar una tarde. En el libro de David Kahn, "Kahn on Codes", se describe un cifrado de lápiz y papel real, utilizado por un espía soviético. Tanto el algoritmo soviético como Solitario consumen aproximadamente el mismo tiempo para cifrar un mensaje: la mayor parte de una tarde.
Solitario es un cifrado "stream", en modo "output-feedback" (salida- retroalimentación). Algunas veces se les llama generadores de claves ("Key-Generator", KG en la jerga militar de EE.UU.). La idea básica es que Solitario genera una ristra de números, llamada "keystream" (ristra o secuencia de clave), entre 1 y 26. Para cifrar, se genera una ristra de longitud igual al texto original. Seguidamente se suman, módulo 26, letra a letra al texto original, para crear el texto cifrado. Para descifrar, se genera la misma ristra y se resta, módulo 26, del texto cifrado. No te preocupes, explicaré qué es "módulo" en un minuto.
Por ejemplo, para cifrar el primer mensaje mencionado en la novela de Stephenson, "DO NOT USE PC":
DONOT USEPC
KDWUP ONOWT
4 15 14 15 20 21 19 5 16 3
11 4 23 21 16 15 14 15 23 20
15 19 11 10 10 10 7 20 13 23
OSKJJ JGTMW
Si eres realmente bueno, puedes aprender a sumar letras en tu cabeza, y simplemente sumar las letras del paso (1) y (2). Sólo hace falta un poco de práctica. Es fácil recordar que A+A=B; recordar que T+Q=K es más difícil.
La idea básica consiste en generar la misma ristra, y restarla del texto cifrado.
OSKJJ JGTMW
KDWUP ONOWT
15 19 11 10 10 10 7 20 13 23
11 4 23 21 16 15 14 15 23 20
4 15 14 15 20 21 19 5 16 3
DONOT USEPC
Como puedes ver, descifrar es igual que cifrar, salvo que al mensaje cifrado se le resta la ristra obtenida con Solitario.
Generar las letras de la secuencia de clave
Esto es el corazón de Solitario. Las descripciones del cifrado y descifrado dadas más arriba funcionan para cualquier cifrado tipo "ristra" (stream) en modo "output-feedback". Es la manera en que funciona RC4. También es la manera en que funciona DES en modo OFB. Esta sección es específica a Solitario, y explica cómo Solitario genera la ristra.
Solitario genera la ristra utilizando una baraja de cartas. Puedes pensar en una baraja de 54 cartas (no olvides los dos comodines) como una permutación de 54 elementos [El texto original en inglés se refiere, evidentemente, a una baraja de póker. N. del T.]. Hay 54!, sobre 2.31*10^71 posibles ordenamientos de la baraja. Mejor aún, hay 52 cartas en una baraja (sin los comodines), y 26 letras en el alfabeto. Este tipo de coincidencia es demasiado buena para dejarla pasar.
Para utilizar Solitario, se necesita una baraja con las 52 cartas y los dos comodines. Los comodines deben ser diferentes. (Esto es habitual. La baraja que estoy usando mientras escribo tiene estrellas en sus comodines: uno tiene una estrella pequeña, y el otro tiene una estrella grande). Llámalo a uno comodín A y al otro comodín B. Generalmente hay algún elemento gráfico en los comodines que es igual, pero de diferente tamaño. Llama "B" al comodín que lo tiene más "grande". Es más fácil si puedes escribir una gran "A" y una gran "B" en los comodines, pero recuerda que tendrás que explicárselo a la policía secreta si alguna vez te cogen.
Para inicializar la baraja, cógela con la mano, cara arriba. Luego ponlas en su configuración inicial, que será su clave (hablaré de la clave más tarde, porque es un tema diferente a generar la ristra en sí). Ahora estás preparado para producir una ristra.
He aquí cómo generar un carácter. Esto es Solitario:
Es importante realizar los dos pasos anteriores en orden. Es tentador volverse perezoso y simplemente mover los dos comodines cuando los encuentras. Eso también funciona, a menos que estén muy cerca el uno del otro.
Así que si la baraja está en esta situación antes del paso 1:
A 7 2 B 9 4 1
al final del paso 2 debería ser
7 A 2 9 4 B 1
Y si la bajara fuese:
3 A B 8 9 6
Al final del paso 2 debería ser:
A 3 8 9 B 6
Si tienes alguna duda, recuerda mover el comodín A antes que el B. Y ten cuidado cuando los comodines se encuentren al final de la baraja. Si un comodín es la última carta, imagínatela como si fuera la primera carta, antes de empezar a contar.
2 4 6 B 5 8 7 1 A 3 9
entonces tras el corte la baraja sería:
3 9 B 5 8 7 1 A 2 4 6
"Primer" y "segundo" comodín se refiere al comodín que está más arriba o más abajo respecto al extremo de la baraja. Ignora el hecho de que un comodín es "A" y otro es "B", en este paso.
Recuerda que los comodines y las cartas entre ellos no se mueven. Esto es fácil de hacer con las manos. Si no hay cartas en una de las secciones (porque los comodines están juntos, o porque uno está arriba y otro debajo de la baraja), simplemente considera esa sección como vacía y muévela de todos modos. Si la baraja es:
B 5 8 7 1 A 3 9
Tras el corte el intercambio, será:
3 9 B 5 8 7 1 A
Una baraja
B 5 8 7 1 A
no sufrirá ningún cambio tras este paso.
7 ... cartas ... 4 5 ... cartas ... 8 9
y la novena carta es el 4, el corte sería:
5 ... cartas ... 8 7 ... cartas ... 4 9
La razón de dejar la última carta en su lugar es para hacer el último paso reversible. Esto es importante a la hora de analizar su seguridad de forma matemática.
Una baraja con un comodín como última carta queda igual tras este paso. No hay cambios.
Asegúrate de no invertir el orden cuando cuentes las cartas. La forma correcta de contar es pasar las cartas de una mano a la otra. No hagas montones sobre la mesa.
Así es como Solitario cifra un carácter. Se usan estos pasos para generar una ristra tan larga como sea necesario; simplemente se repiten los pasos tantas veces como sea preciso, sin barajar el mazo. Y, recuerda, necesitarás una ristra tan larga como el mensaje original.
Sé que cada país tiene barajas diferentes. En general, no importa cómo se ordenen las cartas o cómo se conviertan las cartas a números. Lo que importa es que el remitente y el receptor se pongan de acuerdo en las reglas. Si no eres consistente, no te podrás comunicar.
Introducir una clave en la baraja
Antes de empezar a generar la ristra, es necesario "introducir" una clave en la baraja. Ésta es, probablemente, la parte más importante de toda la operación, y en la que se basa toda la seguridad del sistema. Solitario es sólo tan seguro como lo sea su clave. Es decir, la forma más fácil de romper Solitario es imaginarse qué clave se está utilizando. Si no tienes una buena clave, el resto no importa. He aquí algunas sugerencias para realizar el intercambio de claves:
Sé prevenido, no obstante; la policía secreta puede encontrar tu columna de bridge y copiarla. Puedes intentar acordar alguna convención sobre qué columna de bridge utilizar; por ejemplo "usar la columna en el periódico local de tu ciudad natal correspondiente al día que se cifre el mensaje", o algo por el estilo. O una una lista de palabras clave en el web del New York Times, y usar la columna de bridge del día del artículo que aparezca cuando buscas esas palabras clave. Si se encuentran las palabras clave, o son interceptadas, parecerán una "frase de paso". Y elige tus propias convenciones a la hora de convertir las columnas de bridge en un ordenamiento para la baraja. Recuerda que la policía secreta también lee los libros de Neal Stephenson.
Repetimos los cinco pasos de Solitario tantas veces como letras tenga la palabra de paso. Es decir, la segunda vez utilizaremos la segunda letra, la tercera vez la tercera letra, etc.
Paso opcional (no utilizado con los ejemplos que siguen): Usa los dos últimos caracteres para situar los comodines. Si la penúltima letra es una G (es decir, 7), ponemos el comodín A tras la séptima carta. Si la última letra es una T (es decir, 20), ponemos el comodín B tras la carta número 20.
Recuerda, no obstante, que sólo hay unos 1.4 bits de aleatoriedad por cada letra, en el inglés estándar [el castellano es similar. N. del T.]. Necesitarás frase de paso de al menos 64 caracteres para hacerlo seguro. Yo recomendaría emplear al menos 80 letras, sólo por si las moscas. Lo siento; no puedes tener buena seguridad con claves más cortas.
He aquí algunos ejemplos para practicar tus habilidades con Solitario:
Veamos cómo generamos una ristra de dos caracteres. La baraja inicial es:
1 2 3 4 ... 52 A B
Tras el primer paso (mover el comodín A):
1 2 3 4 ... 52 B A
Tras el segundo paso (mover el comodín B):
1 B 2 3 4 ... 52 A
Tras el tercer paso:
B 2 3 4 ... 52 A 1
Tras el cuarto paso:
2 3 4 ... 52 A B 1
La última carta es un uno, lo que significa mover una carta. Recuerda que el 1 debe quedarse donde está, al final de la baraja.
El quinto paso no cambia el mazo, sino que produce el primer carácter de la ristra. La primera carta es un 2, así que contamos 2 cartas, hasta el 4. El primer número de la ristra será el "4". No modifiques la baraja; simplemente copia ese valor en alguna parte.
Para obtener el segundo número, procedemos a repetir los cinco pasos:
Paso 1:
2 3 4 ... 49 50 51 52 B A 1
Paso 2:
2 3 4 ... 49 50 51 52 A 1 B
Paso 3:
A 1 B 2 3 4 ... 49 50 51 52
Paso 4:
51 A 1 B 2 3 4 ... 49 50 52
La última carta es 52, así que cuenta 52 cartas, hasta la 51. Mueve esa carta, la 51, al principio del mazo. Recuerda que la última carta, la 52, no debe moverse.
El paso 5 genera el número que estamos buscando. La primera carta es un 51, así que contamos 51 cartas, hasta llegar a la 49, que es el valor que estamos buscando. Como antes, no quites esa carta del mazo.
Los primero diez números así obtenidos son:
4 49 10 (53) 24 28 51 44 6 4 33
El 53 nos lo saltamos, por supuesto. Sólo lo ponemos como demostración.
Si el texto a cifrar es
AAAAA AAAAA
el texto cifrado será
EXKYI ZSGEH
8 19 7 25 20 (53) 9 8 22 32 43 5 26 17 (53) 38 48
Si el texto original fuera todo A's, el texto cifrado sería
ITHZU JIWGR FARMW
KIRAK SFJAN
Recuerda que se emplean X's para completar el último grupo de 5 letras.
Por supuesto, tú deberías utilizar claves más largas. Estos ejemplos son únicamente una demostración. Hay más ejemplos en el web, y puedes usar un script en perl para generar los tuyos propios [Bruce se refiere al web original. El enlace al mismo se encuentra al final de este documento. N. del T.].
Seguridad real, no seguridad por medio de oscuridad
Solitario está diseñado para ser seguro incluso si el enemigo sabe cómo funciona el algoritmo. He supuesto que "Criptonomicón" será un best-seller, y que habrá copias del libro en todas partes. He supuesto también que la NSA y el resto del mundo estudiarán el algoritmo. Asumo que el único secreto es la clave.
Por eso mantener la clave en secreto es tan importante. Si tienes un mazo de cartas en lugar seguro, deberías asumir, al menos, que el enemigo sabe que estás usando Solitario. Si tienes una columna de bidge en tu caja fuerte, deberías esperar que se alzasen algunas cejas. Si se sabe que algún grupo está empleando el algoritmo, cuenta con que la policía secreta mantenga una base de datos de columnas de bridge para ser utilizadas como ataque. Solitario es seguro aunque tu enemigo sepa que lo estás utilizando, y un simple mazo de cartas es mucho menos incriminatorio que un programa de cifrado en tu portátil.
Quemar las notas es, probablemente, la forma más segura de deshacerse de ellas. Pero piensa en el tipo de papel. El papel sin cola, el papel de arroz utilizado en los cigarrillos, parece ideal. Un colega hizo algunas pruebas con papel "Club Cabaret Width", y ardían completamente.
No es tan difícil escribir sobre papel de fumar como podría pensarse. Usar un lápiz del número 2 con una punta fina pero roma funciona bien. El lápiz número 3 es aún mejor, pero es algo un poco raro para llevarlo por ahí. Los bolígrafos tienen varios problemas. Su punta dura puede dejar marcas en la superficie bajo el papel. Además, la tinta puede filtrarse y manchar la superficie inferior.
El papel de fumar está fabricado para quemarse completamente de forma limpia. El papel "Club" arde mejor cuando se quema al aire libre. Es decir, se enciende y se deja caer desde la altura del pecho. Este tipo de papel tiene la ventaja adicional de que ocupan muy poco volumen y se puede comer fácilmente si es preciso.
También son extremadamente finos. Esos papeles, cuadrados de unas tres pulgadas [7,5 cm - N. del T.], pueden doblarse seis veces en un cuadrado de un centímetro de lado y de un milímetro de grosor. Una de esas hojas acomoda fácilmente 80 caracteres en 8 filas de bloques de 5 letras cada uno. Para alguien cuidadoso parece bastante factible el escribir hasta 120 caracteres.
Hay mucho, pero es demasiado complejo para reproducirlo aquí. Ve a http://counterpane.com/ o escribe a Counterpane Systems, 1711 North Ave #16, Oak Park, IL 60302
Recomiendo mi propio libro, Applied Cryptography (John Wiley & Sons, 1996), como un buen lugar para empezar. Luego lea The Codebreakers, por David Kahn (Scribner, 1996). A continuación, hay varios libros sobre criptografía informática y varios sobre criptografía manual. Puedes suscribirte a mi boletín de correo electrónico gratuito en http://www.counterpane.com/crypto-gram.html o enviando un mensaje de correo en blanco a crypto-gram-subscribe[arroba]chaparraltree.com. Es un campo divertido; buena suerte.
La implementación en perl de "Solitario" (la única testeada por Counterpane)
Bruce Schneier
schneier[arroba]counterpane.com
Esta página es una traducción de la original en inglés de Bruce Schneier. En la original se pueden encontrar enlaces a código fuente, vectores de prueba y traducciones a diferentes idiomas.
Copyright Counterpane Internet Security, Inc., 2002
Traducción castellana: jcea[arroba]argo.es
(la página oficial de la traducción castellana es: http://www.argo.es/~jcea/artic/solitaire.htm)
Ingrese el e-mail y contraseña con el que está registrado en Monografias.com
Trabajos relacionados
Ver mas trabajos de Matematicas |
|
Nota al lector: es posible que esta página no contenga todos los componentes del trabajo original (pies de página, avanzadas formulas matemáticas, esquemas o tablas complejas, etc.). Recuerde que para ver el trabajo en su versión original completa, puede descargarlo desde el menú superior.
Todos los documentos disponibles en este sitio expresan los puntos de vista de sus respectivos autores y no de Monografias.com. El objetivo de Monografias.com es poner el conocimiento a disposición de toda su comunidad. Queda bajo la responsabilidad de cada lector el eventual uso que se le de a esta información. Asimismo, es obligatoria la cita del autor del contenido y de Monografias.com como fuentes de información.