Technical FAQ

Please note the warning.

What is Tox? (Advanced)

Tox provides an encrypted, distributed, and extensible peer-to-peer platform that can be used for various forms of communication. We intend Tox to be used as a multimedia messenger, but many people have shown us that Tox can be used for a lot more than just instant messaging. For the sake of simplicity, the rest of this page will explain how Tox operates as its intended use.

Tox users are connected by a modified version of DHT, and bootstrap nodes are used to assist connections to the pool. The hash table consists of each Tox ID and an encrypted entry of each users' IP, which is only readable when a friend request is made with a proper Tox ID, including the nospam. When a user friends another user, their IPs are exchanged in order to facilitate a direct connection. Once a handshake occurs, a connection is established, and users converse through a crypto stream.

It consists of a core, and a number of clients. Go here for more information about the advantages of NaCl, libsodium, and peer-reviewed cryptographic primitives.

Tox is just the core, the part of the program which handles the messages and encryption, for instance. But it can only function in the context of a complete instant messaging program. All the fancy user interfaces you see all over the place, are the clients. The client is a separate program which utilizes the core, providing a convenient way to use the program. So when you use Tox, you are in fact using one of the clients. The most clients are graphical clients, in other words, you will make use of all kinds of graphical elements which are part of the client. You usually won't get to see the core (unless you look into the source on GitHub). There are various clients available which each have a different name, are independent from each-other, in various programming languages.

For example, file sharing and A/V (audio and video) are handled by the core, but the (for example!) pop-ups, per-person volume sliding bars, friends list etc, buttons etc. are all handled by the client.

  • When you are referring to the Tox protocol or in general, you are talking about Tox.
  • When you are referring to the Tox program itself, you are talking about the Tox core, usually written as toxcore (see the Git)
  • When you are referring to one of the clients, you should mention the name of the client instead of 'Tox' or 'toxcore', such as Toxic or qTox (see Clients)

Does Tox Rely on Central Servers?

No. That said, in some situations a client will choose to use central node to jump onto the distributed network.

Encryption

Encryption makes it impossible for anyone who is not the sender or recipient of a message to know content of message. All Tox communications (text, audio, video, file transfers, etc) are encrypted. That includes perfect forward secrecy, so all other Tox sessions (including those with the same friend) are safe in the case that someone manages to decrypt one session. This is not negotiable; it is the only mode Tox will operate in.

Thanks to public key cryptography, it is also impossible to pretend to be another Tox user, unless you were to steal that user's private key.

Which encryption algorithms does Tox employ?

Tox uses the encryption algorithms present in the NaCl crypto library, via libsodium

“<irungentoo> (…) curve25519 for the key exchange, xsalsa20 for the encryption and poly1305 for the MAC”

More info: https://github.com/irungentoo/toxcore/blob/master/docs/updates/Crypto.md

How does Tox's Encryption compare to OTR?

The encryption used in Tox not only provides same features as OTR, but is also the default, and only operation mode of Tox.

Can I use Tox over Tor?

Where can I find a public DHT node to bootstrap with?

Check out nodes for an updated list.

What is used for A/V?

Opus for audio and VPX (currently 8) for video.

SIP is not being used.

Can data sent through Tox be corrupted?

“<irungentoo> toxcore packets are encrypted with MACed crypto so data will never be corrupted in transit”

It basically means that data won't ever be corrupted when sending between Tox clients.

What is stopping people from tracking me through the public DHT?

Tox generates a temporary public/private key pair used to make connections to peers in the DHT. Onion routing is used to store and locate Tox IDs, to make it more difficult to, for example, associate Alice and Bob together by who they are looking for in the network. 1

Source

Where do I get the Tox source code?

How do I compile Tox?

Check out the instructions found in INSTALL.md in the root of the toxcore repository.

Community

For more information on the communicating with the Tox community, see community.

Troubleshooting

For information on troubleshooting known issues in Tox, see troubleshooting.

Contribution

As an open source project, Tox needs developers first and foremost. Graphic designers are very welcome too. Adventurous users can test and report bugs, translators will be necessary later on to translate stuff, and this wiki could always use another pair of hands! For more information on contributing to Tox, see contributing.

Print/export