11
- Consultar 3 Algoritmos para encriptación de claves 1. Diffie-Hellman El protocolo Diffie-Hellman 1 (debido a Whitfield Diffie y Martin Hellman) permite el intercambio secreto de claves entre dos partes que no han tenido contacto previo, utilizando un canal inseguro, y de manera anónima (no autenticada). Se emplea generalmente como medio para acordar claves simétricas que serán empleadas para el cifrado de una sesión. Siendo no autenticado, sin embargo provee las bases para varios protocolos autenticados. Su seguridad radica en la extrema dificultad (conjeturada, no demostrada) de calcular logaritmos discretos en un campo finito. Versión básica Diffie-Hellman Para dos partes A y B que intentan establecer una clave secreta y un adversario E, la versión básica es como sigue: Se establecen un primo p y un generador ( 2 ). Estos son públicos, conocidos no sólo por las partes A y B sino también por el adversario E. A escoge al azar, calcula X = g x mod p, y envía X a B B escoge al azar, calcula Y = g y mod p, y envía Y a A Nótese que X y = (g x ) y = g xy = (g y ) x = Y x , con todas las operaciones en el grupo . Llamemos K a esta cantidad común: el hecho destacable es que ambas partes pueden calcularla, y por lo tanto obtener una clave compartida.

Trabajo De Compu Algoritmos

  • Upload
    dennis

  • View
    1.254

  • Download
    4

Embed Size (px)

DESCRIPTION

logoritmos para encriptaciones

Citation preview

Page 1: Trabajo De Compu Algoritmos

- Consultar 3 Algoritmos para encriptación de claves

1. Diffie-Hellman

El protocolo Diffie-Hellman1 (debido a Whitfield Diffie y Martin Hellman) permite el intercambio secreto de claves entre dos partes que no han tenido contacto previo, utilizando un canal inseguro, y de manera anónima (no autenticada).

Se emplea generalmente como medio para acordar claves simétricas que serán empleadas para el cifrado de una sesión.

Siendo no autenticado, sin embargo provee las bases para varios protocolos autenticados.

Su seguridad radica en la extrema dificultad (conjeturada, no demostrada) de calcular logaritmos discretos en un campo finito.

Versión básica

Diffie-Hellman

Para dos partes A y B que intentan establecer una clave secreta y un adversario E, la versión básica es como sigue:

• Se establecen un primo p y un generador (2 ). Estos son públicos, conocidos no sólo por las partes A y B sino también por el adversario E.

• A escoge al azar, calcula X = gxmod p, y envía X a B

• B escoge al azar, calcula Y = gymod p, y envía Y a A

Nótese que Xy = (gx)y = gxy = (gy)x = Yx, con todas las operaciones en el grupo . Llamemos K a esta cantidad común: el hecho destacable es que ambas partes pueden calcularla, y por lo tanto obtener una clave compartida.

Page 2: Trabajo De Compu Algoritmos

Un adversario E que poseyera p, g, X e Y, podría calcular el secreto compartido si tuviera también uno de los valores privados (x o y) o lograse invertir la función. Pero

calcular x dado X es el problema del logaritmo discreto en , un problema que se cree intratable computacionalmente. El mismo protocolo, y otros basados en este, pueden llevarse a cabo en cualquier grupo en que a la vez la exponenciación sea simple y el logaritmo discreto difícil, como el grupo multiplicativo análogo de los campos de Galois o el grupo de puntos definidos por una curva elíptica sobre un campo finito.

Sin embargo, el protocolo es sensible a ataques activos del tipo "hombre en el medio" (mitm, man-in-the-middle). Si la comunicación es interceptada por un tercero, éste se puede hacer pasar por el emisor cara al destinatario y viceversa, ya que no se dispone de ningún mecanismo para validar la identidad de los participantes en la comunicación. Así, el "hombre en el medio" podría acordar una clave con cada participante y retransmitir los datos entre ellos, escuchando la conversación en ambos sentidos.

Ejemplo del protocolo

Page 3: Trabajo De Compu Algoritmos

A

Sec

Calc

p, g

a

ga mod p

(gb mod p)a mod p=

B

Calc

Sec

p, g

b

gb mod p

(ga mod p)b mod p

1. A y B acuerdan usar el número primo p=23 y la base g=5.

2. A elige un número secreto a=6, luego envía a B (ga mod p)

o 56 mod 23 = 8.3. B elige un número secreto

b=15, luego envía a A (gb mod p)

o 515 mod 23 = 19.4. A calcula (gb mod p)a mod p

o 196 mod 23 = 2.5. B calcula (ga mod p)b mod p

o 815 mod 23 = 2.

Valores mucho más grandes de a,b y p se necesitarían para hacer este ejemplo seguro. Dado que es muy sencillo probar todos los valores posibles de gab mod 23 (habrá, como máximo, 22 valores, inclusive si a y b son números grandes). Si p fuera un primo de

Page 4: Trabajo De Compu Algoritmos

más de 300 dígitos, y a y b fueran por lo menos de 100 dígitos, entonces hasta el mejor algoritmo para encontrar a dado g, p, y ga mod p tomaría más tiempo que la vida del universo para resolverse. g no necesita ser grande, y en la práctica es usualmente 2 o 5.

Versiones más complejas

• El protocolo ElGamal de negociación de claves3 provee negociación en un solo paso y autenticación unilateral (del receptor hacia el emisor) si la clave pública del receptor es conocida de antemano por el emisor.

• El protocolo MTI/A0,4 empleando dos mensajes y sin requerir firmas, proporciona claves de sesión variables en el tiempo con mutua autenticación implícita de claves contra ataques pasivos.

• El protocolo STS5 es una variante de tres pasos de la versión básica que permite el establecimiento de una clave secreta compartida entre dos partes con mutua autenticación de entidades y mutua autenticación explícita de las claves. El protocolo también facilita el anonimato: las identidades de A y B pueden protegerse contra el adversario E. El método emplea firmas digitales.

RSA

El sistema criptográfico con clave pública RSA es un algoritmo asimétrico cifrador de bloques, que utiliza una clave pública, la cual se distribuye (en forma autenticada preferentemente), y otra privada, la cual es guardada en secreto por su propietario.

Una clave es un número de gran tamaño, que una persona puede conceptualizar como un mensaje digital, como un archivo binario o como una cadena de bits o bytes.

Cuando se quiere enviar un mensaje, el emisor busca la clave pública de cifrado del receptor, cifra su mensaje con esa clave, y una vez que el mensaje cifrado llega al receptor, éste se ocupa de descifrarlo usando su clave oculta.

Los mensajes enviados usando el algoritmo RSA se representan mediante números y el funcionamiento se basa en el producto de dos números primos grandes (mayores que 10100) elegidos al azar para conformar la clave de descifrado.

Emplea expresiones exponenciales en aritmética modular.

La seguridad de este algoritmo radica en que no hay maneras rápidas conocidas de factorizar un número grande en sus factores primos utilizando computadoras tradicionales.

La computación cuántica podría proveer una solución a este problema de factorización.

Cifrado de mensajes

Ejemplo rápido: Bob quiere enviar a Alicia un mensaje secreto que solo ella pueda leer.

Page 5: Trabajo De Compu Algoritmos

Alicia envía a Bob una caja con una cerradura abierta, de la que solo Alicia tiene la llave. Bob recibe la caja, escribe el mensaje, lo pone en la caja y la cierra con su cerradura (ahora Bob no puede leer el mensaje). Bob envía la caja a Alicia y ella la abre con su llave. En este ejemplo, la caja con la cerradura es la clave pública de Alicia, y la llave de la cerradura es su clave privada.

Supongamos que Bob desea enviar un mensaje M a Alicia. Él cambia M en un número m<n, usando un protocolo reversible conocido como padding scheme.

Bob ahora tiene m. Alicia envía su clave pública (n,e) a Bob. Él entonces calcula el texto cifrado c correspondiente a m: Esto puede ser rápido usando el método de exponentiation by squaring (llamado también exponenciación binaria). Bob transmite c a Alicia.

1. Cada usuario elige n = p·q

2. Los valores p y q NO se hacen públicos

3. Cada usuario calcula ϕ(n) = (p-1)(q-1)

4. Cada usuario elige una clave pública e de forma que 1 < e < ϕ(n) y que cumpla con la condición: mcd [e, ϕ(n)] = 1

5. Cada usuario calcula la clave privada d = inv [e,ϕ(n)]

6. Se hace público el grupo n y la clave e

7. Se guarda en secreto la clave d

Cifra: C = NeR mod nR

Firma: C = h(M)dE mod nE

Ejemplo

Aquí tenemos un ejemplo de cifrado/descifrado con RSA. Los parámetros usados aquí son pequeños y orientativos con respecto a los que maneja el algoritmo, pero podemos usar también OpenSSL para generar y examinar una par de claves reales.

p=611º nº primo Privado

q=53 2º nº primo

Page 6: Trabajo De Compu Algoritmos

Privado

n=pq=3233 producto p*q

e=17exponente Público

d=2753exponente Privado

La clave pública (e, n). La clave privada es d. La función de cifrado es:

encrypt(m) = me(mod n) = m17(mod 3233)

Donde m es el texto sin cifrar. La función de descifrado es:

decrypt(c) = cd(mod n) = c2753(mod 3233)

Donde c es el texto cifrado. Para cifrar el valor del texto sin cifrar 123, nosotros calculamos:

encrypt(123) = 12317(mod 3233) = 855

Para descifrar el valor del texto cifrado, nosotros calculamos:

decrypt(855) = 8552753(mod 3233) = 123

Ambos de estos cálculos pueden ser eficientemente usados por el algoritmo de multiplicación cuadrática para exponenciación modular.

2. Padding schemes (Esquema de relleno

RSA debe ser combinado con alguna versión del padding scheme, ya que si no el valor de M puede llevar a textos cifrados inseguros. RSA usado sin padding scheme podría sufrir muchos problemas.

• El valor m=0 o m=1 siempre produce textos cifrados iguales para 0 o 1 respectivamente, debido a propiedades de los exponentes.

• Cuando ciframos con exponentes pequeños (e=3) y valores pequeños de m, el resultado de m podría ser estrictamente menor que el módulo de n. En este caso, el texto cifrado podría ser fácilmente descifrado, tomando la raíz e-ésima del texto cifrado sin tener en cuenta el módulo.

Page 7: Trabajo De Compu Algoritmos

• Dado que el cifrado RSA es un algoritmo determinista (no tiene componentes aleatorios) un atacante puede lanzar con éxito un ataque de texto elegido contra el criptosistema, construyendo un diccionario de textos probables con la llave pública, y almacenando el resultado cifrado. Observando los textos cifrados en un canal de comunicación, el atacante puede usar este diccionario para descifrar el contenido del mensaje.

En la práctica, el primero de los dos problemas podría presentarse cuando enviamos pequeños mensajes ASCII donde m es la concatenación de uno o más carácter/es ASCII codificado/s. Un mensaje consiste en un solo carácter ASCII NUL (cuyo valor es 0) se codificaría como m=0, produciendo un texto cifrado de 0 sin importar qué valores de e y N son usados. Probablemente, un solo ASCII SOH (cuyo valor es 1) produciría siempre un texto cifrado de 1. Para sistemas convencionales al usar valores pequeños de e, como 3, un solo carácter ASCII mensaje codificado usando este esquema sería inseguro, ya que el máximo valor de m sería 255, y 255³ es menor que cualquier módulo razonable. De esta manera los textos sin cifrar podrían ser recuperados simplemente tomando la raíz cúbica del texto cifrado. Para evitar estos problemas, la implementación práctica del RSA se ayuda de algunas estructuras, uso del randomized padding dentro del valor de m antes del cifrado. Esta técnica asegura que m no caerá en el rango de textos sin cifrar inseguros, y que dado un mensaje, una vez que este rellenado, cifrará uno de los números grandes de los posibles textos cifrados. La última característica es la incrementación del diccionario haciendo este intratable a la hora de realizar un ataque.

Estándares como PKCS han sido cuidadosamente diseñados para la seguridad de los de mensajes importantes con el cifrado RSA. Porque el pad scheme rellena el texto sin cifrar m con algunos números adicionales (bits); el tamaño del mensaje un-padded M debe ser algo más pequeño. RSA-padding scheme debe ser cuidadosamente diseñado así como para prevenir ataques sofisticados los cuales podrían ser facilitados por la predictibilidad de la estructura del mensaje. Versiones más recientes del PKCS Standard usando construcciones ad-hoc, las cuales fueron encontradas vulnerabilidades más tarde en la practica adaptativa de elección de ataques de textos cifrados. Las construcciones modernas usan técnicas seguras como Optimal Asymetric Encryption Padding (OAEP) para proteger los mensajes mientras previenen estos ataques. El PKCS estándar también incorpora procesado de esquemas diseñados para proveer adicionalmente la seguridad de autentificaciones RSA. Por ejemplo: the Probabilistic Signature Scheme for RSA (RSA-PSS).

Autenticación de mensajes

RSA puede también ser usado para autenticar un mensaje. Supongamos que Alicia desea enviar un mensaje autentificado a Bob. Ella produce un valor hash del mensaje, aumenta la potencia de d≡ mod n (como ella hace cuando descifra mensajes), y marca con una “firma” el mensaje. Cuando Bob recibe el mensaje autentificado, él aumenta la autentificación para aumentar e≡ mod n (como hace él cuando cifra menajes), y compara el resultado hash con el actual valor hash del mensaje. Si es el resultado, el conoce que el autor del mensaje estaba en posesión de la clave secreta de Alicia, y que el mensaje no ha sido tratado de forzar entonces (no ha sufrido ataques).

Page 8: Trabajo De Compu Algoritmos

Observar que la seguridad de padding-scheme como RSA-PSS son esenciales para la seguridad del mensaje cifrado, y que la misma clave nunca debería ser usada para ambos cifrados ni los propósitos de autentificación.

Seguridad

La seguridad del criptosistema RSA está basado en dos problemas matemáticos: el problema de factorizar números grandes y el problema RSA. El descifrado completo de un texto cifrado con RSA es computacionalmente intratable, no se ha encontrado un algoritmo eficiente todavía para ambos problemas. Proveyendo la seguridad contra el descifrado parcial podría requerir la adición de una seguridad padding scheme.

El problema del RSA se define como la tarea de tomar raíces eth módulo a componer n: recuperando un valor m tal que me=c ≡mod n, donde (e, n) es una clave pública RSA y c es el texto cifrado con RSA. Actualmente la aproximación para solventar el problema del RSA es el factor del módulo n. Con la capacidad para recuperar factores primos, un atacante puede computar el exponente secreto d desde una clave pública (e, n), entonces descifra c usando el procedimiento standard. Para conseguir esto, un atacante factoriza n en p y q, y computa (p-1)(q-1) con lo que le permite determinar d y e. No se ha encontrado ningún método en tiempo polinómico para la factorización de enteros largos. Ver factorización de enteros para la discusión de este problema.

La factorización de números grandes por lo general proponen métodos teniendo 663 bits de longitud usando métodos distribuidos avanzados. Las claves RSA son normalmente entre 1024-2048 bits de longitud. Algunos expertos creen que las claves de 1024 bits podrían comenzar a ser débiles en poco tiempo; con claves de 4096 bits podrían ser rotas en un futuro. Por lo tanto, si n es suficientemente grande el algoritmo RSA es seguro. Si n tiene 256 bits o menos, puede ser factorizado en pocas horas con un computador personal, usando software libre. Si n tiene 512 bits o menos, puede ser factorizado por varios cientos de computadoras como en 1999. Un dispositivo hardware teórico llamado TWIRL descrito por Shamir y Tromer en el 2003 cuestionó a la seguridad de claves de 1024 bits. Es actualmente recomendado que n sea como mínimo de 2048 bits de longitud.

En 1993, Peter Shor publicó su algoritmo, mostrando que una computadora cuántica podría en principio mejorar la factorización en tiempo polinomial, mostrando RSA como un algoritmo obsoleto. Sin embargo, las computadoras cuánticas no se esperan que acaben su desarrollo hasta dentro de muchos años.

Generación de claves

Buscando números primos grandes p y q por el test de aleatoriedad y realizando tests probabilísticos de primalidad los cuales eliminan virtualmente todos los no-primos (eficientemente).

Los números p y q no deberían ser suficientemente cercanos para que la factorización de Fermat para n sea exitosa. Además, si cualquier p-1 o q-1 tiene sólo factores primos pequeños, n puede ser factorizado rápidamente, con lo que estos valores de p o q deben ser descartados.

Page 9: Trabajo De Compu Algoritmos

Uno no debería emplear un método de búsqueda de primos con el cual dar alguna información cualquiera sobre los primos al atacante. En particular, un buen generador aleatorio de números primos para el comienzo del valor empleado. Observar que el requerimiento esta en ambos ‘aleatorios’ e ‘impredecibles’. Esto no son los mismos criterios; un número podría haber sido elegido por un proceso aleatorio, pero si éste es predecible de cualquier forma (o parcialmente predecible), el método usado resultara una seguridad baja. Por ejemplo: la tabla de números aleatorios de Rand Corp en 1950 podría muy bien ser verdaderamente aleatoria, pero ha sido publicada y a ésta puede acceder el atacante. Si el atacante puede conjeturar la mitad de los dígitos de p o q, ellos podrían rápidamente computar la otra mitad. (Ver Coppersmith en 1997).

Es importante que la clave secreta d sea muy grande. Wiener mostró en 1990 que si p esta entre q y 2q (es típico) y d<n1/4/3, entonces d puede ser computado eficientemente de n y e. Aunque valores de e son bajos como 3 han sido usados en el pasado, los exponentes pequeños en RSA esta actualmente en desuso, por razones incluyendo el unpadded del texto sin cifrar, vulnerabilidad listada sobre 65537 es normalmente usado para el valor de e, considerado demasiado grande para evitar ataques de exponenciación pequeños, de hecho tiene un peso de hamming suficiente para facilitar una exponenciación eficiente

Velocidad

RSA es mucho más lento que DES y que otros criptosistemas simétricos. En la practica, Bob normalmente cifra mensajes con algoritmos simétricos, cifra la clave simétrica con RSA, y transmite a ambos la clave simétrica RSA-cifrada y el mensaje simétricamente-cifrado a Alicia.

Esto plantea además problemas adicionales de seguridad, por ejemplo, es de gran importancia usar un generador aleatorio fuerte para claves simétricas, porque de otra forma Eve (un atacante que quiera averiguar el contenido del mensaje) podría puentear la clave simétrica de RSA mediante la adivinación de la clave simétrica.

Distribución de claves

Como todos los cifrados, es importante como se distribuyan las claves públicas del RSA. La distribución de la clave debe ser segura contra un atacante que se disponga a espiar el canal para hacer un ataque de replay. Supongamos Eve (atacante) tiene alguna forma de dar a Bob arbitrariamente claves y hacerle creer que provienen de Alicia. Supongamos que Eve puede interceptar transmisiones entre Alicia y Bob. Eve envía a Bob su propia clave pública, como Bob cree que es de Alicia. Eve puede entonces interceptar cualquier texto cifrado enviado por Bob, descifrarlo con su propia clave secreta, guardar una copia del mensaje, cifrar el mensaje con la clave pública de Alicia, y enviar el nuevo texto cifrado a Alicia. En principio, ni Alicia ni Bob han detectado la presencia de Eve. Contra la defensa de ataques algunos están basados en certificados digitales u otros componentes de infraestructuras de la clave pública.

3. DSA

DSA (Digital Signature Algorithm, en español Algoritmo de Firma digital) es un estándar del Gobierno Federal de los Estados Unidos de América o FIPS para firmas

Page 10: Trabajo De Compu Algoritmos

digitales. Fue un Algoritmo propuesto por el Instituto Nacional de Normas y Tecnología de los Estados Unidos para su uso en su Estándar de Firma Digital(DSS), especificado en el FIPS 186. DSA se hizo público el 30 de agosto de 1991, este algoritmo como su nombre lo indica, sirve para firmar y no para cifrar información. Una desventaja de este algoritmo es que requiere mucho más tiempo de cómputo que RSA.

Generación de llaves

• Elegir un número primo p de L bits, donde 512 ≤ L ≤ 1024 y L es divisible por 64.

• Elegir un número primo q de 160 bits, tal que p−1 = qz, donde z es algún número natural.

• Elegir h, donde 1 < h < p − 1 tal que g = hz(mod p) > 1.• Elegir x de forma aleatoria, donde 1 < x < q-1.• Calcular y = gx(mod p).

Los datos públicos son p, q, g e y. x es la llave privada.

FirmaElegir un número aleatorio s, donde 1 < s < q.

• Calcular s1 = (gs mod p)mod q.• Calcular s2 = s-1(H(m)+s1*x)mod q, donde H(m) es la función hash SHA-1

aplicada al mensaje m.• La firma es el par (s1, s2).

Si s1 o s2 es cero, se vuelve a repetir el procedimiento.

Verificación [Calcular w = (s2)-1(mod q).

• Calcular u1 = H(m)*w(mod q).• Calcular u2 = s1*w(mod q).• Calcular v = [gu1*yu2mod p]mod q.• La firma es válida si v = s1.

Demostración del algoritmo

El esquema de la firma está correcto en el sentido que el verificador aceptará siempre firmas genuinas. Esto puede ser demostrada como sigue:

De g = hz mod p sigue gq ≡ hqz ≡ hp-1 ≡ 1 (mod p) por Pequeño teorema de Fermat. Ya que g>1 y q es primo sigue que g tiene orden q.

El firmante computa

Entonces

Page 11: Trabajo De Compu Algoritmos

Ya que g tiene orden q tenemos que

Finalmente, la correctitud de DSA surge de