A diferencia de los algoritmos
de clave secreta, que existen desde los tiempos de los romanos, los métodos
asimétricos son muy recientes. En 1976, Whitfield Diffie y Martin Hellman
crearon un método con la ayuda de Ralph Merkle para iniciar una comunicación
segura sin haber acordado previamente una clave secreta.
Los principales algoritmos de cifrados asimétricos son:
RSA:
RSA fue desarrollado en 1977 por Ron Rivest, Adi Shamir y Len Adleman. El nombre RSA proviene de las iniciales de los apellidos de sus inventores El algoritmo fue patentado en 1983 por MIT, pero la patente expiró el 21 de septiembre de 2000 y desde entonces se utiliza libremente.
El algoritmo asimétrico por excelencia, este
algoritmo se basa en la pareja de claves, la pública y la privada de las que ya
hemos hablado con anterioridad. La seguridad de este algoritmo radica en el
problema de la factorización de números enteros muy grandes, y en el problema
RSA, porque descifrar por completo un texto cifrado con RSA no es posible
actualmente, aunque sí un descifrado parcial. Algunas características muy
importantes de RSA es la longitud de clave, actualmente como mínimo se debe
utilizar una longitud de 2048 bits, aunque es recomendable que sea de 4096 bits
o superior para tener una mayor seguridad.
ElGamal:
El esquema
criptográfico de ElGamal fue descrito por el criptógrafo egipcio Taher Elgamal
en 1985. Como hemos comentado anteriormente, basa su seguridad en la
complejidad sobre el problema matemático del logaritmo discreto. Para este caso
se trabaja sobre Zp, donde p es un número primo. Las etapas de este sistema son
las siguientes:
·
Generación de claves, Por un lado,
el individuo A toma un generador g del grupo cíclico (Zp) y un número aleatorio
a ∈ {0, ...p−1}. Además, calcula t ≡ g a mod p, lo que
nos deja una clave pública kpub = (p, g, t) y una clave privada kpriv = a.
·
Cifrado del mensaje: Supongamos
que un individuo B quiere mandar un mensaje M a un individuo A. Para ello,
consulta la clave pública de A y elige al azar un número b ∈ {2, ..., p − 2} y calcula
lo que hace que obtenga el mensaje cifrado c = (c1, c2)
el cual envía al individuo A.
·
Descifrado del mensaje: Cuando
el individuo A recibe el mensaje cifrado c, comienza calculando el inverso de c
a 1 modulo p utilizando su clave privada. Llamamos a ese valor u = c a 1 mod p.
Así obtiene la decodificación del mensaje.
ECC:
ECC son las
siglas de criptografía de curva elíptica. Se trata de un método de criptografía
asimétrica o clave pública. Tiene diferencias respecto a RSA. La diferencia más
importante es el tamaño de las claves. Ofrece la misma seguridad que RSA, pero
las claves son mucho más pequeñas. Una clave ECC de 256 bits equivale a una
clave RSA de 3072, por lo que hay una diferencia considerable.
Pero también
ofrece otras mejoras ECC. Por ejemplo, si lo comparamos con RSA es mucho más
ligero, rápido y seguro. Esto hace que se utilice cada vez más en certificados
SSL/TLS. Además, ECC es compatible con la mayoría de los sistemas operativos y
navegadores actuales, por lo que facilita mucho su uso. Es compatible en
sistemas como Windows (desde la versión Vista), macOS, Android o iOS, así como
en los principales navegadores como son Google Chrome, Mozilla Firefox, Opera o
Edge.
Si hablamos
estrictamente de seguridad, hay numerosos ataques que se han implementado
contra RSA. ECC en este sentido aporta mayor seguridad y beneficios como los
siguientes:
- Las claves son más
pequeñas, por lo que tendrán un mejor rendimiento con menor sobrecarga.
- El ECC escala
mejor, mientras que el RSA se vuelve más lento y pesado.
- ECC es mucho menos vulnerable
a Quantum Computing.
El problema más
importante que salva ECC es el tamaño y peso de las claves. Como hemos
mencionado, son mucho más pequeñas. Puedes ver este cuadro comparativo:
|
Tamaño de
clave ECC |
Tamaño de
clave RSA |
|
160 bits |
1024 bits |
|
224 bits |
2048 bits |
|
256 bits |
3072 bits |
|
384 bits |
7680 bits |
|
521 bits |
15360 bits |
En definitiva,
como ves hay diferencias importantes entre ECC y RSA. La primera es más segura,
menos vulnerable a ciertos ataques y además es una clave más pequeña y menos pesada.
Ha ido dejando poco a poco a un lado a RSA y el hecho de tener una gran
compatibilidad ayuda bastante
DSA:
Este algoritmo
es también puramente asimétrico, una desventaja de DSA es que quiere mucho más
tiempo de cómputo que RSA a igualdad de hardware. DSA se utiliza ampliamente
como un algoritmo de firma digital, es actualmente un estándar, pero DSA no se
utiliza para cifrar datos, solamente como firma digital. Este algoritmo se
utiliza ampliamente en las conexiones SSH para comprobar la firma digital de
los clientes, además, existe una variante de DSA basada en curvas elípticas
(ECDSA), y está disponible en todas las librerías criptográficas actuales como
OpenSSL, GnuTLS o LibreSSL. Otra característica de DSA es la longitud de clave,
la mínima longitud de clave es de 512 bits, aunque lo más habitual es usar 1024
bits.
El algoritmo
DSA es el utilizado de forma predeterminada por OpenSSH, el popular software
del servidor/cliente SSH que usamos ampliamente en cualquier servidor NAS,
router o switch compatible con este protocolo, además, tenemos también una
compatibilidad perfecta con los diferentes sistemas operativos,
independientemente del software utilizado. DSA suele ser más utilizado en SSH
que el popular RSA.
RSA-OAEP:
El
algoritmo de encriptación asimétrica RSA fue descrito en el año 1977 por Ron
Rivest, Adi Shamir y Leonard Adleman. A continuación, se detallan los tres
algoritmos que lo componen.
·
Generación
de claves y parámetros iniciales:
·
Se
escogen dos primos distintos p y q grandes.
·
Se
calcula N = pq llamado módulo RSA.
·
Se
calcula φ(N) = (p − 1) (q − 1).
·
Se
escoge un entero positivo e ∈
(1, φ(N)) tal que mcd (e, φ(N)) = 1.
·
Se
calcula d tal que d · e ≡ 1 (mód φ(N)).
·
Clave
Pública = (N, e).
·
Clave
Privada = (p, q, d). 2.
Encriptación de
mensajes:
·
Recibe
como entrada la clave pública (N, e) y un mensaje M, 0 ≤ M < N.
·
Se
calcula C = Me mod N.
·
La
salida es el texto cifrado C. 3.
Desencriptación
de mensajes:
·
Se
recibe como entrada el módulo público N, la clave privada d, y el texto cifrado
C, 0 ≤ C < N.
·
Se
calcula M = C d mod N.

No hay comentarios:
Publicar un comentario