¿Cómo funciona la encriptación de clave pública? | Criptografía de clave pública y SSL

La encriptación de clave pública, también conocida como encriptación asimétrica, utiliza dos claves separadas en lugar de una compartida: una clave pública y una clave privada. La encriptación de clave pública es una tecnología importante para la seguridad en Internet.

Objetivos de aprendizaje

Después de leer este artículo podrás:

  • Definir encriptación de clave pública
  • Entender cómo funciona la encriptación de clave pública
  • Más información acerca de por qué la encriptación de clave pública es fundamental para el protocolo TLS/SSL

Copiar enlace del artículo

¿Qué es la encriptación de clave pública?

La encriptación de clave pública, o criptografía de clave pública, es un método para encriptar datos con dos claves diferentes y hacer que una de las claves, la pública, esté disponible para que cualquiera pueda utilizarla. La otra clave se conoce como clave privada. Los datos encriptados con la clave pública solo pueden desencriptarse con la clave privada, y los datos encriptados con la clave privada solo pueden desencriptarse con la clave pública. La encriptación de clave pública también se conoce como encriptación asimétrica. Es de uso generalizado, especialmente para TLS/SSL, que hace posible HTTPS.

¿Qué es una clave criptográfica?

En criptografía, una clave es dato que se utiliza para codificar los datos de manera que parezcan aleatorios; suele ser un número grande, o una cadena de números y letras. Cuando los datos sin encriptar, también llamados texto plano, se introducen en un algoritmo de encriptación utilizando la clave, el texto plano aparece en el otro lado como datos de aspecto aleatorio. Sin embargo, cualquiera que tenga la clave adecuada para desencriptar los datos puede volver a ponerlos en forma de texto plano.

Por ejemplo, supongamos que cogemos un mensaje de texto plano, "hola," y lo encriptamos con una clave*; digamos que la clave es "2jd8932kd8." Encriptado con esta clave, nuestro simple "hola" ahora se lee "X5xJCSycg14=", lo que parece un dato basura aleatorio. Sin embargo, al desencriptarlo con esa misma clave, obtenemos de nuevo "hola".

Texto plano + clave = texto cifrado

hola + 2jd8932kd8 = X5xJCSycg14=

Texto cifrado + clave = texto plano:

X5xJCSycg14= + 2jd8932kd8 = hola

(Este es un ejemplo de encriptación simétrica, en la que solo se utiliza una clave).

*Usando el algoritmo Blowfish, modo CBC, codificación Base64.

¿Cómo funciona la encriptación de clave pública?

La criptografía de clave pública puede parecer compleja para los no iniciados; por suerte, un escritor llamado Panayotis Vryonis ideó una analogía que, a grandes rasgos, es la siguiente.

Imaginemos un baúl con una cerradura que utilizan dos personas, Bob y Alice, para enviar documentos de un lado a otro. Una cerradura típica solo tiene dos estados: cerrada y abierta. Cualquiera que tenga una copia de la llave puede abrir el baúl si está cerrado, y viceversa. Cuando Bob cierra el baúl y se lo envía a Alice, sabe que esta puede utilizar su copia de la llave para abrirlo. Así es como funciona lo que se conoce como criptografía simétrica: se utiliza una clave secreta para encriptar y desencriptar, y ambas partes de una conversación utilizan la misma clave.

Pero ahora imaginemos que Bob fabrica un baúl con un tipo especial de cerradura. Esta cerradura tiene tres estados en lugar de dos:

  • A. Cerrado, llave girada hacia la izquierda
  • B. Desbloqueado, en el centro.
  • C. Cerrado, con la llave girada hacia la derecha.
Analogía del bloqueo SSL

En lugar de una llave, esta cerradura tiene dos llaves:

  • La llave n.º 1 solo puede girar hacia la izquierda
  • La llave n.º 2 solo puede girar a la derecha

Esto significa que si el baúl está bloqueado y la llave se gira a la posición A, solo la llave n.º 2 puede desbloquearlo al girar a la derecha, a la posición B (desbloqueado). Si el baúl está bloqueado en la posición C, solo la llave n.º 1 puede desbloquearlo al girar la cerradura hacia la izquierda, hasta la posición B.

En otras palabras, cualquiera de las dos llaves puede cerrar el baúl, pero una vez cerrado, solo la otra llave puede abrirlo.

Ahora, digamos que Bob hace varias decenas de copias de la llave n.º 2, la que solo gira a la derecha, y las comparte con todos sus conocidos y con cualquiera que quiera una copia, convirtiéndola en su llave pública. Se queda con la llave n.º 1 para sí mismo: es su llave privada. ¿Qué se consigue con esto?

  1. Alice puede enviar a Bob datos confidenciales mediante el baúl y estar segura de que solo Bob podrá abrirlo. Una vez que Alice ha cerrado el baúl con la llave pública, que gira de izquierda a derecha, solo una llave que pueda girar de derecha a izquierda puede abrirlo. Eso significa que solo la llave privada de Bob puede abrirlo.
  2. Alice puede estar segura de que el baúl es realmente de Bob, y no de un impostor, si está cerrado con su llave privada. Solo hay una llave que puede cerrar el baúl de manera que la cerradura quede en la posición A, o girada completamente a la izquierda: la llave privada de Bob. Es cierto que cualquiera puede abrirlo con la llave pública si gira la llave hacia la derecha, pero está garantizado que el baúl es de Bob.

Sustituyamos los datos de texto plano por el baúl y las claves criptográficas por las llaves físicas de esta analogía, y así es como funciona la criptografía de clave pública. Solo el propietario de la clave privada puede encriptar datos para que la clave pública los desencripte; mientras tanto, cualquiera puede encriptar datos con la clave pública, pero solo el propietario de la clave privada puede desencriptarlos.

Por tanto, cualquiera puede enviar datos de forma segura al propietario de la clave privada. Además, cualquiera puede verificar que los datos que recibe del propietario de la clave privada proceden realmente de esa fuente, y no de un impostor (ver ¿Qué es un ataque en ruta?).

¿Cómo utiliza TLS/SSL la encriptación de clave pública?

La encriptación de clave pública es extremadamente útil para establecer comunicaciones seguras en Internet (mediante HTTPS). El certificado SSL/TLS de un sitio web, que se comparte públicamente, contiene la clave pública, y la clave privada está instalada en el servidor de origen: es "propiedad" del sitio web.

Los protocolos de enlace TLS utilizan la criptografía de clave pública para autenticar la identidad del servidor de origen, y para intercambiar los datos que se utilizan para generar las claves de sesión. Un algoritmo de intercambio de claves, como RSA o Diffie-Hellman, utiliza el par de claves públicas y privadas para acordar las claves de sesión, que se utilizan para la encriptación simétrica una vez finalizado el protocolo de enlace. Los clientes y los servidores pueden acordar nuevas claves de sesión para cada sesión de comunicación, para que así los agentes maliciosos no puedan desencriptar las comunicaciones aunque identifiquen o roben una de las claves de sesión.