Llave de encriptación

Este artículo trata sobre Llave de encriptación. Para otros usos de este término, véase Llave (desambiguación).
Llave de encriptación
Información sobre la plantilla
Llave de encriptación.jpg
Concepto:Llave o clave (key en inglés) es una secuencia de dígitos que permiten convertir el texto plano en texto cifrado, a través de un algoritmo de encriptamiento.

Llave de encriptación. Es un elemento que por lo general se usa tanto para encriptar y desencriptar, sin embargo, hay sistemas que usan diversas llaves, garantizando con ello una mayor fiabilidad en ambos procesos. Puede ser ocultado de los intrusos, ya sea por medio de la memorización de la misma o por algún otro método como los esquemas de repartición de llaves, que se verá más adelante, o simplemente si la tenemos en un lugar alejado del acceso de intrusos, como por ejemplo una tarjeta inteligente.

Introducción

Antiguamente se pensaba que con el ocultamiento del procedimiento o algoritmo de encriptación bastaba para la seguridad de la información. Con el tiempo se demostró que es muy fácil para un criptoanalista encontrar el algoritmo por medio del cual se encripta la información. Digamos que en el peor de los cosos se puede hacer ingeniería inversa sobre el código y de esa forma sacar el algoritmo. Este es un trabajo que lleva grandes recursos sobre todo de tiempo, pero hay datos en el mundo que merecen ese derroche. Hoy mientras más personas conozcan el algoritmo, más seguro debe ser, ya que hay más posibilidades de que una de ellas encuentre un error de seguridad en el algoritmo. Por ello es que actualmente se utilizan algoritmos cuya seguridad está depositada en el elemento externo al que con anterioridad llamamos llave. Con la aparición de las redes, el temor a la pérdida de privacidad, robo de información, mal manejo de ésta, falsificaciones, etc., ha aumentado Cada día el uso de diversas técnicas criptográficas para identificarnos, establecer comunicaciones seguras y mantener la información ilegible, pero el peso principal de tales técnicas recae en la llave, por eso es necesario preocuparse por una correcta elección de las mismas y su almacenamiento.

Elegir una clave segura

La seguridad de las llaves se mide por el esfuerzo que se necesita para descubrirlas. Existen dos tipos principales:

  • ’’Llaves secretas’’, en las que no se publica ninguna información acerca de ellas. Sólo la conocen las personas autorizadas que deben guardar bien el secreto.
  • ’’Llaves públicas’’ con su correspondiente privada, en la que la parte pública puede ser conocida por cualquier persona o por quienes se desee, sin temor a que sea descubierta, pues solo podrá obtener la información original aquel que posea la llave privada y como ésta sólo la conoce usted, las posibilidades de robo de la misma disminuyen grandemente.

Llave secreta

La forma más simple de descubrir una llave secreta de tamaño n, es generando todas las combinaciones posibles hasta encontrar la buscada, por ejemplo, con una llave binaria de tamaño 40 se pueden formar 240 lo que se denomina fuerza bruta. El problema está ahora en la selección del tamaño correcto según el tiempo que se desea utilizar. El 17 de julio de 1998, la EFF (Electronic Frontier Foundation) anunció la construcción de una máquina capaz de generar todos los posibles valores de una clave de 56 bits (o sea 256 números) en menos de 5 días. Existen agencias como la estadounidense NSA (Agencia de Seguridad Nacional) que posee recursos suficientes para romper llaves de 56 bits en menos de un día, incluso se comenta la de equipos capaces de romperlas en 3.5h. En la siguiente tabla se realiza un estimado del tamaño apropiado de las claves según el tiempo de uso.

Llave secreta.JPG

Para acelerar la generación de las claves por fuerza bruta se pueden utilizar máquinas en paralelo que realizarán una parte del proceso. Una red de 400 computadoras que ejecutan 32 000 operaciones por segundo (un 486DXZ-66MHz realiza 54 millones de instrucciones por segundo) sería capaz de generar 240 llaves en un día. Aunque el número de computadoras parece muy grande, actualmente en el mundo existen más de 200 millones de máquinas funcionando y, ¿qué pasaría si se utilizaran con este fin? Por supuesto, el mayor problema estaría en convencer a las personas en participar en esto, pero ¿no podría ocurrir a espaldas nuestras?, sencillamente, distribuyendo estas operaciones por medio de un virus o programas gratuitos, entre otras variantes que en apariencia no hacen ningún daño, pero que realmente ponen a correr procesos de generación de claves.

Llave pública y privada

La dificultad radica en encontrar a partir de la llave pública, la privada, por eso es necesario que este proceso no sea sencillo, al menos para ciertos casos. Uno de los métodos más usados actualmente se basa en la factorización de números grandes. La solución a este problema ha sido objeto de estudio durante muchos años, por lo que se han desarrollado diversos algoritmos y mejoras a éstos, lo cual hace prácticamente imposible predecir los tiempos de demora de lña factorización a largo plazo. En 1977, Ron Rivest dijo que factorizar un número de 125 dígitos demoraría 40 cuatrillones de años y en 1994 fue factorizado un número de 129 dígitos. A continuación se muestra una tabla del tamaño recomendado para las llaves públicas en los próximos años, según las predicciones de lo que se podrá factorizar.

Llave pública y privada.JPG

En Cuba, la gran mayoría de software que poseen, utilizan claves muy pequeñas, por ejemplo NT emplea claves de 40 bits.

Llaves de sesión y repartición de llaves

Una técnica muy usada hoy día son las llaves de sesión. Esta consiste en el intercambio previo de una llave que se usará para la comunicación de un mensaje cifrado y luego no se empleará más. Es fácil pensar que lo que se hace es trasladar el problema, puesto que lo que se tendría es que buscar un método para la seguridad del intercambio de la llave. Esto no es totalmente así. y se dice "totalmente" porque en realidad sí se traslada el problema, pero a un plano en el cual es más factible de resolver. De manera que ésta es la forma más usual y posible para el intercambio de información mediante la combinación de los dos métodos de encriptación. Supongamos que cada vez que nos comuniquemos con una persona se genera una llave aleatoria. Con ella encriptamos lo que queremos enviarle, mediante el uso de un algoritmo simétrico. Al final usamos la llave pública de esa persona para encriptar la llave aleatoria generada. Para enviarle el mensaje, se lo hacemos llegar cifrado junto con la llave de sesión encriptada. Como únicamente esa persona debe conocer la llave privada necesaria para desencriptar la de sesión, sólo ella podrá leer el mensaje. Todo parece una buena idea y en la práctica funciona. Sin embargo, una serie de ataques pueden realizarse en esquemas como éste. Piense en alguien que oiga cuando le solicita su llave pública a la persona que le quiere enviar el mensaje. ¿Si el que está a la escucha se hace pasar por la persona e intercepta la llave pública de ella y le envía la suya? En ese caso se podría hacer maravillas. Para eso existen entidades que se encargan de certificar que la llave recibida es exactamente la que Usted solicitó. A éstas se les denomina Autoridades de Certificación y existen muchas que residen en la red. Una de las más difundidas es VeriSign. Pero, ¿qué sucede si alguien se hace pasar por la Usted puede apelar a una que le certifique la dudosa. No obstante, siempre puede existir la falsedad. Ante tal caso no tenemos otra solución que un poco más de confianza.

Claves de usuario de NT

El usuario promedio no se enfrenta con adversarios que posean suficientes recursos para aplicar un ataque por fuerza bruta en un corto período, pero aun así, son muchas las claves que diariamente son descubiertas y el principal problema radica en las elecciones poco afortunadas que se hacen de éstas. Para mal de todos, existen personas, incluso administradores, que prefieren escribir claves cortas, esencialmente nombres de personas, ciudades, libros, personajes de obras literarias, cine, televisión, fechas importantes, número de carné de identidad, etc., todo lo cual facilita el descubrimiento de las claves o el llamado ataque por diccionario.

Ataque por diccionario: Consiste en la creación de diccionarios con todos los datos antes mencionados, así como la combinación de los mismos con mayúsculas, minúsculas, números u otras variantes, luego probar con cada palabra de los diccionarios para dar con las claves. Es más, si realizáramos pruebas con diccionarios muy pobres que incluyeran los nombres de los usuarios que deseamos atacar en combinaciones de iniciales mayúsculas, minúsculas, etc. y algunos de sus datos, seria asombrosa la cantidad de claves que obtendríamos. En caso de conocer a la persona se torna mucho más sencillo, pues se puede trabajar en la creación de diccionarios que incluyeran vocablos asociados a sus gustos, afinidades, costumbres, etc. Se han hecho públicos en Internet diversos programas para romper las claves de NT por medio de este ataque. A dicha forma de intromisión se le han aplicado diversas variantes, como es la creación de diccionarios con palabras que se puedan pronunciar en diferentes idiomas y su concatenación. La mejor solución para estos problemas es generar secuencias aleatorias, pero el usuario promedio no está preparado para el empleo de estas herramientas a la vez que se podría caer en el problema de ¿cómo almacenar las claves?, ya que sería muy complejo memorizar una secuencia aleatoria. Este comentario lleva implícito precisamente la intención de alertar a los usuarios y convencerlos de la necesidad de usar claves mucho más complejas que no puedan ser atacadas por un oponente con recursos limitados. Es conveniente usar llaves en NT donde se incluyan espacios en blanco y caracteres especiales como (i @ # $ % ~ & * ( ) _ > | \ = - [ { < >) y modificarlas con frecuencia (como máximo mantener un mes la clave, no repetirla nunca o al menos no con demasiada frecuencia).

Almacenar las claves

Las claves deben ser memorizadas, nunca escritas, por eso es conveniente buscar una combinación que le recuerde algo y que a su vez no viole lo antes mencionado. Por ejemplo, en NT pudiéramos utilizar: La clave Pelvmten, <|:-), se deriva de elegir letras iniciales del siguiente fragmento de poema: Puedo escribir los versos más tristes esta noche, coma, un espacio en blanco y un muñeco sonriente. No resulta difícil de memorizar y no se obtienen buenos resultados en el ataque por diccionario. Aunque esta clave adolece de un problema: que todos ustedes a partir de este momento la conocen. Es cierto que muchas veces poseemos una lista muy grande de claves que debemos memorizar y se necesita guardarlas en alguna parte para no olvidarlas, entonces sería conveniente almacenarlas enmascaradas con un buen algoritmo de encriptación. De esta manera la clave a recordar sería una, pero debe ser lo más segura posible, pues si se descubre se conocerían las restantes claves. Ocurre también que muchos de los programas que chequean usuarios y trabajan con claves necesitan almacenar información de éstas que posteriormente permita comprobarlas o recuperarlas.

Almacenadas por los programas

Primero, el lugar donde esté almacenada la clave debe estar protegido, su acceso debe ser limitado. NUNCA debe almacenarse en claro, siempre enmascarada. Si deseamos almacenarla para luego comprobarla, no recuperarla, se pudiera enmascarar por medio de un algoritmo de codificación con una llamada clave maestra, por supuesto, aquí se correría el riesgo del almacenamiento de esta clave maestra, por eso, es muy conveniente usar con estos fines las funciones hash.

Funciones hash: Función computacionalmente eficiente que opera sobre elementos X de tamaño arbitrario y devuelve elementos Y de tamaño fijo (H(X)=Y). Sus principales propiedades son:

  • Es fácil de computar Y a partir de X.
  • Es muy complejo, computacionalmente casi imposible, de encontrar X conociendo Y.
  • Es muy difícil encontrar dos entradas diferentes queden la misma solución.

A la llave K le aplicamos H(K)=Y y el valor Y es el que almacenamos.

Estas propiedades de las funciones son las que han difundido su uso en la criptografía y la seguridad. Se utilizan en firmas digitales, integridad de datos, protección antivirus, almacenamiento y transmisión de claves, etc. El mayor problema lo enfrentamos cuando necesitamos almacenar las claves para recuperarlas, pues por medio de las funciones hash no podemos hacer la recuperación. En estos casos es necesario extremar la seguridad del lugar donde están almacenadas y enmascararlas con una llave maestra que podemos guardar o conocer de forma más segura. Esta variante necesita más conocimiento de lo que se quiere en especial. No son pocos los programas qué han sido atacados por la manera tan sencilla en que se almacenan las claves, incluso para comprobaciones y no recuperaciones.

Fuentes

  • Libro: “Applied Cryptography”, Segunda Edición. Autor: Bruce Schneider. Wiley, New York