El siguiente texto fue publicado
en el boletín Crypto-Gram de Bruce Schneier de Octubre
de 1998 y creo que a cualquiera que le guste la criptografía
debería leerlo, especialmente si alguna vez ha pensado
en diseñar su propio algoritmo de cifrado. Esa es la razón
de que lo haya traducido.

Felicidades. Has inventado un estupendo nuevo
cifrado y quieres hacer algo con él. Eres nuevo en este
campo, nadie ha oído hablar de ti y no tienes credenciales
como criptoanalista. Quieres que criptoanalistas conocidos vean
tu trabajo. ¿Qué puedes hacer?
Desgraciadamente te queda un difícil
camino por delante. Veo unos dos nuevos cifrados de diseñadores
aficionados cada semana. La probabilidad de que alguno de estos
algoritmos sea seguro es pequeña. La probabilidad de que
cualquiera de los dos sea a la vez seguro y eficiente es despreciable.
La probabilidad de que cualquiera de los dos valga dinero de verdad
es virtualmente inexistente.
Cualquiera, desde el amateur más
despistado hasta el mejor criptógrafo, puede crear un algoritmo
que él mismo no pueda romper. Ni siquiera es difícil.
Lo que es difícil es crear un algoritmo que nadie más
pueda romper, incluso después de años de análisis.
Y la única forma de demostrarlo es someter al algoritmo
a años de análisis por los mejores criptógrafos
existentes.
"Los mejores criptógrafos
existentes" rompen un montón de cifrados. La
literatura académica está cubierta por los cadáveres
de los cifrados que sus análisis derribaron. Pero son gente
ocupada; no tienen tiempo de romperlo todo. ¿Cómo
deciden en qué concentrarse?
Lo ideal sería que los criptógrafos
sólo se fijasen en cifras que tengan una razonable probabilidad
de ser seguras. Esto significa que los criptógrafos sólo
deberían analizar cifrados creados por personas cuyas opiniones
se valoran. A nadie le impresiona que una persona cualquiera cree
un cifrado que no puede romper por si mismo; pero si uno de los
mejores criptógrafos del mundo crea un cifrado que él
no puede romper, bueno, eso es algo que merece la pena ver.
En el mundo real no todo es tan claro.
Los criptógrafos estudian los algoritmos que o bien son
interesantes o bien que es probable que produzcan resultados publicables.
Esto significa que se fijarán en algoritmos que provengan
de criptógrafos respetados, algoritmos que aparezcan en
grandes sistemas públicos (p.ej. teléfonos móviles,
decodificadores de TV de pago, productos de Microsoft), y en algoritmos
publicados en la literatura académica. Los algoritmos que
se publican en los grupos de noticias de Internet por desconocidos
no recibirán una segunda mirada. Tampoco lo harán
algoritmos patentados pero no publicados o algoritmos propietarios
incluidos es oscuros productos.
Es difícil conseguir que se publique
un algoritmo criptográfico. La mayoría de congresos
y talleres no aceptan diseños de desconocidos y sin un
análisis exhaustivo. Puede parecer injusto: los desconocidos
no consiguen que se publiquen sus cifras porque son desconocidos,
y por tanto nadie verá su trabajo. Realmente, si el único
"trabajo" que uno hace es el de diseñar probablemente
no merece la pena publicarse. Un desconocido puede darse a conocer
publicando criptoanálisis de cifras existentes, la mayoría
de los congresos aceptan estas ponencias.
Cuando comencé a escribir "Applied
Cryptography" escuché la máxima de que
los únicos buenos diseñadores de algoritmos eran
las personas que pasaban años analizando cifras existentes.
La máxima tenía sentido y la creí. Con los
años, mientras pasaba más tiempo diseñando
y analizando, la verdad de la máxima se ha hecho mayor
y mayor. Mi trabajo diseñando Twofish me ha hecho creer
en ello aún con más fuerza. La fuerza de la cifra
no está en su diseño, cualquiera podría diseñar
algo parecido. La fuerza está en su análisis. Pasamos
más de 1000 horas-hombre analizando Twofish, rompiendo
versiones simplificadas y variantes y estudiando modificaciones.
Y no podríamos haber hecho ese análisis, ni hubiéramos
tenido ninguna confianza en ese análisis si todo el equipo
de diseño no hubiera tenido experiencia rompiendo muchos
otros diseños de algoritmos.
Un amigo criptógrafo cuenta la
historia de un aficionado que le molestaba continuamente con el
cifrado que había inventado. El criptógrafo rompía
la cifra, el amateur hacía un cambio para "arreglarlo"
y el criptógrafo la rompía de nuevo. Este intercambio
se repitió unas cuantas veces hasta que el criptógrafo
se hartó. Cuando el aficionado volvió a visitarlo
para oír lo que pensaba, el criptógrafo puso tres
sobres boca abajo sobre la mesa. "Coje uno y léelo.
No vuelvas hasta que hayas descubierto los otros dos ataques"
Nunca más se oyó hablar del aficionado.
No quiero ser completamente negativo.
A veces la gente diseña cifras fuertes. Incluso los criptógrafos
aficionados diseñan cifras fuertes. Pero si no eres conocido
en la comunidad criptográfica, y esperas que otros vean
tu trabajo, debes hacer varias cosas:
Describe tu cifra usando una notación
estándar. No significa código fuente C. Hay una
terminología establecida en la literatura. Apréndela
y úsala; nadie aprenderá tu terminología
especializada.
Compara tu cifra con otros diseños.
Lo más probable es que use algunas ideas que han aparecido
antes. Haz referencia a ellas. Esto hará más fácil
para otros entender tu trabajo, y muestra que entiendes la literatura.
Demuestra por qué tu cifra es
inmune a los ataques más importantes que aparecen en la
literatura. No es suficiente decir simplemente que es segura,
debes mostrar por qué es segura contra estos ataques. Esto
requiere, por supuesto, no sólo que hayas leído
la literatura existente sino que la hayas comprendido. Espera
que el proceso te lleve meses y resulte en un grueso documento
con fuerte contenido matemático. Y recuerda, los tests
estadísticos no son muy significativos.
Explica por qué tu cifra es mejor
que las alternativas existentes. No tiene sentido fijarse en algo
a menos de que tenga claras ventajas sobre lo anterior. ¿Es
más rápido en los Pentiums? ¿Ocupa menos
en hardware? ¿O qué? He dicho a menudo que, con
suficientes rondas, casi cualquier cosa es segura. Tu diseño
tiene que tener ventajas significativas. Y "no puede
romperse" no es una ventaja, es un prerrequisito.
Publica el algoritmo. La experiencia
demuestra que las cifras que no se publican son la mayoría
de las veces muy débiles. Mantener la cifra en secreto
no mejora la seguridad una vez que su uso se extiende, así
que si tu cifra debe mantenerse en secreto para ser segura, es
inútil.
No patentes el cifrado. No se hace dinero
vendiendo un cifrado, hay demasiados buenos que son gratis. Todos
los que remitieron su cifrado al AES estaban deseando regalarlo,
muchos de los propuestos pertenecen ya al dominio público.
Si patentas tu diseño, todo el mundo utilizará otra
cosa. Y nadie lo analizará por ti (a menos de que les pagues),
¿por qué deberían trabajar gratis para ti?
Se paciente. Hay muchos algoritmos que
estudiar ahora. La competición del AES ha ofrecido a los
criptógrafos 15 nuevos diseños que analizar. Cualquier
buen criptógrafo con tiempo disponible, está hurgando
en estos algoritmos.
Si quieres diseñar algoritmos,
empieza por romper los que están ahí fuera. Practica
rompiendo algoritmos que han sido rotos antes (sin mirar las soluciones).
Rompe algo que nadie haya roto. Rompe uno más. Haz que
tus roturas sean publicadas. Cuando te hayas creado una fama como
alguien que sabe romper algoritmos, entonces puedes empezar a
diseñar nuevos algoritmos. Antes de eso, nadie te tomará
en serio.
Crear un cifrado es fácil. Analizarlo
es difícil.
Crypto-Gram Octubre 1998, por Bruce Schneier