Выпуск Arti 1.4.0, официальной реализации Tor на языке Rust

Разработчики проекта Tor опубликовали выпуск Arti 1.4.0, реализации Tor-клиента, написанного на языке Rust. Ветка 1.x отмечена как пригодная для использования обычными пользователями и обеспечивающая тот же уровень конфиденциальности, юзабилити и стабильности, что и основная реализация на языке Си. Достижение паритета с клиентом на языке Си намечено в ветке 2.0. Когда код на Rust достигнет уровня, способного полностью заменить вариант на Си, разработчики намерены придать Arti статус основной реализации Tor и постепенно прекратить сопровождение реализации на Си. Код распространяется под лицензиями Apache 2.0 и MIT.

Arti изначально развивается в форме модульной встраиваемой библиотеки, которую могут использовать различные приложения. При проектировании Arti учтён прошлый опыт разработки Tor, что позволило избежать известных архитектурных проблем, связанных с тем, что реализация на Си вначале была спроектирована как SOCKS-прокси, а уже потом подогнана под другие потребности.

Кроме модернизации архитектуры, причиной переписывания Tor на Rust стало желание повысить защищённость кода за счёт использования языка, обеспечивающего безопасную работу с памятью. По оценке разработчиков Tor, использование языка Rust без блоков “unsafe”, позволит не допустить появления как минимум половины от всех типичных уязвимостей в проекте. Кроме того, предполагается, что Rust повысит скорость разработки благодаря выразительности языка и строгих гарантий, позволяющих не тратить время на двойные проверки и написание лишнего кода.

В новом выпуске доведён до готовности новый RPC-интерфейс, который пришёл на смену протоколу управления через TCP-порт, задаваемый через параметр ControlPort. RPC может использоваться для интеграции приложений и сервисов с Arti без встраивания в приложение библиотеки с функцоинальностью Arti.

Ключевые отличия нового протокола:

  • Использование формата JSON вместо специфичного формата, требующего своего парсера;
  • Простота расширения протокола. Формализация того, как клиент и сервер должны обрабатывать неподдерживаемые сообщения, параметры и данные;
  • Механизм для определения доступности RPC;
  • Поддержка одновременной передачи нескольких запросов в одном сетевом соединении;
  • Наличие готовых клиентских библиотек для С, Python и Rust.

Из других изменений в Arti 1.4.0 упоминается проведение подготовительной работы для поддержки релеев и продолжение реализации возможностей для защиты onion-сервисов от DDoS-атак.

Release. Ссылка here.