340 likes | 613 Views
El Criptosistema RSA. CRIPTOGRAFIA. CRIPTOGRAFIA de CLAVE PRIVADA. CRIPTOGRAFIA de CLAVE PUBLICA. Block Ciphers. Digital Signature. Stream Ciphers. Key Agreement. Hash functions. RSA. 1976 - New Directions in Cryptography W. Diffie, M. Hellman
E N D
El Criptosistema RSA CRIPTOGRAFIA CRIPTOGRAFIA de CLAVE PRIVADA CRIPTOGRAFIA de CLAVE PUBLICA Block Ciphers Digital Signature Stream Ciphers Key Agreement Hash functions
RSA • 1976 - New Directions in Cryptography W. Diffie, M. Hellman • 1978 - A Method for Obtaining Signatures and Public-Key Cryptosystems R. Rivest, A. Shamir, L. Adleman
RSA ----- ----- ----- ----- ----- ----- ----- -----
Partes del sistema RSA PROTOCOLOS ESQUEMAS PRIMITIVAS
Ejemplos Protocolos: SSL v 3, TLS, SSL Plus, SET PGP, S/MIME, Ipsec Esquemas: Firma Digital, Intercambio de Claves, Cifrado Primitivas: Prim. Firma, Prim. Verificación, Prim. de cifrado, Prim. de descifrado
RSA M, C=M^e mod n n = p * q d = e^-1 mod(n) C, M = C^d mod n
Esquema de Cifrado Esquema de Firma Primitiva de Cifrado c = m^e mod n Primitiva de Firma s = m^d mod n Primitiva de Descifrado m = c^d mod n Primitiva de Verificación c = m^e mod n
Esquema de Cifrado 1) Generación de claves 2) Proceso de cifrado 3) Proceso de descifrado a) Seguridad b) Implementación c) Ataques
Justificación Teorema de Euler Teorema de Fermat
Ejercicio: Con entonces
Generación de Claves Las claves (n,e) clave pública (d) clave privada n= pq, d = e^-1 mod (n) Paso 1) Generación de un número aleatorio (GNA) Paso 2) Genarar tantos NA hasta tener un número primo probabilistico con P(1/2^100) de error Paso 3) Obtener n = pq Paso 4)Calcular d
Paso 1 Existen varias formas de generar números seudoaleatorios de las mas usadas estan: Usando una función hash MD5, SHA1 El generador de Blum Blum
Blum-Blum 1) Se generan dos números primos p,q, y n=pq 2) Se selecciona una semilla entera s en [1,n-1] tal que mcd(s,n) = 1 y se calcula 3) Para i = 1 hasta k 4) La salida es la sucesión
Referencias • FIPS 186 • PKCS #14 www.rsasecurity.com • NIST (Juan Soto) www.nist.gov
Paso 2 La generación de primos se realizan en dos etapas 2.1) un número candidato a ser primo p se somete a la pruba de divisibilidad por primos pequeños, tantos hasta una cota adecuada 2.2) Un número candidato a ser primo que paso la prueba 2.1 se somete a una prueba probabilistica dura, como Miller-Rabin El resultado es un número “primo industrial” p
Teorema del número primo El número de primos x, denotado por (x), satisface Por lo que se espera encontrar un número primo a lo mas en ln(x) números cerca de x. Por lo tanto es fácil encontrar números primos
Prueba de Fermat TPF Si p es primo, para todo es decir: si para algún entonces p, es número compuesto. A a se le llama un testigo de la composición de p La idea de la prueba de Fermat es: si se encuentra un testigo, definitivamente el núemro es compuesto, si no se encuentra un testigo entonces es un probable primo, hay mas confianza con mas número de interacciones
Prueba de Fermat Fermat (p,t) Repetir t veces Generar aleatoriamente un número a, 0 < a < p Si entonces regresar a es compuesto Despues de las t interacciones, regresar a es primo A este tipo de primos se les conoce como probables primos, en el caso de RSA se pide (p-1,e) = 1
Números de Carmichael • La mayoría de números compuestos tienes varios testigos para la prueba de Fermat • Excepto los números de Carmichael, los únicos testigos son los a, tales que mcd(a,p) 1 ejemplo 561 = 3 *11* 17, pero para todo a tal que mcd(a,561)=1, • Existen una cantidad infinita de números de Carmichael
Prueba de Miller-Rabin Rabin (p,t) Sea , donde u es impar Repetir t veces: Generar aleatoriamente un a, tal que 0<a<p Si regresar compuesto Después de t interacciones, regresar primo
¿Qué pasa si p, pasa y no es primo? • El modulo n tiene almenos 3 factores y será más fácil de factorizar • Si p es de Carmichael, entonces las operaciones de cifrado y descifrado serán inversas para todo los mensajes • En otro caso cada operación de cifrado/descifrado, será escencialmente una prueba de Fermat y el descifrado fallará para casi todos los mensajes
¿Qué tan buena es la prueba de Rabin? • Se ha mostrado que: • Pr[Rabin(p,1)=primo | p es compuesto] • Pr[Rabin(p,1)=primo | p es primo] = 1 • Pr[Rabin(p,t)=primo | p compuesto]
k\t 1 2 3 4 5 6 7 8 9 10 300 19 33 44 53 60 67 73 78 83 88 350 28 38 48 58 66 73 80 86 91 97 400 37 46 55 63 72 80 86 91 99 105 450 46 55 63 72 80 87 93 100 106 112 500 56 63 70 78 85 92 99 106 113 119 550 65 72 79 86 93 100 107 113 119 126 600 75 82 88 95 102 108 115 121 127 133
Experimento de Rivest • 718 millones de números aleatorios de 256 bits • 43 millones pasaron la prueba de divisores primos pequeños • 4 058 000 pasaron la prueba de Fermat con testigo 2 De los cuales todos pasaron la prueba de Miller Rabin con 8 interacciones
Según estimaciones el número de seudoprimos (números compuestos que pasan la prueba de Fermat) es de 4 x 10^52, y hay aproximadamente 6.5 x 10^74 números primos de 256 bits Por lo tanto si estas estimaciones son ciertas, la probabilidad de que un número elegido aleatoriamente de 256 bits que pasa la prueba de Fermat con testigo 2 y que este sea seudoprimo es menor a 1/10^22
Paso 3,4 Para calcular a n, se multiplican los dos primos p,q Para calcular a d, se usa el algoritmo extendido de Euclides El número e por razones de implementación se elije como 3 o como 65537, el número 4 de Fermat Al usar a e de esta forma, d tiene una longitud considerable, es decir evita el ataque de Wiener, que es aplicable si d <
Representación de las claves Claves públicas (n,e), e es un número tal que mcd (e, (n)) = 1 Clave privada a) d, un entero no negativo b) la quinteta (p,q,dP,dQ, qinv)
Proceso de cifrado Según el PKCS #1 v 1.5 el método es el siguiente: 1) Se codifica el mensaje a mandar 00 02 cadena de relleno 00 bloque de datos EB = 00||02||PS||00||DB 2) Se convierte la cadena de caracteres EB (cadena de Octetos) a un número entero, llamado mensaje representativo M. Con el estándar OS2IP
3) Se aplica la primitiva de cifrado a el mensaje representativo M En Agosto de 1998 D. Bleichenbacher, propone un ataque a este modo de codificar, en enero de 1999 se asume para el esquema de cifrado el OAEP (optimal asymetric encryption padding) Este método de codificación es resistente al ataque de D.B. y aún más se puede mostrar que su seguridad es equivalente a la seguridad de la misma función RSA
OAEP P M Seed Hash Padding Operation DB MGF xor MGF maskedDB xor Masked Seed EM
Proceso de descifrado EntradaK, una clave privada en alguna de sus representaciones C el texto cifrado representativo, un entero entre 0 y n-1 Salida m el mensaje representativo, un entero entre 0 y n-1
Proceso Si es de la forma K=(d), Si K = (p,q,dP, dQ, qinv)
Se convierte el número m a una cadena de octetos, por medio del estandár I2OSP Se recupera el mesaje m
Referencias www.rsa.com http://theory.lcs.mit.edu/~rivest http://cacr.math.uwaterloo.ca/hac/ www.seguridata.com