Cifrado Asimetrico



Introducción

La protección de la información siempre ha sido una importante preocupación, desde esconder una carta personal hasta proteger información confidencial de algo. Existen muchas maneras para hacerlo, algunas de estas lo que intentan es ocultar la información, como guardar papeles en una caja fuerte, para que así personas externas no tengan acceso, sin embargo hay otros casos en los que cualquiera puede acceder a la información, pero solo algunos verdaderamente la entienden, a esta técnica se le llama criptografía. El presente trabajo expone algunos métodos de cifrado asimétrico usados en la informática.

  Cifrado Asimétrico

El cifrado asimétrico es un tipo de criptografía donde se emplea dos llaves diferentes en cada uno de los extremos de la comunicación. Cada usuario tendrá una clave pública y otra privada. La clave privada tendrá que ser protegida y guardada por el propio usuario, será secreta y no la deberá conocer nadie. La clave pública será accesible a todos los usuarios del sistema de comunicación. Estos algoritmos funcionan o están basados en funciones matemáticas fáciles de resolver pero muy complicadas realizarlo en sentido inverso, a menos que se conozca la llave. Las claves públicas y privadas se generan simultáneamente y están ligadas la una a la otra. Esta relación debe ser muy compleja para que resulte muy difícil que obtengamos una a partir de la otra.














Entonces si ciframos con una llave privada, el mensaje solo podrá descifrar con la llave pública que se le asocie y se puede hacer de forma viceversa.
La ventaja del cifrado asimétrico sobre el simétrico radica en que la clave pública puede ser conocida por todo el mundo, no así la privada, sin embargo, en el cifrado simétrico deben conocer la misma clave los dos usuarios. Este tipo de sistemas criptográficos usa algoritmos bastante complejos que generan a partir de la frase de paso (la contraseña) la clave privada y pública que pueden tener perfectamente un tamaño de 2048bits.
Un ejemplo de este sistema es el de poder firmar documentos, certificando que el emisor es quien dice ser, firmando con la clave privada y verificando la identidad con la pública.
Algunos de los algoritmos de este tipo de cifrado son los siguientes:
  • Diffie-Hellman
  • RSA
  • DSA
  • ElGamal
  • Merkle-Hellman
  • Knapsack




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, y otra privada, la cual es guardada en secreto por su propietario.
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.
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.
El algoritmo RSA es un algoritmo de clave pública desarrollado en 1977 en el MIT por Ronald Rivest, Adi Shamir y Leonard Adelman.
Fue registrado el 20 de Septiembre de 1983. El 20 de Septiembre del 2000, tras 17 años, expiró la patente RSA, pasando a ser un algoritmo de dominio público.
Este popular sistema se basa en el problema matemático de la factorización de números grandes.
El algoritmo RSA funciona de la siguiente manera:
Inicialmente es necesario generar aleatoriamente dos números primos grandes, a los que llamaremos p y q.
A continuación calcularemos n como producto de p y q: n = p * q
Se calcula fi: fi(n)=(p-1)(q-1)
Se calcula un número natural e de manera que MCD(e, fi(n))=1 , es decir e debe ser primo relativo de fi(n).
Es lo mismo que buscar un número impar por el que dividir fi(n) que de cero como resto.
Mediante el algoritmo extendido de Euclides se calcula d: e.d mod fi(n)=1 Puede calcularse d=((Y*fi(n))+1)/e para Y=1,2,3,… hasta encontrar un d entero.
El par de números (e,n) son la clave pública.
El par de números (d,n) son la clave privada.
Cifrado: La función de cifrado es C = M^e mod n
Descifrado: La función de descifrado es M = C^d mod n

Diffie-Hellman
El algoritmo de Diffie-Hellman (en honor a sus creadores, Whitfield Diffie y Martin Hellman) permite acordar una clave secreta entre dos máquinas, a través de un canal inseguro y enviando únicamente dos mensajes. La clave secreta resultante no puede ser descubierta por un atacante, aunque éste obtenga los dos mensajes enviados por el protocolo. La principal aplicación de este protocolo es acordar una clave simétrica con la que posteriormente cifrar las comunicaciones entre dos máquinas.
El protocolo de Diffie-Hellman fue publicado en 1976. Actualmente se conoce que es vulnerable a ataques de hombre en medio (MitM): un atacante podría situarse entre ambas máquinas y acordar una clave simétrica con cada una de las partes, haciéndose pasar por el host A de cara al host B y viceversa. Una vez establecidas las 2 claves simétricas, el atacante haría de puente entre los 2 hosts, descifrando toda la comunicación y volviéndola a cifrar para enviársela al otro host.
Para corregir la vulnerabilidad del protocolo, éste debe ser utilizado conjuntamente con algún sistema que autentique los mensajes. Esto ocurre, por ejemplo, durante el establecimiento de la asociación HIP, donde los paquetes R1 e I2, además de contener los mensajes de Diffie-Hellman, están firmados digitalmente.

DSS-DSA
En 1991 el NIST propuso un estándar para firma digital (Digital Signature Standard, DSS), siendo su algoritmo el DSA, en 1994 este algoritmo fue anunciado formalmente como estándar y debe ser utilizado únicamente para generar firmas digitales. El algoritmo se apoya en el uso de funciones hash y está documentado en el FIPS 186. 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 CLAVES
  • 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 clave privada.

FIRMA
  • Elegir un número aleatorio k, donde 1 < k < q.
  • Calcular r = (gk mod p)mod q.
  • Calcular s = k-1(H(m)+r*x) mod q, donde H(m) es la función hash SHA-1 aplicada al mensaje m.
  • La firma es el par (r, s).
  • Si r ó s es cero, se vuelve a repetir el procedimiento.

VERIFICACIÓN
  • Calcular w = (s)-1(mod q).
  • Calcular u1 = H(m)*w(mod q).
  • Calcular u2 = r*w(mod q).
  • Calcular v = [gu1*yu2mod p] mod q.
  • La firma es válida si v = r.



Curva Elíptica

Este tipo de criptografía como una alternativa a los cripto-sistemas de clave pública clásicos como el RSA y el ElGamal, tanto por la disminución del tamaño de las claves que se requieren como por el abanico de grupos que ofrecen en el mismo cuerpo base.
Hoy en día podemos encontrar sistemas criptográficos de curvas elípticas en protocolos reconocidos como TLS, PGP y SSH. También el bitcoin y otras cripto-divisas se basan en esta criptografía de curva elíptica.
Antes de que la criptografía de curva elíptica (ECC) se hiciera popular, casi todos los algoritmos de criptografía de clave pública se basaban en RSA, DSA y DH. Estos son sistemas criptográficos alternativos basados en aritmética modular.
Si la característica del cuerpo es distinta de 22 y de 33, usando transformaciones lineales de las variables, la ecuación de la curva se puede expresar como
y2=x3+ax+b ,a,b ∈K,

Existen muchos tipos de grupos. Los que nos interesan se denominan “grupos cíclicos”. Un grupo cíclico se caracteriza porque todos sus elementos se pueden obtener mediante un sólo elemento, llamado generador. Si la operación es la multiplicación, se denomina grupo cíclico multiplicativo. Como ejemplo, podemos tomar el grupo formado por las cuatro raíces cuartas de 1: +1,-1,+i,-i (i es la raíz cuadrada de uno). El número i puede servir de multiplicador.
En efecto:
i*(+1) = i
i*(+i) = -1
i*(-1) = -i
i*(-i) = 1
El concepto de grupo multiplicativo nos permite complicar la obtención de logaritmos. Supongamos un grupo G con n elementos, y sea b un generador. Eso significa que podemos obtener todos los elementos del grupo como {1, b, b^2, b^3 … b^(n-1)}. Es decir, habrá un número entero k de forma que podamos escribir g=b^k para cualquier número g del grupo. En realidad, existen muchos números enteros k que cumplan esta propiedad. Por ejemplo, el número k’=k+n también nos vale, puesto que b^(k+n)=(b^k)*(b^n),y b^n=1. Esto nos dice que cualesquiera dos enteros k,k´ capaces de representar el elemento g son congruentes módulo n (o dicho de otra forma: nos dan el mismo resto al dividirlos por n).

Bibliografía

Luz, S. D. (16 de Noviembre de 2010). Criptografía : Algoritmos de cifrado de clave asimétrica. Obtenido de https://www.redeszone.net/2010/11/16/criptografia-algoritmos-de-cifrado-de-clave-asimetrica


GenbetaDEV(24/08/2017) Tipos de criptografía, obtenido de: https://www.genbetadev.com/seguridad-informatica/tipos-de-criptografia-simetrica-asimetrica-e-hibrida

Gersson Ribera(21/10/2017) Cartografía simétrica y asimétrica, obtenido de:
https://infosegur.wordpress.com/unidad-4/criptografia-simetrica-y-asimetrica/



Universidad Politécnica de Madrid(21/10/2017) Criptografía con curvas elípticas, obtenido de:
http://www.criptored.upm.es/crypt4you/temas/ECC/leccion1/leccion1.htm

Comentarios

Entradas populares de este blog

Modelo OSI y TCP/IP

RMI