Secreto perfecto Cifrado con clave secreta Cifradores bloque Ejemplos: DES, AES y otros Seguridad Informática Criptografı́a de clave secreta Ramón Hermoso y Matteo Vasirani Universidad Rey Juan Carlos Cifradores flujo Secreto perfecto Cifrado con clave secreta Cifradores bloque Ejemplos: DES, AES y otros Índice 1 Secreto perfecto 2 Cifrado con clave secreta 3 Cifradores bloque 4 Ejemplos: DES, AES y otros 5 Cifradores flujo Generación de claves (secuencias cifrantes) Cifradores flujo Secreto perfecto Cifrado con clave secreta Cifradores bloque Ejemplos: DES, AES y otros Índice 1 Secreto perfecto 2 Cifrado con clave secreta 3 Cifradores bloque 4 Ejemplos: DES, AES y otros 5 Cifradores flujo Generación de claves (secuencias cifrantes) Cifradores flujo Secreto perfecto Cifrado con clave secreta Cifradores bloque Ejemplos: DES, AES y otros Cifradores flujo Secreto perfecto I Secreto perfecto Un esquema de cifrado (Gen, Enc, Dec) se dice que logra secreto perfecto si P[M = m|C = c] = Pr[M = m] es decir, si cualquier adversario que vea el texto cifrado no obtiene ninguna información sobre el texto en claro [Shannon] la probabilidad a priori de conocer el mensaje en claro m es igual que la probabilidad a posteriori de conocer dicho mensaje m aun conociendo el mensaje cifrado c Secreto perfecto Cifrado con clave secreta Cifradores bloque Ejemplos: DES, AES y otros Secreto perfecto II Experimento IND-EAV A ≡ adversario 1 2 A crea dos mensajes m0 y m1 y se los envı́a a C C genera una clave k mediante un generador Gen 1 2 C elige b ← {0, 1} C envı́a a A el mensaje cifrado c ← Enck (mb ) 3 A devuelve un bit b0 4 La función Succ determina el éxito del adversario: (Succ(A) = 1) ↔ (b = b0 ) Cifradores flujo Secreto perfecto Cifrado con clave secreta Cifradores bloque Ejemplos: DES, AES y otros Secreto perfecto III Esquema del experimento IND-EAV k,b m0 m1 Enck(mb) C A b' Cifradores flujo Secreto perfecto Cifrado con clave secreta Cifradores bloque Ejemplos: DES, AES y otros Cifradores flujo Secreto perfecto IV Secreto perfecto (Definición alternativa) Un esquema de cifrado alcanza secreto perfecto si, para cualquier adversario A, se tiene que: P[Succ(A) = 1] = 1/2 Es decir, ningún adversario puede distinguir entre el cifrado de dos mensajes de su elección mejor que eligiendo al azar. Secreto perfecto Cifrado con clave secreta Cifradores bloque Ejemplos: DES, AES y otros Cifradores flujo Secreto perfecto V Teorema Si para un esquema de cifrado se tiene |k| < |m|, entonces no se puede alcanzar el secreto perfecto Secreto perfecto Cifrado con clave secreta Cifradores bloque Ejemplos: DES, AES y otros Cifradores flujo Seguridad computacional I Se relaja la noción de seguridad en dos aspectos: 1 2 La seguridad ha de preservarse contra adversarios eficientes (aquéllos que corren en tiempo polinomial) Se admite que dichos adversarios tengan éxito con una probabilidad muy pequeña Por lo tanto, si se busca un esquema que permita cifrar varias veces usando la misma clave, es necesario evitar ataques por fuerza bruta 1 2 KPA (Tema 1) probando con todas las claves KPA eligiendo una clave al azar Ası́ pues, el tamaño del espacio de claves ha de ser suficientemente grande Secreto perfecto Cifrado con clave secreta Cifradores bloque Ejemplos: DES, AES y otros Cifradores flujo Adversarios PPT PPT ≡ Probabilistic Polynomial Time Un algoritmo ag corre en tiempo polinomial n si existe un polinomio p(x) = ∑ ai xi de tal i=0 manera que para cada entrada x el algoritmo ag termina en p(|x|) pasos Se dice que ag es probabilı́stico si tiene la capacidad de dar pasos de manera aleatoria Secreto perfecto Cifrado con clave secreta Cifradores bloque Ejemplos: DES, AES y otros Función despreciable (negligible) Decimos que una función f : N → R es despreciable si para cada polinomio p(.) existe un n0 tal que si n > n0 entonces 1 f (n) < p(n) Cifradores flujo Secreto perfecto Cifrado con clave secreta Cifradores bloque Ejemplos: DES, AES y otros Cifradores flujo Seguridad asintótica El algoritmo Gen tiene como entrada 1n n recibe el nombre parámetro de seguridad Usualmente Gen(1n ) elige k ← {0, 1}n El adversario A también recibe 1n como input El esquema será seguro si la probabilidad de éxito de A es despreciable como función de n Secreto perfecto Cifrado con clave secreta Cifradores bloque Ejemplos: DES, AES y otros Esquema de cifrado con clave privada Consta de 3 algoritmos (Gen, Enc, Dec) k ← Gen(1n ) (genera la clave secreta) c ← Enck (m) (cifra el texto en claro) m ← Deck (c) (descifra el texto cifrado) Corrección: m = Deck (Enck (m)) Cifradores flujo Secreto perfecto Cifrado con clave secreta Cifradores bloque Ejemplos: DES, AES y otros Cifradores flujo Experimento IND-EAV I 1 2 A(1n ) construye y envı́a a C dos mensajes m0 y m1 de la misma longitud C genera k mediante Gen(1n ) 1 2 3 4 C elige b ← {0, 1} C genera c ← Enck (mb ) y lo envı́a a A A devuelve un bit b0 Si b = b0 se dice que Succ(A, n) = 1 Secreto perfecto Cifrado con clave secreta Cifradores bloque Ejemplos: DES, AES y otros Cifradores flujo Experimento IND-EAV II Se dice que un esquema de cifrado es IND-EAV seguro si, para cualquier tipo de adversario PPT A, se cumple que: P(Succ(A, n) = 1) ≤ 12 + f (n) donde f (n) es una función despreciable. Es decir, ningún adversario eficiente puede distinguir entre el cifrado de dos mensajes de su elección mejor que eligiendo al azar, salvo con una probabilidad que se considera despreciable Secreto perfecto Cifrado con clave secreta Cifradores bloque Ejemplos: DES, AES y otros Índice 1 Secreto perfecto 2 Cifrado con clave secreta 3 Cifradores bloque 4 Ejemplos: DES, AES y otros 5 Cifradores flujo Generación de claves (secuencias cifrantes) Cifradores flujo Secreto perfecto Cifrado con clave secreta Cifradores bloque Ejemplos: DES, AES y otros Cifradores de clave simétrica I Formados a base de: Sustituciones Permutaciones (o transposiciones) Pueden ser: De bloque (block ciphers) De flujo (stream ciphers) Cifradores flujo Secreto perfecto Cifrado con clave secreta Cifradores bloque Ejemplos: DES, AES y otros Cifradores de clave simétrica II Ejemplo ⇒ Cifrado del César (Tema 1) (Monoalfabético y Polialfabético) Cifrado y descifrado igual de sencillos Demasiado fácil de romper (sólo hay 26 claves diferentes) Cifradores flujo Secreto perfecto Cifrado con clave secreta Cifradores bloque Cifradores de clave simétrica III Ejemplos: DES, AES y otros Cifradores flujo Secreto perfecto Cifrado con clave secreta Cifradores bloque Ejemplos: DES, AES y otros Cifradores flujo Cifradores de clave simétrica IV Hay una tabla que muestra cómo cifrar cada letra del mensaje Hay 26! (> 4x1026 ) claves Ataques de fuerza bruta inviables ¿Problemas? Secreto perfecto Cifrado con clave secreta Cifradores bloque Ejemplos: DES, AES y otros Índice 1 Secreto perfecto 2 Cifrado con clave secreta 3 Cifradores bloque 4 Ejemplos: DES, AES y otros 5 Cifradores flujo Generación de claves (secuencias cifrantes) Cifradores flujo Secreto perfecto Cifrado con clave secreta Cifradores bloque Ejemplos: DES, AES y otros Cifradores flujo Seguridad IND-CPA I Misma definición que seguridad IND-EAV, pero el adversario tiene acceso a un oráculo de cifrado Nunca se puede alcanzar para esquemas de cifrado deterministas Si un esquema es IND-CPA seguro cifrando una vez, lo será también cifrando múltiples veces Secreto perfecto Cifrado con clave secreta Cifradores bloque Ejemplos: DES, AES y otros Cifradores flujo Seguridad IND-CPA II Experimento IND-CPA 1 C genera k mediante un generador Gen(1n ) 2 A recibe como input 1n 3 A recibe acceso al oráculo Enck (.) 4 A crea dos mensajes m0 , m1 5 Se elige b ← {0, 1} 6 Se envı́a c ← Enck (mb ) a A 7 A devuelve un bit b0 8 Si b = b0 se dice que Succ(A, n) = 1 Secreto perfecto Cifrado con clave secreta Cifradores bloque Ejemplos: DES, AES y otros Cifradores flujo Seguridad IND-CPA III Se dice que un esquema de cifrado es IND-CPA seguro si para cualquier adversario PPT A tenemos que: P(Succ(A, n) = 1) ≤ 12 + negl(n) Es decir, si ningún adversario eficiente con acceso a un oráculo cifrado puede distinguir entre el cifrado de dos mensajes de su elección mejor que eligiendo al azar, salvo con probabilidad despreciable Secreto perfecto Cifrado con clave secreta Cifradores bloque Ejemplos: DES, AES y otros Cifradores flujo Funciones pseudo-aleatorias Consiste en una familia de funciones indexadas por una clave secreta F : {0, 1}l × {0, 1}n → {0, 1}n (k, x) → Fk (x) Se pretende que al elegir una clave al azar la función correspondiente sea difı́cil de distinguir de una función elegida completamente al azar Además, la función se debe poder computar eficientemente Secreto perfecto Cifrado con clave secreta Cifradores bloque Ejemplos: DES, AES y otros Cifradores flujo Permutaciones pseudo-aleatorias Funciones pseudoaleatorias a las que se les pide que cada Fk (.) sea una permutación de {0, 1}n Se pide que, para cada clave, tanto la permutación como su inversa sean computables de manera eficiente Secreto perfecto Cifrado con clave secreta Cifradores bloque Ejemplos: DES, AES y otros Cifradores flujo Cifrador en bloque Es el nombre que reciben las permutaciones pseudoaleatorias cuando se usan en la práctica l: longitud de clave n: longitud de bloque Se usan como primitivas para la construcción de esquemas de cifrado de clave secreta Secreto perfecto Cifrado con clave secreta Cifradores bloque Ejemplos: DES, AES y otros Cifradores flujo Modos de operación I Determina la forma de utilizar un cifrador en bloque Las partes que se comunican comparten una clave secreta k y usan una permutación Fk Se supone un mensaje m cuya longitud es múltiplo de la longitud de bloque n (si no es ası́ se completa con información superflua) Se divide el mensaje en bloques de longitud n m = m0 || m1 || ... || ms Secreto perfecto Cifrado con clave secreta Cifradores bloque Ejemplos: DES, AES y otros Cifradores flujo Modos de operación II 1 Electronic Code Book (ECB) Se divide el mensaje original en bloques y cada uno de ellos es cifrado por separado usando la misma clave k cj = Fk (mj ) Es inseguro :-s m1 m2 m3 Fk Fk Fk c1 c2 c3 Secreto perfecto Cifrado con clave secreta Cifradores bloque Ejemplos: DES, AES y otros Cifradores flujo Modos de operación III 2 Cipher Block Chaining (CBC) A cada bloque de texto plano se le aplica la operación XOR con el bloque cifrado anterior antes de ser cifrado Se elige al azar un vector de inicialización IV de n bits c0 = IV cj = Fk (mj ⊕ cj−1 ) m1 m2 m3 Fk Fk Fk c1 c2 c3 IV Secreto perfecto Cifrado con clave secreta Cifradores bloque Ejemplos: DES, AES y otros Cifradores flujo Modos de operación IV 3 Output Feedback (OFB) Se elige al azar un vector de inicialización (IV) de longitud n r0 = IV rj = Fk (rj−1 ) cj = mj ⊕ rj IV Fk m1 Fk m2 c1 Fk m3 c2 c3 Secreto perfecto Cifrado con clave secreta Cifradores bloque Ejemplos: DES, AES y otros Cifradores flujo Modos de operación V 4 Counter (CTR) Se elige al azar un vector de inicialización (IV) de longitud n ctr = IV rj = Fk (ctr + j) cj = mj ⊕ rj ctr ctr+1 ctr+2 ctr+3 Fk Fk Fk m1 ctr m2 c1 m3 c2 c3 Secreto perfecto Cifrado con clave secreta Cifradores bloque Ejemplos: DES, AES y otros Cifradores flujo Modos de operación VI Seguridad de los modos Teorema: los modos CBC, OFB y CTR son IND-CPA seguros si se emplea una permutación pseudoaleatoria ECB es inseguro. ¿Por qué? Secreto perfecto Cifrado con clave secreta Cifradores bloque Ejemplos: DES, AES y otros Seguridad IND-CCA I Experimento IND-CCA Se genera k mediante Gen(1n ) A recibe como input 1n A recibe acceso a oráculos Enck (.) y Deck (.) A crea dos mensajes m0 , m1 Se elige b ← {0, 1} C envı́a c ← Enck (mb ) a A A ya tiene cerrado el acceso a Deck (c) A devuelve un bit b0 Si b = b0 se dice que Succ(A, n) = 1 Cifradores flujo Secreto perfecto Cifrado con clave secreta Cifradores bloque Ejemplos: DES, AES y otros Cifradores flujo Seguridad IND-CCA II Un esquema de cifrado es IND-CCA seguro si para cualquier adversario PPT A se tiene que: P(Succ(A, n) = 1) ≤ 12 + negl(n) Es decir, si ningún adversario eficiente con acceso a oráculos de cifrado y descifrado puede distinguir entre el cifrado de dos mensajes de su elección mejor que eligiendo al azar, salvo con probabilidad despreciable Secreto perfecto Cifrado con clave secreta Cifradores bloque Ejemplos: DES, AES y otros Cifradores flujo Seguridad IND-CCA III Los modos anteriores no la alcanzan (los textos cifrados son manipulables) Para hacerlos IND-CCA seguros se combinan con codigos de autenticación de mensajes (MAC) Se construyen MAC a partir de funciones pseudoaleatorias o funciones hash resistentes a colisiones Secreto perfecto Cifrado con clave secreta Cifradores bloque Ejemplos: DES, AES y otros Índice 1 Secreto perfecto 2 Cifrado con clave secreta 3 Cifradores bloque 4 Ejemplos: DES, AES y otros 5 Cifradores flujo Generación de claves (secuencias cifrantes) Cifradores flujo Secreto perfecto Cifrado con clave secreta Cifradores bloque Ejemplos: DES, AES y otros Cifradores flujo Cifradores de bloque I Cifradores de sustitución simple (i) Sea A un alfabeto de q sı́mbolos y T el conjunto de todas las cadenas de caracteres de longitud l en A. Sea, además, P el conjunto de todas las posibles permutaciones en A. Se define Enck por cada p ∈ P como: Encp (m) = (p(m1 )p(m2 )...p(ml )) = (c1 c2 ...cl ) = c donde m = (m1 m2 ...ml ) ∈ T. Es decir, para cada sı́mbolo en un l-bloque éste se sustituye por otro sı́mbolo de A según la permutación fija marcada por p. Encp es un cifrador de sustitución simple (o monoalfabético) Secreto perfecto Cifrado con clave secreta Cifradores bloque Ejemplos: DES, AES y otros Cifradores de bloque II Cifradores de sustitución simple (ii) Para descifrar c = (c1 c2 ...cl ) se realiza el cómputo inverso p = e−1 , por lo que: Decp (c) = (p(c1 )p(c2 )...p(cl )) = (m1 m2 ...ml ) = m ¿Ventajas / Inconvenientes? Cifradores flujo Secreto perfecto Cifrado con clave secreta Cifradores bloque Ejemplos: DES, AES y otros Cifradores flujo Cifradores de bloque III Cifradores de sustitución polialfabética Es un un cifrador de bloques, donde la longitud del bloque es de tamaño l sobre un alfabeto A. Tiene las siguientes propiedades: El espacio de claves K consiste en todos los conjuntos ordenados de l permutaciones (p1 , p2 , ..., pl ), donde cada permutación está definida en A; La encriptación de un mensaje m = (m1 m2 ...ml ) con la clave k = (p1 , p2 , ..., pl ) se proporciona mediante Enck (m) = (p1 (m1 )p2 (m2 )...pl (ml )); y La clave para descifrar con k = (p1 , p2 , ..., pl ) es −1 −1 k−1 = (p−1 1 , p2 , ..., pl ) Secreto perfecto Cifrado con clave secreta Cifradores bloque Ejemplos: DES, AES y otros Cifradores flujo Cifradores de bloque IV Ejemplo: cifrador de Vigenère Sea A = {A, B, C, D, ..., X, Y, Z} y l = 3. Se elige k = (p1 , p2 , p3 ), donde p1 se corresponde con la letra de 3 posiciones a la derecha de la actual en el alfabeto A , p2 7 posiciones a la derecha y p3 10 posiciones a la derecha. Si el mensaje en claro es: m = EST ECI FRA DOR ESU NAP ATA TA El mensaje cifrado quedarı́a de esta forma: c = Enck (m) = hzd hjs iyk gvb xze qhz dak wh ¿Ventajas / Inconvenientes? Secreto perfecto Cifrado con clave secreta Cifradores bloque Ejemplos: DES, AES y otros Cifradores flujo Cifradores de bloque V Cifradores de transposición/permutación Sea K el conjunto de todas las permutaciones en el conjunto {1, 2, ..., l}. Para cada k ∈ K se define la función de encriptación como sigue: Enck (m) = (mk(1) mk(2) ...mk(l) ) Permuta los sı́mbolos en un mismo bloque La permutación o transposición puede depender o no de la clave Secreto perfecto Cifrado con clave secreta Cifradores bloque Cifradores de bloque VI Ejemplo l=5 m = ATACA MOSAL ASOCH O k = {5, 4, 3, 2, 1} El mensaje codificado resulta: c = ACATA LASOM HCOSA O Ejemplos: DES, AES y otros Cifradores flujo Secreto perfecto Cifrado con clave secreta Cifradores bloque Ejemplos: DES, AES y otros Cifradores flujo Cifradores de bloque VII Cifradores de producto (Product ciphers) Los cifradores de sustitución y de permutación no ofrecen alta seguridad por sı́ solos, en cambio, su combinación hace criptosistemas más robustos Un cifrador de producto muy común serı́a una composición de l ≥ 2 transformaciones Enck1 , Enck2 , ..., Enckl , donde cada Encki , 1 ≤ i ≤ l, es o bien un cifrador por sustitución o bien uno por permutación Secreto perfecto Cifrado con clave secreta Cifradores bloque Ejemplos: DES, AES y otros Cifradores de bloque VIII Redes S-P Creadas por Shannon en 1949 Secuencia de varias substituciones y permutaciones Cifradores flujo Secreto perfecto Cifrado con clave secreta Cifradores bloque Ejemplos: DES, AES y otros Cifradores flujo Cifradores de bloque IX Ejemplo: Cifrador ADFGVX (i) Utilizado en la I Guerra Mundial Llamado ası́ por los diferentes sonidos en Morse de los distintos sı́mbolos Combina sustitución polialfabética (de pares) con transposición por columnas A D F G V X A K 9 Q E 8 U D Z B 7 V O 4 F W 6 J Y D I G R C P 3 H S V 1 L G A 0 T X F 5 X N 2 M Cuadro: Tabla de substituciones Secreto perfecto Cifrado con clave secreta Cifradores bloque Ejemplos: DES, AES y otros Cifradores de bloque X Ejemplo: Cifrador ADFGVX (ii) Texto en claro: QUEDAMOS A LAS NUEVE Texto substituido: FA XA GA VF GV XX VD XG GV DV GV XG GX XA GA GD GA Clave a utilizar: LIBRO Cifradores flujo Secreto perfecto Cifrado con clave secreta Cifradores bloque Ejemplos: DES, AES y otros Cifradores flujo Cifradores de bloque XI Ejemplo: Cifrador ADFGVX (iii) Creamos una matriz con el texto substituido en bloques bajo la clave Ordenamos las columnas por orden alfabético de la clave (a) L F A X G G X G I A V X G V X D B X F V V X A G (b) R A G D D G G A O G V X V G A # B X F V V X A G I A V X G V X D L F A X G G X G O G V X V G A # R A G D D G G A El texto cifrado serı́a: XFVVXAG AVXGVXD FAXGGXG GVXVGA# AGDDGGA Secreto perfecto Cifrado con clave secreta Cifradores bloque Ejemplos: DES, AES y otros Cifradores flujo Técnicas generales de diseño (DES y AES) Uso del paradigma confusión-difusión Confusión: supongamos que la longitud del bloque es de 128 bits La clave determina 16 permutaciones f1 , f2 , ..., f16 cuya longitud de bloque es 8 Se divide, pues, m = m1 ||m2 ||...||m16 en bloques de 8 bits Se define Fk (m) = f1 (m1 )||...||f16 (m16 ) Difusión: los bits de la salida anterior se mezclan de acuerdo a una cierta permutación (permutación de mezcla) Los pasos de confusión-difusión se repiten un cierto número de rondas Secreto perfecto Cifrado con clave secreta Cifradores bloque Ejemplos: DES, AES y otros Cifradores flujo Implementación I Red de sustitución/permutación: las permutaciones {fj } son fijas y no dependen de la clave. Reciben el nombre de S-cajas (cajas de sustitución) La dependencia de la clave se introduce al principio de cada ronda mediante una agenda de claves (key schedule). Por ejemplo, haciendo XOR de la entrada con una subclave obtenida a partir de la clave Secreto perfecto Cifrado con clave secreta Implementación II Cifradores bloque Ejemplos: DES, AES y otros Cifradores flujo Secreto perfecto Cifrado con clave secreta Cifradores bloque Ejemplos: DES, AES y otros Cifradores flujo Otro principio de diseño Efecto avalancha: cambiar un único bit de la entrada deberı́a afectar a todos los bits de la salida Para conseguirlo: 1 2 Para cada S-caja, si se cambia un bit del input, cambian al menos dos bits del output Para cada S-caja la permutación de mezcla reparte cada bit del output a una caja distinta para la ronda siguiente Secreto perfecto Cifrado con clave secreta Cifradores bloque Ejemplos: DES, AES y otros Cifradores flujo Redes de Feistel Se trata de un enfoque alternativo para construir cifradores de bloque No se requiere que las S-cajas sean permutaciones, pero se consigue que cada ronda se pueda invertir Inicialmente se divide el input en dos bloques L0 y R0 (parte izda. y parte dcha.) En cada ronda j se calcula el output mediante una S-caja fj (que dependerá de la clave) teniendo: Lj = Rj−1 Rj = Lj−1 ⊕ fj (Rj−1 ) Cada una de estas rondas se puede invertir (siempre que se conozca la clave) Secreto perfecto Cifrado con clave secreta Cifradores bloque Ejemplos: DES, AES y otros Cifradores flujo Posibles ataques Ataques Tanto las redes de sustitución-permutación como las redes de Feistel son susceptibles a ataques si no se elige un número de rondas suficientemente alto Secreto perfecto Cifrado con clave secreta Cifradores bloque Ejemplos: DES, AES y otros Cifradores flujo DES (Data Encryption Standard) I Consiste en una red de Feistel de 16 rondas Longitud de bloque: 64 bits Longitud de clave: 56 bits Agenda de clave: en cada ronda se genera una subclave de 48 bits eligiendo 24 bits de la parte izquierda y 24 de la parte derecha de la clave original El mecanismo para la generación de claves es fijo y público Secreto perfecto Cifrado con clave secreta Cifradores bloque Ejemplos: DES, AES y otros Cifradores flujo DES (Data Encryption Standard) II Cada función de ronda fj se comporta de la siguiente manera: El input de 32 bits se expande a 48 bits (duplicando la mitad). Al resultado se le aplica XOR con la subclave kj A continuación, se procede con la ronda sustitución-permutación: 1 2 La parte de sustitución consta de 8 S-cajas fijas que tienen entrada de 6 bits y salida de 4 bits. Por lo tanto, se reduce la entrada de 48 bits a 32 bits de nuevo Se aplica una permutación de mezcla a los 32 bits Secreto perfecto Cifrado con clave secreta Cifradores bloque Ejemplos: DES, AES y otros Cifradores flujo DES (Data Encryption Standard) III Input: m = m1 m2 ...m64 , mensaje de texto plano; k = k1 k2 ...k64 , clave de 64 bits Output: c = c1 c2 ...c64 , texto cifrado 1 2 Crear la agenda de claves, con 16 claves de 48 bits (l0 , r0 ) ← IP(m1 m2 ...m64 ) 1 3 Se divide el resultado en dos mitades, izda. y dcha. de 32 bits cada una (16 rondas), calcular li y ri (ec. 1 y 2), calculando f (ri−1 , ki ) = P(S(E(ri−1 ) ⊕ ki )) de la siguiente forma: Secreto perfecto Cifrado con clave secreta Cifradores bloque Ejemplos: DES, AES y otros Cifradores flujo DES (Data Encryption Standard) IV 1 2 3 4 Expandir ri−1 = r1 r2 ...r32 (de 32 a 48 bits usando la tabla de permutaciones E) : T ← E(ri−1 ) T 0 ← T ⊕ ki . Representamos T 0 como 8 cadenas de 6 bits: (B1 , ..., B8 ) T 00 ← (S1 (B1 ), S2 (B2 ), ..., S8 (B8 )). Se mapea Si (Bi ) a una entrada de 4 bits en la caja Si . (b1 b6 ) determinan la fila y b2 b3 b4 b5 la columna T 000 ← P(T 00 ) (Permutación P) 4 b1 b2 ...b64 ← (r16 , l16 ) (Intercambio de ri por li ) 5 c ← IP−1 (b1 b2 ...b64 ) (Permutación usando la inversa de IP) li = ri−1 (1) ri = li−1 ⊕ f (ri−1 , ki ) (2) donde f (ri−1 , ki ) = P(S(E(ri−1 ) ⊕ ki )) Secreto perfecto Cifrado con clave secreta Cifradores bloque Ejemplos: DES, AES y otros DES (Data Encryption Standard) V ri-1 Input m1 m2 ... IP 32 m64 64 E Expansión Permutación inicial 48 64 l0 r0 48 k 1 32 32 + 48 l1 r1 48 k 2 32 6 S1 r15 48 k 16 32 32 32 f l15 + + 32 f 32 + ki S2 S3 S4 S5 S6 S7 S8 4 32 f 32 r16 l16 P 64 IP -1 Permutación inversa 32 64 Output c1 c2 ... c64 (a) Flujo de DES Adaptado de Menezes et al. Handbook of Applied Cryptography. Cap.7 pág. 254 (b) Función f Cifradores flujo Secreto perfecto Cifrado con clave secreta Cifradores bloque Ejemplos: DES, AES y otros Cifradores flujo Seguridad de DES El mejor ataque conocido en la práctica es una búsqueda exhaustiva en el espacio de claves. El tamaño es 256 , hoy en dı́a demasiado pequeño Un par de retos propuestos en 1997, en forma de pares input/output, con objetivo de recuperar la clave, fueron resueltos en 96 y 41 dı́as, respectivamente. En 1998, la máquina Deep Crack (250000$ diseñada ad-hoc) resuelve otro reto en 56 horas DES no se considera seguro actualmente Secreto perfecto Cifrado con clave secreta Cifradores bloque Ejemplos: DES, AES y otros Cifradores flujo Mejoras a DES I No es aconsejable modificar la estructura interna porque se puede perder seguridad DES iterado: se aplica varias veces el cifrador utilizando distintas claves Variantes de DES: 2DES(k1 k2 , m) ≡ DES(k2 , DES(k1 , m)) 3DES3(k1 k2 k3 , m) ≡ DES(k3 , DES−1 (k2 , DES(k1 , m))) 3DES2(k1 k2 , m) ≡ 3DES3(k1 k2 k1 , m) DESX(k k1 k2 , m) ≡ k2 ⊕ DES(k, k1 ⊕ m) Secreto perfecto Cifrado con clave secreta Cifradores bloque Ejemplos: DES, AES y otros Mejoras a DES II Incovenientes Las variantes iteradas son poco eficientes La longitud de clave efectiva baja por ataques meet-in-the-middle La longitud del bloque se mantiene baja Se hace necesario buscar un nuevo estándar, con longitudes de clave y bloque mayores y más eficiente Cifradores flujo Secreto perfecto Cifrado con clave secreta Cifradores bloque Ejemplos: DES, AES y otros Cifradores flujo AES (Advanced Encryption Standard) En 1997 el NIST (USA) convoca una competición para seleccionar un nuevo cifrador de bloque que sustituya a DES 15 equipos de todo el mundo presentaron sus propuestas En 1998 y 1999 se celebraron los congresos donde se expusieron los criptoanálisis de las propuestas. Se eligieron 5 En octubre de 2000 se eligió el ganador: Rjindael, diseñado por los belgas Daemen y Rijmen (pasarı́a a denominarse AES) Se reconoció que los 5 candidatos no tenı́an vulnerabilidades Secreto perfecto Cifrado con clave secreta Cifradores bloque Ejemplos: DES, AES y otros Cifradores flujo Diseño de AES I Longitud de bloque: 128 bits Longitud de clave: variable (128, 192 ó 256 bits) Número de rondas: 10 para clave de 128 bits 12 para clave de 192 bits 14 para clave de 256 bits Secreto perfecto Cifrado con clave secreta Cifradores bloque Ejemplos: DES, AES y otros Diseño de AES II Es una red de sustitución-permutación Un array de 4x4 bytes llamado estado (state) se va modificando a lo largo de rondas El estado inicial es el input del cifrador En cada ronda se aplican 4 operaciones al estado Cifradores flujo Secreto perfecto Cifrado con clave secreta Cifradores bloque Ejemplos: DES, AES y otros Cifradores flujo Diseño de AES III 1 AddRoundKey: se genera una subclave de 128 bits a partir de la clave, se interpreta como un array 4x4 de bytes y se hace XOR con el estado 2 SubBytes: cada byte del estado se substituye por otro mediante una S-caja fija para todo el algoritmo ShiftRows: los bytes de cada fila del estado se desplazan a la izda 3 0 posiciones en la primera fila 1 posición en la segunda fila 2 posiciones en la tercera fila 3 posiciones en la cuarta fila 4 MixColumns: se multiplica el estado por una matriz 4x4 invertible fija En la última ronda se sustituye el último paso de MixColumns por un AddRoundKey adicional Secreto perfecto Cifrado con clave secreta Cifradores bloque Ejemplos: DES, AES y otros Cifradores flujo Seguridad de AES AES ha sido intensamente criptoanalizado y no se ha encontrado ninguna vulnerabilidad Se han conseguido romper algunas implementaciones (ataques por temporización - Open-SSL) Actualmente AES se sigue considerando muy seguro y eficiente Es libre Está estandarizado Buena elección para cualquier protocolo que necesite una permutación pseudoaleatoria Secreto perfecto Cifrado con clave secreta Cifradores bloque Ejemplos: DES, AES y otros Índice 1 Secreto perfecto 2 Cifrado con clave secreta 3 Cifradores bloque 4 Ejemplos: DES, AES y otros 5 Cifradores flujo Generación de claves (secuencias cifrantes) Cifradores flujo Secreto perfecto Cifrado con clave secreta Cifradores bloque Ejemplos: DES, AES y otros Cifradores flujo Generadores psudoaleatorios Un generador pseudoaleatorio es un algoritmo determinista que corre en tiempo polinomial Para cada entrada s ∈ {0, 1}n devuelve una secuencia de bits G(s) de longitud l(n). La función l recibe el nombre de factor de expansión ¿Cómo se implementan? (ver final del capı́tulo) ¿Cómo qué se utilizan? Gen(1n ) elige k ← {0, 1}n Dado m ∈ {0, 1}l(n) Enck (m) = G(k) ⊕ m Dado c ∈ {0, 1}l(n) Deck (c) = G(k) ⊕ c Secreto perfecto Cifrado con clave secreta Cifradores bloque Ejemplos: DES, AES y otros Cifradores flujo Cifradores de flujo I Cifradores de bloque de longitud 1 La transformación para codificar sı́mbolos del texto en claro puede cambiar dinámicamente Sea K el espacio de claves para las transformaciones al codificar. Se llamará flujo de clave (keystream) a la secuencia de sı́mbolos k1 k2 k3 ...ki Secreto perfecto Cifrado con clave secreta Cifradores bloque Ejemplos: DES, AES y otros Cifradores flujo Cifradores de flujo II Definición de cifrador de flujo Sea A un alfabeto de q sı́mbolos y Enck un cifrador simple de sustitución de longitud de bloque 1, donde k ∈ K. Sea m1 m2 m3 ... un texto en claro y k1 k2 k3 ... un flujo de claves de K. Un cifrador de flujo toma el texto en claro y produce un texto cifrado c1 c2 c3 ... donde ci ∈ Encki (mi ) Aplica cifrado simple de acuerdo al flujo de claves usado ¿Cómo crear el flujo de claves? Secreto perfecto Cifrado con clave secreta Cifradores bloque Ejemplos: DES, AES y otros Cifradores flujo Cifradores de flujo III Ejemplo: cifrador de Vernam Es un cifrador de flujo definido sobre el alfabeto A = {0, 1}. A un mensaje binario m1 m2 ...ml le será aplicado una clave binaria k1 k2 ...kl para generar un texto cifrado c1 c2 ...cl donde ci = mi ⊕ ki , 1 ≤ i ≤ l Si la clave se elige aleatoriamente y no se vuelve a usar, este cifrador se llama one-time pad Simple y fácil de implementar Secreto perfecto Cifrado con clave secreta Cifradores bloque Ejemplos: DES, AES y otros Cifradores de flujo IV Ejemplo de cifrador de Vernam: RC4 Ejemplo M = BYTES K = VERNAM Solución: B ⊕ V = 11001 ⊕ 11110 = 00111 = U Y ⊕ E = 10101 ⊕ 00001 = 10100 = H T ⊕ R = 10000 ⊕ 01010 = 11010 = G E ⊕ N = 00001 ⊕ 01100 = 01101 = F S ⊕ A = 00101 ⊕ 00011 = 00110 = I Se usa en protocolos tales como: TLS/SSL (tráfico en Internet seguro) o WEP (seguridad en Redes Inalámbricas) Cifradores flujo Secreto perfecto Cifrado con clave secreta Cifradores bloque Ejemplos: DES, AES y otros Cifradores flujo Múltiples cifrados El cifrado en flujo no se mantiene seguro cuando se usa varias veces con la misma clave Problema: es determinista. Se detecta, por ejemplo, cuando se envı́a un mensaje dos veces Solución (aproximación al cifrador seguro de Vernam): 1 Secuencias cifrantes Secreto perfecto Cifrado con clave secreta Cifradores bloque Ejemplos: DES, AES y otros Cifradores flujo Generación de claves I Una clave k se puede generar de diversas maneras 1 Generadores de números aleatorios (RNGs) Generadores hardware Generadores software 2 Mediante funciones hash (funciones de una dirección) Secreto perfecto Cifrado con clave secreta Cifradores bloque Ejemplos: DES, AES y otros Cifradores flujo Generadores pseudoaleatorios I Hardware Parámetros poco o nada predecibles (temperatura, humedad, potencia de la baterı́a, ...) Secuencias de números basadas en ruido Construidos con diodos y amplificadores Futuro → generadores cuánticos Secreto perfecto Cifrado con clave secreta Cifradores bloque Ejemplos: DES, AES y otros Cifradores flujo Generadores pseudoaleatorios I Software Funciones que, partir de una semilla (seed), generan una secuencia de valores Suelen estar basados en congruencias numéricas que siguen el siguiente patrón: xi = a · xi−1 + c mod n, con x0 , a, c < m m representa el espacio de valores (espacio de claves) x0 es la semilla Importante A partir de una misma semilla siempre se genera la misma secuencia de valores Ciclos de valores lo más largos posibles Secreto perfecto Cifrado con clave secreta Cifradores bloque Ejemplos: DES, AES y otros Generadores pseudoaleatorios II Software Para alcanzar amplitud máxima: 1 Si c 6= 0: MCD(c, m) = 1 a = 1 mod p para cada factor primo p de m a = 1 mod 4 si 4 es divisor de m 2 Si c = 0: m es primo am−a/p = 1 mod m Cifradores flujo Secreto perfecto Cifrado con clave secreta Cifradores bloque Ejemplos: DES, AES y otros Cifradores flujo Generadores pseudoaleatorios III Software Ejercicio Calcular valores de a para las configuraciones de generación de números aleatorios siguientes: 1 m = 32, x0 = 1, c = 3 2 m = 33, x0 = 3, c = 0 3 m = 17, x0 = 5, c = 12 4 m = 3, x0 = 5, c = 7 Secreto perfecto Cifrado con clave secreta Cifradores bloque Ejemplos: DES, AES y otros Cifradores flujo Contraseñas y Funciones hash I Se utilizan funciones hash en una dirección a partir de contraseñas o frases (usualmente más cortas que la longitud de clave) Contraseña o passphrase n bits Función hash m bits k Toman como entrada un mensaje de longitud variable y lo transforman en uno de longitud fija Secreto perfecto Cifrado con clave secreta Cifradores bloque Ejemplos: DES, AES y otros Cifradores flujo Contraseñas y Funciones hash II MD5 → 128 bits SHA1 → 160 bits Problema: cómo elegir la contraseña o frase Los adversarios ”recuerdan” los códigos o resúmenes de contraseñas simples: MD5(00 password00 ) = 5f4dcc3b5aa765d61d8327deb882cf99 Solución: mezclar con algunos bits aleatorios y hacer re-hash varias veces Secreto perfecto Cifrado con clave secreta Cifradores bloque Ejemplos: DES, AES y otros Cifradores flujo Contraseñas y Funciones hash III Ejemplo 1 Longitud de clave para el algoritmo de cifrado: 128 bits Contraseña del usuario para cifrar: ”abc” (Hex: 61 62 63). Utilizando una conversión directa obtendrı́amos: 61 62 63 00 00 00 00 00 00 00 00 00 00 00 00 00 Sólo usamos 24 de 128 bits posibles (¡¡¡No es muy seguro!!!). Si utilizamos una función hash (p. ej. MD5) obtenemos: 90 01 50 98 3C D2 4F B0 D6 96 3F 7D 28 E1 7F 72 Secreto perfecto Cifrado con clave secreta Cifradores bloque Ejemplos: DES, AES y otros Cifradores flujo Contraseñas y Funciones hash IV Si hacemos re-hash AF 5D A9 F4 5A F7 A3 00 E3 AD ED 97 2F 8F F6 87 A pesar de la debilidad de la clave el código generado se puede usar como clave para el cifrado ¿Si queremos una clave de 64 bits? ¿O una de 256 bits? Secreto perfecto Cifrado con clave secreta Cifradores bloque Ejemplos: DES, AES y otros Cifradores flujo Contraseñas y Funciones hash V Ejemplo 2 Cómo mejorar el método anterior: salt + stretching + contador de iteraciones Contraseña del usuario: ”abc” Salt (p. ej. 64 bits): 78 57 8E 5A 5D 63 CB 06 Contador de iteraciones = 1000 P||S = 61 62 63 78 57 8E 5A 5D 63 CB 06 H(1) = MD5(P||S) = 0E8BAAEB3CED73CBC9BF4964F321824A H(2) = MD5(H(1)) = 1F0554E6F8810739258C9ABC60A782D5 H(3) = MD5(H(2)) = ABA6FEDB4AD3EFAE8180364E617D9D79 ... H(1000) = MD5(H(999)) = 8FD6158BFE81ADD961241D8E4169D411 Secreto perfecto Cifrado con clave secreta Cifradores bloque Ejemplos: DES, AES y otros Cifradores flujo Contraseñas y Funciones hash VI 8FD6158BFE81ADD961241D8E4169D411 será la clave para el algoritmo de cifrado La próxima vez usamos la misma clave pero distinto salt y distinto contador de iteraciones → generará claves distintas Este algoritmo se conoce como PBKDF1 Es necesario poder enviar el salt y el contador de iteraciones a la otra parte, para que sea capaz de generar una misma clave. ¿En claro?