3. Gestiono petabytes* de datos cada día. Cifro
desde jugosa inteligencia Alto Secreto hasta
los aburridos paquetes que llegan a tu router
WiFi. ¡Lo hago todo!
* 1 petabyte = mucho
4. … pero aún así, no parece que a nadie le
importe yo o mi historia.
5. La historia de cómo logré abrir mi propio camino
para convertirme en el rey mundial del cifrado
de bloques es mejor que la de Cenicienta.
7. Hace algún tiempo*, la gente -exceptuando
a las agencias de inteligencia- no tenía
manera de juzgar la buena criptografía.
¡EBG13 rf travny!
El ROT13 doble
es mejor
* ~ antes de 1975 para el público en general
8. Se promulgó un edicto en todo el país para
encontrar un algoritmo bueno y seguro.
¡Necesitamos un buen cifrado!
10. Después de ser modificado por la Agencia Nacional
de Seguridad (NSA), fue declarado el Estándar de
Cifrado de Información (DES).
¡Yo te nombro DES!
Clave
más
corta Caja 'S'
más fuerte
11. DES dominó la tierra durante 20 años.
Los académicos lo estudiaron atentamente.
Por primera vez había algo específico sobre
lo que centrar su atención. Nacía el moderno
campo de la criptografía.
'… por lo que respecta a ¡Fíjate en esa red
nuestro conocimiento, DES de Feistel!
está a salvo de debilidades
estadísticas o matemáticas'.
12. A lo largo de los años, muchos atacantes
desafiaron a DES y fue derrotado en varias batallas.
13. La única manera de protegerse de esos ataques fue
usar DES tres veces seguidas para formar 'Triple-DES'.
Esto fue efectivo, pero terriblemente lento.
14. Se promulgó otro decreto* ...
Necesitamos algo
al menos tan robusto
como Triple-DES, pero
más rápido y flexible.
* ~ a principios de 1997
15. Esta invitación hizo que los cripto-magos
se reunieran para desarrollar algo mejor.
¡¡Esta es mi Usaré FROG
oportunidad
de ser famoso!! Yo usaré
Twofish
16. Mis creadores, Vincent Rijmen y Joan Daemen,
se encontraban entre esos cripto-magos.
Combinaron sus apellidos para darme mi
nombre: Rinjdael*.
Yo
* pronunciado 'reindal' para los que no sean belgas.
19. … y ahora soy el nuevo rey del cripto-mundo. Puedes
encontrarme en cualquier parte. Incluso Intel está
introduciendo instrucciones nativas para mí en sus
próximos chips para hacerme asombrosamente rápido.
Hoja de ruta de los procesadores Intel
20. ¿Alguna pregunta?
Bonita historia y
todo eso, pero ¿cómo
funciona el cifrado?
Muy raro, me largo.
22. ¡Muy buena pregunta! Solamente
necesitas conocer 3 grandes ideas
para entender el cifrado.
23. 1ª gran idea: confusión
Es una buena idea ocultar la relación entre tu mensaje
real y tu mensaje 'cifrado'. Un ejemplo de esta '
confusión' es el viejo y fiel 'Cifrado del César':
en claro:
cifrado:
letras
24. 2ª gran idea: difusión
Es también una buena idea esparcir el mensaje.
Un ejemplo de esta 'difusión' sería una simple
transposición de columnas.
Separado por 3 espacios
25. 3ª gran idea: sólo la clave es secreta
Después de miles de años, hemos aprendido que
es una mala idea asumir que nadie terminará por
conocer cómo funciona tu método. Al final siempre
habrá alguien que lo termine sabiendo.
¡Dime cómo funciona! ¡Dime cómo funciona!
¡Sin problema!
¡Genial! ¡Ahora Está en la Wikipedia.
puedo descifrar Pero no sé la clave.
cualquier cosa!
¡Mierda!
MAL MEJOR
26. ¿Responde eso a
tu pregunta?
Está bien, pero ha
sido muy general. ¿Detalles?
¿Cómo funcionas tú? ¡No soporto
los detalles!
28. Estaría encantado de explicaros
cómo funciono, pero antes tenéis
que firmar esto.
Uh, ¿qué es eso?
29. Acuerdo de Prevención de
disparo en el pie
Yo, ________ prometo que, una vez vea
lo simple que es AES realmente, no lo
implementaré en código en producción,
aunque sería realmente divertido hacerlo.
Este acuerdo tendrá validez hasta que
el abajo firmante invente una coreografía
que compare y contraste la temporización
basada en caché y otros ataques indirectos
y sus contramedidas.
Firma Fecha
30. Tomo tus datos y los cargo
en esta tabla de 4 x 4*.
Relleno al final,
dado que no eran
exactamente
16 bytes
* Esta es la 'matriz de estado' que siempre llevo conmigo.
31. En la ronda inicial calculo una OR-Exclusiva (XOR)
de cada byte con el correspondiente de la clave
para la primera ronda.
32. Un tributo a XOR
Hay una sencilla razón por la que uso XOR para aplicar la
clave y en otros sitios: es rápido y barato, un simple cambio
a nivel de bit. Usa muy poco hardware y puede hacerse en
paralelo ya que no se usan molestos bits de acarreo.
33. Expansión de la clave: parte 1
Necesito muchas claves para usarlas en rondas posteriores.
Derivo todas ellas a partir de la clave inicial usando una
sencilla técnica de mezcla que es realmente rápida. A pesar
de las críticas*, es suficientemente buena.
Clave inicial
* la mayoría -por mucho- de las quejas en contra del diseño de AES se centran en esta simplificación.
34. Expansión de la clave: parte 2a
Tomo la última columna de la clave de la anterior ronda
y muevo el byte de arriba del todo a abajo:
Luego, paso cada byte por una caja de sustitución que
lo traducirá en algo distinto:
35. Expansión de la clave: parte 2b
Entonces, hago xor de la columna con una
'constante de ronda' que es diferente para cada ronda:
Finalmente, hago xor del resultado con la primera
columna de la clave de la ronda previa:
Primera
columna
nueva
36. Expansión de la clave: parte 3
Las otras columnas son super-fáciles*. Solamente tengo que hacer
XOR de la columna anterior con la misma columna de la clave de la
ronda previa:
Columna de Nueva columna Nueva clave de ronda
Columna
la clave de
previa
ronda previa
* date cuenta de que las claves de 256 bits son ligeramente más complicadas.
37. Luego, empiezo con las rondas intermedias. Una
ronda es simplemente una serie de pasos que repito
varias veces. El número de repeticiones depende del
tamaño de la clave.
Ronda intermedia
38. Aplicando confusión: bytes sustitutos
Uso la confusión (1ª gran idea) para ocultar la
relación de cada byte. Pongo cada byte en una
caja de sustitución (sbox), que lo traducirá a un
byte diferente
Denota
'confusión'
39. Aplicando difusión, parte 1: desplazar filas
Luego desplazo las filas hacia la izquierda
… y entonces
las ajusto al
otro lado
Denota
'permutación'
41. Aplicando seguridad de la clave: añadir la clave de ronda
Al final de cada ronda, aplico la siguiente clave de ronda
con una XOR:
42. En la ronda final, me salto el paso de 'mezclar columnas',
ya que no va a incrementar la seguridad y solamente
ralentiza el proceso:
Ronda final
* la difusión que proporcionaría no se aprovecharía en la siguiente ronda.
43. … y eso es todo. Cada ronda que hago añade más
confusión y difusión a los bits. También hace que
la clave influya en ellos. ¡Cuantas más rondas, mejor!
44. Determinar el número de rondas siempre
implica varios compromisos
Rendimiento
Seguridad
'La seguridad siempre implica un coste en rendimiento' – Vincent Rijmen
45. Cuando estaba siendo desarrollado, un chico listo fue capaz
de encontrar un atajo a través de 6 rondas. ¡Eso no está
bien! Si miras cuidadosamente, verás que cada bit de la salida
de una ronda depende de cada bit de dos rondas atrás. Para
incrementar esta 'avalancha de difusión', añadí 4 rondas extra
más. Este es mi 'margen de seguridad'.
Teóricamente
'roto'
'Margen de seguridad'
47. Descifrar implica hacer todo al revés
Aquí la 'ronda final'
va al principio.
la 'ronda inicial'
va al final.
Inverso de Inverso de
Inverso de añadir clave de ronda sustituir bytes desplazar columnas Inverso de mezclar columnas
48. Un último detalle: no debería de ser usado tal cual,
sino como pieza de construcción de un 'modo' decente.
¡MAL! Mejor
49. ¿Tiene sentido? ¿Responde
eso a tu pregunta?
Casi... salvo cuando movías tus manos
y usabas analogías extrañas.
¿Qué es lo que realmente ocurre?
50. ¡Otra pregunta genial!
No es difícil, pero... implica
un poco de... matemáticas.
De acuerdo.
¡Dale calor!
¡Las mates son
difíciles! ¡Vamos
de compras!
52. Volvamos a tu clase de álgebra…
Vamos clase,
¿cuál es la
respuesta?
Debería
¡Yo lo sé! copiarle…
Es 2x.
¿Saldrá
Ashley
conmigo?
Tú
53. Repasando las bases…
polinomio
multiplicación
cuadrado grado
la incógnita coeficiente
suma
54. Cambiaremos las cosas ligeramente. Antes, los
coeficientes podían ser tan grandes como queramos.
Ahora solamente pueden ser 0 o 1:
Antes
Ahora
la nueva “suma”
Coeficientes grandes Coeficientes pequeños
* Hecho curioso: ahora, la 'nueva suma' es igual que la sustracción:
55. ¿Recuerdas cómo las multiplicaciones podían
hacer que las cosas crecieran rápido?
¡Grande y asqueroso!
56. Con la 'nueva suma', las cosas son más sencillas,
pero la x13 es todavía demasiado grande. Hagamos
que no se pueda ir más allá de x7.
¿Cómo podríamos hacerlo?
57. Usaremos a nuestro amigo el 'reloj matemático*' para
hacer esto. Solamente suma cosas y hace la división.
Presta atención al resto de la división:
4 en punto + 10 horas = 2 en punto
+ 10 horas =
* Esto se conoce también como 'suma modular'. Los locos por las matemáticas
lo llaman 'grupo'. AES utiliza un grupo especial llamado un 'campo finito'.
58. Podemos hacer matemáticas 'de reloj' con polinomios. En lugar
de dividir por 12, mis creadores me dijeron que usara
Supongamos que queremos multiplicar
donde tiene coeficientes
es muy grande, tenemos que hacerlo más pequeño
* Recuerda que cada es o bien 0 o bien 1.
59. Lo dividimos entre y tomamos el
resto:
El resto:
Fíjate como las b's se desplazan
hacia la izquierda 1 posición. Esto es simplemente
b7 multiplicado por un
polinomio pequeño
60. Ahora ya estamos preparados para la explosión más
fuerte del pasado: los logaritmos. Una vez dominados,
el resto es pan comido. Los logaritmos nos permiten
convertir multiplicación en suma:
Luego…
A la inversa:
61. Podemos usar algoritmos en nuestro nuevo mundo.
En lugar de usar 10 como base, podemos emplear el
simple polinomio
polimonio y contemplar cómo se complica la magia*.
* Si continuas multiplicando por (x•1) y tomas el resto después de dividir
por m(x), verás que generarás todos los posibles polinomios por debajo de
X8. ¡Esto es muy importante!
62. ¿Por qué molestarnos con todas estas matemáticas?*
El cifrado trata con bits y bytes, ¿no? Bueno, existe
una última conexión: un polinomio de 7º grado puede
Representar exactamente 1 byte, dado que ahora
solamente utilizamos 0 o 1 como coeficientes:
¡¡Un solo byte!!
* A pesar de que solamente trabajaremos con bytes a partir
de ahora, las matermáticas nos aseguran que todo se resuelve bien.
63. Trabajando con bytes, la suma de polinomios se convierte en una
simple xor. Podemos usar nuestros conocimientos de logartimos
para hacer una tabla para multiplicar muy rápidamente*.
* Podemos crear la tabla dado que seguimos multiplicando por
64. Dado que sabemos cómo multiplicarlos, podemos encontrar el
byte del polinomio 'inverso' para cada byte. Este es el byte
que deshará/invertirá el polinomio de nuevo a 1. Solamente
hay 255 posibilidades*, así que podemos usar la fuerza bruta
para encontrarlos:
encontrado por fuerza bruta usando un bucle for
* Hay solamente 255 y no 256 porque el 0 no tiene inverso.
65. Ahora ya podemos entender la misteriosa s-box.Toma
un byte 'a' y le aplica dos funciones. La primera es 'g',
que solamente encuentra el byte inverso. La segunda es
'f', que complica las matemáticas a propósito en contra
para frustrar ataques.
66. También podemos entender esas locas constantes
de ronda en la expansión de la clave. Las consigo
empezando con '1' y continuo multiplicando por 'x':
Constantes de las primeras 10 rondas
67. Mezclar las columnas es lo más complicado. Trato cada columna como
un polinomio. Uso entonces nuestro nuevo método para multiplicarlo por
Un polinomio especialmente preparado y entonces tomo resto después de
Dividirlo por x4+1. Esto se simplifica con una matriz de multiplicación:
polinomio especial
la columna
68.
69. Guau… Creo que lo he entendido. Es
relativamente sencillo una vez encajas
Las piezas. Gracias por explicarlo.
Un placer. He de irme.
!Vuelve cuando quieras!
70. Pero hay mucho más de lo que hablar: mi resistencia
al criptoanálisis lineal y diferencial, mi estrategia
'Wide Trail', la implausibilidad de ataques de claves
relacionadas, y... mucho más... pero no queda nadie.
71. Oh, de acuerdo... todavía hay aburrido
tráfico de router que tiene que ser
cifrado. ¡Me tengo que ir!