Что знают двое, знает и свинья.
Вряд ли вы в курсе, но совсем скоро (этой осенью) произойдёт достаточно важное для криптопанков и оголтелых сторонников приватности событие - сетевая инфраструктура Тора переходит на новый стандарт onion-сервисов. Понимаю, для неподготовленного читателя это звучит как какая-то абракадабра, и, хоть я уже когда-то давно писал (ещё в почившем ЖЖ) на эту тему - за прошедшие годы многое изменилось, и, видимо, настал тот момент когда уместно повториться, начав с азов.
Принцип его работы, в двух словах, заключается в том, что данные между вами и ресурсом, на который вы хотите попасть, идут не напрямую через интернет, а проходят через несколько промежуточных узлов, называемых нодами Тора. Таких узлов обычно три штуки - и математически доказано, что этого достаточно для анонимизации в подавляющем числе случаев.
Вторая особенность заключается в том, что ваши данные, передаваемые через Tor, несколько раз шифруются, для каждой ноды своим ключом. Делается это для того, чтобы промежуточные узлы не обладали полной информацией о том, кто, что и куда передаёт.
Например, вы хотите зайти на приснопамятный сайт некололи.ком через Тор. Для этого вы случайным образом выбираете три ноды из нескольких тысяч доступных - одна из них используется как входная (entry guard
), вторая - промежуточная (middle relay
), третья - как выходная (exit node
). У вас есть публичные ключи всех трёх нод, а следовательно - вы можете зашифровать данные так, чтобы расшифровать их могла только соответствующая нода. Тогда последовательность действий будет выглядеть следующим образом:
Таким образом формируется надёжно зашифрованный на всём пути (кроме сегмента между выходной нодой и сайтом) канал передачи данных, по которому могут свободно передаваться некололи. Нужно заметить, что все участники взаимодействия, кроме вас самих, в курсе только относительно части происходящего:
Важно понимать, что выходные ноды, в случае их компрометации или злонамеренного использования, могут прослушивать или даже вмешиваться в проходящий трафик - поэтому при посещении обычных интернет-сайтов необходимо (впрочем, как и без Тора) использовать исключительно HTTPS-версии.
Вот честно позаимствованная с сайта EFF инфографика, демонстрирующая, какую информацию могут получить нехорошие люди в различных случаях сочетания Тора и HTTPS. Обязательно покликайте на кнопки - это очень прикольно:
Несмотря на то, что через Тор могут работать практически любые приложения, просто брать и делать так не рекомендуется. Существует достаточно скромный список ПО, гарантированно корректно работающий с Тором, но фактически - чаще всего для работы используется форк Firefox`а под названием Tor Browser. При включении он автоматически подключается к сети, а встроенные плагины защищают от деанонимизации косвенными методами.
Но Тор не называли бы рассадником наркомании, отмывания денег и прочих милых слуху криптоанархиста терминов, если бы дело ограничивалось анонимным доступом к обычным интернет-сайтам. В самом деле - какой полезный сайт сейчас не просит для регистрации адреса почты, а то и номера телефона со сканом паспорта? Не-ет, так дело не пойдёт - какая же это анонминость?
Onion-сервис - это безумно крутая, на мой взгляд, реализация двусторонне-анонимного взаимодействия между, собственно сервисом (который может представлять собой любое ПО - веб-сайт, SSH-сервер, мессенджер, онлайн-игру и т. д.) - и клиентом, желающим этим сервисом воспользоваться. На заре становления Тора такие ресурсы называли Hidden Service
, то есть - скрытыми.
И они действительно скрыты столь же надёжно, как и локация обычных пользователей Тора. Проводя параллель с обычным интернетом - это сайт, реального расположения которого не знает никто, кроме его владельца, и который невозможно заблокировать. Заманчивая штука? Мне кажется - более чем.
Концепция довольно изящна, но поначалу может быть немного сложна в понимании. Тем не менее, я попытаюсь, взяв для примера картинки из официального руководства.
Итак, у нас есть некий onion-сервис, отмеченный на картинке синим квадратиком SecureDrop. Чтобы желающие могли попасть на этот сайт, происходит следующая последовательность действий:
Сервис случайным образом выбирает три ноды из списка доступных, строит к ним, абсолютно так же, как в предыдущем примере, защищённые каналы через промежуточные узлы, и спрашивает - не согласятся ли эти ноды стать так называемыми анонсирующими точками (introduction point
) для него. Нода может отказаться - это дело добровольное, но рано или поздно сервис с кем-то договаривается.
Получив в своё распоряжение три анонсирующих точки, сервис составляет т. н. дескриптор onion-сервиса, включающий в себя координаты анонсирующих нод, подписанные приватным ключом сервиса, после чего публикует этот дескриптор (тоже через анонимный защищённый канал) в распределённую хэш-таблицу (directory
), являющуюся частью инфраструктуры сети Tor и доступную всем участникам.
Клиент, желающий воспользоваться сервисом, должен знать наш onion-адрес - это довольно длинная последовательность символов, заканчивающаяся, как обычный домен, зоной - в данном случае .onion
. Важный нюанс! Помимо наименования onion-адрес ещё и представляет собой публичный ключ, по подписи которого можно проверить дескриптор в хэш-таблице, что клиент и делает (опять же - через анонимный защищённый канал).
Получив дескриптор, клиент проверяет его, сравнивая подпись с onion-адресом, и в случае совпадения смотрит внутрь, находя адреса анонсирующих точек.
Клиент, не желая раскрывать кому бы то ни было своё расположение, случайно выбирает ноду из общего списка, и делает примерно то же, что делал сервис с анонсирующими точками - строит к ней защищённый канал и просит, чтобы эта нода стала его точкой встречи, или, по-французски, рандеву (rendezvous point
). В случае согласия клиент передаёт рандеву-ноде одноразовый пароль, а также выбирает одну из анонсирующих точек сервиса - и передаёт ей тот же пароль вместе с адресом точки встречи.
Анонсирующая нода, получившая пароль и адрес встречи, передаёт эту информацию onion-сервису, который критическим оком смотрит на неё.
Если на предыдущем этапе всё прошло хорошо, наш сервис строит новый защищённый канал (через совершенно новые ноды) к точке встречи, и передаёт ей одноразовый пароль. Рандеву-нода сравнивает полученный от сервиса пароль с паролем клиента, и, в случае совпадения - соединяет участников между собой, становясь передаточным пунктом для трафика.
Таким образом, установленное соединение onion-сервиса с клиентом использует шесть промежуточных узлов - три со стороны клиента (третьим из которых является точка встречи), и три со стороны сервиса, что позволяет организовать анонимную передачу данных, при которой ни один из узлов не обладает информацией, достаточной для деанонимизации.
С трудом выруливая обратно на тему, с которой начал, хочу рассказать вот про что. Наверное, наиболее отталкивающий неискушённого пользователя от использования Тора факт заключается в том, как выглядят адреса onion-сайтов - это, за редким исключением, нечто подобное: sejnfjrq6szgca7v.onion
. Есть такое понятие, как Треугольник Зуко, постулирующее, что проблематично создать одновременно легко запоминающиеся, хорошо защищённые и децентрализованные имена ресурсов. Что мы, собственно, отлично видим на примере onion-сервисов.
Усугубляет положение вещей тот факт, что текущая версия onion-сервисов увидела свет аж 15 лет назад, и за прошедшее время катастрофически устарела. С этого-то, если помните, я и начал рассказ. Поскольку адрес сервиса представляет собой не просто имя, но и публичный ключ - легко догадаться, что чем оно короче, тем ниже его криптографическая стойкость. 15 лет назад сочетание SHA1/DH/RSA1024 (v2-имя представляет собой base32-закодированную 80-битную hex-строку) считалось достаточно надёжным, но время не стоит на месте - и вот, считая невозможным дальнейшее оттягивание решения назревающей проблемы, разработчики Тора анонсировали таймлайн перехода на новую, третью версию onion-сервисов, опирающуюся на другой набор криптографии - SHA3/ed25519/curve25519.
Посмотрите-ка, как выглядит v3-адрес onion-зеркала этого сайта: kyourakutrktytaxcjggj2nvdh7mpz4zh6flz2dlsagyxbva6tidvvad.onion
.
Легко заметить, что первые символы - не просто случайный набор букв. Это небольшой реверанс 90-ым годам прошлого века и охоте на короткие и красивые UIN`ы ICQ. В Торе коротко не сделаешь, но вот подобрать префикс покрасивше - ради бога :)
Основная претензия к Тору, помимо страшных адресов, заключается в низкой скорости работы. Хочу заметить, что, возможно, когда-то давно, когда число нод было совсем небольшим - так и было, но сейчас, судя по ощущениям и произведённым замерам, передача данных происходит достаточно шустро, в среднем со скоростью 4-5 Мбит/с. Собственно говоря, вы и сами можете легко проверить это утверждение, воспользовавшись Tor Browser`ом и зайдя на страницу с тестом скорости.
Понятное дело, что использовать Tor постоянно - не самая лучшая идея и лютый оверкилл. Но, на мой взгляд, в некоторых случаях, особенно если ваша деятельность хотя бы теоретически может вызвать бурления у многочисленных любителей совать нос не в свои дела - более оптимального способа не найти.
В особо важных случаях (или если нужно скрыть сам факт использования Тора) можно использовать Tor over VPN, разумеется, с надёжным, идеально - своим собственным VPN-туннелем.
Закончить хочу ссылкой на красивейшую визуализацию сети Тора в реальном времени - если обалдели от потока информации, возможно, это поможет слегка расслабиться :)