Plantilla:Borrar pagina

De FdIwiki ELP
Saltar a: navegación, buscar

Tor, de las siglas "The Onion Router" (encaminamiento de cebolla), es un software libre que permite la comunicación de manera anónima en Internet redirigiendo el tráfico a través de una red virtual compuesta por más de siete mil nodos, gracias a un conjunto de organizaciones e individuos que donan su ancho de banda y poder de procesamiento. El objetivo es permitir que los usuarios puedan usar Internet sin revelar su dirección de IP ni el contenido de la información de que buscan o comparten.

Para conseguir este objetivo se propuso el uso del encaminamiento de cebolla [1], protocolo de red diseñado por David M. Goldshlag, Michael Reed y Paul Syverson, que encripta los mensajes originales por capas (como las de una cebolla) y que hace que los mensajes viajen desde el origen a su destino a través de una serie de nodos que se encargan de decodificar parte del mismo, revelando el siguiente nodo al que hay que mandar la información encriptada, hasta que llega al último nodo que se encarga de decodificar por completo el resto del mensaje y así poder enviar la información original al destinatario, sin revelar, o incluso conocer, la IP de origen.


Introducción

Historia

A mediados de la década de los 90 los matemáticos David M. Goldshlag, Michael Reed y Paul Syverson crearon el protocolo de enrutamiento de cebolla como proyecto para marina estadounidense, con el objetivo de proteger las comunicaciones de inteligencia de Estados Unidos.

Syverson fue más allá y el 20 de septiembre de 2002 lanzó una versión alpha [2] de Tor, junto con los científicos Roger Dingledine y Nick Mathewson [3], al que llamaron "The Onion Routing Project", más conocido como "TOR Project".

Un año después de esta versión alpha, el 8 de octubre de 2003, se lanzó la primera versión pública de Tor [4] y el 13 de agosto de 2004 Syverson, Dingledine y Mathewson presentaron la llamada Segunda Generación del Onion Routing [5]. Además, fue en 2004 cuando el Naval Research Laboratory liberó el código de Tor como licencia libre.

En 2006 Dingledine, Mathewson y otras 5 personas fundaron The Tor Project [6], una organización sin ánimo de lucro orientada a la investigación y que es la responsable del mantenimiento de Tor.

En marzo de 2011 recibió el premio de la Free Software Fundation para proyectos de beneficio social al haber permitido que, aproximadamente, 36 millones de personas en todo el mundo experimentaran libertad de acceso y expresión en Internet manteniendo su privacidad y anonimato.

Objetivo y usos

Tor busca conseguir el anonimato en la red, permitiendo a los usuarios navegar, chatear y mandar mensajes instantáneos sin conocer la dirección IP de los participantes. El problema que encuentra Tor es que, debido a la gran variedad de usuarios que la utilizan, sus usos son tanto lícitos como ilícitos.

Por ejemplo, Tor es usado por empresas criminales, hacktivismo, pornografía infantil y tráfico de drogas o armas[7]. The Tor Project se defiende de este uso ilegal alegando que su objetivo de anonimato en la red busca ayudar a gente normal que se preocupa por su privacidad, el ciber-espionaje o que busca evadir las censuras de su país de origen.


¿Quiénes donan su ancho de banda?

Es donado sin ánimo de lucro por un conjunto de organizaciones e individuos. Desde 2006 ha habido más de 4300 donaciones individuales y se calcula que hay alrededor de 6000 ordenadores de voluntarios vinculados en la red Tor, que hacen las funciones de routers OR y Servicios de directorio.

Desde que se inició el proyecto Tor ha habido varias organizaciones que han financiado este proyecto, actualmente son las siguientes:

  • SRI International
  • US Department of State Bureau of Democracy, Human Rights, and Labor
  • National Science Foundation (junto con el Instituto de Tecnología de Georgia y la Universidad de Princeton)
  • Radio Free Asia
  • Un ISP anónimo de América del Norte
  • Fundación Ford
  • Google Summer of Code

Funcionamiento

Componentes

Funcionamiento red tor.png

La red está formada por una serie de nodos que se comunican mediante el protocolo TLS que es un protocolo de cifrado sobre TCP/IP que es el protocolo con el que funciona Internet. Hay dos tipos de entidades:

  • Nodos OR o simplemente OR (Onion Routers): funcionan como encaminadores y en algunos casos además como servidores de directorio. Los nodos OR mantienen una conexión TLS con cada uno de los otros OR. Las conexiones OR-OR no son nunca cerradas deliberadamente salvo cuando pasa cierto tiempo de inactividad.
  • Nodos OP o simplemente OP (Onion Proxy): su función es obtener información del servicio de directorio, establecer circuitos aleatorios a través de la red y manejar conexiones de aplicaciones del usuario. Funciona como software local con el que el usuario se comunica. Las conexiones OR-OP no son permanentes. Un OP debería cerrar una conexión a un OR si no hay circuitos ejecutándose sobre la conexión y ha vencido cierto temporizador.

Servicios de Directorio

Un servicio de directorio (SD) es una aplicación o un conjunto de aplicaciones que almacena y organiza la información sobre los usuarios de una red. En el caso de Tor el servicio de directorio publica una base de datos que asocia a cada OR una serie de información. Esta información es accesible a todos los OR y a todos los usuarios finales y la usan para tener un conocimiento de la red. Si se tienen pocos servidores de directorio se corre el riesgo tener un punto cuyo fallo puede ocasionar el fallo del sistema completo. Los servidores de directorio son en realidad un grupo establecido de ORs confiables.

Funcionamiento basico

La red Tor funciona de la siguiente manera:

Htw1.png
  • A partir de la información obtenida de su configuración y del servicio de directorio el OP decide un circuito por el que van a circular los paquetes. Por defecto el circuito tiene 3 nodos OR (denominados entry node, middle node y exit node).
  • El OP negocia, , las claves de cifrado necesarias con cada OR del circuito para proteger sus datos en todo el camino antes de realizar transmisión alguna. La obtención de las claves simétricas una para cada sentido de comunicación (Kf<- forward key, Kb<-backward key), se realiza a partir del protocolo de establecimiento de claves Diffie-Hellman para obtener una clave compartida y a partir de ella derivar las dos claves simétricas.
Htw2.png
  • A continuación cifra el paquete con la clave para el último OR del circuito.
  • A continuación hace lo propio del penúltimo.
Htw3.png
  • Hace lo mismo con todos los nodos hasta hacer lo propio con la de primer nodo.
  • Envía el paquete resultante al primer nodo del circuito. El paquete enviado queda envuelto en capas, cada una con la clave de uno de los nodos OR, de ahí en nombre de encaminamiento de cebolla.
  • El primer OR quita 'su' capa de la cebolla y envía el paquete al siguiente nodo.
  • Según va llegando el paquete a cada OR éste pela la capa externa. De esta forma ningún OR puede hacerse con la imagen completa del circuito ya que sólo conoce los OR/OP anterior y posterior.

Diffie-Hellman

El algoritmo de Diffie-Hellman funciona de la siguiente manera:

Para dos partes Alice y Bob que intentan establecer una clave secreta y un adversario Mallory, la versión básica es como sigue:

  1. Se establecen un primo p y un generador g∈Zp (2 ). Estos son públicos, conocidos no solo por las partes Alice y Bob sino también por el adversario Mallory.
  2. Alice escoge a∈Zp−1 al azar, calcula A=g^amodp, y envía A a Bob.
  3. Bob escoge b∈Zp−1 al azar, calcula B=g^bmodp, y envía B a Alice.
  4. Ambos saben el valor de K que es el que usan para cifrar y descifrar.

Células

Una vez que se establece la conexión TLS, las entidades se envían paquetes de información estructurada llamadas células. Su formato es el siguiente:

  • circID.- Es el identificador de circuito y especifica el circuito a el que se refiere la célula. Cada circuito tiene un un CircId distinto para cada OR y OP del circuito.
  • CMD.- Indica el comando que especifica el significado de la célula. Atendiendo al tipo de comando (valor de CMD) hay 2 tipos de células: Células de control y Células de transmisión.

Células de control Las células de control (en inglés control cell) son siempre interpretadas por el nodo que las recibe y permiten controlar la comunicación. Comandos que tienen estas células:

  • CREATE : para crear circuito
  • CREATED : para indicar que se ha cerrado el circuito
  • DESTROY : destruir circuito
  • CREATE_FAST : para crear un circuito reaprovechando operaciones de clave pública existentes)
  • CREATED_FAST : para indicar que se ha creado el circuito de una manera rápida

Células de transmisión Las células de transmisión son usadas para la comunicación entre el OP y cualquiera de los OR del circuito, normalmente el exit node. En este tipo de células el formato tiene campos que forman parte de la carga útil (PAYLOAD):

  • Relay command.- El el subcomando RELAY que indica el funcionamiento de la celda.
Hay tres tipos de subcomandos relay:
  • forward: son enviados desde el OP origen del circuito.
  • backward: son enviados desde los OR del circuito al OP origen.
  • ambos: pueden funcionar como forward o como backward.
Posibles subcomandos:
  • RELAY_BEGIN: de tipo forward.
  • RELAY_DATA: de tipo forward o backward.
  • RELAY_END: de tipo forward o backward.
  • RELAY_CONNECTED (código 4): de tipo backward.
  • RELAY_SENDME: de tipo forward o backward. A veces se usa para funciones de control (streamID=0).
  • RELAY_EXTEND: de tipo forward. Se usa para funciones de control (como veremos streamID=0).
  • RELAY_EXTENDED: de tipo backward. Se usa para funciones de control (streamID=0).
  • RELAY_TRUNCATE: de tipo forward. Se usa para funciones de control (streamID=0).
  • RELAY_TRUNCATED: de tipo backward. Se usa para funciones de control (streamID=0).
  • RELAY_DROP: de tipo forward o backward. Se usa para funciones de control (streamID=0).
  • RELAY_RESOLVE: de tipo forward.
  • RELAY_RESOLVED: de tipo backward.
  • RELAY_BEGIN_DIR: de tipo forward.
  • Recognized: campo que junto con el campo digest permite identificar si la celda es para ser procesada localmente.
  • StreamID: es el identificador de flujo. De esta forma se permite que varios flujos puedan ser multiplexados en un solo circuito. Este campo permite identificar el stream al que nos referimos entre los múltiples streams del circuito. Es seleccionado por el OP y permite al OP y al exit node distinguir entre múltiples streams en un circuito. Las células que afectan al circuito entero en lugar de a un streamID particular tienen este campo a 0 y se pueden considerar como de control.
  • Digest.- Permite el control de integridad extremo a extremo (end-to-end integrity checking). Contiene los primeros cuatro bytes de ejecutar SHA-1 sobre TODOS los bytes de células relay que han sido enviados a este nodo del circuito o originados desde este nodo del circuito (sólo conocidos por el origen y el destino ya que van cifrados.
  • length.- Indica el número de bytes del campo DATA que contiene carga útil real. El resto del campo irá rellenado por bytes a NULL.

Una célula se considera completamente descifrada si el campo Recognized está a ceros y el campo Digest es el primero de los 4 bytes resultado de ejecutar la función de digest de todos los bytes 'destinados a' o 'originados desde' este salto del circuito. Si una celda no está completamente descifrada se pasa al siguiente salto del circuito. Si la célula se ha comprobado que está completamente descifrada pero el comando de la célula no se entiende la célula será borrada e ignorada pero su contenido todavía cuenta respecto a los digests. Observar que el campo Recognized permite, de una forma muy rápida, descartar ciertas células como candidatas a estar completamente descifradas.

La diferencia principal entre las células de control y las de transmisión es que las primeras pueden ser leídas por cualquiera mientras que las segundas solo por un nodo concreto. Por ejemplo cuando se envía una célula destroy el OP la envía al primer OR este la recibe, cierra todos los flujos y la manda al siguiente. Así hasta llegar al final. Para células de transmisión el OP asigna el digest y después encripta la célula con cada una de las claves de los nodos OR. Como el digest está encriptado con distintos valores en cada paso solo el nodo objetivo podrá recibir el valor adecuado y por tanto hacer la función que le indique la célula. Cuando un nodo OR recibe una célula comprueba si al desencriptar la célula con su clave da un código correcto de digest, sino es así comprueba el siguiente nodo, cambia el valor de CircID de la célula por el del siguiente nodo.

IRC de Tor

Actualmente existe un canal IRC de Tor donde muchos usuarios se conectan para tratar problemas y contar al resto los avances y mejoras que se van consiguiendo en la red [8] el canal es #tor-dev

¿Quiénes usan Tor y para qué?

Hay muchísimas personas y organizaciones que usan Tor, para unos usos muy distintos.

  • Usuarios normales: para protegerse de ladrones de identidades, de empresas irresponsables, investigar temas delicados o evitar la censura en su país de sitios, básicos de internet.
  • Militares: para obtener y enviar información sin que el enemigo lo sepa, sin dar pistas sobre su ubicación.
  • Periodistas: para obtener información no controlada por los gobiernos de ningún país, información de sucesos de países controlados por gobiernos totalitarios.
  • Policías: para navegar por sitios web sospechosos de forma oculta, para llevar a cabo operaciones en línea encubiertas.
  • Activistas, denunciantes, revolucionarios.
  • Empresarios: para espiar a la competencia sin que éstos lo sepan, para llevar a cabo estrategias empresariales.
  • Profesionales TI: para hacer pruebas con IPs fuera del rango de IPs de la empresa, para pasar por alto los propios sistemas de seguridad de su empresa TI.

Software y servicios

  • Tor Browser: Tor Browser contiene todo lo necesario para navegar de forma segura por Internet. Este paquete no requiere instalación. Sólo extraerlo y ejecutar.
  • Arm: Arm es un monitor de estado del terminal de Tor, destinada a los aficionados de línea de comandos y las conexiones ssh. Esto funciona muy parecido a la parte superior hace por el uso del sistema, proporcionando información en tiempo real sobre la utilización de recursos de Tor y el estado.
  • Metrics Portal: Análisis para la red Tor, incluyendo gráficos de su ancho de banda disponible y base de usuarios estimado. Este es un gran recurso para los investigadores interesados ​​en las estadísticas detalladas acerca de Tor.
  • Tor Messenger: Un programa de chat multiplataforma que pretende ser seguros por defecto y envía todo su tráfico a través de Tor.
  • Pluggable Transports: transformar el flujo de tráfico entre el cliente Tor y el puente. De esta manera, los censores que monitorean el tráfico entre el cliente y el puente verá inocente de aspecto tráfico transformado en lugar del tráfico real Tor.
  • Onionoo: protocolo basado en la web para aprender acerca de la ejecución actualmente relés y puentes Tor.
  • Shadow: Un simulador de redes de eventos discretos que ejecuta el software de bienes Tor como un plug-in. Sombra es un software de código abierto que permite precisa, eficiente, controlada y repetible experimentación Tor.
  • Stem: biblioteca de Python para aplicaciones y scripts que interactúan con Tor.
  • Tails: El Incognito Live System amnésico es una distribución de CD / USB directo preconfigurado para que todo se encamina de forma segura a través de Tor y no deja rastro en el sistema local.
  • txtorcon: Python y Twisted aplicación basada en eventos del protocolo de control de Tor. Unidad de pruebas, abstracciones de estado y configuración, documentación. En PyPI y en Debian.

Referencias