sábado, 16 de agosto de 2014

La Deep Web, La Red profunda y la Red Tor (III de ...)

Claves de OR:

Cada OR tiene un par de claves Privada/pública:

-Una clave de larga identidad que solamente sirve para firmar la información y certificados para permitir la identificación

-Una clave mediana de enrutamiento de cebolla que cifra las peticiones de establecimiento de circuito para así poder negociar las claves efímeras. Las claves antiguas, pueden ser usadas una semana después de que haya sido cambiada para dar tiempo que todo haya podido ser actualizado correctamente.

-Una clave pequeña de conexión que es usada en el handshake TLS. Esta clave se mete en el certificado que se firma con la clave de certificación. Hay que decir que ambos certificados se envían en el handshake TLS. El certificado de la clave certificación está firmado por la clave certificación, esta clave está autofirmada y debería ser cambiada una vez al día.

Establecimiento e iniciación de circuito:


Figura 2: Intercambio de mensajes para establecimiento de circuito
La cadena de OR´s que forman un circuito es construida de forma telescópica, esto es, el OP negocia las claves de sesión con cada sucesivo OR. Una ventaja de esta forma de operar es que se dejen una vez que éstas claves de sesión se dejen de utilizar y sean borradas, aunque un nodo sea comprometido no se podrá descifrar células viejas. El esquema se realiza con siguientes pasos:

-El OP escoge un OR como exit node (ORn), de acuerdo con su exit policy.
-EL OP escoge una cadena de OR's para constituir el path del circuito (OR1....ORn) de forma que ningún OR aparece dos veces en el path.
-El OP abre una conexión TLS con el entry-node (OR1 ) si es que no la tenía abierta
-El OP escoge aleatoriamente un ID de circuito (circID) que no se esté utilizando en la conexión con el entry-node
-El OP inicia un intercambio de clave Diffie-Hellman con el entry-node envíando una celda CREATE
-El entry-node le devuelve una celúla CREATED y de esta forma se obtiene una clave compartida Diffie-Hellman (D-H). De esta clave se derivan dos claves simétricas, una para cada sentido:
      -kf1 (forward key).- Se usará en la comunicación OP->OR1 del circuito
      -kb1 (backward key).- Se usará en la comunicación OR1->OP.
-A continuación el OP envía una petición a el OR1 para extender el circuito mediante una célula RELAY_EXTEND. Esta célula le indica al OR1 cual va a se el nuevo nodo OR2, su puerto y también contiene estructuras de datos que le tendrá que reenviar el OR1 al OR2 y que permitirán establecer un protocolo D-H de intercambio de claves entre el OP y OR2 a través de OR1 sin que el OR1 se entere de nada
-El OR1 coge la célula y realiza el procedimiento Diffie-Hellman escogiendo él mismo un nuevo circID apropiado. Observar que ahora la células CREATE/CREATED se intercambian entre el OR1 y el OR2.
-El OR1 manda al OP una célula RELAY_EXTENDED para mandarle lo que ha respondido el OR2 y así el OP tiene conocimiento de la clave D-H. La información está cifrada de tal forma que el nodo OR1 no puede acceder la información que se están intercambiando indirectamente el OP y OR2. De esta forma se establecen las nuevas claves simétricas: kf2 y kb2.

-De forma similar se continúa hasta conseguir que el OP tenga establecidas las claves kf1, kb1, kf2, kb2,..., kfn, kbn con los respectivos nodos OR.

Encapsulamientos de streams TCP:

Una vez que un circuito se ha establecido se procede con el encapsulamiento de los streams TCP que contienen los datos de la aplicación.

Un circuito ya establecido se puede aprovechar para multiplexar en él varios streams TCP provenientes de la misma o de distintas aplicaciones. De hecho, por eficiencia, Tor usa el mismo circuito para nuevos streams TCP durante diez minutos siempre que sea posible por la exit policy del exit node. Transcurridos los diez minutos, las peticiciones se darán a un nuevo circuito. Esto mejora la protección y evita que un atacante vincule tráficos antiguos con los nuevos.


El circuito permanecerá abierto hasta que todos los TCP streams que multiplexe hayan cerrado. Esta característica es necesaria para soportar muchos protocolos como SSH, los cuales son incapaces de mantener una sesión si se cambian los circuitos y, por tanto, el exit node, durante la sesión.

Figura 3: Conexión HTTP a través de un circuito Tor
Los pasos para encapsular el tráfico TCP son los siguientes:

-El OP escoge un circuito abierto que tenga un exit node que le permita conectarse de la formada adecuada con el servidor. Si no existe, lo crea según el algoritmo visto anteriormente
-El OP selecciona un StreamID arbitrario que no haya sido utilizado todavía en el circuito
-El OP construye una célula RELAY_BEGIN que contiene, cifrado adecuadamente para que sólo sea visto por el exit node, la dirección y el puerto destino de la comunicación.
-Esta célula es procesada por los nodos intermedios y el contenido útil es propagado hasta llegar en una célula RELAY_BEGIN que llega al exit-node
-El exit node obtiene la dirección y el puerto destino e intenta abrir una nueva conexión TCP con el host destino. Pueden suceder dos cosas.
-Si el exit node no puede establecer la conexión devuelve una célula RELAY_END.
-Si el exit node puede establecer la conexión devuelve una célula RELAY_CONNECTED que se irá propagando por la lista de OR´s hasta llegar al OP.
-Una vez que la célula RELAY_CONNECTED llega al OP, este y el exit node empaquetan el stream de datos TCP en células RELAY_DATA
-Si un OP quiere cerrar un stream TCP anonimizado envía una célula RELAY_END a lo largo del circuito y los nodos van cerrando ese stream para su circuito. Cuando llega al exit node, este cierre la conexión TCP. El exit node genera una célula RELAY_ENDED que se propaga hasta el OP.

Si el stream TCP que mantiene el exit node con el destino se cierra de forma abrupta, entonces el exit node envía a lo largo del circuito hasta el OP una célula RELAY_TEARDOWN que indica el cierre inesperado de la conexión. Por el camino se van cerrando los streams de circuito asociados a stream TCP.

Una vez que un OR recibe una célula RELAY, comprueba el circID de la célula y determina si tiene un circuito que se corresponda con esta a lo largo de la conexión. Si no lo tiene, descarta la célula. Por otra parte, si el OR no es exit node, entonces cifra o descifra la carga útil del stream usando la clave kb o kf correspondiente con el OP. El OR decide si reconoce la célula que está completamente descifrada. Si el OR reconoce la célula, la procesa. Si no, la pasa a lo largo del circuito. Si el exit node no reconoce una célula RELAY ocurre un error y el OR envía una célula DESTROY para cerrar el circuito.

Cuando una célula RELAY llega al OP, el OP descifra la carga útil con kbi. Si la carga útil está completamente descifrada procesa la carga útil.

Esto ha sido todo en cuanto a teoría, ahora quedará algún post más de lo que se puede encontrar por esta red, así que ha estudiar lo dicho en estas tres partes de artículo, ya que es bastante importante.

Saludos Malvados!

***************************************************************************
La Deep Web, La red profunda y la Red Tor (I de...)
La Deep Web, La red profunda y la Red Tor (II de...)
La Deep Web, La red profunda y la Red Tor (III de...)
La Deep Web, La red profunda y la Red Tor (IV de...)
***************************************************************************

No hay comentarios:

Publicar un comentario

Related Posts Plugin for WordPress, Blogger...

Entrada destacada

El server me sabe a poco.

Soy un fanático del Rock y de Debian . (Creo que voy a inventar Rockbian, que suena bien y todo xD) Llevaba tiempo queriendo unir estos 2 c...