Cifrado Asimétrico

Introducción

Anteriormente se había hablado de Criptografía y algoritmos de cifrado simétrico. En esta ocasión el tema son los principales algoritmos de cifrado asimétrico. En 1998 la Electronic Frontier Foundation (EFF) anunció que había roto un cifrado DES utilizando una máquina especializada "DES cracker". Poco después aparecieron otros algoritmos de clave privada como AES, triple DES e IDEA, sin embargo, la mayoría eran vulnerables y poco seguros. Ante el problema de mantener en secreto el intercambio de claves secretas, aparecieron los cifrados de clave pública (asimétricos), que están basados en funciones matemáticas y no en simples operaciones sobre los patrones de bits. 

Cifrado asimétrico

La criptografía asimétrica (también conocida como de clave pública) es un sistema que emplea una pareja de claves. Esta pareja de claves pertenecen a la misma persona. Una es de dominio público y cualquiera puede tenerla y la otra es privada.
El funcionamiento de este sistema es el siguiente: El remitente usa la clave pública del destinatario y sólo con la clave privada se podrá descifrar el mensaje. De esta forma se consigue que sólo el destinatario pueda acceder a la información. De la misma forma si el propietario usa su clave privada para cifrar un mensaje sólo se podrá descifrar con la clave pública. Usando la clave privada el propietario demuestra su identidad.

Sin embargo este sistema tiene varias desventajas:
  • Mayor tiempo de proceso en mismas condiciones respecto a clave simétrica.
  • Claves más grandes en en sistemas simétricos.
  • El mensaje cifrado es más grande que el original.
Por estas razones el principal uso del cifrado asimétrico es solventar los problemas a la hora de intercambiar las claves del cifrado simétrico.

Diffie - Hellman

En 1976 W. Diffie y M. Hellman publican el artículo New Directions in Cryptography donde establecen las bases de la criptografía pública. Introducen tres primitivas de clave pública:
1.- Esquemas de cifrado de clave pública.
2.- Esquemas de firma digital.
3.- Protocolos de intercambio de claves.

El protocolo de cifrado Diffie-Hellman es un sistema de intercambio de claves entre partes, que no han contactado previamente, a través de un canal inseguro y sin autenticación. Este protocolo se utiliza principalmente para intercambiar claves simétricas de forma segura para posteriormente pasar a utilizar un cifrado simétrico, menos costoso que el asimétrico. Se parte de la idea de que dos interlocutores pueden generar de forma conjunta una clave sin que esta sea comprometida.
  1. Se escoge un número primo p y un generador g que será coprimo de p. Estos 2 números son públicos.
  2. Escogemos un número a menor que p y calculamos A = g^a mod p. Enviamos A, p y g al otro interlocutor.
  3. El otro interlocutor escoge un número b menor que p y calcula B = g^b mod p. Nos envia B. 
Ahora, ambos podemos calcular K= g^(a-b) mod p. Para nosotros B^a mod p = K y para nuestro interlocutor A^b mod p =K. Usamos K como clave. 
Al ser p y g públicos cualquier atacante puede conocerlos. Esto no supone una vulnerabilidad. Aunque el atacante conociera estos dos número y capturase A y B, le resultaría computacionalmente imposible obtener a y/o b y consecuentemente K.

RSA

RSA (Rivest, Shamir y Adleman) es un algoritmo de cifrado asimétrico desarrollado en el año 1977.
Este algoritmo se basa en escoger 2 números primos grandes elegidos de forma aleatoria y mantenidos en secreto. 
La principal ventaja de este algoritmo desde el punto de vista de seguridad radica en la dificultad a la hora de factorizar números grandes. RSA es seguro hasta la fecha. 
El algoritmo funciona de la siguiente manera:
Tenemos un mensaje M. 
Empleando un protocolo reversible conocido como patrón de relleno convertimos el mensaje M en un número m menor que otro número dado n. 
Se genera el mensaje cifrado c:
c = m^e (mod n)
Se obtiene m descifrando el mensaje cifrado c:
m = c^d (mod n)

DSS

Diseñado para utilizar el algoritmo de firma SHA. DSS modifica el esquema de ElGamal para que mensajes de 160 bits puedan firmarse con 320 bits, pero realizando la computación módulo 512. DSS trabaja con un subgrupo de Z ∗ p de talla 2160. 
La seguridad se fundamenta en la creencia de que el problema del logaritmo discreto conserva sus propiedades en dicho subgrupo 
Funciona de la siguiente manera:
  1. Seleccionar q primo tal que 2^159 < q < 2^160.
  2. Sea 0 ≤ t ≤ 8, escoger p primo ( 2^(511+64t) < p < 2^(512+64t) ) tal que q divide (p − 1).
  3. Seleccionar α, generador del único grupo de orden q en Z∗p.
  4. Denotamos el resumen del mensaje con x′.
  5. Sea a un número aleatorio y β = α^a (mod p)
          k = (p, q, α, β, a); kpb = (p, q, α, β); kpr = (a)
  • Generar aleatoriamente h tal que 0 < h < q 
        sigk (x′ , h) = (γ, δ) 
        donde:
    • γ = (α h mod p) mod q 
    • δ = (x ′ − aγ)h −1 mod q
  • verk (γ, δ) = cierto si y sólo si α^h mod p ≡ α^((δ ^−1)(x′)) β^((δ^−1)(γ)) mod p (mod q)

Curva Elíptica

La teoría de curvas elípticas sobre cuerpos finitos encuentra aplicaciones en diversas disciplinas, como por ejemplo la teoría de números o la criptografía. 
En el campo de la criptografía, la aplicación de estas curvas la podemos encontrar en la descomposición de un número en factores, en los sistemas criptográficos y en los tests de primalidad, estos últimos desarrollados por Bosma, Goldwasser-Killian, Atkin y Lenstra entre otros.
Los criptosistemas de curva elíptica (ECC) fueron inventados por Neal Koblitz y Victor Miller in 1985.
Funcionan de la siguiente manera:
  • Generación de claves:
    1. Se establece un primo p y una curva elíptica y^2 = x^3 + ax + b sobre Zp. 
    2. Se establece un elemento G de la curva, de orden primo q de longitud similar a p. 
    3. Se elige aleatoriamente un entero d ∈ [0, q − 1] y se calcula P = dG. 
    4. La clave pública es P y los valores (a, b, q, G) son todos públicos. 
    5. La clave privada es d. 
Nótese que sobre el entero d no hay más restricción que el rango [0,q-1], al contrario que en RSA, que debía de ser primo. Este es principalmente el motivo por el cual la generación de claves es más rápida en curvas elípticas.
  • Intercambio de claves (ECDH): Elliptic curve Diffie–Hellman es un protocolo de intercambio de claves que permite a dos individuos que disponen de una clave pública y otra privada, establecer un secreto compartido. Este secreto puede ser directamente usado como clave o para derivar una clave. En particular, es una variante del protocolo Diffie–Hellman (DH) usando curvas elípticas. Los pasos son: 
    1. Tanto el emisor A como el receptor B acuerdan una curva elíptica E sobre un cuerpo finito Zp suficientemente segura y acuerdan un punto G ∈ E(Zp) tal que el subgrupo generado por G sea de un orden grande. 
    2. A elige un entero aleatorio a y envía PA = aG. 
    3. B elige un entero aleatorio b y envía PB = bG
    4. A calcula aPB = abG
    5. B calcula bPA = abG.
    6. Finalmente se tiene que la coordenada x de abG es el secreto compartido.
La seguridad de este secreto radica en la dificultad de resolver el problema del logaritmo discreto, es decir, conociendo G, aG y bG ∈ E(Zp), calcular abG. Para ello, p debe ser suficientemente grande.

Cifrado y descifrado

ECIES (Elliptic curve integration scheme) fue creado por Bellare y Rogaway y propuesto como estándar por Victor Shoup en el año 2001. ECIES combina un mecanismo de encapsulación de la clave (KEM) con un mecanismo de encapsulación de los datos (DEM). El sistema saca por separado una clave para cifrar y una clave MAC a partir de un secreto compartido. Primero, los datos se encriptan sim´etricamente, y después el texto cifrado se autentica con el MAC. Por último, el secreto común se encripta usando el par de claves pública/privada. La salida de la función de cifrado es la tupla {K, C, T}, donde K es el secreto compartido cifrado, C es el texto cifrado y T es la etiqueta de autenticaci´on. 
Por tanto, ECIES necesita dos funciones hash H1, H2 y una función de cifrado simétrico Ek (dependiente de la clave k).
Funciona de la siguiente manera:
  1. A elige un entero aleatorio k, 1 ≤ k ≤ N − 1, donde N es el orden del punto G que mencionamos anteriormente.
  2. A calcula R = kG y Z = kKpubB. 
  3. A escribe la salida de H1(R, Z) como dos cadenas k1, k2 concatenadas de longitudes espeíıficas. 
  4. A calcula C = Ek1 (m) y t = H2(C, k2). 
  5. A envía el texto cifrado (R, C, t) a B. 
Y para descifrar, B deberá hacer: 
  1. B calcula Z = KprivBR. 
  2. B calcula H1(R, Z) y escribe la salida como k1||k2. 
  3. B calcula H2(C, k2). Si no es igual a t, B para y rechaza el descifrado. Y si es igual a t, continúa. 
  4. B calcula m = Dk1 (C), donde Dk1 es la función de descifrado para Ek1.

Conclusión

Hoy en día, es imposible asegurar la invulnerabilidad de cualquier algoritmo, pero mediante la implementación de más de uno es posible mantener nuestros sistemas libres de ataques y por tanto lograr el mayor grado de seguridad.
Lo ideal, como ya se mencionó, es utilizar un algoritmo de clave pública para el intercambio de la clave privada de un algoritmo simétrico, de esta manera el sistema de cifrado será eficiente y el intercambio de la clave estará protegido.
Como sea, es importante recalcar que a cada momento se dan avances en el campo de la criptografía y el criptoanálisis y por esto mismo hay que estar actualizados en cuanto a los mecanismos de cifrado que se consideran seguros en la actualidad.

Referencias

- Stallings, W. (2004). Fundamentos de Seguridad en Redes: Aplicaciones y Estándares. España: PEARSON EDUCACIÓN, S.A.
- Luna, C. y Morrillo, P. (2009) Aplicaciones de las curvas elípticas a la criptografía. (Octubre 22, 2017). Obtenido de: http://divulgamat2.ehu.es/divulgamat15/index.php?option=com_content&task=view&id=9874&Itemid=67&showall=1
- Matheu, S. (2015). Trabajo de fin de grado. Octubre 22, 2017, de Universidad de Murcia. Sitio web: http://www.um.es/documents/118351/1884002/TFG_MATHEU+GARCIA.pdf/0f3f6eb9-5ef7-4483-b41f-525bf7ef1160

Comentarios

Entradas más populares de este blog

Proceso de depuración

Sockets