El cifrado del solitario
Solitaire es un algoritmo de cifrado fuerte inventado por Bruce Schneier para la novela Criptonomicón de Neal Stephenson y que para su aplicación requiere únicamente de una baraja de cartas.
El Algoritmo de Cifrado "Solitaire"
Versión 1.2, 26 de Mayo de 1.999.
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 Bruce Schneier 1999
En la novela Cryptonomicon, 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 "Solitaire" (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?.
Solitaire 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 Solitaire
puede ser simulado con un ordenador, pero está diseñado para ser utilizado a
mano.
Solitaire puede parecer "low-tech", pero se pretende que su seguridad sea "high-tech".
Diseñé Solitaire para que fuera seguro incluso contra adversarios militares bien
financiados, con los ordenadores más potentes y los cryptoanalistas más
inteligentes. Por supuesto, no existe ninguna garantía de que alguien encuentre
un ataque contra Solitaire (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 Solitaire consumen aproximadamente el mismo
tiempo para cifrar un mensaje: la mayor parte de una tarde.
Cifrando con Solitaire
Solitaire es un cifrado "stream", en modo "output-feedback". Algunas veces
se les llama generadores de claves ("Key-Generator", KG en la jerga militar de
EE.UU.). La idea básica es que Solitaire genera una ristra de números, llamada "keystream",
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.
For ejemplo, para cifrar el primer mensaje mencionado en la novela de
Stephenson, "DO NOT USE PC":
1.
Divide el
mensaje original en grupos de cinco letras (No hay nada mágico respecto a los
grupos de cinco letras; es sólo tradición). Usa "X" para completar el último
grupo. Así, si el mensaje es "DO NOT USE PC", el texto se transformará en:
2.
DONOT
USEPC
3.
Usa Solitaire
para generar una ristra de letras (los detalles se dan más tarde). Supongamos
que son:
4.
KDWUP
ONOWT
5.
Convertimos el
mensaje original de letras a números, A=1, B=2, etc:
6.
4
15 14 15 20 21 19 5 16 3
7.
Convertimos la
ristra de Solitaire de forma similar:
8.
11
4 23 21 16 15 14 15 23 20
9.
Sumamos los
números de mensaje original con los correspondientes de la ristra Solitaire,
módulo 26. Es decir, si suman más de 26, restamos 26 de resultado. Por ejemplo,
1+1=2, 26+1=27, y 27-26=1, así que 26+1=1.
10.
15 19 11 10 10 10 7 20
13 23
11.
Convertimos los
números de nuevo a letras:
12.
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.
Descifrando con Solitaire
La idea básica consiste en generar la misma ristra, y restarla del texto
cifrado.
1.
Toma el mensaje
cifrado y divídelo en grupos de cinco letras (ya debería estar en ese formato).
2.
OSKJJ
JGTMW
3.
Usa Solitaire
para generar la ristra. Si el receptor usa la misma clave que el transmisor, la
ristra será la misma.
4.
KDWUP
ONOWT
5.
Convierte el
mensaje cifrado a números:
6.
15
19 11 10 10 10 7 20 13 23
7.
Convierte la
ristra de forma similar:
8.
11
4 23 21 16 15 14 15 23 20
9.
Resta a cada
número del texto cifrado el número correspondiente de la ristra, módulo 26: for
ejempo, 22-1=21, 1-22=5. Es fácil. Si el primer número es menor o igual que el
segundo, sumamos 26 al primer número antes de restar. Así, 1-22 se convierte en
27-22=5.
10.
4 15 14 15 20 21 19 5
16 3
11.
Convierte los
números a letras:
12.
DONOT USEPC
Como puedes ver, descifrar es igual que cifrar, salvo que al mensaje cifrado
se le restra la ristra obtenida con Solitaire.
Generando la ristra (keystream)
Esto es el corazón de Solitaire. Las descripciones del cifrado y descifrado
dadas más arriba funcionan para cualquier cifrado "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 Solitaire, y explica cómo
Solitaire genera la ristra.
Solitaire 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 {JCEA: El texto original en inglés se
refiere, evidentemente, a una baraja de póker}. 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 Solitaire, 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 Solitaire:
1.
Encuentra el
comodín A. Intercámbialo con la carta que tiene debajo. Si el comodín está al
final de la baraja, ponlo debajo de la primera carta.
2.
Encuentra el
comodín B. Muévelo bajo la carta que está debajo de la que tiene debajo. Si el
comodín está al final de la baraja, muévelo debajo de la segunda carta. Si el
comodín es la penúltima carta, muévelo debajo de la primera carta. Básicamente
asume que la baraja es un bucle, ¿te haces la idea?.
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:
3 A 8 B 9 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.
3.
Corta la baraja
en tres, intercambiando las cartas antes del primer comodín con las cartas que
están detrás del segundo comodín. Si la baraja fuera:
4.
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.
5.
Mira la última
carta. Conviértela a un número de 1 a 53 (usa el orden normal: tréboles,
diamantes, corazones y picas. Si la carta es un trébol, toma su número tal cual.
Si es de diamantes, suma 13 a su valor. Si es de corazones, súmale 26. Si es de
picas, súmale 39. Ambos comodines suman 53). Cuenta el valor valor obtenido
empezando en la carta superior (normamente yo cuento de 1 a 13 una y otra vez,
si es preciso; es más fácil que contar hasta un número alto de forma
secuencial). Corta tras esa carta, dejando la última carta de la baraja a final.
Si la baraja es:
6.
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.
7.
Mira la primera
carta. Conviértela en un número de 1 a 53, de la misma manera que en el paso 4.
Cuenta esas cartas (la primera carta es la uno). Escribe la carta tras la que
hayas terminado en un papel; no la quites de la baraja. Si la carta es un
comodín, no la apuntes, y vuelve al paso 1. Este paso no modifica el estado de
la baraja.
8.
Convierte la
carta del paso anterior en un número. Del As de tréboles al Rey de tréboles se
cuentan del 1 a 13. Del As de diamantes al Rey de diamantes se cuentan como
14-26. Del As de corazones al Rey de corazones se cuentan como 1 a 13. Por
último, del As de picas al Rey de picas se cuentan como 14 a 26. Necesitamos ir
de 1 a 26, no de 1 a 52, para poder convertir a letras.
Así es como Solitaire 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.
Fijando 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. Solitaire es sólo tan seguro
como lo sea su clave. Es decir, la forma más fácil de romper Solitaire 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:
1.
Utiliza dos
mazos barajados de la misma manera. Las claves aleatorias son las mejores. Uno
de los comunicantes puede barajar un mazo de forma aleatoria, y luego copiar la
distribución de las cartas en el otro mazo (para así obtener dos mazos iguales).
Uno de los mazos es empleado por el emisor, y el otro por el receptor. La
mayoría de la gente no son buenos barajando, así que baraja el mazo al menos
seis veces. Ambas partes deben tener otra baraja adicional ordenada de la misma
forma, porque si se comete algún error nunca se podrá descifrar el mensaje.
Recuerda también que la clave corre peligro mientras exista; la policía secreta
podría encontrar la baraja y simplemente copiar su orden.
2.
Usa un orden de
Bridge. La descripción de una mano de bridge en un periódico o en un libro de
bridge constituye una clave de aproximadamente 95 bits. Ponte de acuerdo con el
otro comunicante en la forma de convertir el diagrama en un orden concreto para
tu baraja. Luego ponte de acuerdo sobre la forma de meter los dos comodines en
el mazo. Una posibilidad obvia es poner el comodín A tras la primera carta que
se mencione en el texto, y el comodín B tras la segunda carta mencionada en el
texto.
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.
3.
Usa una "frase
de paso" para ordenar la baraja. Este método utiliza el algoritmo Solitaire para
crear un ordenamiento inicial del mazo. Ambos, el emisor y el receptor,
comparten una frase de paso (por ejemplo, "CLAVE SECRETA"). Empezar con el mazo
en un orden fijo; de la carta más baja a la más alta, con los palos en el orden
visto previamente, y con los dos comodines al final, primero el A y luego el B.
Ahora utilizamos Solitaire, tal cual, pero al llegar al paso 5 contamos según el
número que corresponda a la primera letra de la frase de paso. En otras
palabras, volvemos a realizar el paso 4, pero usando el número que corresponda a
la primera letra de la palabra de paso, en vez de usar el número correspondiente
a la última carta de la baraja. Recuerda poner las cartas de arriba justo debajo
de la última carta de la baraja, como antes.
Repetimos los cinco pasos de Solitaire
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 {JCEA: el castellano es similar}. 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.
Ejemplos
He aquí algunos ejemplos para practicar tus habilidades con Solitarie:
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 8 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 {JCEA: Bruce se refiere al web original. El enlace al mismo se encuentra al
final de este documento}.
Seguridad Real, No Seguridad A Través De
Oscuridad
Solitaire está diseñado para ser seguro incluso si el enemigo sabe cómo
funciona el algoritmo. He supuesto que "Crytonomicon" 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 Solitaire. 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. Solitaire 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.
Notas de Operación
1.
La primera
regla de cualquier sistema de cifrado en modo "output-feedback" es que NUNCA
debes emplear la misma clave para cifrar dos mensajes diferentes. Repite: NUNCA UTILICES LA MISMA CLAVE PARA CIFRAR DOS MENSAJES DIFERENTES. El hacerlo
rompe irremediablemente la seguridad del sistema. La razón es simple: Si tienes
dos textos cifrados, Ak y B+k, y estas uno del otro, obtienes (A+K)-(B+K)=A-B.
Es decir, la resta de dos textos sin cifrar, sin ninguna clave, y eso es muy
fácil de romper. Confía en mí en ese aspecto: tú puedes no saber recuperar los
mensajes A y B a partir de A-B, pero un criptoanalista profesional sí puede.
Esto tiene una importancia vital: nunca utilices
la misma clave para cifrar dos mensajes diferentes.
2.
Usa mensajes
cortos. Este algoritmo está diseñado para ser empleado con mensajes muy cortos:
un par de miles de caracteres como mucho. Usa abreviaturas, jerga, etc. Si
tienes que cifrar una novela de 100.000 palabras, utiliza un ordenador.
3.
Como todos los
cifrados "output-feedback", este sistema tiene la desagradable característica de
que nunca se recupera de un error. Si estás cifrando un mensaje y cometes un
error en una de las operaciones, todas las letras siguientes serán también
erróneas. No podrás descifrar el mensaje, aunque tengas la clave correcta. Y
nunca lo sabrás. Así que si estás cifrando un mensaje, revisa todos los pasos
del cifrado dos veces para estar seguro de que no cometes un error. Si estás
descifrando un mensaje, asegúrate de que éste tiene sentido a medida que lo vas
abriendo. Si estás empleado como clave una baraja ordenada de forma aleatoria,
haz una copia de ella, por la misma razón.
4.
Solitaire es
reversible. Es decir, que si dejas el mazo por ahí cuando has cifrado un
mensaje, la policía secreta puede encontrarlo y rehacer el algoritmo hacia
atrás, usando la baraja. Este proceso puede recuperar toda la ristra y descifrar
un mensaje. Es importante que barajes el mazo completamente, seis veces, cuando
termines de cifrar un mensaje.
5.
Para mayor
seguridad, intenta hacer todos los pasos a mano y dentro de tu cabeza. Si la
policía secreta irrumpe en tu habitación, simplemente baraja el mazo. No lo
tires al aire; te sorprendería saber hasta qué punto las cartas mantienen su
orden. Recuerda barajar la copia del mazo, si tienes una.
6.
Sé cuidadoso
con las notas que tomas, si tienes que escribir algo. Contienen información
sensible.
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 {JCEA: 7.5
centímetros}, 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.
7.
Solitaire puede
implementarse en un ordenador. A menudo sólo uno de los extremos de la
comunicación emplea una baraja; el otro extremo es lo bastante seguro como para
emplear un ordenador. Usa el ordenador cuando puedas: es más rápido, y un
ordenador no comete errores.
8.
La mayoría de
los juegos de cartas no incluyen comodines, así que llevar encima una baraja con
comodines puede resultar sospechoso. Prepárate alguna historia.
9.
La seguridad de
Solitaire no depende del secretismo alrededor del algoritmo. Asumo que la
policía secreta sabe que lo estás empleando.
Análisis de seguridad
Hay bastante sobre esto. Permanezcan atentos a este espacio para más
detalles.
Aprendiendo Más
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). Tras ello, hay varios libros sobre
criptografía en ordenadores y otros sobre criptografía manual. Es un campo
divertido; buena suerte.
P Q R S T U V W X Y