Arti 2.0.0: Tor’s Official Rust Implementation Launches

The developers of the Tor project published the release of Arti 2.0.0, an officially developed version of the Tor toolkit written in the Rust language. The implementation is marked as suitable for use by general users and provides the same level of privacy, usability, and stability as the main C implementation. When the Rust code reaches a level that can completely replace the C version, the developers intend to give Arti the status of the main implementation of Tor and gradually stop maintaining the C version. The code is distributed under the Apache 2.0 and MIT licenses.

Arti is initially developed as a modular embeddable library that can be used by various applications. When designing Arti, past experience in developing Tor was taken into account, which made it possible to avoid known architectural problems associated with the fact that the C implementation was first designed as a SOCKS proxy, and only then adjusted to other needs.

In addition to modernizing the architecture, the reason for rewriting Tor in Rust was the desire to increase the security of the code by using a language that ensures safe operation with memory. According to Tor developers, using the Rust language without “unsafe” blocks will prevent at least half of all typical vulnerabilities in the project from appearing. In addition, Rust is expected to increase development speed due to the expressiveness of the language and strict guarantees that avoid wasting time on double checking and writing unnecessary code.

The significant change in the version number was made in accordance with the project’s semantic versioning model and is associated with changes that violate backward compatibility. Support for the proxy.socks_port and proxy.dns_port settings, previously deprecated, has been discontinued, replaced by the proxy.socks_listen and proxy.dns_listen settings. Support for the old syntax for defining Directory Authority servers has been discontinued. All programming interfaces of the arti crate package that are planned to be moved to other crate packages or removed are marked experimental.

New functionality includes support for the new “inet-auto” socket type for automatically assigning an unused TCP port to an RPC server. The implementation of functionality for relays and directory servers has continued. For directory servers, work has been done to manage certificates, and the ability to download, verify and store certificates has been added. For relays, a new modular architecture for managing chains of nodes has been implemented, support for creating communication channels with others relays, support for processing connection negotiation requests and the ability for a relay to work as a server when establishing a TLS connection.

/Reports, release notes, official announcements.