Tor: Протокол скрытых сервисов
Ранее мы публиковали перевод статьи «Краткий обзор Tor» с официального сайта проекта TOR. Продолжая раскрывать тему современных средств соблюдения интернет-анонимности, представляем перевод материала, рассказывающего об основных принципах работы скрытых сервисов TOR-сети.
Этот механизм позволяет значительно затруднить физическое обнаружение и ограничение доступа к серверам, использующимся для публикации и обмена информацией, неугодной бизнес-элитам или властям тех или иных стран.
Tor не только позволяет пользователям скрывать свое местонахождение, но также предоставляет целый ряд других сервисов, например, веб-публикации и сервис обмена сообщениями. Используя «точки рандеву» в сети Tor, пользователи могут подключаться к этим скрытым сервисам, не получая никакой информации о сетевой топологии друг друга Проще говоря - пользователь не может сколь-нибудь достоверно установить IP адрес сервера, а сервер не может узнать адрес пользователя. А значит, ни у клиента ни у сервера нет возможности определить физическое расположение друг друга, и соответственно - применить какие-либо воздействия, кроме чисто виртуальных, доступных через интернет.. Данный документ описывает технические подробности того, как работает этот протокол рандеву.
Скрытый сервис В информационных технологиях слово «сервис» в широком смысле обозначает программно-аппаратный комплекс предоставляющий какую-либо услугу пользователю. Проще говоря - вся совокупность оборудования (серверов) и программ, к которым могут подключиться пользователи (люди, или другие сервисы), для удовлетворения своих запросов. Например, любой сайт, открываемый в браузере - это WEB-сервис. Обмен мгновенными сообщениями вроде ICQ, Telegram и подобных - сервис обмена мгновенными сообщениями и т.п. должен объявить о своем существовании в сети Tor, перед тем, как к нему смогут подсоединяться пользователи. Для этого, сервер случайным образом выбирает несколько ретрансляторов Основные принципы работы сети TOR описаны в предыдущем материале., выстраивает цепочки соединений к ним и сообщает им свой открытый ключ В системах шифрования термин «ключ» обозначает набор данных, при помощи которых шифруется основное сообщение. Проще всего представить себе ключ как строку случайных символов, но не стоит путать ключ с паролем, т.к. пароль очень часто не является ключом, и далеко не всякий ключ - пароль. Открытым (публичным) называется ключ, при помощи которого можно зашифровать данные, но невозможно расшифровать. Для расшифровки применяется парный ему закрытый (приватный) ключ. Подобные системы шифрования называются асимметричными, или системами с открытым ключом, и применяются сегодня повсеместно., чтобы они могли служить точками входа. Следует иметь в виду, что на данной схеме зелеными линиями показаны именно цепочки соединений, а не прямые соединения. Использование полноценной цепочки Tor делает затруднительным выявление IP-адреса скрытого сервера. Хотя точки входа и прочие контрагенты и получают информацию о скрытом сервисе (его открытый ключ), его местонахождение (IP-адрес) должно быть им неизвестно.
На втором этапе скрытый сервер собирает дескриптор «Дескриптор» - термин фактически эквивалентный слову «описатель». Это набор данных, описывающий основные характеристики некоего объекта, будь то файл, окно графического интерфейса или скрытый сервис сети TOR. Разумеется, для разных типов объектов будут совершенно разные форматы дескрипторов. скрытого сервиса, содержащий его открытый ключ и информацию о каждой точке входа, и подписывает этот дескриптор своим закрытым ключом. Этот дескриптор затем загружается в распределенную хэш-таблицу, где он может быть найден пользователями, запрашивающими адрес XYZ.onion, где XYZ - доменное имя длиною 56 символов, сгенерированное из открытого ключа сервиса. После завершения данного этапа скрытый сервис готов к работе Домен .onion, которым оканчиваются все имена скрытых сервисов, доступен только через TOR сеть. Например из TOR-браузера, или при помощи других специализированных программ, но недоступен (без дополнительной настройки) из обычных браузеров вроде Google Chrome, Firefox, Opera и подобных..
Хотя использование автоматически сгенерированных имен в качестве доменных имен сервисов и может показаться непрактичным, оно исполняет важную функцию: все участники, включая точки входа, распределенную хэш-таблицу и, разумеется, пользователей, могут проверить, что они соединяются именно с тем скрытым сервером, с которым нужно. Известный треугольник Зуко гласит, что из трех условий - децентрализации, безопасности и читаемости человеком, - можно одновременно добиться лишь двух. Быть может, когда-нибудь кто-нибудь и сможет создать систему наподобие Petname для скрытых сервисов. Petname - созданная в 2005 году децентрализованная система присвоения имен, претендует на выполнение всех трех условий «треугольника Зуко».
Третий этап начинается, когда клиент хочет подсоединиться к скрытому сервису и знает его onion адрес. Соединение инициируется загрузкой дескриптора из распределенной хэш-таблицы. Если дескриптор с таким именем существует (скрытый сервис может быть выключен или давно уже неактивен, или же в адресе может быть опечатка), клиент получает список точек входа и открытый ключ. Примерно в это же время, клиент создает цепочку соединений к случайно выбранному ретранслятору и передает ему одноразовый пароль, делая его точкой рандеву.
На четвертом этапе, получив дескриптор и подготовив точку рандеву, клиент собирает инициирующее сообщение, зашифрованное открытым ключом скрытого сервиса, в котором содержится одноразовый пароль и координаты точки рандеву. Затем клиент посылает это сообщение на одну из точек входа, с тем чтобы оно было доставлено скрытому серверу. Все коммуникации идут через цепочки соединений Tor, и никто из участников не может связать инициирующее сообщение с отправителем.
На пятом этапе скрытый сервер расшифровывает инициирующее сообщение клиента и получает из него адрес точки рандеву и одноразовый пароль. Сервер создает цепочку соединений к точке рандеву и посылает ей одноразовый пароль в координационном сообщении.
На данном этапе очень важно, чтобы скрытый сервер, создавая новые соединения, придерживался того же самого списка сторожевых узлов, что и раньше. В противном случае злоумышленники могут организовать свой собственный ретранслятор, и заставить скрытый сервис создавать все новые и новые соединения, в надежде на то, что он выберет их скомпрометированный ретранслятор, и они смогут вычислить IP-адрес скрытого сервера при помощи анализа времени соединения (тайминг-атаки). Данный способ был описан Оверлье и Сиверсоном в работе, озаглавленной «Обнаружение скрытых сервисов».
На последнем этапе точка рандеву уведомляет клиента об успешном установлении соединения. После этого как клиент, так и скрытый сервер могут использовать цепочки соединений к точке рандеву для связи между собой. Точка рандеву просто пересылает зашифрованные сообщения от клиента к серверу и обратно.
Одной из причин отказа от использования инициирующей цепочки для собственно передачи сообщений между клиентом и сервером является желание избежать установления ассоциации какого-либо конкретного ретранслятора со скрытым сервисом. Именно поэтому сама точка рандеву никогда не получает никакой информации о скрытом сервисе.
В целом, установленное соединение между клиентом и скрытым сервером состоит из 6 узлов, 3 из которых были выбраны клиентом, один из них в качестве точки рандеву, и 3 - сервером.
Более подробное описание действия протокола скрытого сервиса, вместе со спецификациями формата сообщений для установления рандеву, можно прочесть в дизайн-документации Tor.