Debe introducir al menos 3 caracteres en el buscador.
Inicio / Wikis / Cursos gratis / Proxys y anonimato - Freenet

Proxys y anonimato - Freenet

 ----- 
Creative Commons Curso gratis de Varios autores - 15 de Septiembre de 2005
Temas Relacionados: Seguridad informática
19. Freenet
En este apartado intentare ofrecer una somera imagen del funcionamiento de la red freenet, sin entrar en muchas honduras. Si alguien esta realmente interesado en el tema, lo remito a la web oficial en sourceforge, http://freenet.sourceforge.net, donde podra encontrar documentacion exhaustiva sobre el tema, amen de software de acceso a la red.

Freenet es anonima tanto para cliente como para servidor.


La red freenet se basa en esta red TCP/IP no anonima y crea una red anonima mediante un sencillo mecanismo. Cada host no se conecta directamente al servidor que contiene la informacion, sino que se crea una malla de servidores/clientes totalmente descentralizada.

La idea es que cada host actúa tanto de cliente como de servidor y que todos tienen el mismo poder dentro de la red. Cuando un usuario quiere conseguir cierta informacion, su host comprueba si la tiene. Si no es asi, redirecciona la peticion a una lista de hosts que tiene. Estos comprueban si la informacion esta almacenada en ellos, y si no la tienen almacenada a su vez redireccionan la peticion a otros hosts.

Una vez se llegue a un nodo que contenga dicha informacion, este nodo la envia al nodo anterior que la pidio, quien a su vez la manda al anterior que la pidio, y asi hasta que se llega al nodo que inicialmente lanzo la peticion, el cual pasa la informacion al usuario.

Lo bueno que tiene este sistema, es que cada nodo recibe peticiones otros nodos "proximos", pero no sabe si el sumidero de informacion sera el nodo que le hizo la peticion o si este esta redireccionando una peticion de un nodo anterior.

Asimismo, cuando un nodo contesta un mensaje de peticion y envia la informacion, el siguiente nodo que la recibe no sabe si los datos estan almacenados en el nodo que se la manda o este esta redireccionando los datos desde otro nodo anterior.

|| Un ejemplo ayudara a aclarar el mecanismo de funcionamiento. Supongamos que hay un nodo A que, debido a una peticion de un usuario, quiere encontrar el archivo "datos.dat". Este nodo esta conectado a los nodos B, C y D. El nodo B esta a su vez conectado al nodo E, el cual contiene precisamente el archivo "datos.dat", y los nodos C y D estan conectados a otros nodos que no tienen dicho archivo. Un esquema seria: El usuario quiere datos.dat +
Nodo A
+
| | | Nodo B<-+ +->Nodo C+ +->Nodo D
>A otros nodos
| | Nodo E<--| A otros nodos<-+ ·"datos.dat" Cuando el nodo A recibe la peticion de su usuario, comprueba si tiene el fichero en su disco duro. Como no lo encuentra, lanza un mensaje de peticion a los nodos B, C y D. Los nodos C y D comprueban que no tienen el mensaje e intentan reenviar la peticion a otros nodos. Supondremos que el mensaje, que tiene un "tiempo de vida" (al igual que los datagramas IP) muere antes de llegar al nodo E por estos caminos. En cambio, el nodo B reenvia el mensaje al nodo E, el cual si tiene la informacion pedida. Entonces el nodo E contesta enviando el fichero al nodo B, el cual a su vez lo envia al nodo A. Una vez llega al nodo A, el protocolo de freenet pasa los datos al usuario, y ahi termina el proceso. Entonces el paso de informacion seria: PETICION: Nodo A
pide "datos.dat"
> Nodo B
pide "datos.dat"
> Nodo E
RESPUESTA: Nodo E
da "datos.dat"
> Nodo B
da "datos.dat"
> Nodo A
Vemos que el nodo B solo sabe que el nodo A quiere "datos.dat" pero no sabe si quiere el archivo para el o para otro nodo que se lo ha pedido. Lo mismo ocurre con el nodo E: solo ve que B le pide el archivo, pero no sabe si lo quiere para el (de hecho, en este caso lo quiere para A, pero ni el nodo B ni el E saben quien es el receptor final de la informacion). Con la respuesta ocurre exactamente lo mismo. B no sabe si E tiene el fichero o si lo esta recibiendo de otro nodo y lo esta reenviando. A solo ve que B contesta con el archivo pedido, pero no sabe que el nodo que realmente lo tiene es E. De esta forma, el anonimato esta garantizado. ||


Freenet consigue que la informacion mas valiosa sea mas accesible.


En efecto, la informacion mas valiosa en freenet es la mas accesible. Lo primero que cabe preguntarse es ¿cúal es la informacion mas valiosa? La respuesta es simple: la que mas veces se pide.

Supongamos que cierto archivo es muy solicitado por distintos nodos que conforman la red. Para evitar tener que realizar las costosas (a nivel de recursos de ancho de banda) peticiones que deben ser reencaminadas, cada nodo tiene una "cache". En dicha cache se almacenan los archivos que han sido obtenidos de la red, pero se diferencia de las caches de, por ejemplo, los navegadores en que esta cache sirve a todos los nodos de la red. Esto quiere decir que si un nodo recibe una peticion de un archivo que esta en su cache, dicho nodo contestara enviando el archivo al que lo pidio. De este modo, puesto que el nodo final que pide el archivo replica el mismo en su cache, la informacion esta siendo duplicada en cada acceso. Asi, si por ejemplo existe cierto archivo muy solicitado, este archivo estara replicado en distintos nodos a lo largo de la red, de forma que para acceder a el sera necesario dar menos saltos que si solo estuviera en un nodo.

Ademas, asi se hace virtualmente imposible un ataque de negacion de servicio sobre dicha informacion: ahora esta replicada en distintos nodos desconocidos para el atacante.

Un ejemplo que el autor Ian Clarke explica, es el caso en que un archivo situado inicialmente en EE.UU. sea muy solicitado por usuarios de Japon. Este archivo debe cruzar el cable transatlantico, lo que supone un fuerte consumo debido a la escasez de ancho de banda del mismo. Pero una vez esta replicado en un nodo en Japon, los nodos japoneses realizaran la peticion y seran atendidos por el nodo que la ha replicado en Japon, en lugar de por el originario estadounidense.

Freenet hace que la informacion menos valiosa desaparezca.


Todo esto de la cache es estupendo, pero hay un pequeño problema: los discos duros son finitos y no pueden almacenar todos los ficheros que se reciban.

Llega un momento en que habra que borrar algo de la cache para poder guardar nuevos datos en ella. Y lo que se borra es, precisamente, lo que ha sido menos pedido en un tiempo determinado.

De esta forma, si un archivo deja de ser pedido por los usuarios, este ira desapareciendo paulatinamente de cada nodo de la red que lo almacene, salvo que vuelvan a realizarse peticiones del mismo.

Un efecto que puede darse es que un archivo se mueva de su ubicacion inicial hacia otros nodos mas o menos lejanos que tengan alrededor muchos nodos que pidan ese archivo. Por ejemplo, en el caso del nodo japones anterior, puede ocurrir que dicho archivo sea un texto en japones. Lo mas normal sera entonces que reciba muchas mas peticiones en Japon que en EE.UU., lo cual hara que, con el paso del tiempo, el nodo original estadounidense lo borre de su cache al no recibir suficientes peticiones. En cambio, si el archivo es bastante popular, el nodo japones y sus colindantes lo consideraran informacion valiosa, y no la borraran. De esta forma, la informacion ha "viajado" desde su origen en EE.UU. hasta su "nuevo hogar" en Japon (precioso, ¿no es asi? ;-)) Se supone que asi se consigue atender a la mayoria de personas, o a minorias lo suficientemente numerosas y localizadas.

El problema son las minorias no localizadas. Si alguien escribe un articulo sobre la cria del galapago en cautividad pero los pocos usuarios interesados se encuentran desperdigados entre Madagascar, Nueva Zelanda, Nepal y Honduras, dicho articulo tiene alta probabilidad de desaparecer de la red (¡mala suerte!).

Los problemas de freenet.


Todo este sistema teorico parece bastante bonito, pero la cosa no es tan sencilla como parece.

El malgasto de recursos.

El principal problema que tiene freenet es el despilfarro de recursos de red del que hace gala. Si en una conexion "peer to peer" IP en la que los paquetes dan N saltos de un nodo a otro se consume N x R donde R son los recursos en ancho de banda y tiempo de proceso necesarios para transmitir los datos, en freenet no es asi.

Primero, los datos no van directamente de un extremo al otro, sino que pasan por varios nodos intermedios. Si el numero de nodos intermedios es I, se consume entonces teoricamente (en una red en la que los nodos I esten unidos por enlaces directos) I x R, y ademas I debe ser mayor o igual que N (generalmente, sera mucho mayor que N).

Pero es que ademas la red freenet esta montada sobre una red TCP/IP ya existente, con lo cual entre cada par de nodos intermedios la conexion no sera directa, sino que los datos daran un número de saltos determinado por la estructura actual (recordar que el encaminamiento en IP es dinamico) de la red TCP/IP. Si suponemos que el número de saltos entre cada par de nodos es M, los recursos consumidos son entonces I x R x M. ¡Ejem! Creo que hemos aumentado la cantidad de recursos necesarios en un orden de magnitud, asi que todo aquel que estuviera pensando bajarse peliculas DiVX o archivos mp3 de forma totalmente anonima, mejor que vaya olvidando la idea: tardaria BASTANTE mas que con programas como edonkey.

Una solucion a esto, consiste en el ya dicho uso de la cache, de forma que este despilfarro de recursos solo debe darse en la primera peticion del archivo. Tambien ocurre que si los datos estan en la cache de algún nodo cercano, el número de saltos que hay que dar para llegar a los mismos se reduce, reduciendose a su vez el impacto de la peticion en el resto de la red. Pero esto depende de cúanto se pida el archivo, donde, a que otros nodos este conectado nuestro host, etc. y nunca es una solucion mejor que una conexion extremo a extremo.

La inundacion.

Otro malgasto de recursos se da debido a que, puesto que no conocemos el host que contiene los datos que queremos, debemos inundar la red de peticiones de forma que lleguen al host adecuado.

Esta inundacion es controlada por dos mecanismos: el tiempo de vida y la deteccion de bucles.

  • El tiempo de vida de un mensaje, al igual que en IP, es un contador que cada nodo va decrementando al reencaminar dicho mensaje. Una vez llega a cero, el mensaje se desecha y se envia una indicacion al nodo que inicio la peticion. El problema ahora es que el nodo que la inicio no es conocido, de forma que la única manera de llegar a el es seguir el camino inverso, enviando la indicacion al nodo anterior, que la enviara a su anterior, etc. Entonces estamos gastando muchos recursos tambien en mensajes de control, no solo en los mensajes de datos. Pero esto es siempre mejor que dejar que un mensaje inunde la red y nunca muera, consumiendo recursos de forma ilimitada y, finalmente, saturando la red. Tambien hay que enviar indicaciones de que el mensaje ha muerto al nodo inicial porque si no, nunca sabra que paso con su peticion (y posiblemente la respuesta del mismo sea repetirla, con lo que se inicia de nuevo el proceso de consumo de recursos). Ademas, el tiempo de vida lo decide el nodo inicial, de forma que si este valor es muy alto, la propagacion de la peticion puede llegar a ser brutal (recordar que en una red en arbol el crecimiento del número de mensajes reencaminados es exponencial).
  • La deteccion de bucles ocurre cuando un nodo recibe una misma peticion desde dos nodos anteriores distintos. Esto ocurre porque hay un bucle en la red y este nodo debe tirar uno de estos mensajes (y, por supuesto, no reenviar la peticion a ninguno de estos otros nodos). En el modelo de freenet, la deteccion de un bucle genera a su vez un mensaje de indicacion al último nodo que realizo la peticion repetida, de forma que este sepa que la informacion no va a encontrarse por ese camino (puesto que, si se encuentra, se reenviara al nodo que envio primero la peticion duplicada). Nuevo consumo de recursos.

La identificacion de datos.

Puesto que los datos pueden estar duplicados, nada impide a un usuario malicioso contestar una peticion con datos que no sean realmente los requeridos, sino con otros datos cualesquiera. Para evitar esto hay que utilizar mecanismos de firma digital de los datos. Pero al final las claves públicas para verificar las firmas deben estar almacenadas en algún servidor "confiable", esto es, que sepamos quien nos esta dando estas claves. Por lo tanto la red freenet no es autonoma y dependera de otras redes (por ejemplo la World Wide Web) en las que los servidores no sean anonimos.

Las actualizaciones.

Si queremos publicar una version actualizada de un documento, nos enfrentamos a un problema: existiran versiones antiguas del mismo circulando por la red. ¿Como resolverlo? Mediante la firma digital podremos certificar que somos el creador del documento inicial y que queremos actualizarlo, enviando mensajes de actualizacion por la red para que todos los nodos que contengan versiones antiguas las reemplacen por la nueva. El problema es que es imposible asegurar que estos mensajes llegaran a todos y cada uno de los nodos que contengan la version antigua del documento, y puede ser que haya nodos que sigan manteniendo esta version aún tras la actualizacion.

Si estos nodos reciben muchas peticiones del documento, esta version antigua puede ser replicada muchas veces aunque haya una version nueva. Incluso podria ocurrir que, debido a que la version antigua sea mas facilmente accesible que la moderna, esta última desapareciese "asfixiada" por la antigua. Para evitar esto, las nuevas versiones deben inundar la red de mensajes de actualizacion, volviendo de nuevo al problema del malgasto de recursos.

El software.

El último problema que voy a tratar se refiere a la implementacion real de la red freenet, siendo los anteriores de tipo teorico y aplicables a cualquier red de este tipo.

El problema de la freenet real es que esta implementada en Java. Supongo que habra seguidores acerrimos de dicho lenguaje, pero como persona interesada en el tema de las redes de ordenadores y el bajo nivel, personalmente creo que sacrificar velocidad en favor de portabilidad para una red que ya de por si es lenta no ha sido la mejor eleccion.

Ademas, existen problemas de compatibilidad del cliente/servidor freenet con distintas maquinas virtuales Java (principalmente por ello aún no he podido probarla personalmente, pero lo hare), lo cual me hace pensar en hasta que punto es realmente portable un programa en dicho lenguaje. Bueno, esto es cuestion de gustos.

Freenet en Internet.


Freenet es un proyecto software albergado en sourceforge (sourceforge.net), es totalmente freeware y desde aqui os animo a que lo probeis. Como antes he comentado, yo no lo he hecho porque paso bastante de Java y la maquina virtual que tengo instalada es incompatible, asi que en cuanto tenga tiempo y ganas me bajare una version compatible y hare mis pinitos en la red anonima. Como antes he dicho, la web oficial de freenet en sourceforge es:

http://freenet.sourceforge.net

El cliente/servidor se arranca en nuestro host y permite conexiones directamente, reencaminandolas hacia freenet. De esta forma, es posible hacer una peticion desde el mismo navegador que usamos para la web, puesto que el cliente/servidor actúa como una especie de proxy entre freenet y nuestro navegador. Ademas es configurable para que sirva de acceso a otros host (de forma que actúe como "portal" hacia freenet), pero esta forma de uso no esta recomendada por los creadores, puesto que rompe con la filosofia de "totalmente descentralizado" del proyecto, creando posibles vulnerabilidades frente a ataque DoS contra estas "pasarelas".

Ademas, hay varios programas que permiten otras funcionalidades aparte del acceso Web, como por ejemplo un chat totalmente anonimo. No puedo hablar mucho sobre ellos porque no he podido probarlos.
Autor y licencia de 'Proxys y anonimato - Freenet'
Varios autores Extraído de: http://www.nautopia.net

Creative Commons License
Esta obra está bajo una licencia de Creative Commons.
Debe reconocer los créditos de la obra de la manera especificada por el autor o el licenciador.
Este contenido ha sido recopilado por el equipo de Wikilearning. Todo el contenido recopilado se ha obtenido respetando y comunicando en nuestro site la licencia de cada fuente.
Wikilearning tiene permiso expreso por escrito de los autores para publicar los contenidos que ha extraído de otras webs, incluyendo su uso comercial.

Wikis relacionados con 'Proxys y anonimato - Freenet'

Explicación sobre la configuración de Proxomitron + Multiproxy para hacerlos funcionar juntos.
Lo que pretendo en este trabajo es profundizar en el conocimiento de la forma y... Más »
Este documento (el primero de tres) pretende presentar, a grandes rasgos, el funcionamiento de Netfilter... Más »
A partir de tres tesis que se enmarcarían de la siguiente forma: a) la omnipresencia... Más »
Este documento pretende ser una guía sencilla para usuarios que no quieran complicarse la vida... Más »
¿Estás seguro de que deseas eliminar este capítulo?