Абстрактные анонимные сети. ч2

Абстрактные анонимные сети. ч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 децентрализованных сетей. В связи «все-к-одному», при удалении одного субъекта, сеть может прекратить своё существование вовсе.

Таким образом, схожесть и однородность связей можно представить как (децентрализованная ↔ централизованная) ↔ (централизованная ↔ распределённая) ↔ (распределённая ↔ децентрализованная). При цикличности трёх элементов, инициализируется общий эквивалент представленный в формации соединений «все-ко-всем».


Далее, если предположить, что существует четыре субъекта {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}. Каждая отдельная подсеть представляет собой ту же неопределённость, внутри которой присутствует централизованная система. В результате, безопасность связи «один-к-одному» сводится ко связи «все-к-одному», и как следствие, ко связи «все-ко-всем».

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

*В кратце скрытые системы построенные на базе клиент-безопасных приложений.

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

Монолитный криптографический протокол

Ядром всех скрытых систем являются криптографические протоколы. Наиболее приоритетными протоколами, в конечном счёте, становятся простые, легкочитаемые и легкореализуемые. В массе своей, практические составляющие реального мира часто приводят к необходимости выбирать компромиссы между теоретической безопасностью и практической производительностью. В нашем же примере, будет представлен протокол направленный на поддержание конкретно теоретической безопасности, как главной цели, исключая какие бы то ни было компромиссы. Это может показаться слишком безрассудным, тем не менее, протокол останется практически реализуемым и даже применимым. Таковой, по концепции, будет схож с протоколом Bitmessage [6]. Главной особенностью протокола станет его самодостаточность [4, с.80] и простота [7, с.58], а также возможность применения в тайных каналах и анонимных сетях (включая абстрактные системы).

Протокол определяется восьмью шагами, где три шага на стороне отправителя и пять шагов на стороне получателя. Для работы протокола необходимы алгоритмы КСГПСЧ (криптографически стойкого генератора псевдослучайных чисел), ЭЦП (электронной цифровой подписи), криптографической хеш-функции, установки / подтверждения работы, симметричного и асимметричный шифра.

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

Также протокол способен игнорировать сетевую идентификацию субъектов информации, замещая её идентификацией криптографической. При таком подходе аутентификация субъектов начинает становиться сингулярной функцией, относящейся лишь и только к асимметричной криптографии, и как следствие, прикладной уровень стека TCP/IP начинает симулятивно заменять криптографический слой по способу обнаружения отправителя и получателя, как это показано на Рисунках 6, 7. Из вышеописанного также справедливо следует, что для построения полноценной информационной системы необходимым является симулятивная замена транспортного и прикладного уровня последующими криптографическими абстракциями. Под транспортным уровнем может пониматься способ передачи сообщений из внешней (анонимной сети) во внутреннюю (локальную), под прикладным — взаимодействие со внутренними сервисами.

Сеанс связи в приведённом протоколе определяется самим пакетом, или иными словами один пакет становится равен одному сеансу за счёт генерации случайного сеансового ключа. Описанный подход приводит к ненадобности сохранения фактического сеанса связи, исключает внешние долговременные связи между субъектами посредством имманентности и абстрагирования объектов, что приводит к невозможности рассекречивания всей информации, даже при компрометации одного или нескольких сеансовых ключей.

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

Пример программного кода для шифрования информации:

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, взамен ЭЦП, является недопустимым, потому как таковая имитовставка создаст буквально поточную связь между субъектами информации (создаст дополнительные связи между субъектами и генерируемым объектом), усложнит протокол и может привести теоретически к более чем одному возможному вектору нападения на протокол.

Для улучшения эффективности, допустим при передаче файла, программный код можно изменить так, чтобы снизить количество проверок работы в процессе передачи, но с первоначальным доказательством работы на основе случайной строки (полученной от точки назначения), а потом и с накопленным хеш-значением из 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-формата, последующее шифрование им пакета и конкатенация зашифрованного пакета с шифрованным сеансовым ключом. Если размер асимметричного ключа заведомо известен, то будет известен и размер зашифрованного сеансового ключа, что не приведёт к каким-либо проблемам расшифрования информации. Другая проблема заключается в отсутствии каких бы то ни было видимых метаданных (хеш-значения, доказательства работы), которые бы помогли в борьбе со спамом, что в свою очередь является крайне важным критерием для большинства децентрализованных систем. Таким образом, отсутствие метаданных равносильно отсутствию отказоустойчивости, что отсылает на противоречие эквивалентности полностью анализируемого и неподверженного анализу пакетам. В связи с этим, вопрос об отказоустойчивости скрытых сервисов в замкнутой системе посредством блокировок остаётся открытым.

Заключение

В данной работе был представлен отдельный класс анонимных сетей с теоретически доказуемой анонимностью – абстрактные скрытые сети. Была представлена модель подобной сети на основе очередей. Из анонимизирующих составляющих было выявлено, что абстрактные сети в своём проявлении не способны противодействовать активным атакам внутренних и внешних наблюдателей с учётом блокирования субъектов и генерирования новой информации. Был представлен монолитный криптографический протокол, который может быть применим в анонимных сетях и тайных каналах связи.


Report Page