---
title: 'Tor и onion-сервисы на пальцах. Ещё раз'
url: 'https://ky0uraku.xyz/blog/20210606-tor-i-onion-servisy-na-paltsah-eshe-raz'
markdown: 'https://ky0uraku.xyz/blog/20210606-tor-i-onion-servisy-na-paltsah-eshe-raz.md'
date: '2021-06-06'
description: 'Что знают двое, знает и свинья. Немецкая пословица Вряд ли вы в курсе, но совсем скоро (этой осенью) произойдёт достаточно важное для криптопанков и оголтелых сторонников приватности событие - сетевая инфраструктура Тора переходит на новый стандарт onion-сервисов. Понимаю, для неподготовленно…'
taxonomy:
  tag:
    - tech
    - privacy
  category:
    - articles
---

# Tor и onion-сервисы на пальцах. Ещё раз

  [Тексты](https://ky0uraku.xyz/blog) / 6 июня 2021   [tech](https://ky0uraku.xyz/blog/tag:tech) [privacy](https://ky0uraku.xyz/blog/tag:privacy)  

> *Что знают двое, знает и свинья.*
> 
> Немецкая пословица

Вряд ли вы в курсе, но совсем скоро (этой осенью) произойдёт достаточно важное для криптопанков и оголтелых сторонников приватности событие - сетевая инфраструктура Тора [переходит](https://blog.torproject.org/v2-deprecation-timeline) на новый стандарт onion-сервисов. Понимаю, для неподготовленного читателя это звучит как какая-то абракадабра, и, хоть я уже когда-то давно писал (ещё в почившем ЖЖ) на эту тему - за прошедшие годы многое изменилось, и, видимо, настал тот момент когда уместно повториться, начав с азов.

### Я много раз упоминал Тор в контексте того, что это - один из лучших способов анонимизации.

Принцип его работы, в двух словах, заключается в том, что данные между вами и ресурсом, на который вы хотите попасть, идут не напрямую через интернет, а проходят через несколько промежуточных узлов, называемых нодами Тора. Таких узлов обычно три штуки - и математически доказано, что этого достаточно для анонимизации в подавляющем числе случаев.

[![](https://ky0uraku.xyz/blog/20210606-tor-i-onion-servisy-na-paltsah-eshe-raz/12-1k.webp)](https://ky0uraku.xyz/blog/20210606-tor-i-onion-servisy-na-paltsah-eshe-raz/12.webp)

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

### Всё вместе это называется "[луковой маршрутизацией](https://en.wikipedia.org/wiki/Onion_routing)".

Например, вы хотите зайти на приснопамятный сайт некололи.ком через Тор. Для этого вы случайным образом выбираете три ноды [из нескольких тысяч](https://metrics.torproject.org/networksize.html) доступных - одна из них используется как входная (`entry guard`), вторая - промежуточная (`middle relay`), третья - как выходная (`exit node`). У вас есть публичные ключи всех трёх нод, а следовательно - вы можете зашифровать данные так, чтобы расшифровать их могла только соответствующая нода. Тогда последовательность действий будет выглядеть следующим образом:

1. Вы берёте сообщение, в котором написано "хочу зайти на сайт некололи.ком" и шифруете его ключом выходной ноды (C).
2. На получившемся пакете данных пишете "отправить ноде C" и шифруете получившееся ключом промежуточной ноды (B).
3. На получившемся пакете данных пишете "отправить ноде B" и шифруете получившееся ключом входной ноды (A).
4. Отправляете получившееся через интернет ноде A (оно зашифровано, поэтому никто посторонний не поймёт, что там внутри).
5. Нода А расшифровывает пакет своим ключом, видит надпись "отправить ноде B" - и так и делает.
6. Нода В расшифровывает пакет своим ключом, видит надпись "отправить ноде C" - и так и делает.
7. Нода C расшифровывает пакет своим ключом, видит надпись "хочу зайти на сайт некололи.ком" - и отправляет ваше сообщение куда следует.

Таким образом формируется надёжно зашифрованный на всём пути (кроме сегмента между выходной нодой и сайтом) канал передачи данных, по которому могут свободно передаваться некололи. Нужно заметить, что все участники взаимодействия, кроме вас самих, в курсе только относительно части происходящего:

- Входная нода A знает ваш IP-адрес и адрес промежуточной ноды B, но не знает адреса выходной ноды C и сайта.
- Промежуточная нода B знает адреса нод A и C, но не знает вашего IP-адреса и адреса сайта.
- Выходная нода C знает адрес ноды B и сайта, но не знает вашего IP-адреса и адреса ноды A.
- Сайт знает только адрес ноды C.

Важно понимать, что выходные ноды, в случае их компрометации или злонамеренного использования, могут прослушивать или даже вмешиваться в проходящий трафик - поэтому при посещении обычных интернет-сайтов необходимо (впрочем, как и без Тора) использовать исключительно HTTPS-версии.

Вот честно позаимствованная [с сайта EFF](https://www.eff.org/ru/pages/tor-and-https) инфографика, демонстрирующая, какую информацию могут получить нехорошие люди в различных случаях сочетания Тора и HTTPS. Обязательно покликайте на кнопки - это очень прикольно:

![](https://ky0uraku.xyz/blog/20210606-tor-i-onion-servisy-na-paltsah-eshe-raz/tor-https-0.webp)![](https://ky0uraku.xyz/blog/20210606-tor-i-onion-servisy-na-paltsah-eshe-raz/tor-https-1.webp)![](https://ky0uraku.xyz/blog/20210606-tor-i-onion-servisy-na-paltsah-eshe-raz/tor-https-2.webp)![](https://ky0uraku.xyz/blog/20210606-tor-i-onion-servisy-na-paltsah-eshe-raz/tor-https-3.webp)

Несмотря на то, что через Тор могут работать практически любые приложения, просто брать и делать так [не рекомендуется](https://gitlab.torproject.org/legacy/trac/-/wikis/doc/TorifyHOWTO). Существует достаточно скромный список ПО, гарантированно корректно работающий с Тором, но фактически - чаще всего для работы используется форк Firefox`а под названием Tor Browser. При включении он автоматически подключается к сети, а встроенные плагины защищают от деанонимизации косвенными методами.

Но Тор не называли бы рассадником наркомании, отмывания денег и прочих милых слуху криптоанархиста терминов, если бы дело ограничивалось анонимным доступом к обычным интернет-сайтам. В самом деле - какой полезный сайт сейчас не просит для регистрации адреса почты, а то и номера телефона со сканом паспорта? Не-ет, так дело не пойдёт - какая же это анонминость?

### И в этот момент мы возвращаемся к тому, с чего начали - к onion-сервисам.

Onion-сервис - это безумно крутая, на мой взгляд, [реализация](https://2019.www.torproject.org/docs/onion-services) двусторонне-анонимного взаимодействия между, собственно сервисом (который может представлять собой любое ПО - веб-сайт, SSH-сервер, мессенджер, онлайн-игру и т. д.) - и клиентом, желающим этим сервисом воспользоваться. На заре становления Тора такие ресурсы называли `Hidden Service`, то есть - скрытыми.

И они действительно скрыты столь же надёжно, как и локация обычных пользователей Тора. Проводя параллель с обычным интернетом - это сайт, реального расположения которого не знает никто, кроме его владельца, и который невозможно заблокировать. Заманчивая штука? Мне кажется - более чем.

### Как же работает всё это торжество приватности?

Концепция довольно изящна, но поначалу может быть немного сложна в понимании. Тем не менее, я попытаюсь, взяв для примера картинки из [официального руководства](https://community.torproject.org/onion-services/overview/).

Итак, у нас есть некий onion-сервис, отмеченный на картинке синим квадратиком SecureDrop. Чтобы желающие могли попасть на этот сайт, происходит следующая последовательность действий:

1. Сервис случайным образом выбирает три ноды из списка доступных, строит к ним, абсолютно так же, как в предыдущем примере, защищённые каналы через промежуточные узлы, и спрашивает - не согласятся ли эти ноды стать так называемыми анонсирующими точками (`introduction point`) для него. Нода может отказаться - это дело добровольное, но рано или поздно сервис с кем-то договаривается.

    [![](https://ky0uraku.xyz/blog/20210606-tor-i-onion-servisy-na-paltsah-eshe-raz/13-1k.webp)](https://ky0uraku.xyz/blog/20210606-tor-i-onion-servisy-na-paltsah-eshe-raz/13.webp)
2. Получив в своё распоряжение три анонсирующих точки, сервис составляет т. н. дескриптор onion-сервиса, включающий в себя координаты анонсирующих нод, подписанные приватным ключом сервиса, после чего публикует этот дескриптор (тоже через анонимный защищённый канал) в распределённую хэш-таблицу (`directory`), являющуюся частью инфраструктуры сети Tor и доступную всем участникам.

    [![](https://ky0uraku.xyz/blog/20210606-tor-i-onion-servisy-na-paltsah-eshe-raz/14-1k.webp)](https://ky0uraku.xyz/blog/20210606-tor-i-onion-servisy-na-paltsah-eshe-raz/14.webp)
3. Клиент, желающий воспользоваться сервисом, должен знать наш onion-адрес - это довольно длинная последовательность символов, заканчивающаяся, как обычный домен, зоной - в данном случае `.onion`. Важный нюанс! Помимо наименования onion-адрес ещё и представляет собой публичный ключ, по подписи которого можно проверить дескриптор в хэш-таблице, что клиент и делает (опять же - через анонимный защищённый канал).

    [![](https://ky0uraku.xyz/blog/20210606-tor-i-onion-servisy-na-paltsah-eshe-raz/16-1k.webp)](https://ky0uraku.xyz/blog/20210606-tor-i-onion-servisy-na-paltsah-eshe-raz/16.webp)
4. Получив дескриптор, клиент проверяет его, сравнивая подпись с onion-адресом, и в случае совпадения смотрит внутрь, находя адреса анонсирующих точек.

    [![](https://ky0uraku.xyz/blog/20210606-tor-i-onion-servisy-na-paltsah-eshe-raz/17-1k.webp)](https://ky0uraku.xyz/blog/20210606-tor-i-onion-servisy-na-paltsah-eshe-raz/17.webp)
5. Клиент, не желая раскрывать кому бы то ни было своё расположение, случайно выбирает ноду из общего списка, и делает примерно то же, что делал сервис с анонсирующими точками - строит к ней защищённый канал и просит, чтобы эта нода стала его точкой встречи, или, по-французски, рандеву (`rendezvous point`). В случае согласия клиент передаёт рандеву-ноде одноразовый пароль, а также выбирает одну из анонсирующих точек сервиса - и передаёт ей тот же пароль вместе с адресом точки встречи.

    [![](https://ky0uraku.xyz/blog/20210606-tor-i-onion-servisy-na-paltsah-eshe-raz/18-1k.webp)](https://ky0uraku.xyz/blog/20210606-tor-i-onion-servisy-na-paltsah-eshe-raz/18.webp)
6. Анонсирующая нода, получившая пароль и адрес встречи, передаёт эту информацию onion-сервису, который критическим оком смотрит на неё.

    [![](https://ky0uraku.xyz/blog/20210606-tor-i-onion-servisy-na-paltsah-eshe-raz/19-1k.webp)](https://ky0uraku.xyz/blog/20210606-tor-i-onion-servisy-na-paltsah-eshe-raz/19.webp)
7. Если на предыдущем этапе всё прошло хорошо, наш сервис строит новый защищённый канал (через совершенно новые ноды) к точке встречи, и передаёт ей одноразовый пароль. Рандеву-нода сравнивает полученный от сервиса пароль с паролем клиента, и, в случае совпадения - соединяет участников между собой, становясь передаточным пунктом для трафика.

    [![](https://ky0uraku.xyz/blog/20210606-tor-i-onion-servisy-na-paltsah-eshe-raz/20-1k.webp)](https://ky0uraku.xyz/blog/20210606-tor-i-onion-servisy-na-paltsah-eshe-raz/20.webp)
8. Таким образом, установленное соединение onion-сервиса с клиентом использует шесть промежуточных узлов - три со стороны клиента (третьим из которых является точка встречи), и три со стороны сервиса, что позволяет организовать анонимную передачу данных, при которой ни один из узлов не обладает информацией, достаточной для деанонимизации.

    [![](https://ky0uraku.xyz/blog/20210606-tor-i-onion-servisy-na-paltsah-eshe-raz/21-1k.webp)](https://ky0uraku.xyz/blog/20210606-tor-i-onion-servisy-na-paltsah-eshe-raz/21.webp)

С трудом выруливая обратно на тему, с которой начал, хочу рассказать вот про что. Наверное, наиболее отталкивающий неискушённого пользователя от использования Тора факт заключается в том, как выглядят адреса onion-сайтов - это, за редким исключением, нечто подобное: `sejnfjrq6szgca7v.onion`. Есть такое понятие, как [Треугольник Зуко](https://ru.wikipedia.org/wiki/%D0%A2%D1%80%D0%B5%D1%83%D0%B3%D0%BE%D0%BB%D1%8C%D0%BD%D0%B8%D0%BA_%D0%97%D1%83%D0%BA%D0%BE), постулирующее, что проблематично создать одновременно легко запоминающиеся, хорошо защищённые и децентрализованные имена ресурсов. Что мы, собственно, отлично видим на примере onion-сервисов.

Усугубляет положение вещей тот факт, что текущая версия onion-сервисов увидела свет аж 15 лет назад, и за прошедшее время катастрофически устарела. С этого-то, если помните, я и начал рассказ. Поскольку адрес сервиса представляет собой не просто имя, но и публичный ключ - легко догадаться, что чем оно короче, тем ниже его криптографическая стойкость. 15 лет назад сочетание [SHA1](https://ru.wikipedia.org/wiki/SHA-1)/[DH](https://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%BE%D1%82%D0%BE%D0%BA%D0%BE%D0%BB_%D0%94%D0%B8%D1%84%D1%84%D0%B8_%E2%80%94_%D0%A5%D0%B5%D0%BB%D0%BB%D0%BC%D0%B0%D0%BD%D0%B0)/[RSA1024](https://ru.wikipedia.org/wiki/RSA) (v2-имя представляет собой base32-закодированную 80-битную hex-строку) считалось достаточно надёжным, но время не стоит на месте - и вот, считая невозможным дальнейшее оттягивание решения назревающей проблемы, разработчики Тора анонсировали таймлайн перехода на новую, третью версию onion-сервисов, опирающуюся на другой набор криптографии - [SHA3](https://ru.wikipedia.org/wiki/SHA-3)/[ed25519](https://ru.wikipedia.org/wiki/EdDSA#Ed25519)/[curve25519](https://en.wikipedia.org/wiki/Curve25519).

Посмотрите-ка, как выглядит v3-адрес onion-зеркала этого сайта: `kyourakutrktytaxcjggj2nvdh7mpz4zh6flz2dlsagyxbva6tidvvad.onion`.

### Монстроузно, но весьма надёжно.

Легко заметить, что первые символы - не просто случайный набор букв. Это небольшой реверанс 90-ым годам прошлого века и охоте на короткие и красивые UIN`ы ICQ. В Торе коротко не сделаешь, но вот подобрать префикс покрасивше - ради бога :)

Основная претензия к Тору, помимо страшных адресов, заключается в низкой скорости работы. Хочу заметить, что, возможно, когда-то давно, когда число нод было совсем небольшим - так и было, но сейчас, судя по ощущениям и произведённым замерам, передача данных происходит достаточно шустро, в среднем со скоростью 4-5 Мбит/с. Собственно говоря, вы и сами можете легко проверить это утверждение, воспользовавшись [Tor Browser](https://www.torproject.org/download/)`ом и зайдя [на страницу](http://kyourakutrktytaxcjggj2nvdh7mpz4zh6flz2dlsagyxbva6tidvvad.onion/speedtest/) с тестом скорости.

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

[![](https://ky0uraku.xyz/blog/20210606-tor-i-onion-servisy-na-paltsah-eshe-raz/11-1k.webp)](https://ky0uraku.xyz/blog/20210606-tor-i-onion-servisy-na-paltsah-eshe-raz/11.webp)

В особо важных случаях (или если нужно скрыть сам факт использования Тора) можно использовать Tor over VPN, разумеется, с надёжным, идеально - своим собственным VPN-туннелем.

Закончить хочу ссылкой на [красивейшую визуализацию](https://torflow.uncharted.software/) сети Тора в реальном времени - если обалдели от потока информации, возможно, это поможет слегка расслабиться :)

---

## Navigation

- Parent: [Последние тексты](https://ky0uraku.xyz/blog.md)
- Previous: [Мудацкий след: по возможности избегайте этого](https://ky0uraku.xyz/blog/20210709-mudatskiy-sled.md)
- Next: [Noita: ода пониженной проходимости](https://ky0uraku.xyz/blog/20210601-noita-oda-ponizhennoy-prokhodimosti.md)
