# Clave (criptografía)

Una clave, palabra clave o clave criptográfica es una pieza de información que controla la operación de un algoritmo de criptografía. Habitualmente, esta información es una secuencia de números o letras mediante la cual, en criptografía, se especifica la transformación del texto plano en texto cifrado, o viceversa. En sistemas informáticos, la clave sirve para verificar que alguien está autorizado para acceder a un servicio o un sistema. Las claves también se utilizan en otros algoritmos criptográficos, como los sistemas de firma digital y las funciones de hash con clave (asimismo llamadas códigos de autentificación de mensajes).
Un algoritmo bien diseñado debe producir, a partir del mismo texto plano, dos textos cifrados completamente diferentes si se usa una clave distinta. Similarmente, descifrar un texto cifrado con una clave errónea debería producir un galimatías aparentemente caótico. (En la criptografía denegable, dos claves pueden producir dos textos planos muy diferentes pero aparentemente normales.) Si la clave se pierde, los datos cifrados deberían ser irrecuperables en la práctica.
Los sistemas de cifrado que emplean la misma clave para el cifrado y el descifrado son conocidos como algoritmos de clave simétrica. En los años 1970 se descubrieron nuevos métodos que usan un par de claves relacionadas, una para cifrar y otra para descifrar información. Estos métodos, llamados de criptografía asimétrica, permiten que una de las dos claves sea hecha pública, posibilitando así que cualquiera pueda mandar al poseedor de la clave privada un mensaje cifrado que solo esta persona puede descifrar..

## Criterios para escoger una clave

La clave, que en inglés se denomina key (llave), puede ser una palabra, una frase completa o passphrase, siendo esta última más segura debido a su mayor longitud.
La seguridad de una clave viene determinada por:
* La longitud: cuanto mayor sea el número de bits de información en la clave, mayor es el número de combinaciones que debe probar un atacante que use la pura fuerza bruta. Por ejemplo, una clave compuesta de dos cifras necesita 100 intentos como máximo para ser descubierta, mientras que una clave de cinco dígitos requiere 100.000 intentos como máximo.
* La aleatoriedad: si una clave es elegida basándose en palabras que existen en una lengua natural, es susceptible de ser rota mediante un ataque de diccionario. Por ello, una clave segura debe ser generada de una manera aleatoria, usando letras y números, así como símbolos ortográficos si es posible. Desde un punto de vista matemático, una clave es más segura cuanta más entropía contenga. Algunos sistemas informáticos contienen herramientas para "obtener entropía" de procesos impredecibles, como los movimientos de la cabeza lectora del disco duro. Sin embargo, la verdadera aleatoriedad solo puede conseguirse mediante procesos físicos, como el ruido producido por el viento captado por un micrófono o, simplemente, un dado.
* El periodo de uso: una clave se vuelve más insegura cuanto mayor sea el tiempo que ha estado en uso. Por eso es importante asegurarse de que se renuevan con suficiente regularidad, aunque hayan sido generadas con la mayor aleatoriedad posible.

## Necesidad de mantener la clave secreta

Al diseñar un sistema de seguridad, es recomendable asumir que los detalles del algoritmo de cifrado ya son conocidos por el hipotético atacante. Este principio es conocido como Principio de Kerckhoff: "sólo el mantener la clave en secreto proporciona seguridad", o también "el enemigo conoce el sistema". La historia de la criptografía nos da pruebas de que puede ser difícil mantener secretos los detalles de un algoritmo usado extensamente. Una clave suele ser más fácil de proteger (típicamente es solo una pequeña pieza de información) que todo un sistema de cifrado, y es más fácil de substituir si ha sido descubierta. Por tanto, la seguridad de un sistema de cifrado descansa, en la mayoría de los casos, en que la clave permanezca secreta.
Las contraseñas han de memorizarse y se debe evitar tenerlas por escrito. En los sistemas que deben almacenar en memoria las claves para comprobar que el usuario se ha autentificado correctamente, se deben guardar de modo que no se puedan leer y, de ser posible, cifrándolas a su vez. En este caso se puede utilizar como clave de cifrado la misma contraseña que se va a cifrar. Cuando el usuario dé la contreseña para autentificarse, descifrará la contraseña almacenada. Si la contraseña tecleada por el usuario y la descifrada coinciden, el sistema advierte que se ha dado la contraseña correcta. En caso contrario, el resultado del descifrado será una serie de caracteres aleatorios, inútiles para un supuesto atacante.
Mantener las claves en secreto es uno de los problemas más difíciles en la criptografía práctica (véase manejo de claves). De hecho, suelen ser el eslabón más débil de un sistema, ya que un atacante que las obtenga por medios físicos, como por ejemplo robo, extorsión, rebuscando en la basura, ingeniería social, etc. puede acceder inmediatamente a todos los datos cifrados en un sistema por lo demás seguro.

## Longitud de la clave

Para una libreta de un solo uso, la clave debe ser al menos igual de larga que el mensaje a cifrar. En sistemas de cifrado que utilizan un algoritmo de cifrado, la clave puede ser mucho más corta que el mensaje. La clave puede ser una contraseña o una frase completa.
Cuando una contraseña (o "passphrase") se emplea como clave de cifrado, un sistema bien diseñado la pasa primero por un algoritmo de derivación de claves que añade sal y reduce o expande el resultado hasta la longitud deseada, por ejemplo, reduciendo una frase larga a un valor de 128 bits utilizable por algoritmo de cifrado por bloques. Así obtenemos una clave que ocupa menos sin reducir la seguridad, ya que costaría más ir probando combinaciones sobre una clave corta pero muy aleatoria, que probar palabras y sus variaciones con un diccionario sobre la frase original.
Como medida adicional, se debe usar un sistema de cifrado de contraseña que siempre produzca un resultado con la misma longitud, independientemente de la longitud de la frase original, para que no se pueda inferir la longitud de la frase a partir de la longitud de la clave. Esto se consigue utilizando las llamadas funciones hash criptográficas.
En general, las funciones de hash no son biyectivas, por lo que la inversa, el descifrado, se complica, y la probabilidad de que dos entradas distintas retornen un mismo resultado es muy baja.
Matemáticamente hablando:
$A<>B->P(MD5(A)=MD5(B))=0$
Un tamaño de clave de 80 bits se considera como el mínimo necesario para tener buena seguridad con algoritmos de clave simétrica. Comúnmente se usan claves de 128 bits, consideradas muy seguras.
En los sistemas de clave pública se utilizan claves que tienen una cierta estructura matemática, ya que deben estar relacionadas entre sí y no ser completamente aleatorias. Por ejemplo, las claves públicas usadas en el sistema RSA son el producto de dos números primos. Por tanto, los sistemas de clave pública requieren mayores longitudes de clave que los sistemas simétricos para ofrecer un nivel de seguridad equivalente. La longitud de clave sugerida para sistemas basados en factorización y logaritmos discretos es de 3072 bits para obtener una seguridad equivalente a un sistema de cifrado simétrico de 128 bits.
La criptografía de curva elíptica podría permitir claves de menor longitud para una seguridad equivalente, pero estos algoritmos son conocidos desde hace relativamente poco tiempo (a fecha de 2004) y las estimaciones actuales para la dificultad de romper sus claves podrían no resultar acertadas. Recientemente, un mensaje cifrado mediante una clave de 109 bits y un algoritmo de curva elíptica fue descifrado usando tan solo la fuerza bruta. La regla para estimar las longitudes de clave para estos algoritmos es utilizar el doble de bits que para un algoritmo de clave simétrica y conjeturar que ambos ofrecen entonces una seguridad equivalente.
De todas maneras, el único algoritmo que ha sido matemáticamente probado seguro es el método de la libreta de un solo uso, de manera que algún avance matemático futuro (como la computación cuántica) podría convertir todos nuestros datos secretos actuales en un libro abierto. Una razón más para preferir claves largas sobre las cortas.