La generación de claves es el proceso de generar claves en criptografía . Una clave se utiliza para cifrar y descifrar cualquier dato que se esté cifrando o descifrando.
Un dispositivo o programa utilizado para generar claves se llama generador de claves o keygen .
Los sistemas criptográficos modernos incluyen algoritmos de clave simétrica (como DES y AES ) y algoritmos de clave pública (como RSA ). Los algoritmos de clave simétrica utilizan una única clave compartida; mantener los datos en secreto requiere mantener esta clave en secreto. Los algoritmos de clave pública utilizan una clave pública y una clave privada . La clave pública se pone a disposición de cualquier persona (a menudo mediante un certificado digital ). Un remitente cifra los datos con la clave pública del receptor; solo el titular de la clave privada puede descifrarlos.
Dado que los algoritmos de clave pública tienden a ser mucho más lentos que los de clave simétrica, los sistemas modernos como TLS y SSH utilizan una combinación de ambos: una parte recibe la clave pública de la otra y cifra una pequeña parte de los datos (ya sea una clave simétrica o algunos datos utilizados para generarla). El resto de la conversación utiliza un algoritmo de clave simétrica (normalmente más rápido) para el cifrado.
La criptografía informática utiliza números enteros como claves. En algunos casos, las claves se generan aleatoriamente mediante un generador de números aleatorios (RNG) o un generador de números pseudoaleatorios (PRNG) . Un PRNG es un algoritmo informático que produce datos que parecen aleatorios al analizarlos. Los PRNG que utilizan la entropía del sistema para generar datos generalmente producen mejores resultados, ya que esto hace que las condiciones iniciales del PRNG sean mucho más difíciles de adivinar para un atacante. Otra forma de generar aleatoriedad es utilizar información externa al sistema. Veracrypt (un software de cifrado de discos) utiliza los movimientos del ratón del usuario para generar semillas únicas, en las que se anima a los usuarios a mover el ratón esporádicamente. En otras situaciones, la clave se deriva de forma determinista utilizando una frase de contraseña y una función de derivación de clave .
Muchos protocolos modernos están diseñados para tener secreto hacia adelante , lo que requiere generar una nueva clave compartida para cada sesión.
Los criptosistemas clásicos generan invariablemente dos claves idénticas en un extremo del enlace de comunicación y, de algún modo, transportan una de las claves al otro extremo del enlace. Sin embargo, resulta más sencillo gestionar las claves si se utiliza el intercambio de claves Diffie-Hellman .
El método más simple para leer datos cifrados sin descifrarlos es un ataque de fuerza bruta , que consiste simplemente en intentar cada número, hasta la longitud máxima de la clave. Por lo tanto, es importante utilizar una longitud de clave lo suficientemente larga ; las claves más largas tardan exponencialmente más en atacarse, lo que hace que un ataque de fuerza bruta sea poco práctico. Actualmente, son comunes las longitudes de clave de 128 bits (para algoritmos de clave simétrica) y 2048 bits (para algoritmos de clave pública).
Un canal inalámbrico se caracteriza por sus dos usuarios finales. Al transmitir señales piloto, estos dos usuarios pueden estimar el canal entre ellos y utilizar la información del canal para generar una clave que es secreta solo para ellos. [1] La clave secreta común para un grupo de usuarios se puede generar en función del canal de cada par de usuarios. [2]
También se puede generar una clave aprovechando la fluctuación de fase en un enlace de fibra. [3]