Criptografía de Clave Pública (Algoritmos asimétricos) A diferencia de los algoritmos simétricos, ahora vamos a disponer de 2 tipos de claves (por cada usuario) : – Clave pública – Clave privada
La clave pública la conoce todo el mundo y la privada es secreta y va ligado a un usuario.
Es imposible (ó muy difícil) deducir la clave secreta a partir de clave pública.
Criptografía de Clave Pública Usuario A Usuario B E (M) KPB D (E (M) ) = M KPB KSB Usuario A Usuario cualquiera E (M) KSA D (E (M) ) = M KSA KPA Confidencialidad : Firma digital (autenticación):
Comparativa entre Simétrica y Asimétrica ¿ Qué es lo deseado ? Combinar la velocidad con la seguridad ? Criptosistemas híbridos
Criptografía de Clave Pública El algoritmo más conocido es el RSA
Fue desarrollado en 1977. (Rivest, Shamir, Adleman)
Actualmente es el primer sistema criptográfico y el mas utilizado.
Podemos cifrar y firmar digitalmente.
RSA
Algoritmo RSA
Generación de claves
Seleccionar dos números primos grandes, p y q, (típicamente mayores que 10100).
2. Calcular: n = p x q
z = (p-1) x (q-1) (f de Euler)
Este algoritmo se basa en principios de la teoría de números.
Generación de la Clave Publica
3. Seleccionar un número e: – Coprimo con z – Menor que z
Exponente de la clave publica
Generación de la Clave Privada
3. Seleccionar un número d: – e*d = 1 mod z – de-1 divide a f(n)
Exponente de la clave privada
Criptografía de Clave Pública RSA Funcionamiento : a. Considerar el texto plano como una cadena de bits. Dividirlo en bloques de valor P tales que 0 = P < n. Para ello agrupar en trozos de k bits, donde 2k < n b. Cifrar el mensaje haciendo C = Pe mod n c. Enviar C por el canal d. Descifrar el mensaje haciendo P = Cd mod n
RSA en Haskell
Codificar
Descodificar
Criptografía de Clave Pública RSA Ejemplo del RSA : P = 61 Q = 53 N = P * Q = 3233 E = 17 D = 2753 Para cifrar M : C = E (M) = Me mod n = m17 mod 3233 Para descifrar C : M = D (C) = Cd mod n = c2753 mod 3233
Primalidad Determinar números primos grandes de forma aleatoria. Factorización Encontrar la factorización de un número n como producto de factores primos.
Cálculo con números grandes Eficiencia en las operaciones matemáticas cuando se trabaja con números grandes.
Teoría de Números Problemas de RSA NP-Completo NP-Completo Polinomial
Primalidad Test de primalidad Criterio para decidir si un número dado es o no primo. Test de la divisiones sucesivas. Test de pseudoprimalidad Criterio para decidir, con un alto grado de probabilidad, si un número dado es o no primo. Test basado en el Teorema pequeño de Fermat. Test de Solovay-Strassen Test de Miller-Rabin Teoría de Números
Dado un número impar, consiste en tomar todos los números impares en el intervalo [3 .. raíz(n)] y comprobar si alguno es divisor de n. Test de las divisiones sucesivas Teoría de Números
Obteniendo números primos grandes Usar tablas publicadas Rápido. Números pequeños para objetivos criptográficos. Generación y test Generar números aleatorios impares de tamaño grande y aplicarles un test de pseudoprimalidad. Teorema de Tchebycheff La cantidad de números primos menores o iguales que N es Teoría de Números
Obteniendo números primos grandes Generación de números aleatorios de N dígitos Teoría de Números
Obteniendo números primos grandes Generación de primos aleatorios de N dígitos Teoría de Números
Test de pseudoprimalidad Test de Fermat Si n es primo, entonces para cualquier b con mcd(b,n) = 1, se tiene que:
Números de Carmichael -> son compuestos y verifican la igualdad.
Probabilidad de que un número no sea primo y pase el test: 2-k Teoría de Números
Test de pseudoprimalidad Test de Solovay-Strassen El método consiste en elegir K naturales 0 < b < n aleatoriamente. Para cada uno de estos números b se calcula: y
Si estos valores no son congruentes módulo n; entonces el número es compuesto. O (k (log n)^3) Probabilidad de que un número no sea primo y pase el test: 2-k Teoría de Números
Test de pseudoprimalidad Test de Miller-Rabin n > 2 impar. m: impar n-1 = 2k * m ó a: aleatorio [2, n-2] para algún r: [1, k-1]
O (k (log n)^3) Teoría de Números
Últimos avances Algoritmo AKS (2002) Manindra Agrawal, Neeraj Kayal y Nitin Saxena Departamento de Computación del Instituto de Investigaciones de Kanpur (India) Basado en una versión simplificada del Pequeño Teorema de Fermat:
Primer algoritmo determinístico matemáticamente demostrado, de tiempo polinómico. Las constantes de la complejidad son muchas más costosas que en los actuales algoritmos probabilísticos. O(K(log n)^12+e) Teoría de Números
Factorización Uno de los ataques contra el algoritmo RSA consiste en descomponer en factores primos el número n de la clave pública.
Test de las divisiones sucesivas Método del algoritmo de Euclides Método de Fermat Método de Legendre Método rho de Pollard (Monte Carlo)
Teoría de Números
Factorización: Test de las divisiones sucesivas Test de las divisiones sucesivas Mismo procedimiento que para comprobar la primalidad.
Ineficiente Teoría de Números
Factorización: Método del algoritmo de Euclides Método del algoritmo de Euclides Dado un número compuesto n entre dos valores f y g, el método consiste en multiplicar todos los números primos comprendidos entre f y g, y a continuación aplicar el algoritmo de Euclides al número n y al producto resultante.
Si n es grande también se requiere mucho tiempo de computación.
Teoría de Números
Factorización: Método de Fermat Método de Fermat
¿El número 100895598169 es primo? Es el producto de 898423 por 11230, ambos primos. Mersenne Fermat Teoría de Números
Factorización: Método de Fermat Método de Fermat
El método consiste en encontrar un cuadrado.
1. Dado n, escoger un x > raiz(n). 2. Calcular x2 – n. Si es un cuadrado hemos terminado, sino: 3. Calcular (x+1)2 – n. Si es un cuadrado hemos terminado, sino: …
(Gp:) Idea de Fermat si n = x2 * y2, entonces n puede factorizarse: n = (x+y)*(x-y) Como x2 > n se tiene que x > raiz(n)
Teoría de Números
Factorización: Método de Legendre Método de Legendre
Número de soluciones de la congruencia:
Números primos -> Soluciones triviales -> Números compuestos -> Admite más soluciones.
El método intenta determinar soluciones no triviales a la congruencia.
Como si (x+y) es una solución no trivial, un factor de n se calcula hallando el mcd(x+y,n). Teoría de Números
Factorización: Método rho de Pollard Método rho de Pollard (Método de Monte Carlo) Se basa en el algoritmo de la liebre y la tortuga y en: x e y son congruentes módulo p con probabilidad 0.5 tras elegir 1.177*raiz(p) números. Si p es factor de n, entonces 1 < mcd(|x-y|, n) <= n, ya que p divide tanto a |x-y| como a n.
(Gp:) Secuencia x (Gp:) Secuencia y (Gp:) mcd(|x-y|, n)
Si mcd(|x-y|, n) = n -> Fracaso Teoría de Números
Trabajando con números grandes. El tipo Integer de Haskell Números enteros de precisión ilimitada. Mismas operaciones que Int.
Tipo abstracto de datos Por ejemplo: array de dígitos. ¡ Hay que implementar todas las operaciones! Teoría de Números
Trabajando con números grandes Cálculo de potencias modulares
Algoritmo de exponenciación modular La idea consiste en obtener la representación del exponente n en dígitos binarios (dt, dt-1, …d2,d1) con dt=1, y hallar los distintos cuadrados sucesivos (mod m) de la base a: (a1, a2, a4, … a2*t), para después multiplicar módulo m las potencias a2*I correspondientes a los dígitos binarios di que sean “1”. Teoría de Números
Trabajando con números grandes Máximo común divisor Más eficiente teniendo en cuenta las propiedades:
(Gp:) x, si y=0 MCD(x,y) = MCD(y, x `mod` y), otro caso
Teoría de Números
Trabajando con números grandes Algoritmo extendido de Euclides
extendedEuclid :: Integer -> Integer -> (Integer, Integer, Integer) a, b -> (u,v,d) Teoría de Números
El futuro de RSA Romper el código cifrado con RSA buscando la factorización de n es prácticamente imposible incluso con los ordenadores de la próxima década.
Factorizar un número de 500 dígitos necesita 1025 años a 1us por instrucción.
Cuando se consiga, podríamos elegir números primos mayores y el sistema volvería a ser seguro.
El futuro de la criptografía
Página anterior | Volver al principio del trabajo | Página siguiente |