El RSA, llamado así por las siglas de sus creadores (Rivest, Shamir y Adelman), es el algoritmo de clave pública más popular. El algoritmo se puede usar para encriptar comunicaciones, firmas digitales e intercambio de claves.
La clave es de tamaño variable, generalmente se usan claves entre 512 y 2048 bits. Las claves más grandes aumentan la seguridad del algoritmo pero disminuyen su eficiencia y generan más texto cifrado. Los bloques de texto en claro pueden ser de cualquier tamaño, siempre que sea menor que la longitud de la clave. Los bloques de texto cifrado generados son del tamaño de la clave.
La clave pública del algoritmo tiene la forma (e,
n), donde e es el exponente y n el
módulo. La longitud de la clave es igual al número de bits de
n. El módulo se obtiene multiplicando dos
números primos grandes, p y q. Los números se
seleccionan aleatoriamente y se guardan en secreto. La
clave privada tiene la forma (d, n), donde
d es el producto inverso de
e
El cálculo de d a partir de p y q es sencillo, pero es computacionalmente imposible calcular d sin conocer p y q para valores grandes de n, ya que obtener sus valores es equivalente a factorizar n, que es un problema intratable computacionalmente.
El funcionamiento del algoritmo es como sigue:
El algoritmo es lento, ya que emplea operaciones matemáticas que tienen un coste elevado y trabaja con claves de gran tamaño. Parte del problema está en la elección del exponente e, ya que un exponente de 512 bits escogido aleatoriamente precisa 768 multiplicaciones en promedio. Para solucionarlo se suelen escoger los valores 3 ó 65537, que precisan 3 y 17 multiplicaciones respectivamente. La elección de un exponente fijo no disminuye la seguridad del algoritmo si se emplean esquemas de criptografía de clave pública adecuados, como por ejemplo el relleno de mensajes con bits aleatorios.
Adicionalmente, el uso de exponentes fijos hace que la encriptación sea más rápida que la desencriptación y la verificación más rápida que la firma. Esta última característica es incluso deseable, ya que un usuario firma una vez un mensaje pero es posible que la firma se valide muchas veces.
Comparado con los sistemas de cifrado simétrico como el DES, el algoritmo de RSA es 100 veces más lento en software y de 1000 a 10000 veces más lento en hardware.
El algoritmo de Diffie Hellman es un algoritmo de clave pública que permite el intercambio seguro de un secreto compartido. Generalmente se emplea junto con algoritmos de cifrado simétrico, como método para acordar una clave secreta. El algoritmo no se puede usar para encriptar conversaciones o firmas digitales.
El funcionamiento del algoritmo es como sigue:
Con este sistema, aunque un tercero interceptara los números p y g y las claves públicas eA y eB, no podría calcular el secreto compartido sin tener una de las claves privadas, lo que equivale a calcular el logaritmo discreto de una de las claves públicas, que es un problema intratable computacionalmente.
El problema fundamental de este algoritmo es que es sensible a ataques activos del tipo hombre en el medio. Si la comunicación es interceptada por un tercero, este se puede hacer pasar por el emisor cara al destinatario y viceversa, ya que no disponemos 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.