# Tox (Protokoll)

Tox ist ein freies Peer-to-Peer-Instant-Messaging- und Videotelefonie-Netzwerkprotokoll, das verschlüsselten Datenaustausch ermöglicht. Das Ziel des Projekts ist es, eine sichere, aber dennoch einfach zu benutzende Kommunikationsplattform zu kreieren.

## Geschichte

Die Entwicklung von Tox begann am 22. Juni 2013 auf dem Technologie-Subboard von 4chan in einem Thread, in dem es um die Privatsphäre von Skype-Nutzern ging. Der Diskussionsanlass war der Beginn der globalen Überwachungs- und Spionageaffäre einige Wochen zuvor. Der Name Tox wurde vorgeschlagen und offiziell akzeptiert. Der erste Beitrag auf GitHub wurde von einem Nutzer mit dem Namen irungentoo eingereicht. Ausführbare Dateien wurden zum ersten Mal am 3. Februar 2014 zugänglich gemacht. Nightly Builds werden in regelmäßigen Abständen mit Jenkins veröffentlicht.
Mit Stand von Januar 2017 sind diverse Sicherheitsmängel bekannt. Die aktuellen Entwickler sprechen selbst von einer ungetesteten, nicht gut verstandenen Codebasis.

## Eigenschaften

Dem Benutzer wird ein privater und ein öffentlicher Schlüssel zugeteilt, mit dem er sich mittels Peer-to-peer zu einem anderen Benutzer verbinden kann. Der Nutzer ist in der Lage, mit Freunden zu chatten, Chaträumen beizutreten und Dateien zu versenden. Der gesamte Datenverkehr wird dabei mittels NaCl-Bibliothek verschlüsselt. Seit Februar 2014 wird daran gearbeitet, Audio- und Videotelefonie in die Clients zu implementieren.
Funktionen:
* Textnachrichten mit Schreibindikator
* Gruppenchats
* VoIP
* Videochat
* Screen-Sharing
* Dateiversand
Zusätzliche Features können von jedem Client implementiert werden, vorausgesetzt, sie werden vom Kern unterstützt. Kernunabhängige Features sind den Clients überlassen.
Tox benutzt Hole Punching, um zwischen Teilnehmern, die sich hinter einer Firewall befinden, eine direkte Verbindung herzustellen. Portweiterleitungen sind deshalb nicht notwendig.
Tox nutzt die Codecs Opus (Audio) und VP8 (Video).

## Architektur
### Core

Das Tox-Projekt beinhaltet eine Kernbibliothek, welche das Protokoll und die API zur Verfügung stellt. Die Front-Ends (oder Clients) werden auf die Spitze des Kerns gesetzt. Jeder kann einen Client unter Einbezug des Kerns erstellen.

### Clients

Ein Client ist ein Programm, das die Kernbibliothek benutzt, um mit anderen Tox-Nutzern zu kommunizieren. Es sind verschiedene Clients für verschiedene Betriebssysteme verfügbar.
Zu den aktiv entwickelten Clients gehören:
| Clientname | Programmiersprache | Version | Datum | Interface | Betriebssystem | Besonderheiten |
| µTox | C | 0.18.0 | 2020/11/27 | GUI | Windows, Mac OS X, Linux | VoIP, Videochat, Screen-Sharing |
| Poison | C, Objective-C | 0.01 | 2015/11/03 | GUI | Mac OS X | |
| Toxygen | Python3 | v0.4.3 | 2020/03/21 | GUI | Linux, Windows | |
| Antidote | Objective-C | 1.00 | 2016/11/01 | GUI | iOS | |
| Antox | Scala, Java | v0.14.0-alpha | 2014/10/03 | GUI | Android (als Download verfügbar) | |
| Toxic | C (ncurses) | 0.10.0 | 2020/11/30 | CLI | Unixartige | VoIP |
| cyanide | C++ (Qt) | ./. | 2015/04/17 | GUI | Sailfish OS | |
| Ricin | Vala | 0.2.9 | 2016/11/14 | GUI | Linux | |
Projekte, die das Tox-Protokoll über ein Plugin benutzen, sind:
* Pidgin
* Miranda NG

## Rezeption

Tox wurde schon während der frühen Entwicklungsphase der Öffentlichkeit bekannt, nachdem eine Reihe von Webportalen darüber berichtet hatte. Am 15. August 2013 befand sich Tox auf Platz 5 von GitHubs „Top-Trending“-Liste. Bedenken über Metadaten-Leaks machten die Runde, woraufhin die Entwickler Onion-Routing in den Prozess des Freundefindens integrierten. Am 24. Februar 2014 wurde Tox in den Google Summer of Code als eine Mentoringorganisation aufgenommen.

## Verwandte Projekte

* RetroShare
* GNUnet
* I2P
* Briar