Bienvenido a mi primer minitutorial sobre seguridad y criptografía básica.
Mi intención es explicar un par de cosas útiles sobre el uso de internet, concretamente a enviar y recibir mensajes de email con información ″privada″.
Antes de meterme en el tema voy a explicar a qué me refiero con información privada en un mensaje de email: Pues, cualquier tipo de mensaje que si enviases por correo no escribirías en una postal. Es decir, cualquier carta que meterías en un sobre cerrado sin más, o en el caso de seguridad más necesaria, cualquier tipo de mensaje privado importante. Ambos tipos de mensajes entran en lo que llamaré ″información privada″.

Lo primero que tengo que explicar es un poco por encima cómo funciona internet (para dummies wink ).
Internet es un conjunto de cables que conectan ordenadores. Como hay muchos ordenadores y no todos pueden estar conectados con todos (y por otras razones más complejas), cuando te ″conectas″ a otro ordenador (una página web por ejemplo) realmente tú te estás conectando a un ordenador intermedio, este a otro ordenador, ese a otro, .... así hasta que uno de los ordenadores se conecta con el ordenador con el que te quieres comunicar directamente, formando así una cadena de ordenadores por los que pasa la información que envías o recibes con el otro ordenador.
Esquema:
(Tu ordenador) -- conexión_real -- (ordenador1) -- conexión_real -- (ordenador2) -- ...... -- (servidor)

Siendo el servidor el ordenador al que te quieres conectar.

Muy bien, aquí es dónde se producen uno de los grandes fallos de seguridad, el llamado man-in-the-middle.
Es un ataque muy común, y no solo por parte de crackers, si no por la NSA (aka: EEUU), por parte de los ISPInternet Service Provider, o
Proveedor de internet: telefónica, jazztel, ono, ...
y por cualquiera que tenga acceso a los ordenadores intermedios.
Consiste en mirar el ordenador intermedio y leer los mensajes que pasan por ahí. Es como pinchar el teléfono para escuchar lo que dices. Y aunque pueda parecer una tontería y un ″¿para qué me iban a pinchar el teléfono?″, hay que tener en cuenta que el analizar los mensajes lo puede hacer un ordenador, y no uno de la CIA en una furgoneta aparcada en la esquina de tu casa. Normalmente están recolectando datos sin más, buscando cosas concretas, realizando análisis para hacer publicidad, cualquier cosa que se te ocurra y probablemente cosas que ni se te ocurran

Obviamente es imposible (al menos para alguien que no sea el ejército de EEUU) crear una red privada en la que todos los ordenadores sean seguros al 100%, así que la solución es encriptar los mensajes.
Pero, ¿qué es eso de encriptar un mensaje?
Muy simple, usando fórmulas y propiedades matemáticas muy complejas, un programa transforma texto a números sin sentido. Y estos números sin sentido no pueden volverse a transformar en el texto inicial si no sabes una clave secreta.
Es técnicamente imposible pasar de los números (texto codificado) a el texto inicial sin saber la clave. Y digo técnicamente porque en la teoría sí se puede (por ejemplo probando todas las claves posibles), pero se tardaría tanto tiempo en sacarlo que es imposible (y hablo de cientos años, muchos además con varios ordenadores a pleno rendimiento).

Ahora llegamos a un problema, si se tiene que mandar una clave secreta para desencriptar un mensaje, ¿cómo le envío la clave de forma segura a quién quiero que lea el mensaje?. Y si realmente existe una forma de enviar esa clave de forma segura, ¿por qué no enviar el mensaje de la misma manera y ya está?.
Pues, no siempre existe una forma segura de enviar mensajes, así que la solución a la que se llegó es en crear dos claves, una pública y otra privada.
La clave privada la guardas tu en tu ordenador de forma segura y la pública la dejas colgando por internet para que todo el mundo la pueda ver.

La gracia está en que un mensaje codificado con una de las claves (la pública o la privada) solo puede ser descodificada usando la otra clave. ¿Cómo se hace esto? Pues usando fórmulas y propiedades matemáticas muy complejas. Y además las claves son completamente independientes. Una no depende de la otra, y con una no puedes deducir la otra. Solo que cuando codificas un texto solo la otra clave es capaz de descodificarlo (es decir, mostrar el texto original).

De esta forma, tu dejas tu clave pública por internet, y cuando alguien te quiere mandar un mensaje ″privado″, codifica el mensaje usando tu clave pública. Como nadie excepto tú tiene acceso a tu clave privada, solo tú puedes leer el mensaje.
Para responder a esa persona tienes que codificar la respuesta usando su clave pública, y él la descodificará usando su clave privada.
Simple, ¿verdad?

Hay otro problema relacionado con la seguridad de los mensajes, y es que alguien se haga pasar por ti.
Es realmente algo muy simple, y muchos virus del messenger lo hacen. Mandan spam desde tu correo y cosas así.
Esos no son realmente un problema ya que son robots que no saben lo que hacen, pero de la misma forma, alguien podría mandarte mensajes que tu crees que son importantes, pero que son falsos. O no solo eso, que mandes un mensaje y que en un ordenador intermedio de la red sea cambiado. Imagina, te mando un mensaje diciendo "No vayas a comer a la pizzería porque he visto que usan ingredientes caducados" y resulta que esa pizzería es de un buen amigo de tu ISP y ha configurado los ordenadores para cambiar el texto a "Ve a comer a la pizzería". Recordemos que el texto se envía de forma plana de un ordenador a otro así que cualquier ordenador lo puede editar (y aunque parezca increíble, se hace, y muchísimoPor ejemplo, Microsoft confirmó que el Skype bloquea mensajes que hablan sobre The Pirate Bay
La mayoría de los teléfonos con habilidad de mandar emails añaden texto como "Enviado desde mi teléfono".
Algunos incluso añaden publicidad (el servicio de email gratuito de lavabit.com o hotmail por ejemplo), algunos proveedores de telefonía móvil...
La lista es increíblemente grande.
)

Así que, ¿cómo saber que realmente un mensaje es de quién crees que es, y además que no ha sido editado por el camino?
Usando lo que se llama firma digital.
Una firma digital no es más que una serie de números que te identifican a ti y solo a ti, y funciona de la misma manera que la clave para criptografiar un mensaje. El mensaje se analiza y se saca un número único que depende del mensaje y de tu firma digital.
Cuando tu recibes el mensaje solo tienes que hacer el mismo proceso, miras la firma digital y el mensaje y sacas ese mismo número. Si los números coinciden es porque el autor es el mismo y porque el mensaje no se ha editado. Si no coinciden... malo malo.

Todo esto suena genial, pero ¿cómo lo aplico a mi día a día? Además suena a algo muy caro.
Mal. La buena criptografía es siempre opensource (es decir, libre y gratis para todos), de forma que cualquier persona puede ver cómo funciona (OJO: no cuál es tu clave ni nada por el estilo). Si mucha gente ve como funciona y alguien encuentra algún fallo los creadores lo arreglarán.
Además, saber que siempre puedes mirar cómo funciona todo (y que hay gente que lo comprueba) te da la seguridad de que no hacen cosas para por ejemplo mandar información privada tuya a otras personas sin que te des cuenta, y cosas así.
Es decir, ¿para qué fiarme de los creadores de un programa si simplemente puedo leer cómo funciona? Esto es algo muy importante en la seguridad y la criptografía porque estás jugando con datos privados.

Uno de los programas más importantes que hay se llama GnuPG (es el que uso yo). Estaba hecho para linux, pero hay versiones para windows, mac y muchos otros sistemas operativos.
http://www.gnupg.org/download/index.es.html (Bajad hasta donde dice Binarios (ejecutables) y seleccionad el archivo GnuPG 1.4.11 u otra versión más nueva, compilado para Microsoft Windows, donde pone FTP)

El programa en sí es complicado y horrible, primero porque no tiene interfaz gráfica, es decir, no se abre una ventana con botones de siguiente, siguiente típicos de Windows. Pero, hay otros mini-programas que se comunican con ese programa para hacerlo todo de forma automática.
Uno de ellos es un plugin para el Thunderbird llamado enigmail.
Es simplemente genial, le dices ″quiero mandar este mensaje codificado y/o firmado″ y él lo hace todo por ti. Y cuando recibes un mensaje lo descodifica y lo comprueba por ti. No hay que tocar nada de nada, funciona todo de forma automática y transparente, obviamente preguntando de vez en cuando cosas, pero muy simple de usar.

Para los que no uséis Thunderbird:
Primer paso, descargar thunderbird xD http://www.mozillamessaging.com/es-ES/thunderbird/ Y lo digo enserio jaja.

¿Por qué es mejor usar Thunderbird? O mejor aún ″¿Qué es un cliente de correo?″ Y aún mejor: ″¿De qué demonios hablas?, yo soy de hotmail.″
Voy a explicar qué es un webmail y por qué no debéis usarlo.

Primero, webmail es lo que dice la propia palabra: email leído desde una página web. Es decir, entras en el firefox (como alguno diga ″entras en el internet explorer″ puede ya regalar su ordenador a cualquier cracker de 12 años y decirle ″oye, que es que soy tonto″), entras en una página web concreta (no se cuál es la de hotmail, pero creo que es msn o algo así), o en la de terra, o en la de ono, o en la de yahoo. Lo que sea. Entrar en una web para ver tu correo es algo que está mal, y es lo que se llama webmail.
El problema es que una conexión de http (página web) es poco segura, además te metes en páginas web de supercorporaciones, y te meten publicidad hasta en los propios mensajes (lo digo en serio, he recibido muchos mensajes que al final adjuntaban ″hotmail blah bla blah″), por no decir la publicidad de la página web, la cutrez y lentitud de la interfaz y que NO SON SEGURAS.
Piensa en lo que he explicado antes de man-in-the-middle. Aquí se lo pones en bandeja, porque te conectas a un servidor web (con sus conexiones intermedias), ese servidor web casi seguro que controla lo que haces (para eso es Microsoft o similares), luego, esa página web se conecta por su cuenta al servidor de correo (con su nueva tanda de conexiones intermedias) y envía el mensaje. Es decir, muchas más conexiones intermedias no seguras y mucha información privada enviada directamente a un servidor central que lo controla todo. Además la conexión tu_ordenador - página_web es especialmente insegura casi siempre (exceptuando bancos y demás que se gastan una pasta en seguridad).
Y no solo eso, además hay muchas opciones y mucho control que pierdes por usar webmail.
En resumen, descarga un cliente de correo.

¿Qué es un cliente de correo?
Un ejemplo de este tipo de programas es el que Windows nos instala por defecto en el pc llamado Outlook. Pero yo no lo recomiendo (¿que raro, eh?), al igual que no recomiendo internet explorer.
En mi opinión lo mejor es usar el Thunderbird, que es como el Firefox pero de cliente de correo. Es más, lo han creado los mismos, y es open-source (gratis) y muy completo y seguro.
http://www.mozillamessaging.com/es-ES/thunderbird/

Resumen para seguridad con el email:
  • Usar un cliente de correo (mejor opensource) [Recomiendo el Thunderbird]
  • Criptografiar o al menos firmar los mensajes (tiene que ser opensource por seguridad) [Recomiendo el GnuPG]
  • Por comodidad usar el plugin del Thunderbird que hace todo por nosotros entre el GnuPG y el Thunderbird. (Enigmail).

Añadido el 30/04/12
Hay varias formas de conseguir un certificado para cifrar o firmar archivos y correos. La que he comentado es crear tu propio para de claves gpg, esto tiene sus ventajas, es gratuito, rápido, y seguro, pero por otra parte cualquiera puede hacerlo, y cualquiera puede crear un certificado diciendo ser quién le de la gana. Es decir, podría crearme mi propio certificado diciendo que soy el presidente de EEUU y no habría problema. Para evitar eso se hacen las llamadas key parties (o algo así), que básicamente consisten en quedadas de mucha gente para dar sus claves públicas de forma física para estar más seguros de que alguien es quién dice ser.
La opción más segura es depender de un servidor de claves conocido.
Las claves son firmadas según el nivel de confianza que tengas. Cuando te presentan una clave tu estableces el nivel de confianza en el autor y la firmas, de esta forma, otras personas que confíen en ti, pueden confiar también en claves que tu has firmado como válidas. Es algo así como ″los amigos de mis amigos son mis amigos″ pero con claves.

Hay empresas que se dedican a crear claves. Estas grandes empresas firman diciendo que confían en esa clave al 100%. Por ejemplo, cuando nos conectamos a un banco (conexión https), la clave del servidor ha sido creada por una empresa de ese tipo.
Si queremos crear nuestro par de claves de esa forma necesitamos normalmente pagar unas tasas desorbitadas a dicha empresa, que además establece una caducidad de la firma digital que deberemos renovar. Esta es la forma más segura de tener una clave, pero también es la más cara. Se usa principalmente para páginas web seguras.

Aunque hay algunas empresas que generan esos certificados de forma gratuita, como por ejemplo cacert.org . Obviamente hay que registrarse y demostrar que eres el dueño del correo electrónico/página web, y dar nombre y apellidos. Pero obtendremos una clave firmada.
Esto es una mezcla de ambas situaciones, es más seguro porque está firmado, pero realmente cualquiera podría hacerlo.

Estos certificados se llaman de otra forma y no son equivalentes. Los explicados anteriormente son certificados gpg, y los firmados por empresas son s/mime.
Cuando un ingeniero firma un proyecto de forma digital usa firmas que una empresa (o universidad) ha generado, y por tanto es del tipo s/mime, mientras que un particular suele usar una clave gpg.
Hay algunas aplicaciones que utilizan criptografía para las comunicaciones (por ejemplo para VoIP con mumble) que necesitan una clave s/mime, y por ejemplo algunas páginas web utilizan certificados para identificarse en vez de el típico usuario/contraseña. Para todos estos casos es necesario claves más oficiales que un simple gpg, y gracias a empresas como CAcert.org una persona cualquiera puede conseguir una clave así de forma gratuita.


Añadido el 5/11/12
cprcpr me ha comentado que hay un addon para el Chrome que permite usar criptografía en webmail (como gmail). El artículo que habla de ello es el siguiente: http://www.neoteo.com/safemail-encripta-correo-de-gmail
No lo he probado (porque no uso Chrome ni webmail) así que no puedo recomendarlo ni opinar sobre él.


Espero que os haya gustado, la próxima vez cómo mantener tu ordenador protegido para dummies.

Para comentar o discutir sobre el artículo usa el foro:
http://www.nakerium.com/foro/viewtopic.php?f=6&t=193