Generación de claves
La seguridad de un algoritmo descansa en la clave. Un criptosistema que haga uso de claves criptográficamente débiles será él mismo débil. Algunos aspectos a considerar que se presentan a la hora de la elección de las claves son:
Espacio de claves reducido
Cuando existen restricciones en el número de bits de la clave, o bien en la clase de bytes permitidos (caracteres ASCII, caracteres alfanuméricos, imprimibles, etc.), los ataques de fuerza bruta con hardware especializado o proceso en paralelo pueden desbaratar en un tiempo razonable estos sistemas.
Elección pobre de la clave
Cuando los usuarios eligen sus claves, la elección suele ser muy pobre en general (por ejemplo, el propio nombre o el de la mujer), haciéndolas muy débiles para un ataque de fuerza bruta que primero pruebe las claves más obvias (ataque de diccionario).
Claves aleatorias
Claves buenas son las cadenas de bits aleatorios generadas por medio de algún proceso automático (como una fuente aleatoria fiable o un generador pseudo-aleatorio criptográficamente seguro), de forma que si la clave consta de 64 bits, las 264 claves posibles sean igualmente probables. En el caso de los criptosistemas de clave pública, el proceso se complica, ya que a menudo las claves deben verificar ciertas propiedades matemáticas (ser primos dos veces seguros, residuos cuadráticos, etc.).
Frases de paso
Esta solución al problema de la generación de contraseñas seguras (y fáciles de recordar) por parte del usuario consiste en utilizar una frase suficientemente larga que posteriormente es convertida en una clave aleatoria por medio de un algoritmo (key-crunching).
Distribución de claves
Sin duda alguna, el problema central de todo sistema de gestión de claves lo constituyen los procedimientos de distribución de éstas. Esta distribución debe efectuarse previamente a la comunicación. Los requisitos específicos en cuanto a seguridad de esta distribución dependerán de para qué y cómo van a ser utilizadas las claves. Así pues, será necesario garantizar la identidad de su origen, su integridad y, en el caso de claves secretas, su confidencialidad.
Las consideraciones más importantes para un sistema de gestión de claves son el tipo de ataques que lo amenazan y la arquitectura del sistema. Normalmente, es necesario que la distribución de claves se lleve a cabo sobre la misma red de comunicación donde se está transmitiendo la información a proteger. Esta distribución es automática y la transferencia suele iniciarse con la petición de clave por parte de una entidad a un Centro de Distribución de Claves (intercambio centralizado) o a la otra entidad involucrada en la comunicación (intercambio directo). La alternativa es una distribución manual (mediante el empleo de correos seguros, por ejemplo), independiente del canal de comunicación. Esta última alternativa implica un alto coste económico y un tiempo relativamente largo para llevarse a cabo, lo que la hace descartable en la mayoría de las situaciones. La distribución segura de claves sobre canal inseguro requiere protección criptográfica y, por tanto, la presencia de otras claves, conformando una jerarquía de claves. En cierto punto se requerirá protección no criptográfica de algunas claves (llamadas maestras), usadas para intercambiar con los usuarios de forma segura las claves que usarán en su(s) futura(s) comunicación(es). Entre las técnicas y ejemplos no criptográficos podemos citar seguridad física y confianza.
La distribución de claves se lleva siempre a cabo mediante protocolos, es decir, secuencias de pasos de comunicación (transferencia de mensajes) y pasos de computación. Muchas de las propiedades de estos protocolos dependen de la estructura de los mensajes intercambiados y no de los algoritmos criptográficos subyacentes. Por ello, las debilidades de estos protocolos provienen normalmente de errores cometidos en los niveles más altos del diseño.
Las claves criptográficas temporales usadas durante la comunicación, llamadas claves de sesión, deben ser generadas de forma aleatoria. Para protegerlas será necesaria seguridad física o cifrado mediante claves maestras, mientras que para evitar que sean modificadas deberá utilizarse seguridad física o autenticación. La autenticación hace uso de parámetros como time-stamps y contadores para protegerse también contra la reactuación con antiguas claves.
Almacenamiento de claves
En sistemas con un solo usuario, la solución más sencilla pasa por ser su retención en la memoria del usuario. Una solución más sofisticada y que desde luego funcionará mejor para claves largas, consiste en almacenarlas en una tarjeta de banda magnética, en una llave de plástico con un chip ROM (ROM key) o en una tarjeta inteligente, de manera que el usuario no tenga más que insertar el dispositivo empleado en alguna ranura a tal efecto para introducir su clave.
Otra manera de almacenar claves difíciles de recordar es en forma encriptada mediante una clave fácil de recordar, como por ejemplo almacenar en disco la clave privada RSA cifrada mediante una clave DES.
Tiempo de vida de claves
Una clave nunca debería usarse por tiempo indefinido. Debe tener una fecha de caducidad, por las siguientes razones:
- Cuanto más tiempo se usa una clave, aumenta la probabilidad de que se comprometa (la pérdida de una clave por medios no criptoanalíticos se denomina compromiso).
- Cuanto más tiempo se usa una clave, mayor será el daño si la clave se compromete, ya que toda la información protegida con esa clave queda al descubierto.
- Cuanto más tiempo se usa una clave, mayor será la tentación de alguien para intentar desbaratarla.
- En general es más fácil realizar criptoanálisis con mucho texto cifrado con la misma clave.
Para protocolos orientados a conexión, una elección obvia es usar la misma clave de sesión durante la duración de la comunicación, siendo descartada al finalizar la comunicación y nunca reutilizada. Si la conexión lógica posee una vida muy larga, sería prudente en este caso cambiar la clave de sesión periódicamente, por ejemplo cada vez que el número de secuencia de la PDU completa un ciclo.
Para protocolos no orientados a conexión, no existe un inicio o fin de sesión explícitos. Por lo tanto, no resulta tan obvio con qué frecuencia debería cambiarse la clave. Con el fin de no recargar la información de control ni retrasar la transacción, una estrategia válida sería usar una clave de sesión durante un cierto período o para un cierto número de transacciones.
Las claves maestras no necesitan ser reemplazadas tan frecuentemente, ya que se usan ocasionalmente para el intercambio de claves. En cualquier caso, no hay que olvidar que si una clave maestra se compromete, la pérdida potencial es enorme, de hecho, todas las comunicaciones cifradas con claves intercambiadas con esa clave maestra.
En el caso del cifrado de grandes ficheros de datos, una solución económica y segura, mejor que andar descifrando y volviendo a cifrar los ficheros con una nueva clave todos los días, sería cifrar cada fichero con una única clave y después cifrar todas las claves con una clave maestra, que deberá ser almacenada en un lugar de alta seguridad, ya que su pérdida o compromiso echaría a perder la confidencialidad de todos los ficheros.
Destrucción de claves
Las claves caducadas deben ser destruidas con la mayor seguridad, de modo que no caigan en manos de un adversario, puesto que con ellas podría leer los mensajes antiguos. En el caso de haber sido escritas en papel, éste deberá ser debidamente destruido; si habían sido grabadas en una EEPROM, deberá sobreescribirse múltiples veces, y si se encontraba en EPROM, PROM o tarjeta de banda magnética, deberán ser hechas añicos (muy pequeñitos, a poder ser). En función del dispositivo empleado, deberá buscarse la forma de que se vuelvan irrecuperables.