# Tox (protocollo)

Tox è un protocollo di messaggistica istantanea e videochiamata peer-to-peer con crittografia end-to-end. L'obiettivo dichiarato del progetto è quello di fornire comunicazioni sicure ma facilmente accessibili a tutti. Un'implementazione di riferimento del protocollo è pubblicata come software libero secondo i termini della GNU General Public License (GPL) versione 3 o successiva.

## Storia

Il commit iniziale su GitHub è stato inviato il 23 giugno 2013 da un utente di nome irungentoo. Gli eseguibili sperimentali pre-alpha sono stati resi disponibili agli utenti dal 3 febbraio 2014 in poi, e le build notturne di Tox sono pubblicate da Jenkins Automatron. Il 12 luglio 2014 Tox è entrato nella fase di sviluppo alpha e per l'occasione è stata ridisegnata la pagina di download.

## Caratteristiche
### Crittografia del traffico

Agli utenti viene assegnata una chiave pubblica e una privata, e si connettono direttamente tramite una peer-to-peer completamente distribuita. Gli utenti hanno la possibilità di inviare messaggi agli amici, partecipare a chat di gruppo con amici o sconosciuti, chat vocale/video e scambiarsi file. Tutto il traffico su Tox è crittografato end-to-end usando la libreria NaCl, che fornisce cifratura autenticata e perfetta segretezza in avanti.

### Distribuzione dell'indirizzo IP agli amici

Tox non fa alcun tentativo di occultare il tuo indirizzo IP quando comunica con gli amici, poiché lo scopo di una rete peer-to-peer è la connessione diretta con i propri amici. Esiste una soluzione alternativa di imbustamento delle proprie connessioni Tox attraverso Tor. Tuttavia, un utente non amico non può altrettanto facilmente il tuo indirizzo IP utilizzando solo un Tox ID; si rivela il proprio indirizzo IP a qualcuno solo quando lo si aggiunge all'elenco dei contatti.

### Funzionalità di messaggistica aggiuntive

I client Tox puntano a fornire supporto per varie funzionalità di comunicazione sicure e anonime; se ogni client supporta la messaggistica, funzionalità aggiuntive come messaggistica di gruppo, chiamate vocali e video, conferenze vocali e video, indicatori di digitazione, conferme di lettura dei messaggi, condivisione di file, crittografia dei profili e condivisione desktop sono supportate a vari livelli da client mobili e desktop. Funzionalità aggiuntive possono essere implementate da qualsiasi client, purché supportate dal protocollo principale. Le funzionalità che non sono collegate alla rete principale sono lasciate a discrezione del client. Gli sviluppatori dei client sono fortemente invitati ad aderire al Tox Client Standard al fine di mantenere la compatibilità tra client e sostenere le migliori pratiche di sicurezza.

### Usabilità come messaggistica istantanea

Sebbene diverse app che utilizzano il protocollo Tox sembrino simili in funzione alle normali app di messaggistica istantanea, la mancanza di server centrali ha la conseguenza che ambe le parti della chat devono essere online affinché il messaggio venga inviato e ricevuto. Gli applicativi che usano Tox si servono di approcci diversi, alcuni impediscono all'utente di inviare il messaggio se l'altra parte è scollegata, mentre altri mostrano il messaggio come inviato quando in realtà è memorizzato nel telefono del mittente in attesa della consegna, che avverrà quando il destinatario si ricollegherà alla rete.

## Architettura
### Core

Il core Tox è una libreria che stabilisce il protocollo e l'API. L'interfaccia dell'utente, o client, sono costruiti al di sopra del core. Chiunque può creare un client utilizzando il core. I documenti tecnici che descrivono il design del Core, scritti dallo sviluppatore principale irungentoo, sono disponibili pubblicamente.

### Protocollo

Il core di Tox è un'implementazione del protocollo Tox, un esempio del livello di applicazione del modello OSI e magari anche del livello di presentazione. Esistono implementazioni del protocollo Tox non realizzate dal progetto.
Tox usa il formato audio Opus per la trasmissione audio e il formato video VP8 per la trasmissione video.

### Crittografia

Tox utilizza le primitive crittografiche presenti nella libreria crittografica NaCl, tramite libsodium. In particolare, Tox impiega Curve25519 per i suoi scambi di chiavi, xsalsa20 per la crittografia simmetrica e Poly1305 per i MAC. Poiché il protocollo Tox può essere utilizzato da molte applicazioni diverse e poiché la rete Tox trasmette il nome del client utilizzato, è anche possibile che i client utilizzino una crittografia aggiuntiva quando inviano a client che supportano le stesse funzionalità.

### Client

Un cliente è un programma che utilizza la libreria principale Tox per comunicare con altri utenti del protocollo Tox. Sono disponibili vari clienti per un'ampia gamma di sistemi; il seguente elenco è incompleto.
| Nome | Sistema operativo | Scritto in | Stato di sviluppo e commenti |
| Antidote | iOS | Swift | Abbandonato (vedere la pagina GitHub del progetto) |
| Antox | Android | Scala, Java | Abbandonato, ultimo aggiornamento dicembre 2017 |
| Cyanide | Sailfish OS | C ++ | Abbandonato, ultimo aggiornamento gennaio 2017 |
| gTox | Linux | C++ (GTK+ 3 ) | Abbandonato (vedere la pagina GitHub del progetto) |
| qTox | Linux, FreeBSD, OS X, Windows | C++ (Qt) | Attivo |
| TOK | iOS, Android | Java, Swift, Objective-C | Attivo |
| Toxic | Linux, FreeBSD, OpenBSD, DragonflyBSD, NetBSD, Solaris, OS X | C (Ncurses) | Attivo |
| Toxy | Windows | C # ( WPF ) | Non mantenuto (vedere la pagina GitHub) |
| Toxygen | Linux, Windows | Python ( Qt tramite PySide ) | Attivo |
| TRIfA | Android | C, Java | Attivo |
| µTox | Linux, FreeBSD, OS X, Windows | C | Attivo |
| xWinTox | Linux, FreeBSD, Solaris | C / C++ (FLTK) | Abbandonato, ultimo aggiornamento nel dicembre 2015 |
| Isotoxin | Windows | C ++ | Abbandonato ultimo aggiornamento a marzo 2018 |
| ratox | Linux, BSD, OS X | C | Attivo |
| WebTox | Basato sul Web | HTML5 (client) + Go (server) | Abbandonato, ultimo aggiornamento nel gennaio 2016 |
Esistono anche plugin del protocollo Tox per Pidgin (non più mantenuto, ma funzionante al 30/03/2018) e Miranda NG.

## Divisione dalla Tox Foundation

L'11 luglio 2015, gli sviluppatori di Tox hanno annunciato ufficialmente la loro divisione dalla Tox Foundation, a causa di "una disputa sull'uso improprio dei fondi donati" da parte del capo e CEO della Tox Foundation, secondo LWN.net. Dato che i dominii sono sotto il controllo della Tox Foundation, lo sviluppo principale del progetto è stato trasferito su nuova infrastruttura, server e dominio.

## Ricezione

Tox ha ricevuto una significativa pubblicità nella sua fase concettuale iniziale, attirando l'attenzione dei siti di notizie tecnologiche online globali. Il 15 agosto 2013, Tox era il numero cinque nella lista delle migliori tendenze di GitHub. Sono state sollevate preoccupazioni per la perdita di metadati e gli sviluppatori hanno risposto implementando il routing Onion per il processo di ricerca degli amici. Tox è stato accettato nel Google Summer of Code come Mentoring Organization nel 2014 e nel 2015.