# Tox (informática)

Tox es un protocolo p2p de mensajería instantánea y videollamadas con cifrado de extremo a extremo. El objetivo del proyecto es proporcionar comunicaciones seguras y de fácil uso, sin intromisiones ni intermediarios. La implementación de referencia es publicada como software libre bajo los términos de la Licencia Pública General de GNU (GNU GPL), versión 3 o posterior.

## Historia

Tox fue ideado por la comunidad del foro de tecnología del sitio web 4chan como contrapartida a las revelaciones de espionaje masivo hechas por Edward Snowden, entre las que se acusaba a Skype de cooperar con la NSA. El primer código de Tox fue publicado el 23 de junio de 2013 por un usuario llamado irungentoo. Las primeras versiones de prueba aparecieron el 3 de febrero de 2014.

## Características

Tox utiliza criptografía de clave pública con perfecta discreción anterógrada para asegurar la privacidad e integridad de las comunicaciones. Para esto se recurre a la librería NaCl. Los usuarios se conectan de forma directa en una red de pares, por lo que la información cifrada nunca pasa por un servidor central. Los usuarios tienen la capacidad de solicitar la aceptación de otros usuarios, escribirse entre sí, unirse a canales grupales con amigos y desconocidos, charlar vía voz y vídeo y enviar archivos.
Aunque todos los clientes soportan mensajería básica, algunas características como videoconferencias, chat grupal, desktop streaming e intercambio de archivos sólo están presentes en algunos clientes. Las características adicionales pueden ser implementadas por cualquier cliente siempre y cuando ya exista la infraestructura en el protocolo.

## Arquitectura
### Núcleo

Toxcore es una librería que establece el protocolo de comunicaciones y una API. Los front-ends para usuario, también llamados "clientes", se construyen a partir de este núcleo. Cualquier programador puede crear un cliente a partir de dicha librería.

### Protocolo

Tox es una implementación del protocolo Tox, un ejemplo de capa de aplicación y presentación en modelo OSI. Se han hecho implementaciones alternativas del mismo protocolo, como es el caso Xot.
Tox utiliza el formato de audio Opus y el formato de video VP8.

### Criptografía

Tox utiliza los primitivos criptográficos de la librería NaCl, o libsodium para ser más precisos. Específicamente, el algoritmo de curva elíptica 25519 para su intercambio de claves, el algoritmo xsalsa20 para la criptografía asimétrica, y Poly1305 como código de autenticación de mensaje; todos ellos estampas del Dr. Daniel Bernstein.

### Clientes

El término "cliente" en el contexto de una arquitectura de red entre pares (como la de Tox) no hace referencia a una separación entre aplicaciones cliente y servidores de red. No existen servidores en la red de Tox. Un cliente es cualquier aplicación que usa la biblioteca Tox para comunicarse directamente con otros clientes, según el protocolo implementado en dicha biblioteca. Hay una diversidad de clientes con distintos grados de madurez para varias plataformas. La siguiente es una lista incompleta:
| Nombre | Sistema operativo | Escrito en |
| Antidote | iOS | Objective-C |
| Antox | Android | Scala, Java |
| Cyanide | Sailfish OS | C++ |
| gTox | GNU/Linux | C++ (GTK+ 3) |
| qTox | GNU/Linux, FreeBSD, OS X, Windows | C++ (Qt) |
| Toxic | GNU/Linux, BSD, OS X | C (Ncurses) |
| Toxy | Windows | C# (WPF) |
| Toxygen | GNU/Linux, Windows | Python (Qt vía PySide) |
| µTox | GNU/Linux, FreeBSD, OS X, Windows | C (Win32 API, Xlib) |
| xWinTox | GNU/Linux, Solaris, BSD | C/C++ (FLTK) |
| Isotoxin | Windows | C/C++ |
| ratox | GNU/Linux, BSD, OS X | C |
Existen también plugins para Pidgin y Miranda NG.

## Reseñas

Tox recibió cierta publicidad significativa en su etapa conceptual temprana, llamando la atención de varios sitios noticiosos sobre tecnología. Hacia el 15 de agosto de 2013 Tox figuraba en el número cinco en la lista de tendencias de GitHub. Algunos expresaron preocupación por filtraciones de metadatos, a lo cual los desarrolladores respondieron implementando enrutamiento de cebolla para el proceso de descubrimiento de amigos. Tox fue aceptado en el Google Summer of Code de 2014 y 2015.