# RetroShare

RetroShare es un software que proporciona comunicaciones de red cifradas P2P, un sistema de correo electrónico no centralizado, mensajería instantánea, un BBS y un sistema de compartición de ficheros basado en una red amigo-a-amigo, haciendo uso para todo ello de la herramienta de cifrado GPG. No es estrictamente un cliente para una red oscura dado que los pares pueden opcionalmente comunicar certificados y direcciones IP de/a sus amigos.

## Autenticación y conectividad

Tras la instalación, RetroShare genera un par de claves GPG. Tras la autenticación e intercambio de una clave asimétrica, se usa SSL para establecer la conexión. El cifrado extremo-a-extremo se realiza mediante OpenSSL. Los amigos de amigos no pueden conectarse de forma predeterminada, pero pueden verse entre ellos si los usuarios así lo permiten.

## Compartición de ficheros

Es posible compartir carpetas o directorios entre amigos. La transferencia de archivos se realiza empleando un algoritmo de enjambre en múltiples pasos (inspirado en el característico "Turtle Hopping" del proyecto Turtle F2F, pero implementado de forma diferente). En esencia, los datos solo se intercambian entre amigos, aunque es posible que el origen y el destino de una transferencia dada involucre a varios amigos laterales. Una función de búsqueda anónima es otra opción que permite la localización de ficheros en esta red.
Los archivos se representan por su valor hash SHA-1 y los enlaces a archivos compatibles se pueden exportar, copiar y pegar dentro y fuera de la red RetroShare lo que permite publicar su ubicación virtual.

## Comunicación

RetroShare ofrece diversos servicios que posibilitan la comunicación entre amigos:
* Un chat y un sistema de correo privados que permiten la comunicación segura entre pares de confianza.
* Un sistema que permite la creación de foros anónimos y autenticados y distribuye mensajes de amigos de amigos.
* Un sistema de canales que ofrece la posibilidad de auto-descarga de archivos publicados en un canal determinado para todos los suscritos al mismo.

## Interfaz de usuario

El núcleo de RetroShare se basa en una biblioteca fuera de línea, a la que se conectan dos elementos:
* un ejecutable de línea de comandos que no ofrece prácticamente ningún control
* una interfaz gráfica de usuario escrita en Qt4 que es la que la mayoría de los usuarios usan
Aparte de las funciones comunes a otros programas de intercambio de archivos, como una pestaña de búsqueda y visualización de transferencias, RetroShare ofrece a sus usuarios la posibilidad de gestionar su propia red mediante la recopilación de información opcional sobre amigos cercanos y visualizarla gráficamente a modo de matriz de confianza o como una red dinámica.

## Anonimato

La estructura friend-to-friend de la red RetroShare hace que sea difícil de invadir y casi imposible de controlar desde un punto de vista externo. El nivel de anonimato se puede incrementar mediante la desactivación de la tabla de hash distribuida (DHT) y el servicio de intercambio de IP/certificados, transformando así la red RetroShare en una verdadera darknet.
Los amigos de amigos no pueden conectarse directamente entre sí. Sin embargo, existe la posibilidad de compartir anónimamente archivos entre ellos si el usuario decide activarla. La búsqueda, el acceso y tanto la subida como la bajada de estos archivos se "enruta" a través de una serie de amigos. Esto significa que la comunicación entre la fuente de datos (el "uploader") y el destino (el "downloader") no se realiza de modo directo, sino indirectamente a través de amigos mutuos. Aun cuando los amigos intermediarios no puedan determinar la fuente original de los datos o su destino último, sí pueden ver las conexiones inmediatas en la cadena de comunicación (en realidad sus propios amigos). Por otro lado, al estar cifrado el flujo de datos, solo la fuente original y su destino último están en condiciones de conocer qué contenido se está transfiriendo realmente.

## Funcionalidad

* Red horizontal y sin servidores, completamente descentralizado
* Múltiples y simultáneas descargas/subidas
* Búsqueda de amigos
* Chat personal y grupal
* Foros
* Canales
* Comunicaciones VoIP
* Mensajería instantánea
* Autentificación mediante el sistema de cifrado GnuPG
* Cifrado de conexión mediante la librería OpenSSL
* Añadir descargas a través de enlaces Web
* Soporte de complementos (plugins)
* Soporte para la redirección de puertos mediante UPnP y NAT-PMP
* Interfaz gráfica de usuario escrita con set de herramientas Qt4
* Integración en la barra de tareas del sistema operativo
* Disponible en 15 idiomas y aumentando
* Soporte para reanudación de las descargas tras el cierre de la aplicación
* Vista de estadísticas internas del router
* Guía de instalación rápida (para sencilla configuración inicial de RetroShare)

## Futuros desarrollos

Las siguientes funcionalidades son prioritarias en el desarrollo de RetroShare:
* Canales con vídeo en vivo y bajo demanda.
* Mejoras en el complemento de VoIp, como animaciones con sonido y acciones en las llamadas entrantes y salientes.
* Sistema de cola para las subidas. Los amigos recibirán un número de cola para descargar.
* Sistema de comentarios y puntuación para los archivos compartidos por uno mismo y los amigos.
* Mejoras en el sistema de mensajes, como verificación de que el mensaje fue recibido y enviar fotografías en los mensajes.
También se pretende implementar como complementos (plugins) un muro al estilo Facebook, un sistema de calendario con la posibilidad de añadir eventos, un sistema de sincronización de carpetas entre los computadores de un mismo usuario y distintos usuarios, una galería de música en la que poder crear listas con tus canciones y las de tus amigos para escucharlas sin descargarlas, etc.