Las primeras formas de criptografía se basaban en algoritmos de cifrado secretos, pero pronto se hizo evidente que esta era una idea terriblemente mala. Si sospechas que el enemigo aprende el algoritmo, pueden descodificarlo todo y tienes que tirarlo todo y comenzar de nuevo. Y los algoritmos son difíciles de pensar.
Una mejor idea es utilizar una clave. En un sistema basado en clave, el algoritmo no es secreto, sino que el secreto se condensa en un gran número aleatorio llamado clave. El algoritmo de cifrado toma el mensaje de texto sin formato y lo combina con la clave utilizando una serie larga de procesos matemáticos para producir el mensaje cifrado. Para revertir el algoritmo, el destinatario también debe tener la clave.
Ahora el algoritmo no es secreto, por lo que los expertos pueden examinarlo para confirmar que es seguro, y si la clave está comprometida, simplemente deséchelo y elija un número aleatorio nuevo y largo. Diablos, use una nueva clave cada vez que envíe un mensaje, luego incluso si una clave está comprometida sin que usted sepa que el enemigo solo puede leer un mensaje.
Eso es claves. También se habla de contraseñas, que son diferentes, y de claves públicas, que son un tipo especial de clave. Ambos se utilizan para resolver algunos problemas prácticos irritantes con el uso de claves como parte de un sistema para intercambiar mensajes.
El primer problema práctico con las claves es que dado que una clave es solo un gran número aleatorio, a los humanos les resulta muy difícil memorizarlas. Si su sistema necesita que una persona recuerde la clave y no la escriba, entonces tiene un problema. Una contraseña es una combinación de letras y caracteres que un humano puede recordar. Su sistema puede usar algo llamado algoritmo de derivación de clave que toma una contraseña y la convierte en una clave. Los sistemas basados en contraseñas no son tan buenos como los sistemas que solo usan una clave, pero es una limitación de los seres humanos, no es mucho lo que podemos hacer.
Así que realmente no usas una contraseña para decodificar un mensaje, la usas para generar la clave y luego la usas para decodificar el mensaje.
El otro problema práctico con las claves se llama distribución de claves. Antes de que pueda enviarte un mensaje de forma segura, ambos tenemos que conocer la clave, por lo que tengo que darte esta información. Pero no puedo enviarlo cifrado, porque todavía no tiene la clave. Y no puedo enviarlo en texto sin formato, porque ¿qué pasa si un chico malo está escuchando?
En muchos sistemas hay una forma de intercambiar claves a través de un canal seguro separado. Por ejemplo, M puede darle a Bond la llave que debe usar antes de emprender su misión, mientras aún están a salvo en la sede del MI6.
Pero a veces esto no es posible, especialmente a través de Internet, donde generalmente solo tenemos Internet para comunicarnos. Así que se requiere un nuevo truco, la criptografía de clave pública.
En este tipo de sistema, tengo dos claves que están relacionadas matemáticamente. Si un mensaje está encriptado por una de las claves, solo puede ser descifrado por la otra. Llamo a uno la clave privada, y la mantengo en secreto; Llamo a la otra clave pública y les digo a todos qué es.
Ahora puede enviarme un mensaje seguro cifrándolo con la clave pública. Un atacante puede escuchar todo lo que quiera, ya les he dicho la clave pública, pero eso no es bueno para ellos, solo la persona con la otra clave privada (yo) puede descifrar el mensaje que envió.
Por razones prácticas aburridas, por lo general solo usa una clave pública / privada una vez en una conversación, justo al principio para que pueda intercambiar claves de manera segura a través de una línea no confiable, y luego use un método de cifrado de clave única regular para el mensaje real. Así que realmente no usa una clave pública o privada para decodificar un mensaje, lo usa para intercambiar de manera segura una tercera clave y luego la usa para decodificar el mensaje.