txipi
Sin Dominio
txipi@sindominio.net

versión 0.1

14 de junio de 2003

Copyright (C) 2003 txipi, txipi@sindominio.net. Se otorga permiso para copiar, distribuir y/o modificar este documento bajo las condiciones de la Licencia GNU para Documentación Libre, versión 1.1 o posterior, publicada por la Free Software Foundation, sin secciones invariantes. Una copia de la licencia se encuentra en el fichero GFDL.

Seguridad informática

"To believe is very dull. To doubt is intensely engrossing. To be on the alert is to live, to be lulled into security is to die."

Oscar Wilde

Como dijo Wilde, vivir obsesionado por la seguridad es un poco ridículo, es casi peor el remedio que la enfermedad. Todo esto nos lleva a la manida frase de "la seguridad total no existe". Sin embargo, sí que podemos hacer bastantes cosas para mejorar la seguridad de nuestros ordenadores fácilmente y sin mucho esfuerzo, como comentaremos.

Cuestiones como comprender por qué una contraseña es buena y otra es mala, cómo poder proteger un documento privado de forma segura, cómo navegar sin ir dejando rastro en todas las páginas web que visitemos, por qué alguien puede entrar en nuestro ordenador remotamente y destrozarlo o utilizarlo como trampolín para atacar a otro, etc. serán las que trataremos aquí, poco a poco e intentando no centrarnos en los tecnicismos sino en ideas sencillas de entender y prácticas fáciles de hacer.

Un pequeño repaso a la criptografía

Criptografía, criptoanálisis, cifrado... palabras que suenan a complicadísimas operaciones matemáticas y a científicos de bata blanca llenando pizarras y pizarras de fórmulas imposibles. Sí, eso es una parte de la verdad, pero la criptografía ha sido hasta hace relativamente poco algo mucho más rudimentario y casi divertido.

Criptografía viene del griego "kryptos", oculto, y "graphos", escritor: el arte de escribir de forma oculta. Como es lógico, todo método criptográfico se ha asociado mucho a épocas en las que el envío de mensajes ocultos era muy importante, como sucede típicamente en las guerras. Si alguien del bando enemigo lograba interceptar un mensaje, las consecuencias podrían ser desastrosas. Durante el imperio romanoi, por ejemplo, el problema tenía solución (un cambio de estrategia), porque era muy fácil detectar que un mensaje había sido interceptado (normalmente el mensajero no vivía para contarlo). En nuestros días, esta situación cambia bastante, porque actualmente es posible interceptar un mensaje sin que el emisor ni el receptor se den cuenta. Por esta razón, es importante proteger mediante medios criptográficos la información privada que queramos enviar por la red.

Cifrar un texto no es algo muy espectacular. Sólo hace falta aplicar un "algoritmo", es decir, una receta para cifrar. Por ejemplo, vamos a cifrar el texto "La acción será mañana en la plaza" con una receta muy sencilla, "sumar 2 a todas las letras":

 texto original: "La acción será mañana en la plaza"
 texto cifrado:  "Nc ceekqo ugtc ñcpcoc go nc rncbc"

Al principio puede parecer un poco confuso, pero vamos a verlo por partes:

  1. El alfabeto que hemos utilizado es este: "ABCDEFGHIJKLMNÑOPQRSTUVWXYZ".

  2. Cuando queremos cifrar una letra, lo que tenemos que hacer es coger la letra que está dos posiciones hacia la derecha en ese alfabeto. Por ejemplo, para cifrar la "A", avanzamos dos posiciones hasta la "C".

  3. Para descifrar, tenemos que hacer el proceso contrario, restar dos posiciones a todas las letras. Por ejemplo, para descifrar "N", retrocedemos dos posiciones en el alfabeto hasta la "L".

  4. Cuando estamos en los bordes del alfabeto (al principio -"A"- o al final -"Z"-), si tenemos que cifrar o descifrar, continuamos por el otro lado. Es decir, por ejemplo, para cifrar una "Y" tenemos que avanzar dos posiciones hacia la derecha: avanzamos una hasta la "Z", y como ahora no podemos avanzar más, continuamos por el otro lado, "A". Cuando tengamos que descifrar esa "A", tendremos que ir dos posiciones hacia la izquierda, pero como no hay, continuamos por el otro lado: una posición hasta la "Z", y otra hasta la "Y".

De esta manera podemos cifrar y descifrar cualquier texto de forma muy sencilla. Con este ejemplo hemos podido ver unos cuantos elementos dentro del cifrado:

  1. El algoritmo o receta empleado, en este caso "sumar".

  2. La clave utilizada, en este caso "2". Si la clave fuese "5", habría que sumar 5 para cifrar y restar 5 para descifrar, por ejemplo.

  3. El texto original.

  4. El texto cifrado.

 texto original ---> algoritmo de cifrado ---> texto cifrado
                       ^
                      /
 clave ---------------

Este algoritmo que hemos utilizado para cifrar y descifrar es el que empleaba Julio César para enviar mensajes cifrados. Tiene el problema de que en el otro lugar hacia donde se enviaba el mensaje, también necesitaban saber la clave con la que ha sido cifrado para poder descifrarlo. Esto se resolvió utilizando pergaminos enrollados sobre una vara de madera de diferente longitud. En función de esa longitud, el receptor del mensaje ya sabía cuál había sido la clave empleada. Por ejemplo:

 Longitud de la vara		Clave
 10 cm				1
 11 cm				2
 12 cm				3
 13 cm				4
 ...

Este truco sirvió en su momento, pero es bastante peligroso, porque cualquiera que se diese cuenta de ello, podría descifrar todos los mensajes. Ahí reside el problema fundamental de esta clase de algoritmos, necesitan que tanto el emisor del mensaje como el receptor conozcan la clave que se ha utilizado. Por esto mismo se los conoce como algoritmos de "secreto compartido" (el secreto es la clave utilizada) o algoritmos simétricos.

¿Cómo transmitimos el secreto o clave para que tanto el emisor como el receptor sepan como cifrar y descifrar? Normalmente se utiliza otro método que se considera seguro. Por ejemplo, si queremos enviar a un amigo 200 documentos privados por carta, un método seguro sería guardarlos en una caja fuerte y enviar la caja fuerte por correo. Bien, el problema está en que si alguien nos intercepta habitualmente la correspondencia, no podemos enviar la llave de la caja fuerte por ese mismo medio, así que necesitaremos quedar en persona con el destinatario de todos esos documentos, para darle la llave en mano. Una vez que los dos tengamos una copia de la llave, podríamos utilizar la caja fuerte para enviarnos documentos privados por un canal inseguro (el sistema de Correos y Telégrafos estatal, que nos sigue la pista).

Pero claro, esto en Internet no tiene mucho sentido. No puedes ir a una tienda con tu clave en un diskette a decirles que les vas a mandar los datos cifrados con esa clave. Necesitamos una manera de pasar de forma segura a través de la red ese "secreto compartido" que es la clave. Podríamos utilizar otro algoritmo de cifrado totalmente diferente para pasar la clave, pero al final estaríamos en las mismas: ¿y cómo pasamos la clave de ese otro algoritmo por la red? Esto supuso un problema muy grande, pero se ha solucionado con un nuevo tipo de algoritmos de cifrado, los algoritmos asimétricos o algoritmos de clave pública y clave privada.

Entender los algoritmos asimétricos suele costar un poco, porque estamos muy acostumbrados a utilizar algoritmos simétricos, en los que la clave para cifrar y para descifrar es la misma: guardamos algo en una caja fuerte y la combinación para cerrarla es la misma que para abrirla, utilizamos un candado para la bicicleta y la llave para cerrarlo es la misma que para abrirlo, parece lógico, ¿no? Bien, pues los algoritmos asimétricos o de clave pública y privada no funcionan así, sino que utilizan una clave para cifrar, y otra diferente para descifrar. En realidad lo que tenemos es un par de claves: la clave privada y la clave pública.

Lo curioso de estas dos claves es que ''todo lo que cifre una clave, lo descifra la otra y sólo la otra'', y viceversa. Es decir, tenemos un candado con dos llaves, una roja y otra negra. Si cierro el candado con la llave roja, sólo lo podré abrir con la negra. Y si lo cierro con la llave negra, sólo lo podré abrir con la roja. ¿Qué utilidad tiene esto? ¿No es complicar más la manta innecesariamente? No, sigamos con el ejemplo del candado: todos los candados que se cierren con tu llave roja, sólo podrán ser abiertos con tu llave negra y con ninguna más. Entonces lo que haces es regalar copias de tu llave roja a todo el mundo (ésta será tu clave pública), y guardar tu llave negra en casa sin dejársela a nadie (ésta será tu clave privada). Cuando alguien te quiera enviar algo privado no tiene más que coger una copia de tu llave roja, proteger el paquete con un candado cerrado con tu llave roja y así se asegurará que sólo el que tenga la llave negra complementaria podrá abrir el paquete, es decir, sólo tú podrás abrirlo, porque tienes la llave complementaria.

De esta forma podemos utilizar un medio inseguro como Internet (para mandar información i digital) o el sistema de Correos y Telégrafos (para enviar paquetes), sin ningún miedo a mandar copias de la clave pública o la llave roja del candado, porque cuando un mensaje sea cifrado con tu clave pública o cuando un paquete sea protegido con tu llave roja, SOLAMENTE tu clave privada podrá descrifrarlo o tu llave negra podrá abrir el paquete.

Cifrado y firma de ficheros y correos (GnuPG / PGP)

Todo el proceso de cifrado y firmado digital a nivel doméstico está irremediablemente asociado a tres siglas: PGP. PGP significa "Pretty Good Privacy", "Privacidad Bastante Buena", y es un conjunto de programas que permiten crear pares de clave pública / clave privada, almacenarlos de forma segura, enviar correos electrónicos cifrados, firmarlos digitalmente, etc.

PGP se ha convertido en un estándar de facto dentro de la privacidad a nivel doméstico. Además de esto, su creador, Phil Zimmerman, se ha esforzado por crear OpenPGP, una especificación de cómo hacer programas compatibles con PGP. Actualmente PGP es una herramienta comercial propiedad de NAI (Network Associates), empresa que permite descargarse una versión personal de PGP para su evaluación.

En enero de 2001, Phil Zimmerman abandona NAI por problemas respecto a la línea que debería seguir PGP. En ese momento Zimmerman realiza unas declaraciones históricas:

"Let me assure all PGP users that all versions of PGP produced by NAI, and PGP Security, a division of NAI, up to and including the current (January 2001) release, PGP 7.0.3, are free of back doors,".

(http://www.theregister.co.uk/content/archive/17064.html)

Es decir, aseguraba que hasta la versión 7.0.3 de PGP, no había ninguna puerta trasera que permitiera a ningún gobierno conseguir descifrar nuestros datos de forma indirecta. Esto es un acto de fé, claro está. Podemos creer o no creer a Zimmerman, pero su reputación estaba en juego y no creemos que mintiese en esa ocasión. El caso es que a partir de esa versión ya no hay un experto en criptografía mundialmente reconocido como Zimmerman llevando el producto PGP, y nadie nos asegura que PGP 8.0 y sucesivos no contengan puertas traseras que puedan ser utilizadas por los gobiernos para descifrar nuestros correos electrónicos y nuestros ficheros cifrados. Podemos descargar una copia de la última versión certficada por Zimmerman de este dirección: ftp://ftp.es.pgpi.org/pub/pgp/7.0/7.0.3/PGPFW703.zip

Podemos seguir fiándonos de los programadores de NAI o podemos optar por una versión libre de PGP, GnuPG. GnuPG es un proyecto similar a PGP y compatible con el estándar OpenGPG que tiene la característica de ser Software Libre. Esto nos proporciona muchas ventajas, pero entre ellas hay una muy importante en este punto: tenemos el código fuente del programa, podemos ver cómo está hecho y buscar posibles puertas traseras. Es como si en lugar de fiarnos de que el búnker que nos vende una empresa es seguro y sin puertas traseras, consiguiéramos los planos de un búnker y nos lo hiciéramos nosotros, asegurándonos que no las tendrá.

Utilizando GPG (GnuPG)

Con la idea de que comencemos a utilizar GPG para cifrar todos nuestros correos electrónicos (es convieniente cifrar todos los correos que podamos, no sólo los importantes, para que sea más difícil para quien nos espíe diferenciar los datos cifrados importantes de los irrelevantes), veremos el proceso de instalación de GPG en Microsoft Windows y GNU/Linux, así como la creación de nuestra clave pública y privada.

La instalación y utilización de GPG en Microsoft Windows es muy sencilla si empleamos un paquete de instalación como WinPT (http://winpt.sourceforge.net/es/index.php). Mediante WinPT, la instalación de GPG se reduce a seguir los pasos guiados de un asistente:

1) Arrancar el programa de instalación

Una vez que nos hayamos descargado el programa de instalación , símplemente deberemos hacer doble-clic sobre él y comenzará a ejecutarse. La primera pregunta es acerca del idioma en el que queremos instalar GPG:

./img/WinPT01.jpg

Elegiremos castellano y continuaremos con el asistente de instalación:

./img/WinPT02.jpg

Después de darnos la bienvenida, el programa nos muestra la licencia de GPG. Al contrario que la mayoría del software para Microsoft Windows, WinPT y GPG son Software Libre, bajo la licencia GPL. Esto nos permite tener más libertades al utilizar y redistribuir este software, y en este caso en concreto, nos proporciona la garantía de que no contiene software espía o malintencionado, lo cual es crítico dentro del software orientado a la privacidad:

./img/WinPT03.jpg

2) Elegir el lugar qué componentes instalaremos

Un punto importante dentro de la instalación es decidir la carpeta en nuestro disco en la que instalaremos el programa. Por defecto el asistente nos sugiere "C:\Archivos de Programa\Windows Privacy Tools". Si no tenemos problemas de espacio en la unidad C:, esa es una ubicación idónea.

./img/WinPT04.jpg

Seguidamente decidiremos qué módulos instalaremos. En caso de duda lo mejor en seleccionar todos, fijándonos especialmente en el apartado "Módulos de correo electrónico", donde podremos seleccionar módulos para integrar GPG con nuestros clientes de correo favoritos:

./img/WinPT05.jpg

En el siguiente paso del asistente se nos pide un nombre para crear una carpeta en el menú Inicio. Lo dejaremos como está y pulsaremos "Siguiente":

./img/WinPT06.jpg

3) Configurar inicialmente GPG

Una vez instalado en disco, el asistente nos solicitará que definamos las opciones iniciales de GPG. Lo más razonable es dejarlo tal y como viene por defecto, teniendo cuidado de que está seleccionada la opción "GnuPG oficial" en "Versión de GPG a instalar", dentro de "Opciones avanzadas":

./img/WinPT07.jpg ./img/WinPT08.jpg

4) Instalar en disco

Una vez definido todo lo anterior, no queda sino copiar los ficheros a disco y dar por concluido el proceso de instalación:

./img/WinPT09.jpg ./img/WinPT10.jpg

Lo siguiente que deberemos hacer, es crear nuestro primer par de claves personal. Si es la primera vez que instalamos GPG en nuestro ordenador, el asistente de instalación detectará que no hay ningún llavero de llaves GPG en el sistema y nos pedirá que creemos uno nuevo:

./img/WinPT11.jpg

Dentro de las opciones que inicialmente se nos ofrecen, tenemos: generar un nuevo anillo o "llavero" de llaves, importar un anillo ya existente (si no es la primera vez que instalamos GPG y queremos conservar el anillo de llaves que creamos la primera vez) o importar las llaves desde un servidor. La opción que deberemos elegir es la primera, que WinPT genere un nuevo anillo de llaves:

./img/WinPT12.jpg

Para generar nuestro par de llaves o claves pública y privada (es decir, crear una copia de la "llave roja" que daremos a todo el mundo y de la "llave negra" que no daremos a nadie), deberemos rellenar una serie de datos: el tipo de cifrado y tamaño de la clave que queremos (dejaremos el tipo tal y como viene -DSA and ELG (default)- y modificaremos el tamaño a 2048 bits de clave), nuestro nombre, un comentario (podemos poner lo que queramos), dirección de correo electrónico, la fecha en la que queremos que caduque el par de claves y la passphrase. Normalmente la fecha indica el tiempo de vigencia de ese par de claves, aunque es habitual decir que no expira nunca. La passphrase es una contraseña más larga de lo normal que sirve para proteger nuestra clave privada. Aunque nos roben la clave privada, deberán adivinar esta passphrase para utilizarla, así que conviene poner una buena contraseña (para más indicaciones sobre cómo elegir una buena contraseñas, mira el apartado siguiente):

./img/WinPT13.jpg

Una vez definidos todos estos datos, pulsamos "Aceptar" y el programa generará las claves a través de cálculos complejos (suele tardar un par de minutos):

./img/WinPT14.jpg

./img/WinPT15.jpg

Finalmente se nos indica que es muy recomendable guardar una copia de seguridad del llavero o anillo de llaves públicas y el anillo de llaves privadas ("pubring" y "secring" respectivamente). El "secring" deberá ser guardado en un lugar seguro, en un diskette que guardemos en una caja fuerte o algo similar, por ejemplo. El anillo de llaves públicas es menos crítico en cuanto a seguridad y podremos guardarlo donde nos apetezca.

./img/WinPT16.jpg

./img/WinPT17.jpg

Y ya está. Eso es todo. Ya tenemos nuestro sistema de privacidad GPG listo para ser utilizado. Esto nos permitirá proteger mediante cifrado ficheros importantes de nuestro disco, correos electrónicos, etc. Vamos a ver ahora como utilizar GPG para cifrar y descifrar datos dentro de nuestro ordenador.

Para empezar, vamos a abrir un Bloc de Notas y escribir una frase cualquiera. La seleccionamos y la copiamos en el portapapeles para poder hacer Copiar&Pegar (es decir, pulsamos Control+C o elegimos "Editar -> Copiar" en el menú del Bloc de Notas):

./img/WinPT23.jpg

Seguidamente vamos a la esquina inferior derecha de nuestro escritorio y justo al lado de donde se muestra la hora, hay un icono como una lupa, del GPG. Pulsamos con el botón derecho y se nos muestra el siguiente menú:

./img/WinPT24.jpg

Elegimos "Clipboard", es decir, portapapeles, y dentro de ahí, seleccionamos "Encrypt". Se nos muestra un menú con las claves de cifrado disponibles en nuestro ordenador, y elegimos la nuestra, por ejemplo:

./img/WinPT25.jpg

Haciendo esto habremos encriptado lo que previamente guardamos en el portapapeles haciendo Control+C. Volvemos al Bloc de Notas y hacemos Control+V para pegar el resultado de nuestra operación:

./img/WinPT26.jpg

El resultado es un bloque ininteligible de números y letras, precedido de un encabezado que muestra que eso es un bloque de datos cifrado con GPG.

Vamos a hacer ahora el proceso inverso. Supongamos que alguien nos ha mandado un correo cifrado y lo que hemos recibido es un bloque GPG lleno de símbolos extraños. Lo primero que tenemos que hacer es copiarlo al portapapeles, seleccionándolo y pulsando Control+C o "Edición -> Copiar" dentro del menú:

./img/WinPT27.jpg

Volvemos a acceder al menú que está en la esquina inferior derecha, junto a la hora del sistema, y seleccionamos "Clipboard -> Decrypt/Verify" para descifrar el contenido del portapapeles:

./img/WinPT28.jpg

GPG comprueba que el texto ha sido cifrado con nuestra clave y nos muestra un diálogo para que introduzcamos la "passphrase" que protege nuestra clave privada:

./img/WinPT29.jpg

Si la introducimos mal, GPG no será capaz de acceder a la clave privada necesaria para descrifrar el texto, y se producirá un error:

./img/WinPT30.jpg

Si por el contrario hemos introducido bien la passphrase, el contenido del portapapeles se habrá descifrado correctamente y podremos copiarlo (con Control+V o eligiendo "Edición -> Pegar") en el Bloc de Notas para leer el texto en claro:

./img/WinPT31.jpg

Si hemos seguido los pasos correctamente hasta aquí, ya sabremos cifrar y descrifrar todos los textos que queramos mediante GPG, ya sean correos electrónicos o textos guardados en el ordenador. El método que hemos empleado es el más genérico y el más manual, para poder utilizarlo en multitud de ocasiones y con muchos programas diferentes. No obstante, algunos programas como el Outlook Express o el Eudora tienen módulos propios para cifrar y descrifrar correos electrónicos cifrados con GPG de forma automática y mucho más cómodamente. En definitiva, el camino que hemos seguido es el más "rudimentario", pero entendiendo esto bien es mucho más fácil encontrar los diferentes "atajos" que tiene el sistema GPG para utilizarlo más agilmente :-)

Por último vamos a ver cómo poder exportar nuestra clave pública a un fichero de texto, para poder pasárselo a todos nuestros compañeros y que ellos sepan como nos gusta que nos cifren los datos (recordemos todo el asunto del candado que se cierra con una llave y se abre con la otra: nosotros regalamos a todos nuestros compañeros una copia de la llave roja -la pública- y cuando la usen, sólo nuestra llave negra -nuestra llave privada- podrá abrirlo, haciendo imposible cualquier intercepción de la información). Para exportar nuestra clave pública, lanzamos el "Administrador de claves" de GPG y seleccionamos nuestra clave. Una vez hecho esto, elegimos "Key -> Export..." en el menú:

./img/WinPT20.jpg

Y se nos mostrará un diálogo en el que nos piden un nombre de fichero para guardar la clave. Elegimos "miclaveGPG.pub" o algo similar y pulsamos "Aceptar":

./img/WinPT21.jpg

./img/WinPT22.jpg

Ahora ya sólo queda distribuir este fichero a todos los compañeros que nos quieran enviar algo cifrado con GPG. Alguna gente incluye su clave pública en todos los correos electrónicos que envía, otros ponen un enlace a una página web que contiene su clave pública, otros dejan una nota diciendo que utilizan GPG y que les pidas la clave pública si la necesitas.

GPG en GNU/Linux

El proceso para utilizar GPG en GNU/Linux es muy similar. Aquí nos centraremos en un asistente para GnuPG llamado KGPG, basado en el entorno de ventanas KDE (The K Desktop Environment). Muchas distribuciones de GNU/Linux lo tienen preinstalado desde el principio, en otras es necesario instalarlo. Para distribuciones basadas en Debian GNU/Linux, como Debian, Knoppix, GNOME/Live-CD, Linex, Guadalix, X-evian, etc. basta con hacer lo siguiente (como root):

 apt-get install kpgp

Una vez que está intalado, lo lanzamos escribiendo "kgpg" en una terminal del entorno de ventanas KDE. Si es la primera vez que utilizamos el programa, y no hay ningún anillo de claves creado, se nos mostrará un diálogo solicitándonos que creemos un nuevo par de claves:

./img/kgpg01.png

El diálogo para crear un nuevo par de claves es exactamente igual que el que hemos comentado para WinPT (GPG para Windows), así que lo rellenamos de igual forma:

./img/kgpg02.png

Seguidamente se nos pide la passphrase (recordemos que conviene que sea una contraseña potente):

./img/kgpg03.png

Y ya tenemos el KGPG funcionando, como muestra el icono con un candado al lado de la hora del sistema:

./img/kgpg04.png

Para realizar todas las operaciones de cifrado, descifrado, firma digital, etc. debermos pulsar sobre el candado de la barra de tareas, de forma similar a cuando pulsábamos en el icono de GPG en Windows. KGPG dispone además de un programa de "Administración de claves" como en Windows, desde el que podremos exportar nuestra clave pública para que nuestros compañeros puedan utilizarla y cifrar datos exclusivamente para nosotros:

./img/kgpg05.png

Para más información, conviene consultar:

Esteganografía

La esteganografía es un caso particular dentro de la criptografía. La palabra también proviene del griego y significa "escritura encubierta" ("stegos" es cubierto). El nombre es muy apropiado, puesto que mediante la esteganografía conseguimos ocultar un mensaje dentro de otro, que hará de "encubridor". Veámoslo con un ejemplo:

 texto original: Evidentemente, siempre tienes organizada esta sala tan alegremente como Iñigo Freire 
                 recomendó antes de octubre.
 texto encubierto: Esto esta cifrado.

El texto encubierto se consigue tomando la primera letra de cada palabra de la frase original. De esta manera, el mensaje original no parece contener información adicional y no suele levantar sospechas. Obviamente este ejemplo es muy simple, pero es posible encubrir información importante de formas mucho más sofisticadas. Hoy en día se utiliza mucho la esteganografía para ocultar mensajes dentro de fotos o ficheros de música.

La idea es más o menos sencilla: las fotos y los ficheros de música se comprimen para que ocupen mucho menos que el original. Todos sabemos que un fichero MP3 ocupa mucho menos que el fichero que contiene la canción en un CD de audio. Esto se consigue a través de ciertos trucos, como reducir la paleta de colores utilizados en una foto cuando hay muchos colores que son casi iguales, u obviar cambios muy pequeños de frecuencias altas dentro de un MP3. Por esa misma razón, si cambiásemos un poco el color en un punto de una imagen o si cambiásemos la frecuencia un poco en un instante de una canción, no lo notaríamos. Esto se utiliza para ocultar en esos pequeños cambios información confidencial.

Una imagen dentro de un fichero del ordenador está formada por una tabla con numeros. Cada uno de esos números indica qué color hay que poner en cada punto de la imagen para formar la imagen total. Es como aquellos cuadernos en los que había un dibujo sin colorear que tenía numeritos y nosotros teníamos que ir con las pinturas y pintar donde ponía un 1 en rojo, donde ponía un 2 en azul, etc. Pues el ordenador hace lo mismo con las imágenes: tiene una tabla con un montón de puntos y los números con los que se tienen que pintar esos puntos. Imaginemos que tenemos una imagen que tiene un lago muy grande y en una esquina hay una parte que es casi toda del mismo color de azul. Eso dentro del fichero estaría indicado como que cada uno de los puntitos que están en esa zona tienen el color 140, el 140, el 141, el 141, el 141, el 140, el 140, y el 139, que son diferentes tonos de azul, casi iguales. Por otro lado nosotros queremos esconder la letra "A", por ejemplo, dentro de esa foto. Para escribir una letra como la "A" es necesario que el ordenador utilice 8 bits. En concreto para la "A" el código ASCII es el 65, así que en binario sería 01000001. lo que vamos a hacer es sumarle a aquellos números de azul que teníamos en esa parte de la foto los números de guardar una letra "A":

 fragmento de foto azul: 140 140 141 141 141 140 140 139
 letra "A" (01000001)  :   0   1   0   0   0   0   0   1
 -------------------------------------------------------
 resultado             : 140 141 141 141 141 140 140 140

El fragmento de la foto ha cambiado en dos puntitos, pero sólo ha cambiado un tono en esos puntos, así que no desentona para nada. La foto se percibe prácticamente igual y nosotros hemos conseguido guardar una letra dentro de ella. Si el mensaje es mucho más grande, pues deberíamos escoger fotos con mucha resolución o ficheros de audio de muchos megas, para que no se note la diferencia con el original.

Existen incluso sistemas de ficheros esteganográficos que permiten tener ficheros enteros dispersos por otros ficheros diferentes. Por ejemplo, podríamos tener un fichero con contraseñas repartido en 600 MB de ficheros de música. Podríamos copiar esos ficheros de música en un CD, pasárselos a un amigo y que además de disfrutar de la música, pueda leer el fichero guardado esteganográficamente.

La herramienta más utilizada para encubrir datos dentro de ficheros en el mundo Windows ha sido "camouflage" (http://www.camouflagesoftware.com). Típicamente se ha utilizado para guardar ficheros MP3 como si fueran imágenes y poder colgarlos de servidores web gratuitos. La esteganografía así conseguida no consigue engañar más que al ordenador que hace de servidor web, porque cualquier persona se daría cuenta de que esas imágenes no son reales. En un MP3 de 3 MB, por ejemplo, hay tanta información que encubrir que la imagen final queda totalmente distorsionada. Es fácil ocultar una aguja en un pajar, pero es bastante difícil hacer lo mismo con 7 toneladas de agujas. En cuanto a herramientas de software libre, existen varios programas que pueden ocultar información dentro de otros ficheros:

esteganográficos dentro de imágenes y demás ficheros. Normalmente detecta versiones anteriores de outguess y otros programas similares.

"12345678" no es una buena contraseña

Ingeniería Social

Quizá a alguno de vosotros le suene el nombre de Kevin Mitnick, un auténtico mito dentro del cibervandalismo de los años 80. La gran mayoría de ataques a sistemas y redes que Mitnick consiguió se debieron casi siempre a un par de trucos técnicos, pero sobre todo, a su gran maestría en el campo de la Ingeniería Social. Mitnick era el Lazarillo de Tormes de la era digital, utilizaba todas las artimañas que se le iban ocurriendo para conseguir información fácilmente.

A fin de cuentas, ¿qué es la Ingeniería Social? La Ingeniería Social (literalmente traducido del inglés "Social Engineering") engloba a todas aquellas conductas útiles para conseguir información de las personas del entorno de un ordenador. No son más que engaños, algunos externos al propio sistema informático (por ejemplo: entrar en el edificio como periodistas, aprovechando la vanidad de la gente, para conseguir información importante) y otros internos (aprovechar la confianza del usuario, como por ejemplo el gusano "Kournikova" o el "I Love You" que utilizan las ganas de ver a la tenista rusa o recibir una carta de amor para colarse en el sistema).

Imaginemos la siguiente conversación ficticia entre un intruso, Kevin, y un Proveedor de Internet, Neotel:

Neotel: Buenos días, bienvenido al servicio de atención al cliente de Neotel, le atiende Juan, ¿en qué puedo ayudarle?

Kevin: Hola, llevo toda la mañana tratando de acceder a Internet y no me funciona, ¿están teniendo problemas técnicos?

Neotel: Nuestros sistemas funcionan correctamente, ¿qué le sucede exactamente?

Kevin: Pulso en el icono de conexión a Internet y después de unos ruidos raros me sale esto... espere que lo tengo apuntado por si acaso... sí, aquí está: Error 630, Login or password incorrect, connection refused.

Neotel: Ha introducido erróneamente su usuario o contraseña.

Kevin: Eso es imposible, yo no he tocado nada. ¿No será que han modificado algo y no se me ha informado? Realmente estoy muy disgustado, necesito enviar un informe a mis empleados con urgencia y llevo toda la mañana perdida con este asunto, me estoy planteando cambiar de proveedor, ¡su servicio es pésimo!

Neotel: A ver, veamos como podemos solucionarlo... ¿es usted el titular de la línea de teléfono?

Kevin: Así es.

Neotel: Dígame su número de teléfono y número del Documento Nacional de Identidad.

Kevin: 970031337, y el DNI 42573658-Z

Neotel: De acuerdo, es usted...

Kevin: Juan López, vivo en c/ Valdivieso, 13, 1º D.

Neotel: Sí, eso es. Espere un momento...

ding, dong, ding ding dong, ding...

Neotel: Bien, tome nota por favor. Su nueva contraseña es: "Phe7a31X"

Kevin: Probaré con esta nueva contraseña, si tengo algún problema tenga seguro que volveré a llamar.

Tal vez pueda parecer algo irreal, pero no es así. Kevin conocía los datos del verdadero titular de la cuenta en el Proveedor de Internet y eso hizo asegurarse al trabajador de Neotel que se trataba de un cliente malhumorado. Esos datos son relativamente públicos, basta con mirar un listado de personas admitidas a unas oposiciones en un Boletín Oficial del Estado para conocer nombres, apellidos y números de DNI, o incluso direcciones, números de teléfono, etc. O más fácil aún, una simple carta de un Proveedor de Internet informando de una nueva oferta a uno de sus clientes puede contener toda la información necesaria para que se reproduzca la conversación anterior. ¿Debemos incinerar toda la propaganda que llega a nuestro buzones? ;-)

La Ingeniería Social, como veremos es un factor clave a la hora de adivinar una contraseña.

¿Cómo se guardan las contraseñas?

En la mayoría de los sistemas, las contraseñas se guardan en el mismo sitio en el que hay otra información importante para cada usuario, como su nombre, sus configuraciones, etc. Ese lugar normalmente es accedido por muchos programas y personas que necesitan información de un usuario en concreto, como por ejemplo saber si ese usuario tiene permisos para entrar en una determinada carpeta o saber el lenguaje preferido por el usuario para mostrar una pantalla en un idioma o en otro, etc. Toda esta información referente a los usuarios de un sistema suele guardarse en un fichero. En GNU/Linux y la mayoría de sistemas UNIX este fichero está en /etc/passwd, en Microsoft Windows su ubicación varía dependiendo de la versión que se utilice.

Como podemos intuir, ese fichero tiene que ser accedido por muchas personas y programas y además contiene las contraseñas del sistema, así que tenemos un problema. No podemos guardar las contraseñas sin más, porque cualquiera podría leerlas. Tenemos que cifrarlas, pero si las ciframos utilizando un método simple, pronto alguien lo adivinará y podrá conseguir todas las contraseñas. Por esa misma razón, las contraseñas en un sistema se cifran con un método de cifrado indescifrable. ¿Cómo? ¿De qué nos sirve cifrar algo de tal manera que no exista un método para hacer la operación contraria? Responderemos a la gallega con otra pregunta: ¿para qué usamos las contraseñas que hemos cifrado en ese fichero? Para comprobar si la contraseñá que nos han pasado por teclado es correcta. Pero claro, no podemos descifrarlas para comprobar si es correcto lo que el usuario ha introducido por teclado. El truco está en cifrar lo que el usuario ha introducido y comparar cifrado con cifrado:

 Usuario (teclado)
                                contraseña: hola --------ciframos-------------> RAZFC72ckD/g2 (hola cifrado)
 Sistema (fichero /etc/passwd)                                                      || ? (SI, Acceso concedido)
                                contraseña: ???? <----NO PODEMOS DESCIFRAR!!--- RAZFC72ckD/g2 (hola cifrado)

Al utilizar estos algoritmos de cifrado indescifrables o de un solo sentido ("only-one-way"), no podemos descifrar la contraseña, pero podemos aplicar ese mismo algoritmo a lo que nos han pasado por teclado y comparar el resultado con la contraseña cifrada. Con estos algoritmos, "sólo podemos ir hacia la derecha", es decir, sólo podemos cifrar. De esta forma cumplimos los dos objetivos iniciales:

  1. Cuando un usuario mete su clave, podemos comprobar si es la correcta (cifrándola y comprobando si el resultado coincide con lo que nosotros tenemos almacenado). # Si alguien consigue arrebatarnos la clave cifrada (el texto "RAZFC72ckD/g2", por ejemplo), no puede descifrarla, porque hemos utilizado un algoritmo de cifrado de sólo un sentido y no es posible hacer la operación inversa.

Imaginemos otro algoritmo irreversible, por ejemplo "contar el número de letras de una frase". Si alguien pusiera "hola, me llamo Juan" el resultado de ese algoritmo sería 15 letras. Si ahora alguien toma ese 15 como dato de partida, es imposible que llegue a la conclusión de que la frase origen era "hola, me llamo Juan", porque se ha perdido información relevante mientras se hacía el proceso. Está claro que este ejemplo no valdría para guardar contraseñas, pero explica el concepto de algoritmos irreversibles.

Ataques de diccionario

Acabamos de decir que los algoritmos de un solo sentido son la mejor manera para guardar contraseñas (esto es cierto), y que cualquier contraseña almacenada así no puede ser descifrada (esto no es tan cierto, ahora veremos por qué). Cuando nosotros conseguimos arrebatar la contraseña a alguien en su forma cifrada (así: "RAZFC72ckD/g2", siguiendo el ejemplo de antes), no podemos utilizar una receta para tomar ese galimatías y generar la contraseña descifrada ("hola", en este ejemplo), pero lo que sí que podemos hacer es aplicar el algoritmo de cifrado a todas las palabras del diccionario, hasta encontrar una cuyo galimatías coincida con el que nosotros hemos conseguido arrebatar.

No podemos "ir hacia la izquierda", es decir, descifrar la contraseña, pero podemos ir tantas veces como queramos "hacia la derecha" (cifrar palabras), hasta dar con el resultado. Así, lo más habitual es coger todas las palabras de un diccionario, y aplicarles el algoritmo de cifrado, hasta dar con la palabra correcta:

 Diccionario                    Palabra cifrada         Contraseña
 -----------                    ---------------         ----------
 a           -----------------> hYZeSQW6JtO/6     =     RAZFC72ckD/g2 ? -> NO
 ab          -----------------> 6ZmfTPHvQfMBo     =     RAZFC72ckD/g2 ? -> NO
 ababa       -----------------> LZGyE2g1HxVl6     =     RAZFC72ckD/g2 ? -> NO
 ababillarse -----------------> gZL1zEPlc4Pm2     =     RAZFC72ckD/g2 ? -> NO
 ababol      -----------------> .aqX5qKqDy/eE     =     RAZFC72ckD/g2 ? -> NO
 ...
 hojuela     -----------------> IaxLbY/4G50r6     =     RAZFC72ckD/g2 ? -> NO
 hojoso      -----------------> XapGN/ph3zhzI     =     RAZFC72ckD/g2 ? -> NO
 hola        -----------------> RAZFC72ckD/g2     =     RAZFC72ckD/g2 ? -> ¡¡¡SI!!! la contraseña es "hola"

Probamos secuencialmente con todas las palabras del diccionario, hasta encontrarla. Estas listas de palabras suelen hacerse cogiendo todas las palabras del inglés, todas las del castellano, todas las del italiano, nombres de ciudades, de equipos deportivos, de famosos, etc. y al final lo que obtenemos es un listado gigantesco de posibles contraseñas con las que probar este ataque de diccionario.

A simple vista podemos extraer dos conclusiones de todo esto:

  1. Elegir como contraseña una palabra que esté en el diccionario NO es una buena idea, aunque sea esternocleidomastoideo o unterschiedlichen.

  2. Contra un ataque de diccionario, una contraseña que empiece por x, y o z tiene menos probabilidades de ser acertada rápidamente, puesto que los listados con diccionarios suelen ordenarse alfabéticamente.

Aquí puede entrar en juego también la Ingeniería Social: si queremos tener suerte a la hora de reventar la contraseña de una persona en concreto y sabemos que está loco por todo lo relacionado con El Señor de los Anillos, podemos meter en el diccionario todos los nombres, lugares y palabras características de ese tema, y seguramente tengamos suerte.

Evidentemente todo esto no se hace de forma manual, existen muchos programas para crackear contraseñas, aunque el más famoso de todos es el "John the Ripper". La versión para Windows funciona relativamente bien, aunque es un programa pensado para el mundo UNIX en general, así que tiene más sentido utilizarlo desde GNU/Linux o sistemas BSD. Para instalarlo en Debian GNU/Linux basta con escribir (como root):

 apt-get install john

Veamos un ejemplo de su uso: en diccionario.txt tengo mi diccionario de posibles contraseñas, mostraré las 50 últimas para que sea más fácil entender como es, posteriormente atacaré al fichero de contraseñas utilizando como diccionario mi fichero diccionario.txt:

 # tail -50 diccionario.txt 
 zyuuzyun zyuuzyut zyuuzyuu zyuwaki zyuyo zyuyou zyuyouki zyuzou zyuzu zyuzutsu zyuzutu zyuzutun zyuzyou zyuzyu zyuzyuts 
 zyuzyutu zyweck zywicki zywiel zyxenhujul zyzomys zyzzoget zyzzogeton zyzzy zyzzyva zyzzyvas zz zzalsrh zzang zzapsid 
 zzdean zzdlg zzekka zzetsu zzetsuen zzetu zzgl zzhi zzppyyx zztop zztopman zzyzx zzyzyx zzz zzzz zzzzz zzzzzz zzzzzzz 
 zzzzzzzz zzzzzzzzzzzzzzz 
 # john -w=diccionario.txt /etc/shadow
 Loaded 1 password (FreeBSD MD5 [32/32])
 hola             (prueba)
 guesses: 1  time: 0:00:03:26 100%  c/s: 3024  trying: hola

En mi fichero de contraseñas (/etc/shadow) sólo tenía al usuario "prueba", con la contraseña que hemos puesto antes, "hola". Como vemos, ha tardado 3 mintuos y 26 segundos en adivinar la contraseña, comprobando a una velocidad de 3024 claves por segundo, mientras iba probando por la palabra "hola" dentro del diccionario.

Ataques incrementales por fuerza bruta

Como muchos estaréis pensando, no todas las contraseñas son palabras del diccionario, algunas incluso no son ni pronunciables y contienen números y letras mezclados. En estos casos se usa un enfoque incremental para crackear las contraseñas, probando absolutamente todas las combinaciones: primero todas las de una letra, luego las de dos letras, luego las de tres, etc. De esta manera nos aseguramos que al final la contraseña será adivinada (probamos absolutamente todas las posibilidades), pero puede darse el caso de que la contraseña sea lo suficientemente grande y compleja como para que el tiempo que necesitemos sea de varios años. Normalmente en todo ese tiempo un usuario que haya puesto una contraseña buena, la habrá cambiado varias veces, así que nuestro trabajo no valdría para nada.

Veamos un nuevo ejemplo de utilización del "John the Ripper", mediante el enfoque incremental:

 # john -incremental /etc/shadow
 Loaded 1 password (FreeBSD MD5 [32/32])
 hola             (prueba)
 guesses: 1  time: 0:00:17:12  c/s: 2887  trying: hola

Como vemos ha tardado bastante más que con el enfoque por diccionario (17 minutos contra 3 minutos), porque "hola" es una palabra del diccionario. Si hubiéramos puesto algo que no está en el diccionario, como por ejemplo "4tq2", con este enfoque habríamos tardado lo mismo, mientras que con el ataque por diccionario nunca lo habríamos resuelto.

Las cosas que deberemos tener en cuenta para evitar un ataque de este tipo son claras: el tamaño de nuestra contraseña, cuanto más grande sea, más difícil será adivinarla, y la complejidad de la contraseña, mezclando letras mayúsculas y minúsculas, números y caracteres raros como @, #, !, etc. Muchos ataques incrementales sólo prueban letras y números y no son eficaces contra combinaciones raras de letras, símbolos especiales, etc.

Consejos prácticos

Para resumir, siguiendo estos consejos podremos inventarnos una buena contraseña:

protegemos es importante, no dudar en utilizar espacios a la hora de definir la passphrase. Por ejemplo, una buena passphrase podría ser: "Biba la vid@, y biba lamorl!!".

Uffff... ¡qué pereza! !Si quiero poner una contraseña siguiendo todos esos consejos, al final nunca me voy a acordar de ella! No desesperes, existen trucos muy buenos:

  1. Coge una frase que te guste. Por ejemplo: "Verde que te quiero verde".

  2. Quita los espacios y sustituyelos por mayúsculas: "VerdeQueTeQuieroVerde".

  3. Cambia algunas letras por números, el 3 es una E al revés, el 0 puede ser una O, la @ la cambiamos por la Q... usa tu imaginación: "V3rd3@u3T3@ui3r0V3rd3".

  4. Esa contraseña ya es potentísima, pero no nos vamos a acordar. Cogemos las 10 primeras letras, y nos queda: "V3rd3@u3T3", o sea, "verdequete" escrito a nuestro estilo personal, una contraseña bastante difícil de crackear ;-)

Naveguemos sin dejar rastro

Echelon, Carnivore y Passport.Net

Desde los comienzos de Internet, cuando la antigua Arpanet tenía mucho más de aldea que de global, el proyecto Echelon ya funcionaba interceptando contenidos considerados como peligrosos en las comunicaciones electrónicas. En un principio nadie quiso creer paranoicas historias sobre sistemas de espionaje computerizado, satélites vigilando noche y día nuestras comunicaciones, filtros de correo electrónico, etc. Todo parecía sacado de una vieja película de espías. Sin embargo, 30 años después de su constitución en 1971, el Parlamento Europeo hizo pública su existencia en mayo de 2001:

"(...) No hay ninguna razón para seguir dudando de la existencia de un sistema de intercepción de las comunicaciones a nivel mundial en el que participan los Estados Unidos, el Reino Unido, Canadá, Australia y Nueva Zelanda en el marco del Acuerdo UK/USA; considerando, asimismo, que según las informaciones de que se dispone, es probable que su nombre sea nte "ECHELON", si bien no es éste un aspecto de importancia primordial (...) El sistema no se utiliza para interceptar comunicaciones militares, sino privadas y económicas (...)"

Como vemos el sistema está orientado al espionaje del ciudadano de a pie en su vida cotidiana, atrás quedó el espionaje militar de la guerra fría, todo el mundo es un enemigo potencial. No sólo las comunicaciones personales por Internet son filtradas y espiadas, sino muchas conversaciones telefónicas, celulares, fax y GPS. Funciona con un sistema de "palabras clave" que activan el filtrado. Un ejemplo bastante escandaloso de este sistema es el que se relató en el programa "60 minutes" de la CBS. Una mujer hablaba por teléfono con una amiga explicándole que su hijo hizo un papel durante una obra de teatro en el colegio, usando la expresión "he bombed" (literalmente "puso una bomba", pero también en sentido figurado "fue muy deprisa"). El sistema detectó automaticamente la expresión, y su nombre y datos personales fueron a parar a la base de datos de posibles terroristas. El "mejor" Gran Hermano jamas diseñado ha estado más de un cuarto de siglo espiando conversaciones por todo el mundo. La alianza entre las agencias de seguridad e inteligencia de todos sus participantes se han cubierto las espaldas en el terreno legal: es ilegal que un gobierno espie a sus propios ciudadanos y mandatarios, pero siempre es posible pedir "favores" al resto de participantes en este sentido. Margaret Tatcher hizo uso de estos favores y espió a varios miembros de su gabinete solicitando informes a sus colegas canadienses. Organizaciones como Greenpeace o Amnistia Internacional han sido también espiadas, como se ha reconocido públicamente.

Obviamente esto sólo es la punta del iceberg, sin embargo cada vez la cantidad de información que hay que tratar se va haciendo más inmanejable y su eficacia está cayendo poco a poco. Por esto mismo, la NSA, Agencia de Seguridad Nacional de Estados Unidos, y el FBI están desarrollando nuevas herramientas para aumentar la capilaridad de sus sistemas de filtrado y espionaje. En este sentido destacan las colaboraciones de empresas que guían gran parte del futuro de Internet como Microsoft o Cisco, líderes en el mercado del software y el hardware de equipamientos de red respectivamente. Ambas empresas han manifestado públicamente que supeditarán la privacidad de sus usuarios a los intereses de la NSA y FBI en cuestiones de seguridad. Este colaboracionismo se ha visto como algo muy negativo dentro de los grupos de usuarios concienciados con el tema, pero la gran mayoría de sus consumidores no se detienen a observar estos puntos de la licencia EULA (End User License Agreement) que aceptamos cada vez que instalamos uno de sus productos.

Además de los acuerdos de colaboración con Microsoft o Cisco entre otros, el FBI ha contado con la colaboración de hackers afamados como el grupo "Cult of the Dead Cow", creador de la famosa herramienta de "administración remota" de sistemas (a veces considerada como software espía o troyanos) "Back Oriffice". Esto le ha hecho trabajar en la creación de programas espía (spyware) como "Magic Lantern" o "Cyber Knight", programas capaces de editar el registro de Microsoft Windows, detectar claves secretas, manipular archivos o espiar conversaciones por chat, Messenger o ICQ.

Carnivore es un proyecto en este mismo sentido. En palabras de los propios representantes del FBI "Carnivore es un sistema computacional diseñado para permitir al FBI; en colaboración con un proveedor de Internet (ISP) se haga valer una orden judicial que exige la recolección de cierta información en relación al correo electrónico u otros tipos de comunicaciones electrónicas de un usuario específico que es objeto de investigación". Como podemos ver, Carnivore solicita la colaboración de los proveedores de Internet, pidiendo los registros de correos electrónicos enviados o recibidos por y para una persona en concreto. Esto es bastante similar a lo que la nueva Ley de Servicios de la Sociedad de la Información y Comercio Electrónico (LSSI-CE), que obliga a guardar los registros de todo lo que sucede en proveedores de Internet y demás empresas que desarrollen actividades comerciales en Internet. A pesar de las protestas de asociaciones de internautas y grupos sociales relacionados con la telemática, el gobierno español ha seguido adelante con la ley, cuyo reglamento es a día de hoy una incógnita y podrá afectar muy negativamente a las libertades digitales de mucha gente.

Por otro lado, sistemas como Microsoft Passport.Net pueden ser una amenaza grande contra la intimidad de los "netizens" o ciudadanos de la red. Mediante Passport.Net es posible introducir un usuario y contraseña en uno de los sitios en los que se utilice y no tener que volver a enseñar ese "pasaporte virtual" en el resto de sitios que funcionan con este sistema. Es muy habitual que entremos en Hotmail a revisar nuestro correo, vayamos a Amazon.com a comprar un libro o a Ebay a buscar algo en sus subastas y que esos sitios nos reconozcan al entrar y nos muestren nuestras preferencias, etc. Esto no supondría mayor riesgo si el sistema no pudiera utilizarse para hacer correlaciones complejas que dieran más información que la estrictamente necesaria para cada una de esas tiendas virtuales. Pongamos un ejemplo: si un hombre mediante Passport.Net compra unos pantys en una web de lencería, cualquiera podría pensar que son para su madre, hermana o novia. Si mediante este mismo sistema se hace con el mapa de calles de Leganés, es probable que vaya a pasar una temporada por allí, de vacaciones o por trabajo. Si además de esto, se compra una escopeta de caza, el sitio que se la vende pensará que tiene un coto privado, y si compra una sierra para cortar metales, es probable que quiera hacer obras en las cañerías de casa. El "problema" para este sujeto viene al ver todos estos datos a la vez, junto con la noticia de que un encapuchado a asaltado una caja de ahorros en Leganés a punta de escopeta recortada. Quizá este sea más un contraejemplo que un ejemplo de las maldades de este sistema, pero me gusta especialmente porque cuando lo escuché en una charla sobre estos temas me pareció especialmente gráfico.

Después de esto, podemos ser todo lo paranoicos que queramos (siempre sin olvidar la frase del comienzo: la seguridad y privacidad total no existen). Estos enlaces servirán de guía para quien quiera ahondar en estos temas:

¿Cómo navegamos realmente por la web?

Cuando hacemos una petición web desde nuestro navegador, es decir, cuando escribimos "http://www.sindominio.net", por ejemplo, en la barra de direcciones del navegador, es necesario hacer unos cuantos pasos previos antes de que se nos muestre por pantalla el contenido de esa página web:

No parece muy complicado, ¿verdad? La navegación web estándar tiene pocos misterios. Algo más compleja es la navegación web segura, a través de HTTPS (HTTP Seguro), que utiliza el puerto 443 y transmite los datos de manera cifrada. Conviene diferenciar la navegación web segura de la navegación web anónima. En la navegación web segura, se sabe a qué direcciones vas, pero no qué contenidos intercambias con ese servidor, porque la conversación entre tu navegador y el servidor web está cifrada. En la navegación web anónima, el objetivo es otro: dificultar que el servidor web sepa realmente quién le está visitando, como veremos a continuación.

Navegación anónima

Si queremos navegar sin dejar rastro, no nos basta con utilizar navegación web segura mediante HTTPS siempre que podamos, ya que con eso sólo estaremos cifrando los datos que transmitimos y recibimos, pero no estamos "anonimizando" o "impersonando" (dos palabras inglesas traducidas con calzador) nuestras peticiones a los servidores web. En otras palabras, si yo me conecto a la web de mi caja de ahorros para realizar una transferencia bancaria, casi con total certeza estaré bajo una conexión segura, protegida mediante HTTPS, pero en ningún momento dicha conexión será anónima, porque el servidor web de la caja de ahorros sabrá que hemos sido nosotros quienes nos hemos conectado a hacer esa transferencia.

Por otra parte, si queremos entrar en la página web de la Falange Española sin que sepan que hemos sido nosotros, no necesitamos entrar bajo una conexión segura mediante HTTPS, sino que lo que tenemos que conseguir es que parezca que no hemos sido nosotros quienes hemos pedido determinada página web. ¿Cómo conseguimos esto? La respuesta ya la sabemos, como hacemos cotidianamente: mandamos a otra persona a que nos haga el recado. En el mundo de los navegadores y las páginas ^ web, los recaderos se llaman "proxy" o "proxy-web". Un servidor proxy-web recibe peticiones o "recados", las realiza, y devuelve los resultados a quienes se lo pidieron. Bien, asunto arreglado: en lugar de ir nosotros a visitar la página de la Falange directamente, le pedimos a un proxy-web que la visite por nosotros, y nos devuelva la página cuando la tenga.

En los registros del servidor web ya no aparecerá nuestra dirección IP como la que ha hecho la petición, sino que será la dirección del proxy-web la que se almacenará.

Esto funciona bastante bien, pero a veces los servidores proxy-web son tan gentiles que piden las cosas así: "Por favor, solicito la página documentos/informacion.html, de parte de 128.11.22.33". Imaginemos que nosotros somos ese tal 128.11.22.33, gracias a esa manera de pedir la información, habremos sido delatados claramente. Muchos servidores web están configurados para registrar las direcciones IP que aparecen en "de parte de..." dentro de la petición (técnicamente en la cabecera HTTP_X_FORWARD).

Fue bonito mientras duró... con estos servidores proxy-web tan educaditos no podemos navegar de forma anónima. Bueno, todavía podemos poner las cosas difíciles a quien nos quiera seguir el rastro: encadenamos una serie de servidores proxy y así es más difícil seguirnos el rastro. Lo mismo pasa en la vida real: si le dejas un libro a alguien, y ese se lo deja a otra persona, y así unas cuantas veces, da el libro por perdido. Sólamente aparecerá nuestra dirección IP en el primer "salto" que demos:

 Nosotros  --------------> Proxy Web 1 ------------> Proxy Web 2 ------------> Proxy Web 3 -------------> Servidor Web
 (IP: 128.11.22.33)     (IP: 111.1.1.1)            (IP: 122.2.2.2)           (IP: 133.3.3.3)            www.peligro.com
                      128.11.22.33 me pide        111.1.1.1 me pide         122.2.2.2 me pide          133.3.3.3 me pide
                        www.peligro.com            www.peligro.com           www.peligro.com            www.peligro.com
              <---------  de parte de  <----------   de parte de  <---------   de parte de  <----------   de parte de
                         128.11.22.33               128.11.22.33                111.1.1.1                 122.22.22.22

De esta forma lo que queda registrado en el sevidor web es que 133.3.3.3 ha solicitado la web "www.peligro.com" de parte de 122.2.2.2. Ni rastro de la IP origen real, es decir, la nuestra (128.11.22.33). Cuantos más saltos de proxy-web demos, más difícil será rastrear nuestra navegación, pero configurar esto, puede ser complicado. Para evitarnos muchos quebraderos de cabeza, existen herramientas que hacen esto mismo de forma automática. JAP es una de ellas.

JAP

JAP significa "Java Anonymous Proxy", es decir, "Proxy Anónimo en Java". En realidad ese es el nombre original del software de proxy-web, pero actualmente no en todas las plataformas está escrito en Java (Java es un lenguaje multiplataforma que funciona de manera similar tanto en Microsoft Windows, Apple Macintosh o GNU/Linux, entre otros). Concretamente las versiones de Windows y Mac sí están escritas en Java, y tienen una interfaz gráfica muy similar, y la versión para GNU/Linux y BSD funciona de otra manera, en modo texto.

JAP se basa en el principio de que todos sus usuarios navegan con la misma dirección IP. De esta manera, cuando un servidor registre nuestra visita, apuntará esa IP, que es compartida por todos los usuarios de JAP, y no podrá saber cuál de todos los usuarios a visitado la página.

Cuando instalamos JAP en nuestro ordenador, lo que estamos instalando es un servidor proxy-web. Todas las peticiones que le hagamos a ese servidor proxy irán encaminadas a la red de servidores proxy de JAP de forma cifrada, así que todo lo que pidamos a nuestro "recadero JAP" será tratado de forma anónima y segura. Recordemos el diagrama anterior:

 Nosotros  --SIN CIFRAR-> Proxy Web JAP --CIFRADO--> Proxy Web JAP2 --CIFRADO--> Proxy Web JAP3 --CIFRADO---> Servidor Web
           <-SIN CIFRAR---              <--CIFRADO---               <--CIFRADO---               <--CIFRADO---             

El salto desde nuestro navegador al primer proxy JAP es sin cifrar, pero esto no es ningún problema si lo instamos en nuestro propio ordenador, porque sería como decir al "recadista JAP" dónde queremos ir *dentro de casa*, donde nadie puede oirlo. A partir de ahí, se produce otra serie de saltos entre diversos servidores proxy de JAP, y finalmente se accede al destino. Una vez se obtiene la página, el sistema JAP realiza los saltos inversos y al final obtenemos la página web en nuestro navegador.

La secuencia de saltos que realiza JAP dentro de sus servidores se conoce como "cascada de saltos" o "mix cascade". Podemos elegir entre diferentes secuencias de saltos para dificultar más aún el seguimiento. Dado que mientras nosotros navegamos hay también usando este sistema otros muchos usuarios, nuestras tráfico web se mezcla con el del resto de usuarios, haciendo muy costoso el seguimiento del tráfico de una sola persona.

Los servidores proxy-web del sistema JAP son proporcionados por diferentes instituciones independientes, que declaran oficialmente que no guardan un registro de las conexiones, ni intercambian información sobre ellas con otros proveedores. A pesar de esta declaración pública, se prevé crear un software que haga de "perro guardian" del sistema, para asegurar que esto se cumple por parte de las citadas instituciones, creando navegaciones de prueba y comprobando si han podido ser objeto de escuchas o registros.

Instalación y uso en Microsoft Windows

Instalar JAP en Windows es muy sencillo, sólo tendremos que seguir los pasos de un asistente de instalación. Lo primero que tenemos que hacer es bajarnos el paquete de instalación de la página http://anon.inf.tu-dresden.de/win/download_en.html. Ahí encontraremos diferentes enlaces en función de la versión de Java que tengamos instalada en el sistema, etc. Lo más sencillo es pinchar en el enlace "download the complete setup program" para bajarnos el programa de instalación completo y evitar así mayores complicaciones.

Una vez que tenemos el programa de instalación en nuestro disco duro, lo ejecutamos y nos aparecerá un asistente de instalación en el que deberemos elegir el idioma:

./img/JAP01.jpg

Actualmente sólo está disponible en inglés o alemán, así que elegimos inglés y le damos a continuar. Seguidamente se nos muestra un diálogo en donde deberemos especificar la carpeta en la que queremos instalar JAP. En principio la carpeta que viene por defecto es correcta, así que pulsamos el botón de siguiente ("Next"):

./img/JAP02.jpg

En el siguiente paso, el asistente nos pregunta qué es lo que queremos instalar. Ante la duda lo más sencillo es pedirle que instale tanto JAP como el soporte para Java ("JAP + Java"):

./img/JAP03.jpg

Posteriormente se nos solicita un nombre para la carpeta destinada a JAP dentro del Menú de Inicio. "JAP" es una buena opción:

./img/JAP04.jpg

Por último se nos avisa de que hemos completado todos los pasos para proceder con la instalación de JAP y pulsando en siguiente ("Next") comenzará a instalarse en nuestro ordenador:

./img/JAP05.jpg

./img/JAP06.jpg

Una vez termina el proceso de instalación de JAP, comienza la instalación del soporte para Java (tal y como habíamos solicitado en el segundo paso de la instalación):

./img/JAP07.jpg

Esta versión de Java es propietaria de Sun Microsystems, así que es necesario aceptar la licencia de uso para poder instalarla. Aceptamos y continuamos:

./img/JAP08.jpg

Definimos el lugar en nuestro disco duro en el que queremos instalar Java. El directorio mostrado por defecto es una buena opción, así que pulsamos el botón de siguiente:

./img/JAP09.jpg

Seguidamente se nos pregunta si queremos que esta versión de Java que estamos utilizando se utilice también cuando usemos el Internet Explorer o el Netscape Navigator. En principio nos da igual, así que dejaremos las casillas en blanco y pulsaremos el botón siguiente para continuar:

./img/JAP10.jpg

Una vez llegados a este punto, se instalan los componentes necesarios para que funcione Java y se da por finalizado el proceso de instalación:

./img/JAP11.jpg

El proceso de instalación finaliza aquí, pero conviene tener marcada la opción para configurar automáticamente nuestro navegador para que use JAP antes de pulsar el botón de finalizar:

./img/JAP12.jpg

El asistente para configurar nuestros navegadores intentará buscar todos los navegadores que tengamos instalados en nuestro ordenador de forma automática y cambiará sus configuraciones para que naveguen a través del proxy-web JAP:

./img/JAP13.jpg

Además, podrá configurarse JAP para que funcione también con programas de gestión de descargas, como el "Download Accelerator" o "GetRight", para no delatarnos al usar estos aceleradores de descargas:

./img/JAP14.jpg

En la siguiente pantalla el asistente muestra una lista de los navegadores que ha encontrado instalados en nuestro ordenador. Es recomendable seleccionar todos los navegadores que utilicemos de esa lista y que pulsemos el botón de siguiente ("Next"):

./img/JAP15.jpg

Posteriormente se muestra una lista de todas las conexiones a Internet configuradas en este ordenador, para seleccionar con cuál de ellas queremos utilizar JAP. En principio seleccionaremos todas, salvo que hubiera problemas con alguna (por tener que utilizar otro proxy-web, por ejemplo):

./img/JAP16.jpg

Y finalmente terminamos el proceso de configuración automática de JAP, por lo que podremos utilizarlo normalmente:

./img/JAP17.jpg

Una vez instalado, JAP situará un icono en el escritorio de Windows. Si hacemos doble-clic sobre ese icono, podremos ver la ventana de gestión del proxy-web anónimo:

./img/JAP18.jpg

Hasta que no activemos la opción "Activate anonymous web access", no estaremos navegando de forma segura. Después de activar esa opción, podremos modificar la configuración de JAP pulsando sobre el botón "Change", que nos mostrará un diálogo en el que podremos cambiar las medidas de seguridad tomadas, etc.

Instalación y uso en GNU/Linux

El proxy-web anónimo JAP tiene una manera diferente de funcionar para sistemas UNIX y similares. No utiliza Java, sino que está escrito en C, y se llama "anon-proxy". Existen paquetes para Debian GNU/Linux y RedHat entre otras distribuciones, así como los fuentes para cualquier otro sistema UNIX-like.

El proceso de instalación en Debian GNU/Linux es muy sencillo. Primeramente comprobamos si lo tenemos en las listas de paquetes disponibles:

 # apt-cache search anon-proxy
 anon-proxy - Proxy to surf the web anonymously

Si queremos conocer algo más sobre el contenido del paquete, mostramos sus características e información relevante:

 # apt-cache show anon-proxy
 Package: anon-proxy
 Priority: optional
 Section: web
 Installed-Size: 300
 Maintainer: David Spreen <netzwurm@debian.org>
 Architecture: i386
 Version: 00.01.40-6
 Depends: debconf, libssl0.9.6, libxerces21
 Filename: pool/main/a/anon-proxy/anon-proxy_00.01.40-6_i386.deb
 Size: 102494
 MD5sum: c3dbc6cf081a38daf5e78a5762939054
 Description: Proxy to surf the web anonymously
  This package contains the JAP client which acts as a local proxy
 between your browser and the insecure Internet. All requests for web
 pages are handled by JAP and are encrypted several times. The encrypted
 messages are sent through a chain of intermediate servers (named Mixes)
 to the final destination on the Internet.
  .
  Multiple layers of encryption protect all messages. A Mix collects
  messages in a batch, totally changes their appearance (removes one
  layer of encryption) and forwards them all at the same time, but
  in a different order. An adversary may observe all communication links,
  however he cannot determine a relation between incoming and outgoing
  packets. A surfer remains anonymous within the group of all users
  of the service.
  .
  Demonstrably, the system protects your privacy as long as the Mix
  works correctly. Unfortunately nobody knows whether a certain Mix
  is actually trustworthy or not. Therefore we use a whole chain of
  Mixes. Each message passes through several Mixes and the entire chain
  of Mixes has to be corrupt to successfully observe the user's
  activities. The chaining effectively prevents single Mixes from
  observing. This is the meaning of strong anonymity: Even the
  anonymity service itself cannot spy on its users.
  .
  For further information see http://anon.inf.tu-dresden.de/

Y vemos que depende de los paquetes "debconf", "libssl0.9.6" para el tema del cifrado, y "libxerces21" para gestión de documentos XML. Para instalarlo basta con hacer:

 # apt-get install anon-proxy

Y el sistema de paquetes de Debian GNU/Linux se bajará los paquetes necesarios y procederá a su configuración. Si es la primera vez que instalamos "anon-proxy", se nos preguntará en qué puerto queremos que quede el proxy-web a la escucha dentro de nuestro ordenador (por defecto es el 4001):

./img/JAPdebian01.png

Y finalmente se nos pregunta si queremos iniciar el proxy anónimo nada más arrancar el sistema:

./img/JAPdebian02.png

Además de esto, se nos informa de que deberemos configurar el proxy en los navegadores que utilicemos de esta manera: 127.0.0.1:4001. Es decir, 127.0.0.1, que es la dirección IP que significa siempre "nuestro propio ordenador", y 4001 que es el puerto que hemos elegido durante la instalación para que el proxy-web escuche. Si queremos utilizar anon-proxy para programas que funcionan con la configuración propia del sistema como APT o el navegador Lynx, deberemos exportar la variable de sistema "http_proxy":

 # export http_proxy=http://127.0.0.1:4001

Para asegurarnos de que realmente el puerto 4001 uno de nuestro sistema está abierto para conexiones al proxy anónimo, podemos utilizar el comando "netstat":

 # netstat -ptau
 Active Internet connections (servers and established)
 Proto Recv-Q Send-Q Local Address           Foreign Address State       PID/Program name   
 tcp        0      0 localhost:4001 *:*                     LISTEN      6114/proxytest

Como vemos, el puerto TCP 4001 en localhost (es decir, 127.0.0.1, nosotros mismos) está a la escucha (LISTEN) y el programa que se encarga de antenderlo es "proxytest", el nombre del programa ejecutable de anon-proxy.

Otros anonimizadores web

Si no queremos instalar un proxy-web en nuestor ordenador, o simplemente no podemos (porque estamos en un ordenador en el que no tenemos privilegios como para instalar software, como podría suceder en el trabajo o en un cibercafé), podemos utilizar otros métodos para navegar de forma anónima.

Símplemente visitando la página https://www.the-cloak.com/login.html, podremos definir cómo queremos navegar y a qué dirección queremos ir, y el propio "anonimizador" de the-cloack hará la navegación web y nos mostrará el contenido de la página que queramos.

Esto es bastante útil si tenemos problemas de censura como filtros, etc. Un ejemplo claro de todo esto se dió justo después de que se ilegalizará el partido político vasco Batasuna. Nada más ilegalizarlo, todos los Proveedores de Internet españoles se vieron en la obligación de prohibir que sus clientes pudieran acceder al contenido de www.batasuna.org. Los proveedores del Grupo Telefónica (terra, infonegocio, etc.) modificaron sus servidores DNS (los que hacían de "Páginas Amarillas" de Internet) para que siempre que un cliente pidiera "www.batasuna.org", devolvieran la dirección "1.2.3.4", que no existe en Internet. El resultado era que la página era inaccesible a menos que supieras la dirección IP exacta. Mediante el servicio de the-cloak podríamos poner "www.batasuna.org" y visitar la página a través de sus servicio, ya que quien verdaderamente está realizando la visita es the-cloack y no nosotros, aunque podamos ver el contenido de dicha página.

En este sentido, existe bastante desconfianza acerca del gran poder que está adquiriendo el buscador Google, ya que todo lo que aparece en Google existe y lo que no aparece no existe para la gran mayoría de internautas. Por eso mismo se ha abierto una página donde se informa de las razones de esa desconfianza, y entre los servicios que ofrecen destaca un proxy (un "recadero", recordemos) que nos hace las peticiones de búsqueda por nosotros para que Google no sepa que nosotros estamos buscando algo determinado: http://www.google-watch.org/cgi-bin/proxy.htm. Imaginemos que alguien consigue averiguar que hemos estado navegando por páginas anarquistas antes de que se produzca una manifestación violenta de corte anarquista dentro de nuestra ciudad, un hecho como este podría valer para incriminarnos de manera indirecta. Si hemos hecho uso del proxy de google-watch para hacer las búsquedas, Google no podrá saber que hemos sido nosotros quienes hemos hecho esas búsquedas. Como servicio añadido incluye búsquedas combinadas con otro buscador, all-the-web, para evitar la "google-dependencia".

Consejos prácticos

Al igual que hemos hecho con las contraseñas, estos son unos consejos prácticos que pueden mejorar de forma fácil nuestra privacidad y seguridad mientras navegamos por la red:

"New member sign up", y seguir los pasos para obtener una cuenta de correo nuevo (acordaos de 'no' utilizar la pregunta típica para recordar contraseñas ;-) ). En cuanto a Mensajería Instantánea (del estilo de MSN Messenger, ICQ, Yahoo Messenger, etc.) tenemos el cliente GAIM que es capaz de conectarse a redes de mensajería libres como Jabber o propietarias como la del MSN Messenger o ICQ. De esta manera no nos escudaremos en la típica excusa de que "mis amigos utilizan MSN Messenger así que yo tengo que usarlo", porque podremos ser clientes de una red libre como la de Jabber y a la vez poder ver a clientes de redes propietarias como la del MSN Messenger desde el mismo programa. Para más información sobre GAIM, visita http://gaim.sourceforge.net/about.php. En http://gaim.sourceforge.net/win32/index.php podréis descargaros una versión para Windows, para GNU/Linux o BSD está disponible en todas las distribuciones.