Как работает TOR?

Preface:

Недавно я написал бумагу ( для курса ) о том как работает TOR система… и теперь я решил написать её заново только на русском языке и попытаться объяснить зачем, как и что работает. Зачем именно я пишу эту статью я не знаю, но думаю что кому-то она будет полезна или интересна, а возможно что в процессе написания я выучу что нить ещё.

Что такое TOR:

TOR – The Onion Router в переводе Луковый Роутер. Почему это называется луковый роутер станет ясно позже, а пока рассмотрим проблему анонимности в сети. Интернет как глобальная сеть не была задумана предоставлять анонимность. Другими словами в дизайне интернета вложено что каждый компьютер в сети имеет свой индивидуальный адрес и обмен данными идёт между этими адресами, то есть адреса компьютеров известны и соответственно можно определить кому именно принадлежит данный IP адрес (Internet Address / Интренет адрес ). Например у меня дома есть интернет от компании X и мой интернет адрес – 206.248.190.72. Если я хакаю apple.com то ребята в apple.com могут посмотреть кто обращается к apple.com и видят что это 206.248.190.72. Далее они сообщают ( например ) полиции и уже полиция обращается к моему провайдеру X и спрашивает: “Кому принадлежит интернет адрес 206.248.190.72?”, в ответ мой провайдер говорит мол это MeIr и вот его телефон, адрес, кредитная карта и так далее… Немного позже ко мне в дверь стучат маски шоу. Мораль: не хакайте… или сделайте так что бы вас не засекли…

Как скрыть IP адрес?

Скрыть IP адрес можно несколькими путями, но для начала я затрону одну вещь. Подделать свой IP адрес не возжно, другими словами если у вас есть IP адрес: А, то вы не можете подделать его и сказать что он B. Почему? Это тема для другой статьи и если кому интересно, то киньте в комменты и я отпишу. И так для скрытия IP адреса можно использовать proxy сервера. Для аналогии представьте что Петя хочет анонимно зайти на meirz.net сайт… Что бы не оставлять следов, он просит Васю зайти на meirz.net и взять первую страницу. Вася заходит на meirz.net берёт запрашиваемую страницу и возвращает её Пете. В данном варианте, Петя не заходит на meirz.net и как следствие не оставляет следов на сайте, другими словами meirz.net не когда не узнает что Петя что-то смотрел на сайте, с другой стороны meirz.net знает что на сайт заходил Вася, но это уже не важно так как Петя остался анонимным.

Proxy сервера не являются хорошим решением, так как стоит рассмотреть базовый сценарий, к чему мы и приступим. Допустим что Петя является единственным пользователем прокси сервера ( аля Васи – кто делает запросы к сайтам за место Пети ). Это значит что каждый раз когда Вася делает запрос, он делает запрос для Пети, соответственно это аннулирует какаю либо пользу от Васи. От сюда мы получаем что одна прокси не предоставляет достаточный уровень анонимности и возможно стоит использовать другую систему.

Давайте теперь усложним сценарий что бы добиться более надёжной системы анонимности. Скажем что Вася, Гена и Женя – это прокси сервера и они работают все вместе. То-есть когда пользователь Петя делает запрос на meirz.net через Васю то происходит следующее: Вася получает запрос от оригинального пользователя Пети, дальше Вася делает запрос Гене, а Гена в свою очередь делает запрос Жене, где Женя делает запрос сайту meirz.net. Соответственно ответ от meirz.net идёт к Жене, потом к Гене, далее к Васе и обратно к оригинальному пользователю Пете. Данный сценарий хорош тем что он состоит из нескольких прокси серверов и запросы между ними будет сложнее проследить… Но в данном сценарии есть большая проблема – это статичность. Другими словами если Женя – это всегда последний прокси сервер, а Вася всегда первый то не важно кто кому переправляет запросы, так как если мы узнаем схему, то мы всегда будем знать кто оригинальный пользователь и что он спрашивает, наблюдая всего за двумя прокси серверами. Данный вариант тоже не подходит, но ещё рано сдаваться. Если посмотреть на выше описываемый вариант с другой стороны, то в нём плохо только одно и это статичность системы. То есть если добавить динамичность то получиться то что надо.

Статичность системы заключается в том что прокси сервера не меняются местами и путь от пользователя до сервера всегда один и тот же. Что если добавить динамики? Получается что 3 прокси сервера буду работать в месте только неизвестно кто будет первым прокси, а кто будет последнем. То есть когда пользователь хочет воспользоваться системой, то каждый раз прокси сервера выстраиваются по другому… например первым прокси может стать Гена, а последним Вася или первым Женя, а последним Гена. Система теперь более надежна так как нету статичности и соответственно невозможно определить путь от пользователя до вэб сайта.

Криптография:

Криптография – большое поле, о котором можно говорить и говорить… Я не специалист по криптографии и поэтому не чего рассказывать не буду, но перед тем как продолжить разговор о TOR сети, надо всё же немного познакомиться с криптографией. Криптография или просто крипт ( для простоты ) делает из полезной информации, бесполезную. К примеру у нас есть стринг ( String ): “Password: 123”, если зашифровать это слово то результат может получиться следующим: “U2FsdGVkX18AVXi3C358YCSuMRJElM03ODqYwrBMgLo=”. На сколько вы можете видеть, зашифрованная информация абсолютно бесполезна если не знаешь как её дешифровать. Другими словами шифроваться полезно, например когда сохраняешь пароли и всё такое – так как не хочется что бы кто нить ( друг Вася ) зашёл к папку “мои документы” и посмотрел файл с паролями… Гы-гы мораль => Фишруйся. В данном конкретном случае нас интересует два вида криптографии: симметричная и асимметричная ( а именно Public-Key или Криптографическая система с открытым ключом ).

Симметричная шифровка довольно проста, идея следующая: выбираете пароль/шифр/код, далее шифруете данные ( слова, файлы и всё такое ) и усё готово ( получаете белиберду ) . Кстати выше описанный пример использует именно симметричный алгоритм. Далее что бы дешифровать белиберду, используете всё тот же пароль/шифр/код, дешифруете ( через какой нить алгоритм ) и получаете оригинальное сообщение обратно. Ключевая концепция тут именно тот факт что один и тот же пароль/шифр/код используется что бы зашифровать и дешифровать данные. Сила симметричной криптографии заключается в скорости шифровки ( очень быстро ). Слабость этой шифровки заключается именно в ключевом моменте ( один и тот же пароль для шифровки и дешифровки ). Почему? Ну вот представите себе что вы хотите переслать список свеже украденных кредитных карт другу ( который живёт на другом конце света ) к примеру. Вы шифруете файл/список симметричной криптографией… отлично, но как вы отошлете пароль/шифр/код другу? Наверное по eMail-у… как раз вместе с зашифрованным файлом… Тупо получается, так как пароль к данным идёт в открытую с данными… Ну можно конечно отослать пароль обычной почтой, а лучше вообще голубем… Можно позвонить или ещё что-то в этом роде, но думайте в компьютерной сфере – аля оптимизация, автоматизация и всё такое. Итого – не реально отправить пароль, а если пароль хоть где-то проходит открытым текстом – то безопасность всей системы идёт коту под хвост. И это подводит нас к второму типу криптографии – Public-Key Crypt. или Криптографическая система с открытым ключом.

Public-Key криптография работает по принципу: генерируете два ключа ( пароля/шифра ), один из них публичный ( открытый ключ ), а другой прайвитный ( секретный или личный ) ключ. Теперь публичный ключ можно раздать всем кому угодно, хоть всему миру… Далее используя алгоритм ( например RSA ) и публичный ключ, данные шифруются, фишка тут в том что данные нельзя дешифровать открытым ( публичным ) ключом. И только у кого есть прайвит ( секретный/личный ) может дешифровать сообщение. И так вернемся к примеру с ворованными кредитками… Вы говорите другу, что мол всё готово для отправки, друг создаёт шифровальный ключ, и отсылает вам по еМайлу публичный ключ ( в открытую ). Вы используете публичный ключ что бы зашифровать данные и отсылаете данные другу. Теперь даже если все знают публичный ключ, то всё равно не кто не сможет дешифровать данные и только ваш друг ( который имеет приватные/секретный/личный ) ключ сможет дешифровать информацию. Сила асимметричной шифровки именно в том что один ключ используется для шифровки, а другой для дешифровки – полная автоматизация. Слабость в том что шифровка очень медленная ( особенно по сравнению с симметричной шифровкой ). Напоследок приведу ещё один пример для того что проиллюстрировать почему TOR использует симметричную и асимметричную шифровку. Представите себе что вам надо переслать пару Терабайт секретных данных… Если использовать исключительно асимметричную шифровку, данные будут шифроваться/дешифроваться очень долго, но можно использовать симметричную шифровку для шифрования/дешифрования данных, а ключ от симметричной шифровки можно зашифровать асимметричной шифровкой. Итого получаем целиком безопасную, автономную и быструю систему.

TOR:

ТОР сеть состоит из тысяч релей ( типо прокси серверов ). Каждый из нас может спокойно открыть свою релей и добавить анонимности к ТОР проекту… вообще если хотите попробовать то скачайте ТОР софт, поставите и посмотрите как это работает… Зыыы… что бы стать релей надо немного покопаться в настройка, но это не сложно, да и в сети много документации по этому поводу. И так вернёмся к теме как же ТОР работает. Вся система работает довольно просто ( хе-хе всё гениальное просто ), после того как вы запустили ТОР программу, она немедленно начинает подсоединяться к сети ( ТОР сети ). Идея соединения заключается в том что собрать список доступных релей и выбрать путь по которому ваш анонимное траффик будет путешествовать. Да бы лучше разобраться в этом давайте посмотрим на пример. Представьте что ТОР программа выбрала из тысяч релей, всего три по которым пойдёт ваш траффик. Три релей будут: r2, r5 и r300 ( я думаю в реальной ситуации релей будет больше ). И так ваша ТОР программа выбрала релей и теперь нужно добавить динамичности ( какая релей будет первая, вторая и так далее ) и допустим что программа выбрала следующую последовательность: r300, r2, r5 – в итоге получаем такую картину:

Ваша машина < === > r300 < === > r2 < === > r5 < === > Финальное назначение ( например meirz.net )

Замечательно, теперь мы выбрали релей с которыми будем работать и выбрали порядок и почти готовы к работе ( передаче информации ). Тут надо отметить одну важную вещь, выбранные релей не знают не чего, кроме от кого пришло сообщение и кому передать информацию дальше. Так же надо отметить что в этой цепи, последняя релей ( r5 ) является выходной релей, которая отправляет информацию из псевдо-сети ( ТОР ) в интернет. Теперь здорово что у нас есть множественные точки передачи, но если информация будет идти в открытую, то вся система теряет смысл. Другими словами информация которая передается через ТОР сеть зашифрована, и только выходное релей ( r5 ) снимает последнюю шифровку и отсылает информацию в сеть. Давайте теперь посмотрим как именно работает шифровка в ТОР сети ( так как это и есть весь цимес ). И так релей были выбраны и последовательность тоже. Теперь происходит создание соединения: ваша ТОР программа выбирает ( на бум ) ключ для симметричной шифровки для реле r5, далее выбирает другой ключ ( опять на бум или случайно ) и опять для симметричной шифровки для реле r2 и тоже самое происходит для реле r300. Так же программа получает от всех трёх релей, их публичные ключи асимметричного шифрованния. Далее создаётся “луковица”, а именно берется симметричный ключ для релей r5 и шифруется это r5-ым публичным ключом с асимметричной шифровкой, далее к полученной информации добавляется назначение ( адрес реле r5 ) и симметричный ключ для реле r2 и всё это шифруется r2-ым публичным ключом с асимметричной шифровкой, далее к полученной информации добавляется назначение ( адрес реле r2 ) и симметричный ключ для реле r300 и опять всё это шифруется r300-ым ключом с асимметричной шифровкой. Наверное вы заметили что получается какой-то клубок или лук! Этот лук используется для создания соединения, а именно после того как лук сделан он посылается в ТОР сеть, что бы соединение установилось.

Вспомним порядок релей ( помните что релей не знаю кто участвует в этом аттракционе, сколько их таких или какая информация передаётся ) :
Ваша машина < === > r300 < === > r2 < === > r5 < === > Финальное назначение ( например meirz.net )

От вашей машины “луковица” едет в r300 и что происходит? r300 смотрит на полученную луковицу ( зашифрованный кусок бреда ) и говорит, давай сними первый слой с луковицы, а именно дешифрует информацию. r300 использует свой личный ключ для асимметричной шифровки, дешифрует информацию и что они видет? Три вещи: симметричный ключ, адрес следующего реле и оставшуюся луковицу… Далее r300 сохраняет симметричный ключ у себя и отсылает остатки луковицы по указанному адресу. r2 получает лук и думает что надо снять слой ( или открыть приложенную информацию ). r2 соответственно использует свой личный асимметричный ключ и дешифрует информацию. Далее r2 видет опять 3 куска информации: симметричный ключ, адрес следующего реле и оставшуюся луковицу… И как обычно r2 сохраняет симметричный ключ у себя и отсылает остатки луковицы ( информации ) по указанному адресу. r5 получает луковицу, декодирует используя свой личный асимметричный ключ и получает только симметричный ключ, не адреса не луковицы не остаётся, а это значит что r5 – это последняя или выходная реле. И вот соединение установлено и готово для работы… ТОР система работает по принципу строения луковицы, не кто не чего не знает и только получив луковицу и сняв слой можно узнать кому далее передать остатки луковицы… Другими словами если кто-то в получит вашу информацию ( луковицу ) то всё равно не смогут понять что это такое, так как всё зашифровано.
picture-1_15-05-2009_friday
Но возможно вы спросите, а зачем симметрическое шифрованние если луковица шифруется только асимметрической шифровкой… Заметьте что луковица используется для установки соединения и раздачи симметрических ключей… Если вы не забыли то шифровать информацию асимметрической шифровкой довольно муторное занятие ( шифровка/дешифровка большого кол-ва информации занимает много времени ) и поэтому после того как каждое реле получило симметричный ключ то вся последующая информация ( скачивание информации или браузинг сайтов ) будет шифроватся симметрической шифровкой. Например: соединение установлено ( описано выше ) и мы готовы к работе… допустим вы хотите пойти на meirz.net, что происходит? Ваш HTTP запрос шифруется симметрической шифровкой с r5-ым ключом, полученная информация шифруется симметрической шифровкой с r2-ым ключом и финально, полученный результат шифруется симметрической шифровкой с r300 ключом… Далее информация отправляется к r300 где, r300 дешифрует информацию используя полученный ранее ( при установке соединения ) симметричный ключ, далее информация посылается к r2 и происходит то же самое: r2 дешифрует информацию используя полученный ранее ( при установке соединения ) симметричный ключ и так происходит до того момента пока информация не доходит до последнего реле ( r5 ), где r5 дешифрует информацию и видит что это HTTP запрос к meirz.net и отсылает его по назначению…

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

Под занавес:

Существует много критики в сторону ТОР проекта, как политической так и технической. Например скорость работы ТОР сети оставляет желать лучшего ( медленно ), но с другой стороны – это цена за анонимность. Так же в ТОР сети нельзя использовать UDP протокол – думаю это не сугубо важно, в особенности для браузинга, но всё же лимит. Так же из-за того что к ТОР системе может присоединиться кто угодно и установить своё реле – то реле может быть левое ( аля может шпионить )… Это не проблема, так как не одно реле не знает что и как, НО это проблема если шпионское реле оказывается последним ( выходным реле ) так как она сможет просматривать передаваемую информацию ( но не будет знать для кого это )… То есть если вы посылаете eMail типо: “Привет это Штырлиц позвони мне по телефону 555-888-00-99” в открытую ( как обычно все и посылают ), то шпионское реле не будет знать от кого это сообщение, но сможет спокойно прочитать ваш eMail… не маза! НО ещё раз повторюсь, ТОР – это сеть для анонимности, а не для безопасности… Так что если вы “шпиён” или хацкер то шифруйте всю свою информацию… А в принципе даже если вы не тот ни другой то всё равно шифруйте… как говориться здоровее будем!

Мой “Заднее слово”:

В начале сказал: “Недавно я написал бумагу ( для курса ) о том как работает TOR система… ” – прошло уже довольно много времени с того момента, как начал писать статью. К сожаления я много ленюсь и страдаю фигнёй… Спасибо Олегу который меня подтолкнул к тому что бы закончить статью. Так же вы наверное найдете большое количество ошибок ( орфографических ) в статье, если хотите что бы статья выглядела красивей то можете кинуть заметки в комменты или мне на мыло и я поправлю.

Большое спасибо за понимание и пишите если будут вопросы.

ЛИНКИ:

[TOR проект]
[Криптосистема с открытым ключом]
[Симметричные криптосистемы]

64 thoughts on “Как работает TOR?”

  1. Как исправить: [Warning] The https proxy sent back an unexpected status code 502 (“Parent proxy unreacheable”). Closing.

  2. 2 ferza: Код 502 является стандартным HTTP ответом:

    502 Bad Gateway

    The server, while acting as a gateway or proxy, received an invalid response from the upstream server it accessed in attempting to fulfill the request.

    К Тору это ни как не относиться.

  3. Спасибо за статью, очень познавательно.
    Что касается русского языка, есть несколько распространенных ошибок как в обычной речи, так и в принятой в России криптографической терминологии. Ничего страшного – мелочи вроде “что бы” и “симметрическая шифровка”. Если хотите, могу на общественных началах сделать корректуру статей. Пишите мне на почту перед публикацией. Если будет время – с удовольствием помогу.

  4. интересует такой вопрос : tor меняет айпи только в мозиле? или при использованиее онлайн игр айпи меняется тоже?
    прошу ответить, очень интересует, если есть в комментах то прошу извенить)
    небыло времени их все читать)

  5. 2 Plombir:
    Можно ли игру пропустить через ТОР? Если в игре можно проставить прокси, то можно. ТОР клиент ставит прокси на твою машину и через неё можно направить любой TCP/IP трафик. Учти что ТОР не разрешает UDP трафик!

    ЗЫ: Если ты хочешь играть в какие либо real-time игры то это может быть проблемотично – ТОР медленная сеть!

  6. Добрый день! спасибо за статью! очень доступно!
    ВОПРОС: я уже пользуюсь ТОР, видит ли мой провайдер посещаемые мною сайты, мои пароли и т.д.? ТОР обеспечивает анонимность только в сети интернет или И анонимность от провайдера?

  7. 2 Vadon: Если ты правильно все поставил, то провайдер как и весь остальной интернет не должен ничего видеть.

  8. А Mask Surf Pro или Opera Tor тоже работает по такому принцыпу?

  9. 2 Vadon: Я не знаю если A Mask Surf Pro или Opera Tor работает так же.

  10. Не можете ли подсказать, как ТОР работает с паролем, который он же генерирует? Вот у меня в настройках стоит “пароль” и “генерировать случайным образом”. Вот я захожу на какой-либо сайт. И что делает ТОР с этим паролем, что происходит в этом смысле?

    Мне нужно чтобы софт смог работать с этой настройкой, но не могу найти суть процесса с паролем.

  11. Статья отличная, спасибо! Не всеобъемлюще, но доступным языком и то, что хотел узнать – узнал.
    +10 к карме автору

  12. Крутая статья, все просто и понятно, спасибо! насколько я понял из других статей, ТОР всегда использует три промежуточных узла.

  13. tim: к сожалению я уже не помню сколько узлов использует ТОР. Если не ошибаюсь то количество узлов можно изменить.

Leave a Reply to Olga Cancel reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.