Введение
Анонимные сети являются достаточно занятными и интересными представителями всего множества сетевых коммуникаций, целью которых становится скрытие связи между двумя и более её субъектами (участниками) от группы наблюдателей, к которым могут относиться как глобальные, так и локальные представители, обладающие как пассивными, так и активными методами наблюдения. Достижение цели для таковых сетей является проблемным действием, потому как постоянно возникает необходимость в соблюдении компромиссов между качеством анонимности и комфортностью использования. В результате, мы получаем множество анонимных сетей, которые представляют совершенно различный уровень защищённости.
Каждую анонимную сеть можно классифицировать различным образом - можно смотреть на сетевую архитектуру: децентрализованная она или гибридная, можно смотреть на открытость или закрытость исходного кода, можно смотреть на то, каким образом пакеты маршрутизируются в системе, можно сравнивать модели угроз и т.д. Но одним из наиболее интересных и систематических методов классификации является деление и агрегирование сетей по задачам анонимизации.
Задачи анонимизации
Под задачей анонимизации понимается далее криптографический протокол, целью которого становится достижение доказуемой анонимности субъектов к определённым группам наблюдателей. При этом под анонимностью может пониматься не только скрытие связи от наблюдателей между непосредственными абонентами (как основа любой задачи анонимизации), но и также скрытие инициатора или вовсе скрытие самого факта коммуникации (как дополнительные свойства тех или иных задач), Таким образом, задача анонимизации становится ядром любой анонимной сети.
В общей сложности и на текущий момент времени известно пять задач анонимизации: Proxy, Onion, DC (Dining Cryptographers), QB (Queue Based) и EI (Entropy Increase). В этой статье мы попробуем разобраться в каждой из них.
1. Proxy
Задача проксирования является одной из наиболее простых задач анонимизации с высокой производительностью и хорошей масштабируемостью, но зачастую со слабой моделью угроз. В качестве представителей данной задачи можно выделить такие сети, как: Crowds, Freenet (Hyphanet), GNUnet, RetroShare, MUTE.
Суть задачи достаточно проста: проводить трафик от точки A до точки B через множество прокси-серверов, несвязанных между собой общими владельцами или целями деанонимизации. При этом, каждая маршрутизация должна сопровождаться перешифровкой сообщений с дальнейшей их ретрансляцией на следующий прокси-сервер.
Интересной особенностью Proxy-задачи является её гибкость (или вольность) к модификациям, благодаря чему / из-за чего: 1) анонимные сети достаточно сильно могут отличаться друг от друга, 2) анонимные сети могут быть созданы неявным образом, задействуя для этого публичные прокси-сервера с шифрованием, 3) некоторые сети имплементируют возможность пропускать трафик через другие анонимные сети по типу Tor или I2P, чтобы нивелировать слабую модель угроз со стороны задачи проксирования.

Слабость модели угроз связана не как с таковой задачей проксирования напрямую, как с отсутствием дополнительных модификаций по типу вероятностной маршрутизации (Crowds) или ложных сообщений (GNUnet). Из-за отсутствия таковых, RetroShare предлагает использовать Tor/I2P. Для Freenet также рекомендуется пропускать трафик через Tor/I2P.

Основной недостаток задачи проксирования - это уязвимость к кооперирующим атакам со стороны маршрутизирующих узлов. Так например, если узлы 1, 3 являются кооперирующими, тогда им становится возможным связывать отправителя и получателя посредством сравнения принимаемого сообщения. При этом стоит заметить, что второй маршрутизирующий узел становится полностью бесполезным - он никак не влияет на качество анонимности. Если таким же образом продолжить далее, и поставить между узлами 1, 3 ещё N-ое количество узлов, то качество анонимности ровно также не изменится. В результате, мы получаем следующий вывод:
Усечение маршрутизирующей цепочки
Если существует маршрутизирующая система X на базе задачи проксирования в которой находится N узлов, т.е. X = (1, 2, ..., N), и при этом узлы i, j, где j > i, оказываются кооперирующими, тогда маршрутизирующая система приобретает вид X' = (1, 2, ..., i, j, ..., N), и как следствие |X'| <= |X|. Система оказывается взломанной, если |X'| становится равно количеству кооперирующих узлов.
Задача проксирования является наиболее противоречивой задачей в плане терминологии / описания, потому как не каждая сеть, которая использует Proxy-задачу является на деле анонимной.
2. Onion
Луковая маршрутизация является одной из самых популярных задач анонимизации из-за возможности выстроить относительно хороший компромисс между качеством анонимности и комфортностью пользования. В качестве представителей данной задачи можно выделить такие сети, как: Tor, I2P, Mixminion.

Суть задачи схожа с Proxy, но в отличие от последней - отсутствует процедура перешифровки сообщений, благодаря чему проблема усечения маршрутизирующей цепочки становится куда более сложно осуществимой.
Если предположить, что узлы 1, 3 вновь являются кооперирующими, то узел 1 не сможет однозначно определить, что сообщение было отправлено посредством узла 3, т.к. связать два маршрутизирующих сообщения не представляется возможным из-за их полиморфного (видоизменяющегося) характера за счёт наличия множественного шифрования. Это становится возможным при том условии, если функция шифрования E и ключ k2 являются надёжными. В результате, если узел 3 располагает сообщениями: C3 = { E(k3, E(k2, E(k1, m))), E(k2, E(k1, m)) }, а узел 1 располагает сообщениями: C1 = { E(k1, m), m }, то пересечение множеств будет давать пустое множество: C3 ∩ C1 = ∅.

Было бы замечательно, если бы для Onion-задачи не существовало никаких атак или уязвимостей, но к сожалению это не так. В общем плане Onion-задача неспособна противостоять глобальному наблюдению или, иными словами, неспособна доказуемо скрыть связь между субъектами сети. В основном все меры противодействия начинают быть направлены либо на генерацию ложного трафика, либо на перемешивание сообщений. Но данные стратегии никак не исключают успех глобального наблюдения, а лишь и только увеличивают время анализа наблюдателя за анонимизирующей системой, потому как остаются неизвестными временные границы увеличенного интервала, и как следствие, нельзя выдвинуть никакое предположение или доказательство того, насколько улучшилось качество анонимности или какие ресурсы должен потратить атакующий для успешной атаки.
Помимо обычных атак глобального наблюдателя, также могут существовать и кооперирующие наблюдения. Так например, пассивный глобальный наблюдатель (способный лишь и только смотреть за трафиком всей сети) может объединиться с активным локальным внутренним наблюдателем (способным отправлять пакеты на необходимый скрытый сервис). Вследствие кооперации, внутренний наблюдатель начнёт генерировать аномально большое количество трафика / пакетов, отправляя их на скрытый сервис X. Глобальный наблюдатель, в свою очередь, будет смотреть за тем куда данные пакеты в конечном итоге приходят - где они больше всего собираются.
Наиболее агрессивной атакой могут являться наблюдения со стороны активного глобального наблюдателя в кооперации с активным локальным внутренним наблюдателем. Вместо того чтобы пассивно сверять трафик на принадлежность узлов к конечной точке, глобальный наблюдатель может затормаживать определённую часть сети, а далее внутренний наблюдатель будет говорить о том, насколько сильно был задержан ответ от сервиса. Сложность такой атаки можно оценить логарифмически, что является очень серьёзным для успеха анонимности.
3. DC
Проблема обедающих криптографов позволяет не только предотвратить атаки глобального наблюдателя, но и позволяет, на своём примере, воссоздать непробиваемую анонимность. Иными словами, чистые DC-сети невозможно деанонимизировать ни внутренними наблюдениями, ни внешними, ни локальными, ни глобальными, ни пассивными, ни активными. Буквально абсолютно доказуемая анонимность. В качестве представителей данной задачи можно выделить такие сети, как: Dissent, PriFi, Herbivore.
Суть задачи такова: имеются три участника {A, B, C}. У каждой связи участников, т.е. {A-B, B-C, C-A} существует генератор псевдослучайных чисел с одинаковым состоянием (ключом). Предполагается, что используемый генератор, а также ключи являются безопасными. Каждый период времени = T, все участники начинают генерировать один бит информации. Вследствие этого, любой из участников связи, например A-B, может сгенерировать ровно такой же бит, как и другой участник этой же самой связи. После того как все связи сгенерируют по одному биту, т.е. A-B=b1, B-C=b2, C-A=b3 - начинается первый этап суммирования. Первый этап суммирования является локальным для каждого участника, т.е. Ab=b1 xor b3, Bb=b1 xor b2, Cb=b2 xor b3. Далее идёт второй этап суммирования - глобальный, когда все участники обмениваются своими локальными результатами суммирования: Ab xor Bb xor Cb. Предположим, что один из участников является отправителем и он хочет отправить нулевой бит, в таком случае на первом этапе суммирования он ничего не делает, результатом Ab xor Bb xor Cb станет m=0. Если же отправитель, например A, хочет отправить единичный бит, в таком случае на первом этапе суммирования он применяет операцию НЕ (not), результатом not(Ab) xor Bb xor Cb станет m=1. Таким образом, был передан один бит полностью анонимно.

Ранее мы предполагали, что целью любой задачи анонимизации является скрытие связи между отправителем и получателем. Тогда кто же в этой системе является получателем? Ответ: вся система. DC-сети являются широковещательным видом коммуникации, где приватности сообщений по умолчанию не существует, но при этом вполне корректно присутствует анонимность, т.к. неизвестен отправитель, и как следствие, связь остаётся сокрытой.
Почему же анонимность DC-задачи является абсолютно доказуемой? Предположим, что в системе существует три участника, т.е. {A, B, C}, где один из них, например C, является внутренним наблюдателем. Предположим также, что существует глобальный наблюдатель, который способен просматривать всю систему целиком. Все наблюдатели являются активными, т.е. могут не только следить за отправлением сообщений (бит), но также модифицировать данные, замедлять или блокировать участников. При таких условиях, любое блокирование или замедление одного из участников будет приводить к последующей блокировке или замедлению всей системы. Если биты будут генерироваться внутренним наблюдателем параллельно отправителю, т.е. участник C будет с вероятностью 1/2 использовать операцию НЕ при суммировании бит, то это приведёт к коллизиям, и как следствие, первоначальное сообщение будет искажено. Точно также как если бы C изменял отправляемые биты любого из участников. Как мы видим, во всех этих ситуациях, система либо блокируется до тех пор, пока не будет осуществлена полная итерация обмена битами, либо просто терпит искажение информации. Но при всём этом, и при любом сценарии, отправляющий остаётся анонимен. Атаки лишь влияют на функционировании сети, но не на качество анонимизации.

Как видно из всего вышеописанного, DC-задача, в своём чистом исполнении, не может похвастаться стабильностью или комфортностью использования. Любые активные атаки будут приводить систему либо к deadlock'у до тех пор, пока один из участников не оклемается, либо к потере передаваемой информации. При увеличении количества участников вероятность коллизий будет увеличиваться, а блокировки будут становиться всё более ощутимыми. Иными словами, DC-задача наследует проблему масштабируемости.
Вследствие этого, все ныне известные анонимные сети, базирующихся на DC-задаче в действительности не являются абсолютно доказуемыми. Они также вполне могут допускать не только активные наблюдения, но и даже пассивные. Так например, Herbivore вполне может быть деанонимизирован в группе, если отправитель постоянно общается с одним и тем же получателем и в это же время участники группы постоянно меняются. В результате, мы получаем забавный факт: в то время как анонимные сети на базе Proxy-задачи дополняются модификациями для улучшения модели угроз; сети на базе DC-задачи, напротив, дополняются модификациями для её ухудшения взамен комфортности использования.
4. QB
Проблема на базе очередей обладает теоретически доказуемой анонимностью. Таковая способна противостоять любым пассивным наблюдениям, но в отличие от абсолютной анонимности, не способна противостоять всем активным действиям со стороны злоумышленников. Из-за этого QB-задача намеренно ограничивает ряд действий, и как следствие, прикладных использований, чтобы снизить или исключить вовсе вероятность активных атак. В качестве представителей данной задачи можно выделить такие сети, как: Hidden Lake, Micro-Anon.
Суть задачи такова: существует очередь Q, которая представляет собой хранилище сгенерированных шифртекстов. Если очередь когда-либо становится пустой, то генерируется ложный шифртекст E(r,v) (со случайным ключом + байтами) и сразу помещается в очередь Q. Если появляется истинное сообщение, то оно шифруется ключом получателя E(k,m) и также помещается в очередь Q. Каждый участник выставляет период генерации = t, т.е. период при котором из очереди будет отправляться один шифртекст в сеть. При этом, в отличие от DC-задачи, период генерации не является глобальным, а потому может задаваться каждым участником автономно и без кооперации. После отправления шифртекста, каждый участник сети пытается расшифровать сообщение. Если оно успешно расшифровывается - значит получателем являетесь непосредственно вы, в противном случае - сообщение игнорируется.

Пассивные наблюдатели могут видеть лишь факт генерации сообщений, понять же отправляются истинные сообщения или ложные - они не в состоянии. При этом, в отличие от DC-задачи, QB-задача не только скрывает отправителя (инициатора) сообщения, но и вообще скрывает сам факт какой-либо коммуникации между участниками сети. Иными словами, свойство схоже со стеганографическим, где посредством контейнера (в данном случае всей системы - способа постоянной генерации шифртекстов) скрывается сообщение (кратковременная замена ложного трафика на истинный).
Активные наблюдения в основном затрагивают внутреннего наблюдателя, но в кооперации с глобальным пассивным наблюдателем. Суть атаки достаточно проста: внутренний наблюдатель генерирует истинное сообщение (запрос) и отправляет его в сеть. С течением времени приходит сообщение от получателя (ответ). Внутренний наблюдатель отсылает полученный шифртекст глобальному, а тот в свою очередь сравнивает - где он был сгенерирован. Таким образом, нарушается анонимность получателя к отправителю. Из-за этого, QB-задача ограничивает модель угроз и предполагает, что получатель и отправитель априори идентифицируют друг друга, и как следствие, не имеют надобности или смысла в деанонимизации собеседника. При таком сценарии, смысл кооперации наблюдателей начинает теряться.
Другой, и более изощрённой атакой, может стать наблюдение за состоянием очереди одного из абонентов коммуникации. При таком сценарии, активный наблюдатель постоянно должен пинговать одного из участников сети (далее получателя). Если получатель отвечает за время x > t, тогда вероятно он с кем-то общался в период 0<x<=t. В результате, скрытие факта коммуникации перевелось в скрытие факта инициатора или связи. Если внутренний наблюдатель будет пинговать сразу нескольких участников, то будет возникать ненулевая вероятность наличия двух или более абонентов, отвечающих за x > t. Это может говорить о том, что эти участники связаны между собой и могут быть собеседниками. Чтобы исключить такую атаку, существует два подхода: 1) использовать F2F коммуникацию, чтобы невозможно было подключиться к другому узлу без его предварительного согласия - это не исключает возможность атаки, но достаточно сильно урезает действия атакующего; 2) использовать несколько очередей {Q1, Q2, ..., Qn} для каждого из n участников - в таком случае увеличивается отклик на запросы/ответы, но при этом очереди начинают логически быть несвязанными между собой, и как следствие, полностью исключают данный вид атаки.

К сожалению, QB-задача также обладает проблемой масштабируемости. Необходимость отправления шифртекстов всем участникам сказывается негативным образом на загруженность пропускного канала связи. Поэтому рекомендуется, чтобы каждое сообщение было подтверждено работой (proof-of-work), но, в любом случае, это не избавляет от проблемы масштабируемости полноценно. Другим способом борьбы с проблемой масштабируемости может стать использование локализированной QB-задачи, т.е. использовать данную задачу по отдельности к каждому собеседнику. Это схоже с концепцией нескольких очередей, но в отличие от неё, шифртексты должны отправляться только тем с кем держится связь, а не всем в сети. В результате, очереди {Q1, Q2, ..., Qn} начинают использоваться не поочерёдно, а одновременно. В локализированной QB-задаче присутствует только два недостатка: 1) зависимость от сетевых адресов (хоть знание таковых и не сказывается на качестве анонимности), 2) глобальный наблюдатель будет обладать списком всех возможных связей, но всё также не будет иметь возможности узнать - имеется ли факт коммуникации с ними, 3) снижается модель угроз с факта скрытия коммуникации до сокрытия связи между абонентами коммуникации.
Более подробно про QB-задачу можно почитать здесь.
5. EI
Задача увеличения энтропии является скорее эзотерической, нежели практической. Хоть она и относится к теоретически доказуемым задачам, предоставляя возможность сокрытия инициатора связи, но при этом она же: сложно реализуема, восприимчива к активным наблюдениям, в ней присутствует множество подводных камней, а по комфортности использования и вовсе может тягаться с DC-задачей. Но не говорить о ней тоже не совсем корректно. Представители у такой задачи, в настоящий момент времени, отсутствуют.
EI-задача вбирает в себя идеи нескольких сетей одновременно: Crowds (вероятностная маршрутизация), Onion-задачи (луковая маршрутизация) и Bitmessage (заливочная маршрутизация). Фактически, EI-задачу можно отнести к Onion-like задаче, или вернее сказать, она является некоторым изощрённым развитием Onion'а.
Суть задачи такова: существует три участника в сети - {A, B, C}. Предположим, что A является отправителем сообщения. A генерирует с вероятностью 1/2 шифртекст - либо он будет зашифрован единожды ключом получателя, либо он будет зашифрован дважды: сначала ключом получателя, а потом ключом маршрутизатора. Предполагается, что дважды зашифрованный текст обладает тем же размером, что и единожды зашифрованный. После этого шифртекст отправляется в сеть. На данный момент времени, для глобального наблюдателя, инициатор связи полностью известен, не известен лишь получатель. Какой-то из двух узлов {B, C} получает шифртекст и начинает либо его маршрутизировать далее (сдирая один слой шифрования), либо отвечать (генерируя тем самым заново шифртекст). При этом генерация ответа точно также начинает придерживаться вероятностной логики 1/2.

Далее, при отправлении шифртекста со стороны одного из участников {B, C}, у наблюдателя возникает дилемма - либо атакующий начинает воспринимать акт отправления как маршрутизацию, либо как генерацию нового сообщения (т.е. ответ). Так как первоначальный запрос был сгенерирован с вероятностью 1/2, то событие = маршрутизация ИЛИ событие = ответ также содержит вероятность 1/2. Если после события все дальнейшие действия прерываются - наблюдатель считает, что это был ответ (потому как было произведено два действия: запрос, ответ). Если же после события дальнейшие действия продолжаются - у наблюдателя вновь возникает дилемма: либо это ответ (после двух действий: запрос, маршрутизация), либо это новый запрос (после двух действий: запрос, ответ). На данном этапе запрос уже не является однозначным, как он был до этого, что свидетельствует об увеличении энтропии.
Эту же модель / пример можно изобразить следующим образом:
запрос(1)-ответ(1)-запрос(2)-ответ(2)-...
запрос(1)-маршрутизация(1)-ответ(1)-запрос(2)-...
=>
запрос(1) = запрос(1) - определённый отправитель (инициатор)
ответ(1) ~ маршрутизация(1) - неопределённый получатель
запрос(2) ~ ответ(1) - неопределённый отправитель (пересечение сеансов связи)
+1 бит энтропии
Таким образом, EI требует, чтобы генерация трафика продолжалась постоянно всеми её участниками с той лишь целью, чтобы порождать неопределённость между несколькими пересекающимися сеансами связи / состояниями. Из-за этой концепции мы приходим к новому определению - мощности спама. Мощности спама |St| - количество сгенерированных уникальных пакетов в системе за определённый период времени t совершённый разнородными (никак не связанными между собой общими целями и интересами) участниками сети.
Пример мощности спама
Если t представлено как НОК (наименьшее общее кратное) от всех P(Lij) → НОК(P(L11), P(L12), ..., P(L21), P(L22), ..., P(Lnm)), то в заданный промежуток времени мощность спама обретает своё максимальное значение |St| = |L|. Примером может служить таблица вычисления мощности спама при L = [{A, B}, {C}, {D}], P(A) = 1, P(B) = 2, P(C) = 3, P(D) = 2, где НОК(P(A), P(B), P(C), P(D)) = 6.
|
t1 |
t2 |
t3 |
t4 |
t5 |
t6 |
A |
+ |
+ |
+ |
+ |
+ |
+ |
B |
- |
+ |
- |
+ |
- |
+ |
C |
- |
- |
+ |
- |
- |
+ |
D |
- |
+ |
- |
+ |
- |
+ |
|
|St| = 1 |
|St| = 2 |
|St| = 2 |
|St| = 2 |
|St| = 1 |
|St| = 3 |
Более подробно про EI-задачу можно почитать здесь.
Гибриды
Как говорилось ранее, каждая анонимная сеть должна базироваться на определённой задаче анонимизации, будь то Proxy, Onion, DC, QB, EI или какой-нибудь другой - новой и ещё не открытой. Но это не говорит о том, что в сети должна присутствовать лишь и только одна задача анонимизации - вполне возможным событием является использование сразу нескольких задач, одна из которых берёт главенствующую роль. В таком случае мы говорим уже о гибридности.
Так например, анонимными сетями с гибридной задачей вполне могут считаться (или считаются априори) следующие представители:
RetroShare (далее RS) с включенной опцией Tor/I2P. В таком случае, сеть никак не исключает базовую задачу проксирования, а лишь добавляет в качестве нового слоя луковую маршрутизацию. Фактически, дефекты, свойственные Proxy-задаче, сохраняются здесь в полной мере. Тогда может возникнуть вполне логичный вопрос - для чего добавлять Onion-задачу, если процедура деанонимизации всё равно будет сводиться к Proxy-задаче? Ответ: чтобы скрыть сетевые адреса друзей друг от друга, ни более, ни менее. Если в цепочке маршрутизации будут находиться несколько кооперирующих наблюдателей, то Onion никак не сможет противодействовать этому, потому как:
-
Herbivore. Хоть данная анонимная сеть и является представителем DC-задачи, но помимо неё располагает также Proxy-задачей. Основная задумка проксирования заключается в том, чтобы после обмена одним общим сообщением (посредством DC-сети) - один из участников стал на время Proxy-сервером и отправил его (сообщение) во внешнюю сеть от лица всей группы. В результате, мы получаем следующую схему:
-
Можно предложить и собственную гибридную схему на основе QB и Onion задач. Так например, основная проблема Onion-задачи - это атаки со стороны глобального наблюдателя. Основной же проблемой QB-задачи является проблема масштабируемости и проблема связности абонентов коммуникации. Можно объединить обе эти задачи и составить, тем самым, новую сеть - Noisy (шумный). В отличие от классической QB-задачи, где каждое сообщение отправляется всем участникам в сети, в Noisy - QB-сетей множество, но в каждой из них всего по одной связи (два участника). Т.е. QB-задача является локализированной из-за чего проблема масштабируемости не проецируется на всю систему. Недостатком такой сети является пониженная модель угроз - теперь сеть не пытается скрывать факт коммуникации, а ограничивается лишь сокрытием связи между абонентами. Сеть Noisy можно изобразить следующим образом:
Схожим методом можно сконструировать огромное количество всевозможных гибридных задач. Главным условием здесь является правильное рассмотрение модели угроз, а также - ради чего вообще следует объединять несколько задач? Если неправильно рассчитать возможности злоумышленников / наблюдателей, то может получиться и так, что никакого улучшения не произойдёт. Плюс ко всему этому, комбинирование задач в любом случае будет ухудшать производительность как минимум одной из выбранных задач. Поэтому если вопрос создания анонимной сети лежит не только в плоскости бескомпромиссных подходов, то об этом тоже следует задуматься - может есть возможность ограничиться лишь одной задачей?
Ограничение определений
Разобрав все известные на данный момент задачи анонимизации, у нас всё же могут остаться или возникнуть некоторые вопросы касаемые определения тех или иных задач. В массе своей такие вопросы связаны с Proxy и Onion задачами, и в меньшей степени с DC, QB, EI, т.к. суть вопроса базируется на количественной характеристике сети.
Можно ли называть анонимной сетью - сеть, где существует один единственный Proxy-сервер? А если их два, три - это уже считается анонимной сетью? Такие же вопросы касаются и Onion-задачи - является ли сеть анонимной, если она базируется на одном единственном VPN-сервисе? А если строится каскад из двух-трёх VPN-сервисов, в этом случае сеть становится анонимной? С теоретической точки зрения, а именно с точки зрения вышеприведённых формул и определений - достаточно двух Proxy-серверов / VPN-сервисов, чтобы сеть считалась анонимной. Если в сети будет существовать всего один сервер / сервис, тогда возникнет противоречие с равенством задач Proxy-задача = Onion-задача.
С практической точки зрения, недостаточно, в том числе и двух Proxy-серверов / VPN-сервисов, чтобы сеть называлась анонимной, потому как мы должны исходить из предположения их возможной кооперации. В результате, анонимная сеть должна уметь циркулировать / ротировать маршрутизирующие узлы, не позволяя константно определять один и тот же маршрут пользователем или алгоритмом. И при таком определении, начинают урезаться не только гибридные сети со статично выстроенной цепочкой маршрутов, но и ряд децентрализованных сетей по типу: Freenet, RetroShare, MUTE, потому как они выстраивают маршруты исходя из наиболее быстрого / оптимизированного пути с точно заданным алгоритмом и не пытаются менять ранее выстроенные маршруты, если таковые продолжают успешно функционировать и являются наиболее быстрыми.
Поэтому не следует считать или приравнивать задачу анонимизации напрямую к анонимной сети. Иными словами, анонимная сеть обязана базироваться на задаче анонимизации, но присутствие / существование таковой задачи в сети не делает сеть априори анонимной. Исключением в данном случае являются только те задачи, которые не зависят настолько сильно от количественной характеристики сети, т.е. DC, QB, EI. При их существовании сеть действительно становится / приравнивается к анонимной, т.к. в них отсутствует какой бы то ни было смысл менять или ротировать маршруты.
Завершение
В результате, мы смогли разобрать и классифицировать современные анонимные сети по их задачам анонимизации, а также рассмотрели присущие им особенности и ограничения. Плюс к этому рассмотрели гибридные схемы анонимных сетей, в которых применяются сразу несколько задач анонимизации. Немного разобрали и ограничение определений к сетям, базируемых на Proxy и Onion задачах.