martes, 16 de febrero de 2016

Aprendiendo informática: Que tienen los archivos .torrent

Hace un par de dias me han llegado a través de dos foros sendas dudas que involucran el contenido de los archivos con extensión .torrent. Como el tema de esos archivos creo que no lo he tocado demasiado vamos a ver de que se trata.
Lo primero de todo, veamos como se forma un torrent. Supongamos que tenemos un archivo o una serie de ellos. El primer paso es crear un hash de cada archivo.

Un hash (tambien llamado en algunos sitios "huella digital") es el equivalente al numero de serie de cada archivo (o de unos datos, a secas). Genera un numero hexadecimal con la caracteristica de que si coges un archivo y le haces una modificacion, por minima que sea, el hash es completamente distinto. Esto hace que sirva para confirmar que no hay errores.

Luego se concatenan (si hay mas de uno) para formar una unica secuencia. Esto se realiza a nivel logico, los archivos no se ven alterados de ninguna manera.

Esa secuencia se divide en fragmentos de identico tamaño, que se indica al crearlo. Ese tamaño puede ser de varios kilobytes o de varios megas. Si el ultimo fragmento está incompleto, se deja esa parte con datos en blanco.

Hecho eso, se genera el hash de cada fragmento. Esto es lo que mas tarda a la hora de crear el torrent.

Hasta ahora hemos trabajado con los datos que se transfieren. Lo siguiente es crear el archivo que contiene los datos de ese torrent (que es el que tiene la extension .torrent).

Ese archivo contiene varias partes. La primera es la que se conoce como "info", el resto son opcionales en su mayoría, pero tambien las veremos.

En la parte info esta indicado:

- El nombre del torrent. En principio esto se puede cambiar en el programa cliente, pero viene indicado de antemano.
- El tamaño de los fragmentos.
- Los hashes de los fragmentos, concatenados a su vez.
- El nombre, el tamaño y el hash de cada archivo.
- La ruta de cada archivo (si es un torrent con varios archivos).
- Un bit que indica si se trata de un torrent privado.

Esa parte es imprescindible a la hora de que exista el torrent. Después viene, parcial o totalmente, lo siguiente:

- Una lista con uno o mas trackers (esto es importante en los torrents privados).
- La fecha de creación.
- Los comentarios que haya puesto el autor (tambien puede cambiarse mas adelante para poner un mensaje de "Descargado desde xxxx", por ejemplo).
- El nombre del programa que creo el torrent.
- Otros datos acerca de la codificacion de los datos.

Ese es el contenido del archivo .torrent. Nuestro programa cliente, al abrirlo, genera un nuevo hash basandose en la parte info llamado BTIH (BitTorrent Info Hash), que es el que usará para identificar al torrent en el tracker.

Como ya he dicho antes, un hash es distinto si se hace una modificacion, por pequeña que sea. Si se modifica la lista de archivos, su tamaño, el que sea privado, ¡o incluso el nombre original del torrent! el hash es completamente diferente, lo que hace que sea un torrent distinto.

A propósito, ese BTIH es el codigo que aparece en los enlaces magnet y que se usa para "solicitar" una copia del archivo torrent original a los demas equipos de la red DHT.

Las dos preguntas que me llegaban eran si un torrent privado podia modificarse para convertirse en publico y si era posible agregar archivos a un torrent existente. En ambos casos la respuesta es "no", ya que se modifica la seccion "info" del torrent.

Por si quereis saber mas (y no os asustan los galimatías informáticos, teneis la especificacion del protocolo en https://wiki.theory.org/BitTorrentSpecificationhttp://bittorrent.org/beps/bep_0003.html donde podreis encontrar toda esta informacion ampliada y con mas detalle.

Si os quedan dudas, podeis dejarme algún comentario y trataré de explicarlo, o de indicaros donde localizar esa información.

En cualquier caso, un saludo.

2 comentarios:

  1. Muchas gracias. Muy completo y didáctico.

    ResponderEliminar
    Respuestas
    1. Me alegro de que te haya parecido interesante y espero que tambien encuentres mas cosas que te gusten entre el resto de posts.

      Un saludo.

      Eliminar