Предисловие
Весь нижеизложенный текст является составной частью более общей теории излагаемой в теоретико-научной статье "Теория строения скрытых систем". Данная статья описывает становление анонимности через её формации посредством развития стадий.
Статья находится полностью в открытом доступе: https://github.com/number571/go-peer/blob/master/articles/hidden_systems.pdf. По мере свободного времени и новых знаний статья улучшается, становясь более совершенной в своём проявлении. Поэтому любая (адекватная) критика, дополнения, замечания с радостью приветствуются.
Введение
Среди анонимных сетей можно выявить класс систем максимально разграничивающих субъектов информации от их объектов, что приводит к возможности различных способов транспортирования информации. Из-за своей специфичной архитектуры передача информации может осуществляться в любой дуплексной среде, что полностью отрывает распространение объектов от своей сетевой архитектуры и переводит маршрутизацию в этап виртуального транслирования. Тем не менее у такой концепции существуют и свои недостатки, где одним из основных является невозможность построения поточной связи из-за отсутствия постоянных соединений, что в определённой степени становится уязвимостью к активным нападениям (более подробно данный момент будет показан в разделе «Модель абстрактных анонимных сетей на базе очередей»).
![Рисунок 1. Абстрактные анонимные сети являются подмножеством класса теоретически доказуемой анонимности Рисунок 1. Абстрактные анонимные сети являются подмножеством класса теоретически доказуемой анонимности](https://habrastorage.org/getpro/habr/upload_files/672/07c/552/67207c5523a02abf27a6b17c327ad918.png)
Сама маршрутизация является в таких системах двухслойной, и выражается по формуле lim|A|’→C <= |A| <= N**, где N — количество узлов в сети, C — количество узлов участвующих в маршрутизации из всего множества сети. Подобные сети принадлежат классу теоретически доказуемой анонимности***. Примечательной особенностью абстрактных анонимных сетей является их возможность формирования анонимата в тайных каналах связи****, как систем с неприсущей им по умолчанию внутренней анонимностью. Анонимные сети, с подобными характеристиками, будут именоваться абстрактными.
*Скрытые, тёмные, анонимные сети — есть сети, соединяющие и объединяющие маршрутизацию вместе с шифрованием (под шифрованием понимаются также этапы хеширования, подписания). Маршрутизация обеспечивает критерий анонимности, направленный на субъект, шифрование — критерии конфиденциальности, целостности, аутентификации, направленные на объект. Без маршрутизации легко определяются отправитель/получатель, без шифрования легко определяется передаваемое сообщение [1, с.912]. Таким образом, только в совокупности этих двух свойств сеть может являться скрытой [2][3].
**Мощность анонимности — количество узлов, выстроенных в цепочку и участвующих в маршрутизации информации от отправителя до получателя, при этом, не будучи никак связанными между собой общими целями и интересами. Из этого следует, что многоранговая архитектура по умолчанию имеет мощность анонимности |A| = 1 (вне зависимости от количества серверов). Нулевая мощность анонимности |A| = 0 возникает при существовании прямых соединений между субъектами (иными словами при отсутствии какой бы то ни было маршрутизации).
|A| = |Q(R)|, где R - множество узлов участвующих в маршрутизации, Q - функция выборки списка подмножеств узлов, подчиняющихся одному лицу или группе лиц с общими интересами.
Так например, если R = {A, B, C} — это множество узлов участвующих в маршрутизации, а подмножество {A, B} принадлежит множеству R — кооперирующие узлы, то Q(R) = [{A, B}, {C}] и, как следствие, |A| = |Q(R)| = 2.
***Скрытыми сетями с теоретически доказуемой анонимностью принято считать замкнутые (полностью прослушиваемые) системы, в которых становится невозможным осуществление пассивных атак с определёнными условностями по количеству узлов неподчинённых сговору. Говоря иначе, с точки зрения пассивного атакующего, апостериорные знания (полученные вследствие наблюдений) должны оставаться равными априорным (до наблюдений), тем самым сохраняя равновероятность по N-ому множеству субъектов сети.
****Секретные, тайные, эзотерические каналы связи — есть соединения, располагаемые в заведомо замкнутом, незащищённом, враждебном окружении и имеющие характеристики безопасной передачи информации. В отличие от определения [4, с.147], в нашем случаем под тайными каналами будут пониматься системы «неорганически вживляющиеся» в уже существующую. При этом анонимность, родственная скрытым сетям, не является базисом секретных каналов связи и, следовательно, может быть отброшена из-за ненадобности или по необходимости.
Модель абстрактных анонимных сетей на базе очередей
Одним из возможных способов (как шагов) построения таковых систем является необходимость в доказуемой устойчивости системы по отношению хотя бы к одному из наблюдателей, будь то внешнему или внутреннему. При этом в качестве внешнего берётся наивысшая форма в лице глобального наблюдателя, а в качестве внутреннего берутся узлы, заполняющие всю сеть (с определённой минимальной условностью по количеству несвязанных между собой узлов).
Простота системы является также важным качеством теоретически доказуемой анонимности. Если система будет иметь массу условностей, то даже при теоретической её доказуемости, практическая реализация может составить огромное количество трудностей, ошибок или неправильных использований, что приведёт к фактической дискредитации самой теории, и таковая анонимность в конечном счёте останется лишь теоретической. Одной из самых простых возможных реализаций абстрактной системы является использование очередей генерации пакетов в сети.
![Рисунок 2. Общая структура абстрактных анонимных сетей* Рисунок 2. Общая структура абстрактных анонимных сетей*](https://habrastorage.org/getpro/habr/upload_files/c24/fb0/3b6/c24fb03b60f46c46692b096cab803d75.png)
Для начала предположим, что необходимо защититься от внешнего глобального наблюдателя. Также предположим, что существует три узла в сети {A, B, C}, где один из них отправитель информации, а другой – получатель. Целью атакующего становится сопоставление факта отправления с инициатором и/или получения с сервисом связи (получателем). В идеальной системе (теоретически доказуемой) вероятность обнаружения запроса составит 1/3. Ровно такая же картина должна быть с фактом ответа на запрос. В сумме при трёх участниках и при условии ИЛИ факт обнаружения равен 2/3. При существовании N узлов несвязанных между собой общими целями и интересами, вероятность становится равной 2/N. Итоговая система должна удовлетворять данным свойствам.
Предположим далее, что необходимо защититься от q-ого количества внутренних наблюдателей системы из количества q+|{A, B, C}| узлов, где известно, что узел С – не связанный в сговоре маршрутизатор для одного из узлов A или B. Целью атакующего становится сопоставление факта отправления ответа из множества {A, B} с конкретным его элементом. В идеальной системе (теоретически доказуемой) вероятность обнаружения ответа составит 1/2. При существовании N узлов несвязанных между собой общими целями и интересами, вероятность становится равной 1/N. Итоговая система должна удовлетворять данным свойствам.
Если предположить, что существует сговор внешнего и внутреннего наблюдателей, то условие и цель атакующих полностью становится аналогична цели внутреннего наблюдателя, где в идеальной системе (теоретически доказуемой) ровно также вероятность обнаружения ответа должна составить 1/2. При существовании N узлов несвязанных между собой общими целям и интересами, вероятность должна становиться равной 1/N. Итоговая система должна удовлетворять данным свойствам.
Работа системы на базе очередей должна сводиться к следующему протоколу на основе 10 пунктов, которые полностью (за исключением сговора активных наблюдателей) обеспечивают замкнутость и безопасность системы:
Каждый субъект сети должен выстроить период генерации пакета равный Tn, где n принадлежит множеству рациональных чисел, n – величина периода, не менее и не более. Иначе становится эффективна атака со стороны внутреннего наблюдателя. Несогласованность константного числа Tn с другими участниками сети приведёт к возможности разграничения субъектов по подмножествам с разными периодами генераций.
Каждый субъект сети выстраивает период равный Tn полностью локально, без кооперирования с другими субъектами сети. Это условие является лишь упрощением системы, само кооперирование не приведёт к нарушению протокола, потому как предполагается, что сама генерация пакетов, а конкретно время генерации, не является секретом.
Каждый действующий субъект сети выставляет минимум одного существующего пользователя в роли маршрутизирующего узла для поддержания анонимности. Причисление маршрутизатора в сговор атакующих приведёт к деанонимизации субъектов, использующих данного промежуточного участника. Поэтому, в практическом применении для снижения рисков связанных с деанонимизацией субъектов посредством контроля ретранслятора, необходимо выбирать сразу несколько маршрутизирующих узлов, формируя тем самым цепочку нод и повышая мощность анонимности.
Каждый действующий субъект сети знает период и время генерации нового пакета на постоянном маршрутизирующем узле. Такое условие необходимо для предотвращения от атак направленных на нестабильные системы с учётом существующего сговора внешних и внутренних наблюдателей.
Каждое сообщение зашифровывается монолитным криптографическим протоколом с множественным туннелирование и проходит сквозь маршрутизирующие узлы (более подробно в разделе «Монолитный криптографический протокол»). Такое свойство приведёт к сильному разрыву связей между объектом и его субъектами, а также между идентификацией сетевой и криптографической.
Каждый субъект хранит все свои сообщения, готовые к отправлению по сети, в очереди. Помимо очереди субъект должен содержать автодополняющийся пул ложных сообщений. Данное свойство необходимо для пункта 7.
Если на момент Tni, где i принадлежит множеству натуральных чисел, i – номер периода, очередь пуста, то-есть не существует ни запроса, ни ответа, ни маршрутизации, то отправляется сообщение из пула ложных сообщений. При таком случае, данное сообщение фактически никто не получает.
Если приходит сообщение представляющее собой маршрутизацию, то оно ложится в очередь и при наступлении локального времени Tni отправляется по сети. Пункт 5 обеспечивает несвязность объекта с его субъектами, поэтому при получении сообщения-маршрутизации, промежуточный принимающий узел увидит только факт маршрутизации.
При необходимости отправить запрос, субъект сначала анализирует текущее время с периодом маршрутизатора, с целью отправить сообщение на второй итерации периода маршрутизирующего узла. Если ещё не прошла собственная итерация периода, то перед запросом в очередь вставляется ложное сообщение, данный запрос отправляется по сети. Пункт 3 обеспечивает несвязность идентификации сетевой и криптографической, что не даёт отправителю никакой информации о получателе, кроме его публичного ключа.
При необходимости отправить ответ, субъект сначала анализирует текущее время с периодом маршрутизатора, с целью отправить сообщение на второй итерации периода маршрутизирующего узла. Если ещё не прошла собственная итерация периода, то перед ответом в очередь вставляется ложное сообщение, данный ответ отправляется по сети. Пункт 3 обеспечивает несвязность идентификации сетевой и криптографической, что не даёт получателю никакой информации об отправителе, кроме его публичного ключа.
В выстроенной системе становится достаточно легко доказать невозможность атаки со стороны внешнего наблюдателя, анализирующего дифферентность сети. Если каждый субъект соблюдает генерацию пакета по локальному периоду (даже гипотетически с разными значениями Tn), то становится невозможным установление факта отправления, получения, маршрутизации или ложной генерации, потому как наблюдатель в конечном счёте способен лишь видеть определённые шифрованные сообщения генерируемые каждый промежуток времени равный Tn. Также, если внешним наблюдателем будут блокироваться определённые субъекты информации, кардинально данный подход ситуации не изменит.
Атака внутренних наблюдателей с приведённым выше условием является качественно более сложной и мощной (даже относительно большинства внутренних нападений), потому как q субъектов контролируют всю сеть за исключением трёх субъектов, а следовательно атакующие фактически являются не только внутренними наблюдателями, но и в массе своей монолитным глобальным наблюдателем. В качестве упрощения доведём нападения до теоретически возможной комбинации, в отображении сговора внешних и внутренних наблюдателей. Аудит будет базироваться на 10 пункте, когда субъекту должен отправиться ответ на отправленный запрос. При анализе системы может встретиться два разных случая – частный (a) (наиболее благоприятный в определении анонимности) и общий (b) (дающий больший простор действий для нападающих).
Частный случай удобно рассматривать на примере основных способов деанонимизации и методов их предотвращения. Общий же случай более реален в настоящем мире, потому как частный неустойчив к отказам в обслуживании (если субъект переподключиться, то изменится сдвиг периода) и требует из-за этого постоянного кооперирования субъектов между собой по времени (чтобы сама генерация информации была одновременной). Таковые условия поведения частного случая делают общий более приоритетным в анализе теоретической анонимности, потому как он становится «стабильным» за счёт невозможности своего дальнейшего ухудшения.
a) Частный случай. Предположим, что существует крайне стабильная система при которой каждый узел из множества {A, B, C} выставил в один и тот же промежуток времени значение равное Tn без отставания по времени относительно всех остальных участников сети. Все участники генерируют запрос секунда в секунду каждые Tni по периоду. Предположим, что Tn = 3, тогда генерацию можно представить в виде Таблицы 1.
| t1 | t2 | Tn1=t3 | t4 | t5 | Tn2=t6 | t7 | t8 | Tn3=t9 |
A |
|
| + |
|
| + |
|
| + |
B |
|
| + |
|
| + |
|
| + |
C |
|
| + |
|
| + |
|
| + |
Таблица 1. Стабильная система со множеством участников {A, B, C} и Tn = 3
Если отсутствует маршрутизация от субъекта C, то легко определимым становится вычисление истинного субъекта генерирующего настоящее сообщение. И действительно, если существует сговор внутреннего и внешнего наблюдателей, то возможен сценарий, при котором внутренний наблюдатель, в роли инициатора, генерирует сообщение и отправляет его одному из участников {A, B}. Спустя период Tn (при условии, что у получателя не существует сообщений в очереди) инициатор получает ответ, предварительно сохраня его шифрованную версию. Далее внутренний наблюдатель обращается к внешнему с шифрованной версией сообщения, тот в свою очередь по своим записям проверяет где впервые был создан таковой пакет. Узел на котором появилось впервые подобное сообщение и является истинным субъектом информации в лице получателя.
Теперь предположим, что маршрутизация субъекта C существует. Если внутренний наблюдатель хочет раскрыть субъектов {A, B}, то можно предположить, что ему необходимо каким-либо образом обойти ретрансляцию субъекта C. Но исключить узел C из сети не является решением, потому как прекратится вся последующая связь с субъектом A или B. Другим способом расскрытия (и куда более продуктивным) является уже исключение одного субъекта из множества {A, B}, иными словами заблокировать участника сети на определённый период времени Tni. Тогда в таком случае активный внешний наблюдатель блокирует одного из субъектов {A, B}, после этого активный внутренний наблюдатель посылает запрос на одного из субъектов множества {A, B}. Если отправитель получает ответ, значит истинным получателем информации является не исключённый участник, в противном случае – исключённый.
Для предотвращения активных атак со стороны сговора внешних и внутренних наблюдателей необходимо добавить дополнительный 11 пункт, который представляет новую псевдо роль субъектов в качестве контролирующих узлов. Такая атака приводит к невозможности деанонимизации субъектов посредством частичного блокирования, потому как её следствием станет взаимоблокировка субъектов. Тем не менее добавление данного пункта скажется на том, что сама сеть выйдет из класса абстрактных анонимных сетей, потому как добавится необходимость в поточном распространении информации.
11. Каждый действующий субъект сети выставляет минимум одного существующего пользователя в роли контролирующего узла для предотвращения от активных атак методом исключения участников системы. Суть такого пользователя в понимании его существования. Если связь с подобным субъектом будет разорвана, то все последующие действия автоматически прекращаются. Само соединение функционирует за пределами механизма очередей, что, тем не менее, не приводит к снижению уровня анонимности, потому как все субъекты начинают подчиняться этому правилу однонаправленно (в такой концепции не существует функций типа запрос/ответ, существуют только поточные уведомления своего присутствия).
Также, хоть теоретически сама атака становится невозможной, но в практическом смысле и в долгосрочном наблюдении она более чем реальна. Связано это с тем, что одноранговая архитектура как таковая приводит к постоянному и динамичному изменению связей между субъектами. Это в свою очередь может приводить к исключениям групп субъектов связанных контролирующими узлами, потому как последние обязаны быть обычными и настоящими участниками системы.
b) Общий случай. Предположим, что существует нестабильная система при которой каждый узел из множества {A, B, C} выставил в разный промежуток времени значение равное Tn с отставанием по времени относительно всех остальных участников сети. Все участники генерируют запрос в разные секунды, но также сохраняя локальный период равный Tn. Предположим, что Tn = 3, тогда генерацию можно представить в виде Таблиц 2, 3, 4 относительно расположения субъекта C к другим участникам
| Tn-2=t1 | Tn-1=t2 | Tn1=t3 | Tn2-2=t4 | Tn2-1=t5 | Tn2=t6 | Tn3-2=t7 | Tn3-1=t8 | Tn3=t9 |
A |
| + |
|
| + |
|
| + |
|
B |
|
| + |
|
| + |
|
| + |
C | + |
|
| + |
|
| + |
|
|
Таблица 2. Нестабильная система со множеством участников {A, B, C} и Tn = 3, где узел C находится в начале генерации
| Tn-2=t1 | Tn-1=t2 | Tn1=t3 | Tn2-2=t4 | Tn2-1=t5 | Tn2=t6 | Tn3-2=t7 | Tn3-1=t8 | Tn3=t9 |
A | + |
|
| + |
|
| + |
|
|
B |
|
| + |
|
| + |
|
| + |
C |
| + |
|
| + |
|
| + |
|
Таблица 3. Нестабильная система со множеством участников {A, B, C} и Tn = 3, где узел C находится в середине генерации
| Tn-2=t1 | Tn-1=t2 | Tn1=t3 | Tn2-2=t4 | Tn2-1=t5 | Tn2=t6 | Tn3-2=t7 | Tn3-1=t8 | Tn3=t9 |
A |
| + |
|
| + |
|
| + |
|
B | + |
|
| + |
|
| + |
|
|
C |
|
| + |
|
| + |
|
| + |
Таблица 4. Нестабильная система со множеством участников {A, B, C} и Tn = 3, где узел C находится в конце генерации
В качестве упрощения и абстрагирования предположим, что ни для какого субъекта не существует контролирующего участника, а следовательно и пункта 11 как такового. Существуют только субъекты {A, B} (один из которых является настоящим получателем) и постоянный маршрутизатор C. Основной целью анонимизации в нестабильных коммуникациях становится сведение действий субъекта A к аналогичным действиям субъекта B, и наоборот, посредством маршрутизатора C. Действительно, если C станет замыкающим узлом в момент времени Tni при ответе любого субъекта множества X, то возникнет максимальная неопределённость равная 1/|X|.
Анализируя сетевые коммуникации в нестабильных системах внешний наблюдатель способен сопоставить для каждого субъекта его период равный Tn и сдвиг относительно определённого субъекта. В сговоре со внутренним наблюдателем появляется возможность деанонимизации субъекта на базе приведённого сдвига. Предположим, что игнорируется условие пунктов 9 и 10 с необходимостью генерировать пустое сообщение на основе периодов маршрутизирующего узла. Далее, пусть существует сеть на базе Таблицы 2, где внутренний наблюдатель располагает всеми сведениями полученными от внешнего атакующего и на основе этого генерирует сообщение в момент времени Tn1 и отправляет его по сети. Если будет получен ответ в момент Tn1+1 = Tn2-2 от маршрутизатора C, то это говорит только о том, что получателем сообщения является участник B, потому как субъект A становится способным выдать ответ маршрутизирующему узлу только в период Tn1+2 = Tn2-1, по причине его умышленного пропуска в момент Tn1-1 атакующей стороной. Такой вид атаки приводит к полной деанонимизации субъектов.
Предотвращением атаки является отправление истинного пакета на вторую итерацию периода маршрутизирующей стороны (относительно текущего времени). Теперь репродуцируем вышеописанную атаку на систему с таким условием. Также предположим, что сетью является система на базе Таблицы 2. Если атакующий сгенерирует сообщение в момент времени Tn1, то получит ответ только в момент Tn3-2. Получателем в такой системе может оказаться любой из множества {A, B}, потому как ответ может быть отправлен как в момент времени Tn2-1 (субъект A), так и в Tn2 (субъект B). Чтобы субъект B отправил ответ именно в Tn2, то перед ним он помещает в очередь ложное сообщение, тем самым отодвигая отправление истинного сообщения по сети на одну итерацию. Аналогичные ситуации распространяются и на Таблицы 3, 4.
Таким образом, на основе всего вышеописанного, наиболее сильной атакой является сговор внешних и внутренних активных атакующих, при которой необходимым условием противодействия становится существование постоянной поточной линии связи, что, в свою очередь, приводит к негации абстрактности и невозможности применения данной системы в тайных каналах связи. К тому же, со стороны практического применения, такой подход способен функционировать лишь в краткосрочной перспективе.
Также приведённая анонимная сеть становится наиболее подверженной атакам отказа в обслуживании, как для конкретного субъекта, перегружая его очередь сообщениями, так и для всей сети, потому как в основе системы используется слепая маршрутизация. В любом случае внешние преднамеренные атаки на сеть можно предотвратить проверяемостью на принадлежность к периоду генерации сообщений, но при всё большем расширении сети сами её участники станут давлением и причиной ухудшения производительности. Причиной такого поведения становится линейная увеличивающаяся нагрузка на сеть O(N) прямо пропорционально количеству действующих узлов N в сети. Иными словами, каждый субъект должен будет обрабатывать в Tn период N-1 пакетов, постоянно пытаясь расшифровывать их.
*На Рисунке 2 изображён абстрактный субъект @, способный быть как настоящим получателем, так и промежуточным субъектом — сервисом. Иными словами, анонимные сети абстрагируются от как таковой проблемы получателя** и акцентируют своё внимание исключительно на факт передачи информации.
**Под проблемой получателя понимается использование небезопасных платформ (сервисов) связи даже при теоретически безопасной линии связи с таковыми сервисами. Данная проблема решается другим классом скрытых систем — клиент-безопасными приложениями.
Анализ сетевых коммуникаций в абстрактных анонимных сетях
По умолчанию способ распространения всех абстрактных скрытых сетей сходится ко связи «все-ко-всем», то-есть когда каждый пользователь при генерации запроса отправляет свой пакет всем своим соединениям. Данное свойство связано с необходимостью минимального количества субъектов в системе для достижения анонимности с отсутствием противоречивости связей. Допустим, связь «один-к-одному» с двумя субъектами, заданная как (A ↔ B), также является и фактической связью «все-ко-всем», и «все-к-одному», что приводит к противоречивой определённости. Такая же ситуация с возможностью представления связей «один-к-одному» и «все-к-одному» при помощи трёх субъектов. Поэтому минимальной структурой представления сетевых коммуникаций является связь «все-ко-всем» с тремя участниками сети.
В данном концепте, такой подход схож с реализациями DC-сетей [5], но имеет определённое и принципиальное отличие – сети на базе «проблемы обедающих криптографов» по умолчанию не являются абстрактными, потому как при изменении связи «все-ко-всем» на иную, добавляются накладные расходы для удержания теоретически доказуемой анонимности. Это в свою очередь говорит о том, что таковая сеть недостаточно абстрагирована от сетевых коммуникаций, что и доказывает непринадлежность классу абстрактных скрытых сетей.
Исключая DC-сети как основы из рассмотрения, можно утверждать, что абстрактные анонимные сети способны базироваться лишь и только на первом векторе развития анонимных сетей, где их особенностью становится безопасность объектов. Уже из данного определения, возможно сконструировать абстрактные системы вида «пятая стадия анонимности* → первая^ стадия анонимности**→ тайный канал связи», где пятый этап способен адаптировать все виды соединений ко связи «все-ко-всем», а тайный канал – отстранять всех субъектов от анализа транспортируемого объекта, что приводит к возможности применения DC-сетей с присущей им теоретической доказуемостью анонимата в виде абстрактных анонимных сетей. В итоге такое расширение анонимной сети (первая^ стадия анонимности → тайный канал связи), с добавлением дополнительной пятой градации, способно быть применимым не только как улучшенная (более гибкая) версия анонимной сети, но и как эзотерический канал с доказуемой анонимностью.
В общем виде, существует всего три основных типа связей, как это представлено на Рисунке 3, в то время как все остальные соединения являются лишь их побочными гибридами.
1. «все-ко-всем» (A ↔ B, B ↔ C, C ↔ A) [распределённая],
2. «все-к-одному» (A ↔ D, B ↔ D, C ↔ D) [централизованная],
3. «один-к-одному» (A ↔ B, B ↔ C, C ↔ D) [децентрализованная]
Во-первых, стоит сказать, что все приведённые выше связи являются одноранговыми, в том числе и связь централизованная. Данные соединения рассматриваются в вакууме абстрактной сети, а следовательно, все они априори предполагают одноранговую, peer-to-peer модель. Разделение связей рассматривает лишь расположение и сочетание субъектов относительно друг друга, а не дополнительную нагрузку, повышение прав или разделение полномочий.
Во-вторых, стоит заметить, что связи «все-к-одному» и «один-к-одному» схожи между собой куда больше, чем отдельно каждое из представленных со связью «все-ко-всем». Для полного представления распределённой связи достаточно трёх узлов, в то время как для двух оставшихся необходимо уже четыре узла. Связано это с тем, что если представить децентрализованную связь при помощи трёх субъектов, то результатом такого преобразования станет связь централизованная, и наоборот, что говорит об их родстве, сходстве и слиянии более близком, нежели со связью распределённой.
В-третьих, централизованная связь по своей концепции распространения информации стоит ближе к связи распределённой, нежели связь децентрализованная. Сложность распространения объекта между истинными субъектами информации в распределённых и централизованных системах равна O(1), в то время как в децентрализованных сложность равна O(N).
В-четвёртых, по критериям отказоустойчивости децентрализованная связь стоит ближе к распределённой, нежели связь централизованная. В связи «все-ко-всем», при удалении одного субъекта, сеть остаётся целостной и единой. В связи «один-к-одному», при удалении одного субъекта, сеть может разделиться на N децентрализованных сетей. В связи «все-к-одному», при удалении одного субъекта, сеть может прекратить своё существование вовсе.
Таким образом, схожесть и однородность связей можно представить как (децентрализованная ↔ централизованная) ↔ (централизованная ↔ распределённая) ↔ (распределённая ↔ децентрализованная). При цикличности трёх элементов, инициализируется общий эквивалент представленный в формации соединений «все-ко-всем».
![Рисунок 3. Связи: «все-ко-всем», «все-к-одному», «один-к-одному» (слева направо) Рисунок 3. Связи: «все-ко-всем», «все-к-одному», «один-к-одному» (слева направо)](https://habrastorage.org/getpro/habr/upload_files/5c1/505/f9b/5c1505f9bb0138dd0b5ee4bdc083c0c2.png)
Далее, если предположить, что существует четыре субъекта {A, B, C, D} со связью «все-к-одному», где центральным узлом является точка D, то анализ безопасности абстрактной анонимной сети будет сводиться к осмотру действий от узла D ко всем остальным субъектам и от любого другого узла к субъекту D. В одном случае будет происходить прямая широковещательная связь, в другом же случае, будет происходить передача сообщения для последующей множественной репликации.
Если предположить, что субъект D не способен генерировать информацию, а создан только для её ретранслирования, то это эквивалентно его отсутствию как таковому. Действительно, если пакет имманентен в своём проявлении (не выдаёт никакую информацию о субъектах), то все действия внутреннего узла D тождественны внешнему наблюдателю, а как было утверждено ранее, абстрактная сеть невосприимчива к такому виду деанонимизации. Следовательно, узел D становится словно фантомом, ретранслирующим субъектом не влияющим на безопасность и анонимность сети, базируемой на связи «все-к-одному». Из этого также следует, что абстрактная система может применяться и в тайных каналах связи, где безопасность приложения выстраивается в заведомо подконтрольной, враждебной и централизованной инфраструктуре.
Теперь, если субъект D способен генерировать информацию, то создавая сеть и имплозируя её в себя, субъект сам становится сетью, в которой он априори соединён со всеми, что приводит это суждение ко связи «один-ко-всем». Связь же «все-ко-всем», состоит из множества связующих «один-ко-всем» относительно каждого отдельного субъекта, коим и является узел D, а это, в свою очередь приводит к классическому (ранее заданному) определению абстрактной анонимной сети. Таким образом, связь «все-к-одному» внутри себя уже содержит логическую составляющую связи «все-ко-всем» через которую и доказывается её безопасность.
Доказать безопасность связи «один-к-одному» возможно через неопределённость посредством её слияния со связью «все-к-одному», которое определяется при трёх участниках сети. Такое свойство неоднородности и неоднозначности предполагает, что сеть становится одновременно и централизованной, и децентрализованной. Следовательно, доказав ранее безопасность связи «все-к-одному», автоматически доказывается и безопасность связи «один-к-одному» для конкретно заданного случая.
Далее, если предположить, что существует четыре субъекта {A, B, C, D} со связью «один-к-одному», то базируясь на итеративности передачи информации в децентрализованных системах, можно декомпозировать любую модель в более замкнутую. Таким образом, сеть {A, B, C, D} фактически может расщепиться на две подсети {A, B, C} и {B, C, D}, мостом которой являются субъекты {B, C}. Каждая отдельная подсеть представляет собой ту же неопределённость, внутри которой присутствует централизованная система. В результате, безопасность связи «один-к-одному» сводится ко связи «все-к-одному», и как следствие, ко связи «все-ко-всем».
![Рисунок 4. Маршрутизация пакета на базе абстрактной анонимной сети из 10 узлов, где A - отправитель, B - маршрутизатор, C - получатель Рисунок 4. Маршрутизация пакета на базе абстрактной анонимной сети из 10 узлов, где A - отправитель, B - маршрутизатор, C - получатель](https://habrastorage.org/getpro/habr/upload_files/a95/392/b9e/a95392b9eaf012d1396d15dc0e758c1d.png)
Таким образом, вне зависимости от типа соединений, абстрактная скрытая сеть будет оставаться безопасной, даже при условии существования единственного сингулярного сервера, связывающего всех клиентов между собой. Простота построения централизованной сети в абстрактной анонимной сети приводит противоречиво к выражению истинной отказоустойчивости, а также к живучести подобных систем, регенерирующих лишь от одной сетевой единицы. Данное свойство (в большей мере) отличает абстрактные системы от всех других скрытых сетей.
*В кратце скрытые системы построенные на базе клиент-безопасных приложений.
**Системы с теоретически доказуемой анонимностью, но при этом не являющиеся безопасными даже в плане передачи информации. Примером могут являться чистые DC-сети, где получателем сообщения становятся все субъекты системы.
Монолитный криптографический протокол
Ядром всех скрытых систем являются криптографические протоколы. Наиболее приоритетными протоколами, в конечном счёте, становятся простые, легкочитаемые и легкореализуемые. В массе своей, практические составляющие реального мира часто приводят к необходимости выбирать компромиссы между теоретической безопасностью и практической производительностью. В нашем же примере, будет представлен протокол направленный на поддержание конкретно теоретической безопасности, как главной цели, исключая какие бы то ни было компромиссы. Это может показаться слишком безрассудным, тем не менее, протокол останется практически реализуемым и даже применимым. Таковой, по концепции, будет схож с протоколом Bitmessage [6]. Главной особенностью протокола станет его самодостаточность [4, с.80] и простота [7, с.58], а также возможность применения в тайных каналах и анонимных сетях (включая абстрактные системы).
Протокол определяется восьмью шагами, где три шага на стороне отправителя и пять шагов на стороне получателя. Для работы протокола необходимы алгоритмы КСГПСЧ (криптографически стойкого генератора псевдослучайных чисел), ЭЦП (электронной цифровой подписи), криптографической хеш-функции, установки / подтверждения работы, симметричного и асимметричный шифра.
![Рисунок 5. Монолитный криптографический протокол Рисунок 5. Монолитный криптографический протокол](https://habrastorage.org/getpro/habr/upload_files/1da/ba9/7b7/1daba97b76452144e40879b14ad0cc1a.png)
Данный протокол игнорирует способ получения публичного ключа от точки назначения. Это необходимо по причине того, чтобы протокол был встраиваемым и мог внедряться во множество систем, включая одноранговые сети, не имеющие центров сертификации, и тайные каналы связи, имеющие уже установленную сеть по умолчанию.
Также протокол способен игнорировать сетевую идентификацию субъектов информации, замещая её идентификацией криптографической. При таком подходе аутентификация субъектов начинает становиться сингулярной функцией, относящейся лишь и только к асимметричной криптографии, и как следствие, прикладной уровень стека TCP/IP начинает симулятивно заменять криптографический слой по способу обнаружения отправителя и получателя, как это показано на Рисунках 6, 7. Из вышеописанного также справедливо следует, что для построения полноценной информационной системы необходимым является симулятивная замена транспортного и прикладного уровня последующими криптографическими абстракциями. Под транспортным уровнем может пониматься способ передачи сообщений из внешней (анонимной сети) во внутреннюю (локальную), под прикладным — взаимодействие со внутренними сервисами.
Сеанс связи в приведённом протоколе определяется самим пакетом, или иными словами один пакет становится равен одному сеансу за счёт генерации случайного сеансового ключа. Описанный подход приводит к ненадобности сохранения фактического сеанса связи, исключает внешние долговременные связи между субъектами посредством имманентности и абстрагирования объектов, что приводит к невозможности рассекречивания всей информации, даже при компрометации одного или нескольких сеансовых ключей.
![Рисунок 6. Расширение стека протоколов TCP/IP на базе криптографических абстракций Рисунок 6. Расширение стека протоколов TCP/IP на базе криптографических абстракций](https://habrastorage.org/getpro/habr/upload_files/e23/2fa/49e/e232fa49e2d6bce7776a69f891e953c8.png)
Безопасность протокола определяется в большей мере безопасностью асимметричной функции шифрования, т.к. все действия сводятся к расшифрованию сеансового ключа приватным ключом. Если приватный ключ не может расшифровать сеансовый, то это говорит о том факте, что само сообщение было зашифровано другим публичным ключом и потому получатель также есть другой субъект. Функция хеширования необходима для проверки целостности отправленных данных. Функция проверки подписи необходима для аутентификации отправителя. Функция проверки доказательства работы необходима для предотвращения спама.
Пример программного кода для шифрования информации:
import (
"bytes"
)
func Encrypt(sender *PrivateKey, receiver *PublicKey, data []byte) *Package {
var (
pubsend = PublicKeyToBytes(&sender.PublicKey)
session = GenerateBytes(N)
randBytes = GenerateBytes(N)
)
hash := HashSum(bytes.Join(
[][]byte{
randBytes,
data,
pubsend,
PublicKeyToBytes(receiver),
},
[]byte{},
))
return &Package{
Head: HeadPackage{
Sender: EncryptS(session, pubsend),
Session: EncryptA(receiver, session),
RandBytes: EncryptS(session, randBytes),
},
Body: BodyPackage{
Data: EncryptS(session, data),
Hash: hash,
Sign: EncryptS(session, Sign(sender, hash)),
Proof: ProofOfWork(hash, C),
},
}
}
Шифрование подписи сеансовым ключом является необходимым, т.к. взломщик протокола, для определения отправителя (а именно его публичного ключа) может составить список уже известных ему публичных ключей и проверять каждый на правильность подписи. Если проверка приводит к безошибочному результату, то это говорит об обнаружении отправителя.
Шифрование случайного числа (соли) также есть необходимость, потому как, если злоумышленник знает его и субъектов передаваемой информации, то он способен пройтись методом «грубой силы» по словарю часто встречаемых и распространённых текстов для выявления исходного сообщения.
Использование одной и той же пары асимметричных ключей для шифрования и подписания не является уязвимостью, если применяются разные алгоритмы кодирования [7, с.257] или сама структура алгоритма представляет различные способы реализации. Так например, при алгоритме RSA для шифрования может использоваться алгоритм OAEP, а для подписания – PSS. В таком случае не возникает «подводных камней» связанных с возможным чередованием «шифрование-подписание». Тем не менее остаются риски связанные с компрометацией единственной пары ключей, при которой злоумышленник сможет не только расшифровывать все получаемые сообщения, но и подписывать отправляемые [4, с.99][4, с.291]. Но этот критерий также является и относительным плюсом, когда личность субъекта не раздваивается и, как следствие, данный факт не приводит к запутанным ситуациям чистого отправления и скомпрометированного получения (и наоборот).
Протокол пригоден для многих задач, включая передачу сообщений, запросов, файлов, но не пригоден для передачи поточной информации, подобия аудио звонков и видео трансляций, из-за необходимости подписывать и подтверждать работу, на что уходит много времени. Иными словами, протокол работает с конечным количеством данных, размер которых заведомо известен и обработка которых (то есть, их использование) начинается с момента завершения полной проверки.
Недостатком протокола является отсутствие последовательности между несколькими пакетами. Иными словами невозможно определить нумерацию, что в некой степени переводит часть полноценного протокола на логику приложения, как например передача файлов. Это, в свою очередь, обосновывается упрощением протокола, где не требуются хранилище или база данных для хранения последовательности пакетов со стороны каждого входящего объекта. Также в некоторых приложениях последовательность сообщений не критична, как например в электронной почте или мессенджерах, где необходим лишь сам факт уже существующего дубликата (данный момент можно проверить хешем пакета).
Другим недостатком является постоянное применение функции подписания, которая считается наиболее ресурсозатрачиваемой, с практической точки зрения, операцией. При большом количестве поступаемых сообщений, возникнет и необходимость в большом количестве подписания. Но при этом, применение MAC, взамен ЭЦП, является недопустимым, потому как таковая имитовставка создаст буквально поточную связь между субъектами информации (создаст дополнительные связи между субъектами и генерируемым объектом), усложнит протокол и может привести теоретически к более чем одному возможному вектору нападения на протокол.
![Рисунок 7. Расширенный стек протоколов на примере сервисов в анонимной сети Рисунок 7. Расширенный стек протоколов на примере сервисов в анонимной сети](https://habrastorage.org/getpro/habr/upload_files/400/779/4d0/4007794d0b5c52aaa64c8762ce767ba3.png)
Для улучшения эффективности, допустим при передаче файла, программный код можно изменить так, чтобы снизить количество проверок работы в процессе передачи, но с первоначальным доказательством работы на основе случайной строки (полученной от точки назначения), а потом и с накопленным хеш-значением из n-блоков файла, для i-ой проверки. Таким образом, минимальный контроль работы будет осуществляться лишь раз, где M — размер файла, N — размер одного блока. Если доказательство не поступило или оно является неверным, то нужно считать, что файл был передан с ошибкой и тем самым запросить повреждённый или непроверенный блок заново.
Протокол также способен обеспечивать полиморфизм информации методом установки промежуточных получателей (маршрутизаторов) и созданием транспортировочных пакетов, представленных в форме множественного шифрования. Как только узел сети принимает пакет, он начинает его расшифровывать. Если пакет успешно расшифровывается, но при этом сама расшифрованная версия является шифрованным экземпляром, то это говорит о том, что данный принимающий узел — это промежуточный получатель, целью которого является последующее распространение «расшифрованной» версии пакета по сети. Базовый механизм распространения и получения объектов схож с Bitmessage, но в отличие от него, здесь существует свойство полиморфизма, которое образуется методом дополнительной цепной маршрутизации, скрывающей субъектов информации. Рекуперация, в совокупности с конечной рекурсией, будет происходить до тех пор, пока не будет расшифрован последний пакет, предполагающий существование истинного получателя, либо до тех пор, пока пакет не распространится по всей сети и не окажется забытым, по причине отсутствия получателя (будь то истинного или промежуточного). Стоит также заметить, что маршрутизаторы при расшифровании пакета могут узнавать криптографический адрес отправителя, именно поэтому стоит отправлять транспортировочные пакеты из-под криптографического псевдо-адреса отправителя.
Пример программного кода для создания транспортировочного пакета:
import (
"bytes"
)
func RoutePackage(sender *PrivateKey, receiver *PublicKey, data []byte, route []*PublicKey) *Package {
var (
rpack = Encrypt(sender, receiver, data)
psender = GenerateKey(N)
)
for _, pub := range route {
rpack = Encrypt(
psender,
pub,
bytes.Join(
[][]byte{
ROUTE_MODE,
SerializePackage(rpack),
},
[]byte{},
),
)
}
return rpack
}
Весь представленный программный код на языке Go представлен только как шаблон, показывающий способ шифрования и расшифрования непосредственно. Проблемой здесь является простота и примитивность анализа сетевого трафика по JSON-формату, что может привести к последующим блокировкам всех сетевых построений на основе данного кода. Необходимым решением должно служить вынесение сеансового ключа за пакет JSON-формата, последующее шифрование им пакета и конкатенация зашифрованного пакета с шифрованным сеансовым ключом. Если размер асимметричного ключа заведомо известен, то будет известен и размер зашифрованного сеансового ключа, что не приведёт к каким-либо проблемам расшифрования информации. Другая проблема заключается в отсутствии каких бы то ни было видимых метаданных (хеш-значения, доказательства работы), которые бы помогли в борьбе со спамом, что в свою очередь является крайне важным критерием для большинства децентрализованных систем. Таким образом, отсутствие метаданных равносильно отсутствию отказоустойчивости, что отсылает на противоречие эквивалентности полностью анализируемого и неподверженного анализу пакетам. В связи с этим, вопрос об отказоустойчивости скрытых сервисов в замкнутой системе посредством блокировок остаётся открытым.
Заключение
В данной работе был представлен отдельный класс анонимных сетей с теоретически доказуемой анонимностью – абстрактные скрытые сети. Была представлена модель подобной сети на основе очередей. Из анонимизирующих составляющих было выявлено, что абстрактные сети в своём проявлении не способны противодействовать активным атакам внутренних и внешних наблюдателей с учётом блокирования субъектов и генерирования новой информации. Был представлен монолитный криптографический протокол, который может быть применим в анонимных сетях и тайных каналах связи.
Литература
[1] Таненбаум, Э., Уэзеролл, Д. Компьютерные сети / Э. Таненбаум, Д. Уэзеролл. — СПб.: Питер, 2017. - 960 с.
[2] Chaum, D. Untraceable Electronic Mail, Return Addresses, and Digital Pseudonyms [Электронный ресурс]. — Режим доступа: https://www.lix.polytechnique.fr/~tomc/P2P/Papers/Theory/MIXes.pdf (дата обращения: 16.08.2022).
[3] Ершов, Н., Рязанова, Н. Проблемы сокрытия трафика в анонимной сети и факторы, влияющие на анонимность [Электронный ресурс]. — Режим доступа: https://cyberleninka.ru/article/n/problemy-sokrytiya-trafika-v-anonimnoy-seti-i-faktory-vliyayuschie-na-anonimnost (дата обращения: 02.01.2022).
[4] Шнайер, Б. Прикладная криптография. Протоколы, алгоритмы и исходные коды на языке C / Б. Шнайер. — СпБ.: ООО «Альфа-книга», 2018. - 1040 с.
[5] Chaum, D. The Dining Cryptographers Problem: Unconditional Sender and Recipient Untraceability [Электронный ресурс]. — Режим доступа: https://www.cs.cornell.edu/people/egs/herbivore/dcnets.html (дата обращения: 24.07.2022).
[6] Warren, J. Bitmessage: A Peer-to-Peer Message Authentication and Delivery System [Электронный ресурс]. — Режим доступа: https://bitmessage.org/bitmessage.pdf (дата обращения: 31.12.2021).
[7] Шнайер, Б., Фергюсон, Н. Практическая криптография / Б. Шнайер, Н. Фергюсон. - М.: Издательский дом «Вильямс, 2005. - 420 с.