_– ¿Qué significa habla, amigo y entra? -preguntó Merry._– Es bastante claro -dijo Gimli-. Si eres un amigo, dices la contraseña y las puertas se abren y puedes entrar.

– Sí -dijo Gandalf-, es posible que estas puertas estén gobernadas por palabras…

El Señor de los Anillos

J.R.R. Tolkien

Introducción

Gran parte de los aficionados a la informáticave el tema de la seguridad informática y de la criptografía como un tema de grandes especialistas, o en relación con los hackers. Tienen razón, ya que esto es así, porque son los grandes matemáticos los que diseñan los mejores sistemas criptográficos, y son los hackers los que tratan de buscar las posibles vulnerabilidades del sistema. Pero no nos quedemos con solo esta visión de la seguridad informática. Existen hoy en día, gran cantidad de software que nos permite comunicarnos de forma segura con quien queramos (y podamos), como por ejemplo con nuestro banco electronico, cuando hacemos transacciones a través de Internet, o con la tienda virtual donde hemos comprado el último éxito de nuestro artista preferido.

Este tipo de herramientas no son de uso exclusivo para las empresas o autoridades gubernamentales, sino que hay gran cantidad de ellas a nuestra disposición, incluso en código fuente. Solo tenemos que mentalizarnos de que nuestra intimidad puede ser invadida con gran facilidad en cuanto conectamos nuestro ordenador a Internet y hacemos uso de ella. No es que cada vez que nos conectemos haya alguien deseoso de entrar en nuestro ordenador, aunque podría ser, sino que cualquier cosa que se envíe por Internet, podría ser leída por alguien sin demasiadas dificultades. Por ejemplo, cuando contratamos una cuenta de correo a través del web, todos los datos que enviamos para la solicitud, pueden ser leidos por alguien más, a no ser que la web use un sistema de encriptacion de datos (SSL). Pero la cosa no queda solo ahi, ¿estamos seguros que la web que estamos visitando es realmente la web de dicha empresa, y no una copia que alguien ha puesto con la intención de conseguir la mayor cantidad de passwords posibles? La única forma de estar seguros es porque alguien de nuestra confianza acreditará de alguna forma (PKI) que esta web es realmente la que queríamos visitar. Todavía hay más, y es que cuando recibamos correo, éste será almacenado en un disco duro que hay en un ordenador de la empresa a la que hemos contratado el correo, quedando toda la información que recibamos a dicho correo visible para todo aquél que tenga acceso a dicho ordenador. Si en vez de enviar correos “en claro” usaramos algún programa de encriptación (PGP), esto seguiría ocurriendo, aunque ahora ya no podrían ver de que tratan los mensajes, ya que estarían cifrados.

No es que quiera poner a los webmail por el suelo, creo sinceramente que son un buen servicio para todo aquel que no posea un servidor de correo conectado las 24 horas. Solo digo que hay que saber protegerse de lo que pueda pasar y saber con quien se está tratando, cosa altamente importante y extremadamente dificil en Internet.

Algunas definiciones

  • Cifrado – Descifrado: Proceso a través del cual codificamos la información, de tal forma que solo el receptor sea capaz de entender lo que le enviamos.
  • Funciones “hash” o resumen
  • Firmado: La firma digital consiste en pasar una función hash a la información a enviar, y el resultado cifrarlo con nuestra clave privada, para que así el receptor la descifre con nuestra clave pública, y, pasando de nuevo la función hash, y comparando resultados, compruebe que la información no ha sido modificada.
  • RSA
  • DES y 3DES
  • Algoritmos de clave simétrica
  • Algoritmos de clave asimétrica
  • Clave de sesión: Es una clave generada automáticamente, que será usada en un proceso de cifrado simétrico, y que sólo tendrá validez durante esa conexión.
  • Distinguised Name o DN
  • PKCS 10 o Certification Request: Es la forma de pedir un certificado. Está formado por el DN, la clave pública, todo ello firmado con la clave privada correspondiente (no es un autofirmado).
  • Certificado x509: Es una clave pública y el DN de esa clave, firmados por una autoridad certificadora, con un formato propio del x509.
  • PKCS 12: Es un conjunto de certificados y sus claves privadas correspondientes, todo ello protegido con una clave.

PGP

PGP o “Pretty Good Privacy” (Privacidad bastante buena), es el sistema de cifrado de correo más popular y más extendido hoy por hoy. Este sistema cifra el correo que vayamos a enviar para que solo el destinatario sea capaz de leerlo, pudiendo ser también utilizado para certificar que el autor de dicho correo soy yo y no otro cualquiera.

El PGP se basa en sistema de clave asimétrica o de clave pública, con lo que cualquiera que desee utilizarlo precisa tener las 2 claves. PGP basa su seguridad en la incapacidad actual de factorizar numeros enormemente grandes, ya que no se conoce ningún algoritmo que sea capaz de hacerlo, y la única forma de conseguirlo es por fuerza bruta, con la correspondiente tardanza que ello conlleva. En el momento de escribir este documento, se utilizan claves de 1024 y 2048 bits de longitud, siendo las primeras poco recomendadas, ya que con los sistemas actuales pueden ser destrozadas en cuestión de semanas. En cambio con las de 2048 bits, la cosa se alarga durante años, llegando incluso a ser cosa de siglos (si no recuerdo mal).

El modo de funcionamiento del PGP es sencillo: una vez te hayas creado tu par de claves, y hayas firmado tu clave publica con la privada (esto suele ser automático), deberías proporcionar tu clave a alguien de forma segura, para que así te la pudiera firmar, con lo que obtendrías mayor fiabilidad ante el resto de personas. Normalmente cuando se crea o modifica una clave, se suele subir a un servidor de claves gpg, para que pueda estar disponible para la mayor cantidad de gente posible. Hecho esto ya estás en disposición de usar el sistema PGP correctamente, sabiendo que quien reciba el correo podrá certificar que es tuyo.

Es muy importante y obligación tuya, no perder ni poner en peligro tu clave privada, ya que si así ocurriese, deberías anular dicha clave con unos certificados de revocación que deberas generar. El problema que tiene esto es que para crearlos es necesario la clave privada, con lo que si la has perdido no serás capaz de revocar dicha clave, y alguien se podría estar haciendo pasar por ti. Por ello es buena costumbre crear dichos certificados a la vez que el de claves, y guardar la clave privada y el certificado en un lugar seguro.

Aunque este sistema es mejor que no usar nada, tampoco es infalible, ya que como hemos dicho antes, este sistema puede ser franqueado por fuerza bruta, aunque no es éste el único incoveniente que tiene (ya que se puede solucionar usando claves de mayor longitud). Uno de los mayores inconvenientes de este sistema es el propio funcionamiento del sistema, ya que al basarse en anillos de confianza, no hay forma segura de acreditar que una clave es de quien dice ser, mas que por la confianza que tengamos en el que haya firmado dicha clave. Es decir, yo no tengo ninguna otra forma de comprobar que una clave es de alguien mas que por un amigo común a ambos que me certifica que dicha clave es verdaderamente de quien dice ser. Si este esquema lo proyectamos a mayor tamaño, obtenemos un esquema de confianza mutua y cíclica, al que se le denomina “anillo de confianza”.

Debido a este problema, es totalmente imprescindible que no se firmen claves de las que su procedencia no sea totalmente segura, ya que sino se estaría introduciendo una clave falsa en el anillo, y sería totalmente indetectable para los demás. Por eso se suele recomendar que las claves se intercambien mano a mano, y no por Internet.

Otro gran problema, aunque este sea relativo a todos los sistemas de seguridad basados en claves, es que el tiempo que transcurre desde que tú revocas una clave hasta que el resto de Internet sabe de ello puede ser muy grande, o incluso podría pasar que nunca sabrían que esto ha ocurrido. Durante dicho tiempo, podría haber alguien haciendose pasar por otro, si la clave de éste hubiera sido comprometida. Este problema no tiene solución fácil, y es uno de los puntos negros de los sistemas de claves asimétricas.

Como nota final, comentar que hay varios programas que nos permiten usar este sistema de cifrado, como por ejemplo PGP que usa claves del tipo RSA, o GnuPG, que es una versión libre de PGP, por lo que usa claves del tipo DSA y ElGamal, aunque desde la liberación del algoritmo del RSA también es capaz de usar claves de este otro tipo. En The International PGP Home Page encontrarás las útlimas noticias y acceso a diversos documentos en relación con el PGP.

PKI

Este sistema de encriptación se asemeja mucho en el funcionamiento al PGP, ya que también un sistema de clave asimétrica, aunque no son compatibles entre ellos. PKI es un stándard (ISO), en el que se definen los certificados x509, y es una de las diferencias entre el PGP y el PKI. Estos certificados no son más que los datos personales del propietario (DN o “Distinguised Name”), junto con su clave pública, todo ello firmado por una Autoridad Certificadora.

Con este sistema, la clave pública de la que vayamos a hacer uso, es, con total seguridad, la clave de la persona que pretendíamos, ya que los datos que la acompañan así lo demuestran, y además y muy importante, está certificado por la Autoridad Certificadora en cuestión.

Debido a que tenemos gran seguridad de que la clave es auténtica, el PKI se suele usar en transacciones seguras a través de Internet (en conjunto con el SSL, que se encargará de cifrar los datos, ya que el PKI solo se usa a modo de identificación), o cualquier otro tipo de operación que requiera de una identificación segura.

El modus operandi es el siguiente: debes crear un PKCS 10 o “Certificate Request” autofirmado, que contendrá todos tus datos personales, y enviárselo a la autoridad certificadora que creas conveniente. Esta autoridad comprobará de alguna forma que los datos que le has proporcionado son verdaderos, bien citándose contigo, bien reclamando algún documento oficial que te identifique. Una vez que la autoridad se haya cerciorado de que los datos son correctos, creará un certificado x509 a partir del Certificate Request que tú le enviaste y lo firmará. Para una mayor comodidad, podrás crear un objeto PKCS 12, que no es más que un conjunto de certificados y sus claves privadas correspondientes, todo ello protegido con una clave. Este tipo de ficheros es el que más se suele usar en el PKI, y es el sistema usado por Netscape y Explorer.

Cada vez que una pagina web requiera identificacion a través de un certificado válido, el explorador te pedirá el password de la base de datos de certificados que posee, y irá comprobando uno a uno hasta que encuentre alguno que le permita acceder. Todos los certificados que importes a la base de datos del navegador, serán comprobados a través de la autoridad certificadora correspondiente, y serás avisado si algún certificado no es correcto, o la autoridad certificadora que lo ha firmado no es de tu confianza.

Este sistema también se puede usar para el cifrado y firmado de correo, siendo su uso muy parecido al PGP, pero con la fiabilidad que le confiere las autoridades certificadoras.

Si estás interesado en usar PKI, puedes usar OpenSSL, que es una implementación libre de PKI y SSL, teniendo siempre en cuenta las leyes vigentes sobre el uso de la criptografía de tu pais.

SSL

El “Secure Socket Layer” es un capa software, utilizado para cifrar las transmisiones entre ordenadores. Fue concebido por Netscape, aunque hoy en día es uno de los más ampliamente extendidos.

El primer paso que se debe realizar para establecer una transmisión segura es el “Handshake”, después del cual el SSL fragmentará los paquetes a enviar, hará un resumen y los cifrará, para asi poder ser enviados. Dicho así parece muy sencillo, aunque es en el “Handshake” donde tenemos que centrar la atención. Durante este paso, las computadoras realizan varios pasos:

  1. Client Hello: Identificación del cliente.
  2. Server Hello: Identificación del servidor.
  3. Server Key Exchange: El servidor manda su certificado al cliente, el cual comprobará la validez de éste.
  4. Certificate Request: El servidor pide identificación para que el proceso siga adelante.
  5. Certificate Verify: Se comprueba la validez del certificado del cliente.
  6. Client Key exchange: Se generan una claves de sesión que serán cifradas con la clave pública del receptor, y serán enviadas.
  7. Cambio a modo seguro: A partir de este momento se usará algún algoritmo de cifrado simétrico (DES, 3DES, etc) para cifrar los datos, para lo que se usará la clave de sesión recibida, asegurando así que el otro será capaz de descifrar los datos.
  8. Finalización: Intercambio de un resumen de las acciones llevadas a cabo, para una posible comprobación.

Según el tipo de cifrado simétrico que usemos, determinaremos una mayor o menor seguridad de conexión. Por ejemplo cuando hacemos una conexión segura a nuestro servidor de webmail, seguramente estaremos usando 3DES de 40 bits, en cambio si la conexión es a una entidad bancaria, sera muy probablemente 3DES de 128 bits, el cual hasta Septiembre de 2000, sólo podía ser usado con permiso de EEUU, ya que era un algoritmo patentado, no siendolo así el 3DES de 40 bits, que aunque ofrece algo de seguridad, esta es mínima.