Crowds

На эту статью не ссылаются другие статьи Википедии.

Пожалуйста, установите ссылки в соответствии с принятыми рекомендациями. (март 2016)

|

Стиль этой статьи неэнциклопедичен или нарушает нормы литературного русского языка.

Статью следует исправить согласно стилистическим правилам Википедии. (27 сентября 2015)

|

Crowds (от англ. crowd — «толпа») — сетевой протокол, обеспечивающий анонимный доступ в Интернет. Анонимность достигается за счёт смешивания трафика пользователя с трафиком других случайно выбранных участников сети. При этом данные передаются через цепочку узлов так, что ни один из участников не может определить источник или получателя пакета.

Протокол был разработан в 1998 году исследователями Майклом Райтером и Ави Рубином. В основе Crowds лежит принцип «каскадной анонимизации» — каждый запрос проходит через несколько промежуточных узлов, что делает отслеживание исходного отправителя практически невозможным.

## Содержание

* 1 Уязвимости
* 2 Виды анонимности
* 3 Действие протокола
* 3.1 Алгоритм работы протокола
* 3.2 Анализ секретности
* 3.2.1 Локальный перехватчик
* 3.2.2 Конечный сервер
* 3.2.3 Сотрудничающие (связанные) jondo
* 3.3 Возможные проблемы
* 4 Примечания

## Уязвимости

[править | править код]

Crowds уязвим к так называемой «атаке предшественника» (англ. predecessor attack), описанной в работе «The Predecessor Attack: An Analysis of a Threat to Anonymous Communications Systems»[1]. Суть атаки заключается в том, что злоумышленник, контролирующий несколько узлов сети, может со временем вычислить источник данных, анализируя маршруты пакетов.

## Виды анонимности

[править | править код]

Протокол предполагает три вида анонимности[2]:

* анонимность отправителя;
* анонимность получателя;
* несвязываемость отправителя и получателя.

Также при анализе протокола полезно знать, от каких видов атак данная анонимность обеспечивает защиту. Еще следует различать разные уровни защиты:

* вне подозрения — анонимность отправителя вне подозрений в том случае, если есть возможность определить существование сообщения, но невозможно выявить потенциального отправителя в системе.
* возможная невиновность — возможно, отправитель невиновен, если вероятность того, что данный конкретный пользователь отправил сообщение, такая же, как и в том случае, если он не отправлял. Очевидно, что данный уровень обеспечивает меньшую защиту, чем вне подозрения.
* вероятная невиновность \- вероятно, отправитель невиновен, если существует возможная вероятность, что настоящий отправитель кто-то другой.

Таким образом, если пользователь хочет полной анонимности, ему требуется уровень «вне подозрения». По умолчанию у всех пользователей Интернета нет никакой анонимности.

## Действие протокола

[править | править код]

Система Crowds состоит из динамической группы пользователей, называемой толпой (от англ. «crowd»). Пользователи, которые инициализировали веб-запрос к различным веб-серверам (и получают ответы от них) — «отправители», а серверы — «получатели». На основании представленных пользователю видов анонимности, можно выделить три вида атак:

* локальный перехватчик — злоумышленник, который может просматривать все приходящие и уходящие сообщения с компьютера пользователя;
* сотрудничающие участники «толпы» — участники «толпы», которые собирают проходящую через них информацию и могут подменять сообщения;
* конечный сервер — веб-сервер, с которым установлено соединение.

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

В таблице[3] ниже приведен предоставляемый уровень защиты для каждого вида анонимности (протокол не предназначен для несвязываемости получателя и отправителя, поэтому последняя колонка упущена)

Вид атаки  | анонимность отправителя  | анонимность получателя

|
|

локальный перехватчик  | уязвимый  | вне подозрения
C сотрудничающих участника толпы

N ⩾ p f p f − 0.5 ( C + 1 ) {\displaystyle N\geqslant {\frac {p_{f}}{p_{f}-0.5}}(C+1)}

| возможная невиновность  | возможная невиновность
Конечный сервер  | вне подозрения  |

N — количество пользователей толпы.  p f {\displaystyle p_{f}} — вероятность того, что сообщение перенаправится другому пользователю толпы( p f > 1 2 {\displaystyle p_{f}>{\frac {1}{2}}} , подробнее про  p f {\displaystyle p_{f}} ниже).

### Алгоритм работы протокола

[править | править код]

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

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

Jodno не знает, был ли пришедший запрос отправлен предыдущим jondo, или за один jondo до него.

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

Crowds работает так, чтобы каждый узел сети казался похожим на изначального отправителя сообщения. Каждый узел входит в сеть, запуская приложение jondo — небольшой процесс, который будет переадресовывать и принимать запросы от пользователей сети. Когда jondo стартует, каждый пользователь сети информируется о вхождении нового узла и теперь рассматривает его как возможный адрес пересылки сообщения. Для отправки сообщения узел выбирает случайным образом (причем равновероятно) узел из всей сети и отправляет ему сообщение. После получения сообщения узел «подбрасывает испорченную монетку» (с вероятностью выпадения одной стороны  p f {\displaystyle p_{f}} ), и, если выпало более вероятное событие, отправляет сообщение другому случайному узлу, иначе сообщение отправляется конечному адресату. Каждый узел при отправке сообщения на другой узел записывает предшественника, и, таким образом, туннель фиксирован — последнее используется для коммуникации между отправителем и получателем.

### Анализ секретности

[править | править код]

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

#### Локальный перехватчик

[править | править код]

Напоминаем, что каждое сообщение, проходящее по группе узлов засекречено, кроме последнего, отправляемого на конечный сервер. Так как протокол не скрывает связи между входящими и исходящими сообщениями от компьютера пользователя, то перехватчик может заметить, когда пользователь инициирует сообщение. Таким образом, crowds не обеспечивает анонимность отправителя от локального перехватчика. С другой стороны, так как сообщение отправляется другому пользователю crowds зашифрованным, то локальный перехватчик узнает адрес получателя только в том случае, если отправитель посылает сообщение напрямую. Вероятность этого события  1 N {\displaystyle {\frac {1}{N}}} , а N - количество пользователей «толпы» на момент создания «виртуального пути». Таким образом, вероятность того, что перехватчик выяснит, куда направляется сообщение, убывает прямо пропорционально уменьшению размера «толпы».

#### Конечный сервер

[править | править код]

Рассмотрим анонимность, обеспечиваемую от атак конечного сервера. Очевидно, что анонимность по получателю в данном случае невозможна. Для конечного сервера любой участник «толпы» может рассматриваться, как отправитель запроса. Таким образом, анонимность по отправителю имеет уровень «вне подозрений». Интересен тот факт, что результат не зависит от  p f {\displaystyle p_{f}}

(в отличие от связанных jondo). Также, увеличение пути по толпе не влияет на уровень защиты.

#### Сотрудничающие (связанные) jondo

[править | править код]

Рассмотрим группу jondo, задачей которых является выяснение инициатора соединения (отправителя). Так как каждый jondo может просматривать трафик, проходящий через него, анонимности получателя в данном случае нет.

Отправитель может быть идентифицирован очевидно только в тех случаях, когда сотрудничающие jondo попадаются на пути сообщения в толпе. Так как содержимое сообщение не содержит никакой информации по отправителю, сотрудничающие jondo могут лишь подозревать своего предшественника. Рассмотрим, насколько уверен может быть jondo, что его предшественник отправил сообщение. Введем некоторые термины :  H k {\displaystyle H_{k}} — событие, когда первый «предатель» находится на позиции k виртуального пути, где отправитель занимает 0 позицию пути. Положим также Hk+ = Hk or Hk+1 or Hk+2 or . . . .  I {\displaystyle I} — то событие, когда отправитель отправляет своё сообщение напрямую на «предателя». Выясним, при каком количестве  C {\displaystyle C} предателей уровень анонимности отправителя сохраняется на возможной невиновности.

Определение. Отправитель имеет возможную невиновность, если P(I | Hk+) <= 1/2

Теорема. Если  N ≥ p f p f − 1 / 2 ( C + 1 ) {\displaystyle N\geq {\frac {p_{f}}{p_{f}-1/2}}(C+1)} , тогда отправитель имеет возможную невиновность.

Доказательство:

Требуется показать, что P(I | Hk+) <= 1/2, при условии, что  N ≥ p f p f − 1 / 2 ( C + 1 ) {\displaystyle N\geq {\frac {p_{f}}{p_{f}-1/2}}(C+1)} . Для начала заметим, что

P ( H i ) = ( p f ( N − C ) N ) i − 1 ( C N ) {\displaystyle P(H_{i})=({\frac {p_{f}(N-C)}{N}})^{i-1}({\frac {C}{N}})} — вероятность того, что прежде чем дойти до предателя, путь прошел по (N — C)

«чистым» jondo (первая скобка) и, затем, попал на предателя (C/N). Откуда следует

P(H1+) =  C N ∑ k = 0 ( p f ( N − C ) N = C N 1 1 − p f ( N − C ) N {\displaystyle {\frac {C}{N}}\sum _{k=0}(p_{f}{\frac {(N-C)}{N}}={\frac {C}{N}}{\frac {1}{1-{\frac {p_{f}(N-C)}{N}}}}}

P(H2+) =  C N ∑ k = 0 ( p f N − C N ) k = ( C N ) ( 1 1 − p f ( N − C ) N ) {\displaystyle {\frac {C}{N}}\sum _{k=0}(p_{f}{\frac {N-C}{N}})^{k}=({\frac {C}{N}})({\frac {1}{1-{\frac {p_{f}(N-C)}{N}}}})}

Также нам потребуется:

P(H1) =  C N {\displaystyle {\frac {C}{N}}}

P(I|H1) = 1

P(I|H2) =  1 N − C {\displaystyle {\frac {1}{N-C}}}

Теперь P( I {\displaystyle I} ) может быть найден как

P(I) = P(H1)P( I {\displaystyle I} | H1) + P(H2+)P( I {\displaystyle I} | H2+) =  C ( N − N p f + c p f + p f ) N 2 − p f N ( N − C ) {\displaystyle {\frac {C(N-Np_{f}+cp_{f}+p_{f})}{N^{2}-p_{f}N(N-C)}}}

и т.к.  I {\displaystyle I} =>H1+

P( I {\displaystyle I} | H1+)=  P ( I ∧ H 1 + ) P ( H 1 + ) {\displaystyle {\frac {P(I\land H_{1}+)}{P(H_{1}+)}}} =  P ( I ) P ( H 1 + ) {\displaystyle {\frac {P(I)}{P(H_{1}+)}}} =  N − p f ( N − C − 1 ) N {\displaystyle {\frac {N-p_{f}(N-C-1)}{N}}}

Таким образом, если

N ≥ p f p f − 1 2 ( C + 1 ) {\displaystyle N\geq {\frac {p_{f}}{p_{f}-{\frac {1}{2}}}}\left(C+1\right)} ,тогда P( I {\displaystyle I} | H1+)<=1\2

Если взять  p f {\displaystyle p_{f}} =2/3, N  ≥ {\displaystyle \geq } 4 (C + 1)

### Возможные проблемы

[править | править код]

Если бы пути образовывались динамически, то у сотрудничающих jondo была бы возможность вычислить отправителя, сверяя пакеты различных путей на сходность контента или по трафик-таймингу пакетов.[4]

Файрволы также представляют собой проблему для crowds. Так как jondo используют определенный порт для работы с сетью, неизвестный файрволам, то они блокируют внешние попытки соединения к этим портам, что, естественно, мешает работе толпы.

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

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

Также можно измерить нагрузку на каждый jondo: в среднем в «толпе» численностью N на каждого участника будет приходиться по O  ( 1 ( 1 − p f ) 2 ( 1 + 1 N ) ) {\displaystyle ({\frac {1}{(1-p_{f})^{2}}}(1+{\frac {1}{N}}))} появлений на виртуальных путях.

## Примечания

[править | править код]

1. ↑ Matthew K. Wright, Micah Adler, Brian Neil Levine. The Predecessor Attack: An Analysis of a Threat to Anonymous Communications Systems (неопр.). Дата обращения: 25 декабря 2014. Архивировано 26 декабря 2014 года.
2. ↑ Pfitzmann, A. and Waidner, M. 1987. Networks without user observability Архивная копия от 3 апреля 2015 на Wayback Machine. Computers & Security 2, 6, 158—166
3. ↑ "Crowds: Anonymity for Web Transactions Michael K. Reiter and Aviel D. Rubin Архивная копия от 12 декабря 2005 на Wayback Machine AT&T Labs—Research Section 2
4. ↑ Motwani, R. and Raghavan, P. 1995. Randomized Algorithms. Архивная копия от 26 декабря 2014 на Wayback Machine Cambridge University Press.