Введение

Crowds — это предлагаемая анонимная сеть для анонимного просмотра веб-страниц. Основная идея протокола анонимности Crowds заключается в сокрытии коммуникаций каждого пользователя путем случайной маршрутизации их внутри группы схожих пользователей. Таким образом, ни участники группы, ни конечный получатель не могут определить, из какой части группы был отправлен пакет. Crowds был разработан Майклом К. Райтером и Авиэлем Д. Рубином. Он обеспечивает защиту от внутренних злоумышленников и скомпрометированного получателя, но не гарантирует анонимность против глобального злоумышленника или локального перехватчика (см. "Crowds: Anonymity For Web Transactions"). Crowds уязвим к атаке предшественника; это было описано в работе Рейтера и Рубина и получило дальнейшее развитие в статье "The Predecessor Attack: An Analysis of a Threat to Anonymous Communications Systems" Мэтью К. Райта, Мики Адлера и Брайана Нила Левина. Crowds ввел концепцию маскировки пользователей в "толпе" компьютеров.

Как работает толпа

Каждый пользователь присоединяется к группе других пользователей, регистрируясь на блендере – единственном сервере, отвечающем за управление членством. Когда пользователь регистрируется, все остальные участники группы получают уведомление. Блендер также отвечает за распределение ключей, поскольку он распределяет симметричные ключи между отдельными парами джондо, используемые для шифрования и дешифрования пакетов, маршрутизируемых по виртуальным путям, соответственно. Каждый пользователь представлен джондо на своем устройстве – приложением, работающим на компьютере пользователя. Каждый джондо либо отправляет запрос на конечный сервер, либо пересылает его случайным образом выбранному джондо (возможно, самому себе). Другие задачи джондо включают удаление любой личной информации, такой как файлы cookie и идентифицирующие поля заголовков. Джондо не может определить, был ли запрос инициирован предыдущим джондо или одним из предшествующих. Запрос и ответ следуют по одним и тем же виртуальным путям, которые строятся с использованием алгоритма, основанного на вероятностях. Виртуальные пути регулярно разрываются и восстанавливаются, чтобы обеспечить анонимность для вновь добавленных участников.

Основная конструкция

Crowds работает, делая каждый узел одинаково вероятным кандидатом на роль инициатора сообщения. Как мы уже говорили, каждый узел присоединяется к сети, запуская джондо (от "John Doe") – небольшой процесс, который будет пересылать и принимать запросы от других пользователей. Когда джондо запущен, все узлы в сети уведомляются о присоединении нового узла и начинают рассматривать его в качестве промежуточного узла для пересылки сообщений. Чтобы отправить сообщение, узел случайным образом (с равномерной вероятностью) выбирает один из всех узлов в сети и пересылает ему сообщение. Получив сообщение, узел подбрасывает смещенную монету (с вероятностью *p*) и, если выпадает "орел", пересылает его другому случайному узлу, иначе – конечному получателю. Каждый узел, пересылая сообщение другому узлу, запоминает своего предшественника, таким образом формируется туннель, который используется для связи между отправителем и получателем.

Анализ безопасности

Мы рассматриваем вопрос о том, какую информацию злоумышленник может узнать об отправителях и получателях веб-транзакций, исходя из описанных нами механизмов Crowds.

Местный подслушиватель

Напомним, что каждое сообщение, пересылаемое по маршруту, за исключением конечного запроса к серверу, зашифровано. Таким образом, хотя злоумышленник может видеть любое сообщение, исходящее с компьютера пользователя, он увидит сообщение, отправленное на конечный сервер, только если jondo пользователя в конечном итоге отправит запрос от имени пользователя. Вероятность того, что jondo пользователя в конечном итоге отправит запрос, равна 1/n, где n – размер группы при создании маршрута. Следовательно, мы приходим к выводу, что вероятность того, что злоумышленник узнает личность получателя, уменьшается с увеличением размера группы. Более того, когда jondo пользователя не отправляет запрос напрямую, местный злоумышленник видит только зашифрованный адрес конечного сервера, что, по нашему мнению, обеспечивает получателю анонимность, которую сложно поставить под сомнение (неформально, ни один пользователь не вызывает большего подозрения, чем другой).

Статические пути

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

Встроенные изображения и атаки на синхронизацию

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

Профилактика

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

Атаки

Crowds обеспечивает идеальную анонимность по отношению к коррумпированному получателю (см., например, Степень анонимности), поскольку все участники выглядят равновероятными кандидатами на роль инициатора. Как мы показали в случае сотрудничающих коррумпированных узлов, Crowds обеспечивает вероятное отсутствие вины, при условии (подробности – в статье), и предоставляет определенную степень анонимности. Однако Crowds уязвим к атаке на основе предшественника; эта атака заключается в том, что коррумпированный узел сохраняет предыдущий переход в пути, и со временем, в процессе перестройки сети, становится очевидным, кто является инициатором, поскольку именно этот узел чаще других будет выступать в роли отправителя. Рейтер и Рубин упоминают об этом и рекомендуют увеличивать интервал между перестройками пути (вызванными выходом узла из сети), стремясь к бесконечному значению. Crowds не способен защитить от глобального прослушивания, так как не может использовать шифрование на соединениях. Это связано с тем, что каждый узел в Crowds может взаимодействовать с любым другим узлом (полносвязный граф), а для настройки симметричных ключей требуется огромное количество парных ключей, что делает это непрактичным. В отношении локального прослушивания Crowds также не предоставляет защиты, поскольку прослушивающий увидит сообщение, исходящее из узла, который не был входом, что однозначно идентифицирует этот узел как отправителя.