Введение
Начиная с классической криптографии, с её зарождения и до перерождения в современную, всегда существовала проблема передачи ключа шифрования между субъектами. Задача частично решилась во второй половине XX века, с появлением асимметричного раздела криптографии, когда атака методом подслушивания стала невозможной [1]. Тем не менее первоначальная проблема всё же остаётся и эксплуатируется по сей день, хоть и в завуалированной форме.
Препятствие, которое стало на решении проблемы, заключается в элементе доверия, в его присутствии и в его же отсутствии. Если не предпринимать никаких мер по установке доверенных связей, то любые соединения априори будут подвержены MITM (man in the middle) атакам. С другой стороны, если устанавливать доверенные соединения, то возможность MITM атак не исчезает, а сокращается. И теперь, вместе с первоначальными субъектами появляются промежуточные, интерстициальные субъекты (серверы, узлы хранения и передачи информации), выбираемые нами, и являющиеся законно установленными атакующими. Лишь ограничивая круг нападения, они не перестают потенциально атаковать. Данным узлам известна вся передаваемая нами и нам информация: увлечения, интересы, хобби, развлечения, сообщения. Далее эта информация (объект), как чаще всего происходит, начинает конвертироваться в рекламу, на основе которой увеличивается капитал всё тех же промежуточных субъектов. В итоге вся проблема полностью переворачивается с ног на голову, и теперь, атакующий вместо того, чтобы искать связь для подслушивания, сам создаёт её, сам становится фундаментом прослушивания в обличии сервера, а люди, в свою очередь, лишь выбирают лицо того, кто за ними будет пристально следить.
Уничтожить такую систему доверия не представляется возможным, из-за появления более общих и разрушительных видов атак, а также из-за невозможности полного искоренения доверия как такового [2, с.267]. Таким образом, остаётся лишь улучшать данную систему, делать так, чтобы сам её механизм стремился к уменьшению мощности доверия*, чтобы собственная её структура представляла защиту объектов и анонимат субъектов. К системам подобного рода относятся анонимные сети и тайные каналы связи.
Мощность доверия
*Мощность доверия — количество узлов, участвующих в хранении или передаче информации, представленной в открытом виде для данных узлов. Иными словами, такие узлы способны читать, подменять и видоизменять информацию, так как для них она находится в предельно чистом, прозрачном, транспарентном состоянии. Чем больше мощность доверия, тем выше предполагаемый шанс компрометации отдельных узлов, а следовательно, и хранимой на них информации. Принято считать одним из узлов получателя. Таким образом, нулевая мощность доверия будет возникать лишь в моменты отсутствия каких-либо связей и соединений. Если мощность доверия равна единице, это говорит о том, что связь защищена, иными словами, никто кроме отправителя и получателя информацией не владеют. Во всех других случаях мощность доверия будет больше единицы, что говорит о групповой связи (то-есть, о существовании нескольких получателей), либо о промежуточных узлах, способных читать информацию в открытом виде.
Анонимные сети
Скрытые, тёмные, анонимные сети – есть сети, грамотно соединяющие и объединяющие маршрутизацию вместе с шифрованием. Маршрутизация обеспечивает критерий анонимности, направленный на субъект, шифрование – критерии конфиденциальности, целостности, аутентификации, направленные на объект. Без маршрутизации легко определяются отправитель/получатель, без шифрования легко определяется передаваемое сообщение. Таким образом, только в совокупности этих двух свойств сеть может являться скрытой.
В современном мире большинство скрытых сетей представляют оверлейные соединения, иными словами соединения, которые основаны на уже существующей сети (например, сети Интернет). Но так или иначе, это не говорит, что скрытые сети не могут существовать сами по себе и быть однородной структурой, так как первоначальная архитектура может быть изначально нацелена на анонимность и безопасность. Именно по историческим причинам, современные сети имеют оверлейные уровни безопасности.
Любая анонимная сеть основывается либо на одноранговой, либо на гибридной архитектуре сети, исключая при этом многоранговую. Многоранговая сеть (или клиент-серверная архитектура) не может быть достаточно анонимной априори, потому как имеет открытую, прямую видимость и непосредственную реальность централизации. Централизация со стороны компьютерных сетей примитивна, но централизация со стороны скрытых сетей не так очевидна. В компьютерных сетях под централизацией понимается ограниченное количество серверов, способных обслуживать куда большее количество клиентов. Когда же говорим об анонимных сетях, то централизация в таких системах может иметь свойство приходящее и уходящее, тем самым, измеряя уровень централизации не в виде булевой логики, а в виде процентных соотношений от всей суммарности сети.
В одноранговых системах все пользователи однородны, имеют одинаковые возможности, могут представлять одни и те же услуги маршрутизации. Такие сети легко могут разворачиваться в локальных системах, но с осложнениями работают в глобальном пространстве на основе уже созданных соединений. Сами одноранговые сети могут быть разделены на две категории: децентрализованные и распределённые, хоть их различие и туманно со стороны терминологии. Распределённые сети можно именовать “истинно децентрализованными” (хоть и противоречиво), где нельзя выделить какой-либо центр или узел связи сразу нескольких других узлов. Характерной чертой такой сети является тот факт, что каждый пользователь одновременно соединяется напрямую сразу с несколькими другими. Децентрализованные же сети можно именовать “слабо централизованными” (хоть также и противоречиво), где к одним узлам сети подключаются сразу несколько других узлов. Характерной чертой такой сети является тот факт, что появляются “неофициальные” узлы, часто используемые другими узлами (узлы-серверы) в качестве последующей маршрутизации.
Гибридная система объединяет свойства многоранговых и одноранговых архитектур, пытаясь взять и удержать как можно больше положительных и меньше отрицательных качеств. Плюсом многоранговых архитектур являются некоторые свойства централизации, как например возможность разделения логики на серверную и клиентскую, более быстрая и/или статичная скорость маршрутизации. Плюсом одноранговых архитектур являются некоторые свойства децентрализации, как собственно возможность достижения и построения анонимности. Гибридные сети не всегда можно однозначно определить, иногда они выглядят и/или ведут себя сродни одноранговым, иными словами, используют минимальное количество свойств многоранговой архитектуры, или наоборот, могут иметь вид многоранговой архитектуры и даже перерастать в неё полностью. Из всего этого многообразия, гибридные сети являются самой противоречивой системой.
Сама анонимность также не является чем-то однородным, точно определённым, её можно рассматривать как некую градацию, набор стадий, поэтапность. Всего же существует шесть стадий и пять видов анонимности (2,3,4,5,6 стадии).
Первая стадия характеризуется отсутствием анонимности |A| = 0*. Примером может являться отсутствие связи как таковой или существование только прямого соединения между двумя субъектами.
Вторая стадия игнорирует анонимность клиент-сервер, обеспечивая только анонимность клиент-клиент. Иными словами, сервер обладает достаточной информацией о клиентах (например, знание IP-адреса, личных данных, интересов). При этом сами клиенты не знают друг друга и потому являются анонимами. Типичным примером могут служить форумы, социальные сети, иначе говоря, большинство сайтов и приложений, построенных на основе клиент-серверной архитектуры. Из этого примера следует, что данная архитектура способна выдавать минимальную мощность анонимности, а именно |A| = 1. Описанную стадию можно вкратце именовать псевдо-анонимностью.
Третья стадия представляет примитивную маршрутизацию, а следовательно и примитивную анонимность, нескольких прокси-серверов несвязанных между собой. Именно на данном этапе сеть становится раздробленной, неопределённой, гибридной за счёт чего и повышается мощность анонимности, lim|A|→C, где C - количество прокси- серверов. Хоть мощность анонимности действительно и повышается, безопасность самих субъектов ещё не обеспечивается. Связано это всё потому, что шифрование на данном этапе есть свойство добавочное (сродни второй стадии) необходимое только для защиты клиент-серверной коммуникации, но не обеспечивающее защиту абстрактной связи клиент- клиент, не приводящая к уменьшению мощности доверия.
Четвёртая стадия заменяет сетевой адрес криптографическим. Под заменой подразумевается частичное, неполное, фрагментированное преобразование, где сам сетевой адрес полностью не скрывается и никак не удаляется, он продолжает существовать в самом базисе, механизме компьютерных сетей. Именно на данном этапе мощность доверия становится минимально возможной величиной, а потому и все приложения построенные на четвёртой стадии анонимности и выше, имеют уровень безопасности зависимый только (или в большей мере) от качества самой клиентской части. Примером такой стадии могут являться мессенджеры, файловые сервисы, электронная почта, блокчейн платформы [3] и т.д., где известны лишь криптографические адреса клиентов (публичные ключи, хеши публичных ключей). Сеть представляет собой также, как и в третьей стадии, разрозненный характер поведения узлов, но при этом целью маршрутизации является не только факт самой передачи информации, но и последующее её сохранение, удерживание на большинстве узлов сети, то-есть маршрутизация является слепой, заливочной [4, с.398]. При этом, в список задач такой маршрутизации не вносится как таковая анонимизация субъектов, она скорее представляет собой добавочное, второстепенное свойство. Поэтому, четвёртую стадию можно характеризовать игнорированием (но не отсутствием) анонимности (экзотеричностью) со стороны субъекта и её сохранением (эзотеричностью) в передаваемом объекте. Мощность анонимности данного этапа динамична, то-есть 0 < |A| ≤ N, где N - количество узлов в сети. Это связано с тем фактом, что предполагаемый получатель может оказаться на совершенно случайном узле, как близком к отправителю, так и дальнем от него.
Пятая стадия изменяет способ маршрутизации, придаёт ему свойство полиморфизма, изменчивости закрытой информации по мере перехода от одного узла к другому. Таким методом скрывается настоящая связь между субъектами под средством их объекта. Мощность анонимности данного этапа чаще всего статична, тем самым lim|A|→C, где C - количество выбранных узлов маршрутизации из всего множества в сети. Примером пятой стадии являются сами скрытые сети, подобия Tor (луковая маршрутизация), I2P (чесночная маршрутизация) и т.д.
Шестая стадия повышает анонимность до абсолюта, теоретического максимума за счёт объединения свойств полиморфной и слепой маршрутизации, образуя тем самым новую, вероятностную (а также виртуальную) маршрутизацию. Данный этап объединяет основные характеристики четвёртой и пятой стадий, иными словами, предполагает распространение объекта по всем узлам с вероятностной возможностью его полиморфизма. Мощность анонимности схожа с четвёртой стадией 0 < |A| ≤ N(C+1), где N - количество узлов в сети, C - количество узлов маршрутизации. Данный этап может быть основой, ядром скрытых сетей, а также тайных каналов связи. В отличие от пятой стадии анонимности, где скрытые сети могут быть как одноранговыми, так и гибридными, сеть на основе шестой стадии может быть только одноранговой.
Стоит также заметить, что шифрование, определяемое анонимностью, появляется частично лишь в моменты четвёртой стадии, в то время как во второй и третьей стадиях само шифрование является добавочным, дополнительным и второстепенным свойством, служащим лишь и только для защиты клиент-серверной коммуникации.
Основным моментом четвёртой стадии является возможность идентификации субъектов в одноранговых и гибридных системах, что ведёт к целостности, а также и к аутентификации самой передаваемой информации, не зависимой от сторонних узлов и серверов [5, с.223]. Помимо прочего, может также и появляться свойство конфиденциальности, где информация представляет собой суть секретного, скрытого, тайного, а не открытого и общего объекта. Но данного свойства может и не быть на четвёртом этапе, если оно является избыточным для самой системы. Как пример, в криптовалютах имеются свойства целостности и аутентификации, но не конфиденциальности. Только начиная с пятой стадии анонимности, конфиденциальность становится базисом системы.
Большинство атак, направленных на скрытые сети, представляют способы деанонимизации субъектов (как наиболее лёгкий способ), нежели попытки раскрытия, взлома, дешифрования объектов (как наиболее сложный). Так, например, достаточно сильной и сложно искоренимой атакой на одноранговые (а следовательно, и на гибридные) сети является атака Сивиллы. Она базируется на том факте, что главным способом анонимности является элемент маршрутизации, который обеспечивается за счёт передачи информации посредством нескольких узлов. С одной стороны, сутью атаки является замена несвязанных между собой узлов, на узлы подчинённые одному лицу, либо группе лиц с общими интересами, тем самым, атака ориентируется на (lim|A|→1) уменьшение мощности анонимности до единицы. С другой стороны, в некоторых видах сетей с увеличенной мощностью доверия, атака может вредить и целостности передаваемой информации, иными словами, подменять и видоизменять её. При повышении количества узлов несвязанных между собой в сети, повышается и сложность реализации атаки Сивиллы, за счёт более равномерного распределения узлов. Из этого также следует, что мощность анонимности будет стремиться к своим теоретически заданным значениям. Всё это связано с тем, что атакующие узлы будут конкурировать с обычными узлами за возможность быть посредниками между субъектами передаваемой информации. Чем больше несвязанных узлов и лучше алгоритм распределения, тем меньше вероятность осуществления данной атаки. Тем не менее, атака Сивиллы особо опасна при этапе зарождения скрытых сетей, когда количество узлов минимально. Решений данной проблемы несколько:
Обеспечить замкнутость и сложность встраивания узлов в сеть. Иными словами, использовать фактор доверия или параметр дружбы. Узлы в таких сетях должны выстраивать связи между собой, основываясь на субъективности к уровню доверия, так как никакого объективно доверенного, а следовательно, и централизованного, узла не существует. Выстраивая связи друг-к-другу (или friend-to-friend), узлы также начинают выстраивать связи друг моего друга — это мой скрытый друг. Таким образом, друзья друзей не подключаются напрямую и не знают друг друга, но при этом вполне могут обмениваться информацией между собой, что является показателем увеличения размеров сети. Чтобы успешно подключиться к такой сети, необходимо самому стать доверенным узлом, то-есть пользователем, которому кто-либо доверяет. Сложность исполнения атаки, на такой род сети, сводится к сложности встраивания в сеть подчиняемых узлов, как того требует атака Сивиллы, а это, как было описано выше, является проблематичным действием. Единственная проблема friend-to-friend (f2f) сетей заключается в их малой эксплозии, расширении, увеличении масштаба, являясь тем самым следствием причины ручной настройки и установки списка доверенных узлов.
Осуществить переход к шестой стадии — крайней форме анонимности. В таком случае, целью является сокрытие, удаление, исключение всех возможных связей между отправляемой информацией (объектом) и самим отправителем/получателем (субъектом). После исчезновения всех связей, сама маршрутизация перестаёт быть чем-то реальным и настоящим перерастая тем самым в этап условного и виртуального, где раскрытие даже одного из субъектов, начинает быть сложной задачей. Деанонимизация в таком случае возможна лишь при условии полного внутреннего контроля сети, по причине сложного обнаружения и последующего восстановления связей с объектом. Основным и главным отрицательным свойством шестой стадии анонимности является линейное увеличение нагрузки на сеть O(N) со стороны всех пользователей в ней участвующих. Так, например, если сеть состоит из N узлов, то каждый узел должен будет обрабатывать N-1 запросов от других узлов. Время жизни пакета (TTL) на шестой стадии не является решением данной проблемы, по причине появления новых связей между отправителем и передаваемой информации, что, следовательно, ведёт к переходу на пятый этап.
Атака Сивиллы может быть рассмотрена и более обще, где вместо встраивания узлов в скрытую сеть, происходит образование первичной сети, на основе которой будет существовать последующая тёмная сеть. Такой вид атаки может существовать лишь при оверлейных соединениях, коим и является сеть Интернет. Если вся тёмная сеть будет воссоздана в первичной сети, подконтрольной одному лицу или группе лиц с общими интересами, то, следовательно, и весь трафик скрытой сети возможно будет анализировать, с момента её появления и до момента её гибели. Подобная атака требует огромных ресурсов и первоначально настроенной инфраструктуры, что в современных реалиях под силу лишь государствам. Предотвратить такой вид атаки крайне сложно, но вполне возможно, если соблюдать два правила:
Использовать противоречия государств — вариативные и несогласованные законы, политические и империалистические интересы. Всё это есть моменты, при которых одно государство не будет выдавать информацию о своей сети другому государству. И чем более агрессивно настроены страны по отношению друг к другу, тем менее успешно они могут контролировать свои собственные ресурсы. В таком случае, необходимо строить сеть по федеративному принципу, чтобы узлы располагались на разных континентах мира, странах и государствах.
Использовать изменения информации в процессе её маршрутизации. При таком способе информация будет представлена в полиморфной и самоизменяющийся оболочке, то-есть оболочке шифрованной. Такой подход необходим в моменты, когда информация, приходящая из государства A в государство B, будет снова возвращаться на свою родину A**. В качестве примера можно привести луковую маршрутизацию сети Tor, где само шифрование представлено в виде слоёв, которые каждый раз “сдирают”, снимают при передаче от одного узла к другому.
Существует также и альтернативный вариант противодействия подобной атаке. Он в отличие от вышеописанного не требует этапа с федеративностью, но взамен требует огромное количество информации, приводящую к спаму. Плюсом такого подхода является и то, что его можно использовать в тайных каналах связи как единственно возможный элемент анонимизации субъектов. Для осуществления такого метода применяются сети основанные на шестой стадии анонимности, так как они распространяют информацию методом заливки, что априори ведёт к множественному дублированию, пролиферации. Полиморфизм информации осуществляется способом установки промежуточных получателей и созданием транспортировочных пакетов, представленных в форме множественного шифрования. Как только узел сети принимает пакет, он начинает его расшифровывать. Если пакет успешно расшифровывается, но при этом сама расшифрованная версия является шифрованным экземпляром, то это говорит о том, что данный принимающий узел — это промежуточный получатель, целью которого является последующее распространение “расшифрованной” версии пакета по сети. Так будет происходить до тех пор, пока не будет расшифрован последний пакет, предполагающий существование истинного получателя. Стоит также заметить, что промежуточные получатели при расшифровании пакета могут узнавать криптографический адрес отправителя, именно поэтому стоит отправлять транспортировочные пакеты из-под криптографического адреса псевдо-отправителя.
Пример программного кода [6] для создания транспортировочного пакета
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
}
Если предположить, что в сети существует всего три узла {A, B, C} (где один из них является отправителем — A) и сама сеть основывается на шестой стадии анонимности без полиморфизма информации, то в таком случае и при таком условии крайне проблематично определить истинного получателя, пока он сам себя не выдаст ответом на запрос (так как ответом будет являться совершенно новый пакет, отличный от всех остальных). Теперь, если предположить, что существует возможность полиморфизма информации, то есть вероятность её маршрутизации, то начинается этап слияния свойств получения и отправления, образуя антиципацию. Так, например, если полиморфизм существует, значит будет существовать три этапа: (A → B ИЛИ A → C) → (B → C ИЛИ C → B) → (B → A ИЛИ C → A), но если полиморфизма не существует, то будет два этапа: (A → B ИЛИ A → C) → (B → A ИЛИ C → A)***. При этом предполагается, что системе известен лишь отправитель информации (инициатор), в то время как получатель не определён. Из этого следует, что если полиморфизм будет являться статичной величиной (то есть, будет всегда существовать или не существовать вовсе), то определение получателя будет являться лёгкой задачей (при условии, что он всегда отвечает инициатору). Но, если полиморфизм будет иметь вероятностную величину, то грань между отправлением и получением будет стираться, сливаться, инвертироваться, что приведёт к разному трактованию анализируемых действий: запрос(1) - ответ(1) - запрос(2) или запрос(1) - маршрутизация(1) - ответ(1). Но в таком случае, возникает свойство гипертелии (сверх окончания), где запрос(2) не получает своего ответа(2), что снова приводит к возможности детерминированного определения субъектов. Теперь, если выровнять количество действий полиморфизма (количество маршрутизации пакета) k и количество действий без него n (что представляет собой всегда константу n = 2), иными словами придерживаться формулы НОД(k, 2) = 2 (где НОД — наибольший общий делитель), то получим максимальную неопределённость, алеаторность при константе k = 2, которую можно свести к следующему минимальному набору действий полиморфизма: (A → B ИЛИ A → C) → (B → C ИЛИ C → B) → (B → C ИЛИ C → B) → (B → A ИЛИ C → A). В итоге, все действия можно трактовать двумя полностью самодостаточными процессами: запрос(1) - ответ(1) - запрос(2) - ответ(2) или запрос(1) - маршрутизация(1) - маршрутизация(~1) - ответ(1), что в свою очередь приводит к неопределённости отправления и получения информации со стороны анализа трафика всей сети. И потому, ответ(1) = маршрутизация(1), ответ(2) = ответ(1), а также запрос(2) = маршрутизация(~1). Проблемой здесь является лишь запрос(1), созданный инициатором связи, который будет трактоваться всегда детерминировано. Но при последующих действиях данная проблема всегда будет угасать из-за увеличивающейся энтропии, приводящей к хаотичности действий. Так например, на следующем шаге появится неопределённость вида запрос(3) = запрос(2), означающая неоднозначность выявления отправителя.
Далее, анализируя вышеописанный подход, можно также заметить, что маршрутизация и ответ являются этапами полностью автоматизированными, в то время как запрос является этапом ручным. Такой момент приводит к явлению, что между ответом и последующим запросом интервал времени ожидания больше, нежели между запросом - ответом, запросом - маршрутизацией, маршрутизацией - маршрутизацией и маршрутизацией - ответом. Это приводит к возможности осуществления атаки методом учёта времени с последующим расщеплением хаотичности, тем самым приводя к однозначности маршрутизации и к возможному выявлению субъектов информации. Предотвратить подобную уязвимость можно двумя противоположными, дифференцированными методами:
Симулировать время запроса. Иными словами, маршрутизация и ответ будут подстраиваться под примерное время генерации пакета в сети, способом установления задержки. Чем больше узлов в сети, тем меньше время задержки. Подобный метод следует использовать только в системах с большим количеством узлов, так как с малым количеством, время ожидания маршрутизации или ответа будет достаточно долгим.
Симулировать время маршрутизации и ответа. Иными словами, запрос будет подразумевать не только передачу истинной информации, но и передачу ложной, незначимой, пустой информации, в моменты отсутствия настоящего запроса. Подобный метод следует использовать только в системах с малым количеством узлов, так как производится огромное количество спама.
Продолжая анализ, можно выявить некоторые закономерности, приводящие к возможности точного обнаружения состояния пакета, а именно, является ли он запросом или ответом (при этом не разглашая субъектов информации). Исходя из периода T, который вычисляется по формуле НОК(2+k, 2) (где НОК - наименьшее общее кратное), несложно узнать, что период при k = 2 будет равен 4. Это в свою очередь говорит о том, что каждое четвёртое действие, начиная с предыдущего запроса, будет также являться запросом (аналогичная ситуация с ответом). Хоть и уязвимостей при данной детерминированности выявлено не было, тем не менее, с консервативной точки зрения, лучшим решением будет повышение периода, если атаки на этой основе будут обнаружены. Повысить период можно несколькими способами:
Повысить k (не стоит забывать о свойстве гипертелии, если выбор падает на нечётное число).
Сделать k случайной переменной диапазона [1;n], где n < N (количество узлов в сети).
Мощность анонимности
*Мощность анонимности — количество узлов, выстроенных в цепочку и участвующих в маршрутизации информации от отправителя до получателя, при этом, не будучи никак связанными между собой общими целями и интересами. Из этого следует, что многоранговая архитектура по умолчанию имеет мощность анонимности равной единице (вне зависимости от количества серверов). Нулевая мощность анонимности возникает либо при отсутсвии связей, либо при существовании прямого соединения между субъектами (иными словами при отсутствии какой бы то ни было маршрутизации).
Мощность федеративности
**Мощность федеративности — количество государств, не связанных общей военной силой, через территорию которых проходит маршрутизация полиморфной информации. Из этого следует, что если сеть разворачивается лишь в пределах одного государства, то мощность федеративности по умолчанию будет равна единице. Нулевой мощности федеративности не существует.
Обозначение абсолютной анонимности
***Стрелка в скобках указывает отправителя слева и получателя справа, вне скобок стрелка указывает на изменение структуры пакета, сами же скобки предполагают существование одинакового пакета, операция ИЛИ указывает вариативность и параллельность отправления.
Тайные каналы связи
Секретные, тайные, эзотерические каналы связи - есть соединения, располагаемые в заведомо замкнутом, незащищённом, враждебном окружении и имеющие характеристики безопасной передачи информации. При этом анонимность, родственная скрытым сетям, не является базисом секретных каналов связи и, следовательно, может быть отброшена из-за ненадобности или по необходимости. Так, например:
Первым, минимальным видом анонимности в тайных каналах связи принято считать четвёртую стадию, то-есть сохранение экзотеричности субъекта и эзотеричности объекта, благодаря использованию криптографических и/или стеганографических [7] методов преобразования информации. При этом, если в секретных каналах связи используются криптографические методы, то они не ограничиваются только идентификацией субъектов (целостностью, аутентификацией), но также и применяют практику шифрования объектов (конфиденциальность). И так как тайные каналы связи разворачиваются в заведомо замкнутой системе (многорановой), то и мощность анонимности в таком случае равняется единице.
Вторым, максимальным видом анонимности в тайных каналах связи принято считать шестую стадию, при этом пропуская, игнорируя, импутируя пятую. Вся особенность такого подхода заключается в невозможности использовать фактическую, реальную маршрутизацию, которую предполагает пятая стадия анонимности. Тем самым реальная маршрутизация отдаёт откуп виртуальной, существование которой возможно лишь и только на шестой стадии анонимности. Виртуальная маршрутизация имманентна, сводится к передаче объекта внутри единого, сингулярного приложения, связывающего всех субъектов изнутри. Таким приложением является сервер (или группа серверов с |A| = 1), при помощи которого клиенты передают друг другу и принимают друг от друга информацию. Так как приложение располагает полным знанием того, кто является отправителем и кто является получателем, то сам сервер становится создателем сети на основе которой располагается тайный канал связи. При всём этом, такое приложение, в задаче о тайных каналах связи, аналогично и равносильно государству, в задаче о построении анонимных сетей. Всё это ведёт лишь к единственно возможной борьбе за анонимность с приложением-создателем — методом спама (так как способ с федеративностью бессилен и недейственен в виртуальном пространстве).
Тайные каналы связи, использующие стеганографию, всегда имеют некий контейнер, в который помещается истинное сообщение. Под контейнером может пониматься ложное, неявное, сбивающее с пути сообщение, которое чаще всего носит нейтральный характер. Из этого также следует, что в зависимости от размера контейнера, зависит и размер самого исходного сообщения, тем самым, стеганографический подход рассчитан на сообщения малых размеров и мало пригоден для передачи целых файлов. Примером контейнера может служить изображение, аудио-запись, видео-файл, то есть всё, что может хранить дополнительную или избыточную информацию, которая останется незаметной для человеческих глаз и ушей. Одним из примеров сокрытия информации может служить замена каждого старшего бита в изображении, битом исходного сообщения. Таким образом, если размер изображения (то есть, контейнера) будет равен 2MiB, то максимальный размер исходного сообщения не будет превышать 256KiB.
Тайные каналы связи, использующие криптографию, по умолчанию можно охарактеризовать четвёртой стадией анонимности. Если тайный канал разворачивается в заведомо замкнутой и незащищённой, но всё же сети, то это говорит о том, что стадия анонимности не меньше второй. Сами же скрытые каналы данного вида используют идентификацию по криптографическим адресам, а не адресам, заданными системой по умолчанию (никнеймом, телефоном и т.д.), следовательно, стадия анонимности тайных каналов определяется четвёртым этапом. Далее, если возникает виртуальная маршрутизация между субъектами, то четвёртая стадия начинает переходить в шестую, перешагивая при этом пятую. Таким образом, секретные каналы способны улучшать безопасность уже выстроенной и существующей системы в неизменном для неё состоянии, используя лишь и только её базис в качестве фундамента.
Использование стеганографии, вместе с криптографией, может помочь в случаях, когда имеется вероятность или возможность нахождения скрытого сообщения в контейнере. Тем самым, даже если исходное сообщение было найдено, оно будет иметь шифрованный вид. Здесь стоит учитывать тот факт, что при шифровании размер информации увеличивается (добавляется хеш, подпись, текст дополняется до блока), а из этого уже следует, что максимальный размер исходного сообщения уменьшается.
Существует ещё один, третий способ сокрытия информации, относящийся к криптографическим, но при этом обладающий некоторыми стеганографическими свойствами, качествами, особенностями [8, с.720]. Это не является последовательным объединением, использованием методов, как это было описано выше, а скорее оказывается их слиянием, синтезом, симбиозом. В таком методе истинная информация скрывается в цифровой подписи ложного сообщения на основе общего, согласованного ключа, где главной чертой и исключительностью является стойкость ко взлому, сродни сложности взлома цифровой подписи. При этом, сама подпись - есть контейнер, скрывающий существование сообщения методом аутентификации ложной информации.
Теоретически, тайные каналы связи также могут находиться и в других скрытых каналах, либо анонимных сетях (секретные каналы могут быть воссозданы совершенно в разных системах и ситуациях), тем не менее, подобный подход является очень сомнительным (по причине избыточности накопленных слоёв шифрования), специфичным (по причине редкости практического использования) и затрачиваемым (по причине уменьшения производительности программ, уменьшения ёмкости контейнеров).
Протокол безопасной передачи информации
Из всего вышесказанного можно создать легковесный, примитивный, но при этом и безопасный протокол передачи информации, являющийся самодостаточным, цельным и монолитным. Может быть применим в анонимных сетях и тайным каналам связи [2, с.58][8, с.80].
Данный протокол игнорирует способ получения публичного ключа от точки назначения. Это необходимо по причине того, чтобы протокол был встраиваемым и мог внедряться во множество систем, включая одноранговые сети, не имеющие центров сертификации, и тайные каналы связи, имеющие уже установленную сеть по умолчанию.
Безопасность протокола определяется в большей мере безопасностью асимметричной функции шифрования, так как все действия сводятся к расшифрованию сеансового ключа приватным ключом. Если приватный ключ не может расшифровать сеансовый, то это говорит о том факте, что само сообщение было зашифровано другим публичным ключом и потому получатель также есть другой субъект. Функция хеширования необходима для проверки целостности отправленных данных. Функция проверки подписи необходима для аутентификации отправителя. Функция проверки доказательства работы необходима для предотвращения спама.
Протокол пригоден для многих задач, включая передачу сообщений, запросов, файлов, но не пригоден для передачи поточной информации, подобия аудио звонков и видео трансляций, из- за необходимости подписывать и подтверждать работу, на что уходит много времени. Иными словами, протокол работает с конечным количеством данных, размер которых заведомо известен и обработка которых (то есть, их использование) начинается с момента завершения полной проверки.
Пример программного кода для шифрования информации
import (
"bytes"
"encoding/hex"
)
func Encrypt(sender *PrivateKey, receiver *PublicKey, data []byte) *Package {
var (
session = GenerateBytes(N)
rand = GenerateBytes(M)
pubsend = PublicKeyToBytes(&sender.PublicKey)
hash = HashSum(bytes.Join(
[][]byte{
rand,
data,pubsend,
PublicKeyToBytes(receiver),
},
[]byte{},
))
sign = Sign(sender, hash)
)
return &Package{
Head: HeadPackage{
Rand: hex.EncodeToString(EncryptS(session, rand)),
Sender: hex.EncodeToString(EncryptS(session, pubsend)),
Session: hex.EncodeToString(EncryptA(receiver, session)),
}, Body: BodyPackage{
Data: hex.EncodeToString(EncryptS(session, data)),
Hash: hex.EncodeToString(hash),
Sign: hex.EncodeToString(EncryptS(session, sign)),
Npow: ProofOfWork(hash, C),
},
}
}
Шифрование подписи сеансовым ключом является необходимым, так как взломщик протокола, для определения отправителя (а именно его публичного ключа) может составить список уже известных ему публичных ключей и проверять каждый на правильность подписи. Если проверка приводит к безошибочному результату, то это говорит об обнаружении отправителя.
Шифрование случайного числа (соли) также есть необходимость, потому как, если злоумышленник знает его и субъектов передаваемой информации, то он способен пройтись методом грубой силы по словарю часто встречаемых и распространённых текстов для выявления исходного сообщения.
Пример программного кода для расшифрования информации
import (
"bytes"
"encoding/hex"
)
func Decrypt(receiver *PrivateKey, pack *Package) (*PublicKey, []byte) {
// Check proof.
hash, err := hex.DecodeString(pack.Body.Hash)
if err != nil {
return nil, nil
}
if !ProofIsValid(hash, C, pack.Body.Npow) {
return nil, nil
}
// Decrypt session key.
eskey, err := hex.DecodeString(pack.Head.Session)
if err != nil {
return nil, nil
}
skey := DecryptA(receiver, eskey)
if skey == nil {
return nil, nil
}
// Decrypt public key.
ebpubsend, err := hex.DecodeString(pack.Head.Sender)
if err != nil {
return nil, nil
}
bpubsend := DecryptS(skey, ebpubsend)
if bpubsend == nil {
return nil, nil
}
pubsend := BytesToPublicKey(bpubsend)
if pubsend == nil {
return nil, nil
}
// Decrypt and check sign.
esign, err := hex.DecodeString(pack.Body.Sign)
if err != nil {
return nil, nil
}
sign := DecryptS(skey, esign)
if sign == nil {
return nil, nil
}
if !Verify(pubsend, hash, sign) {
return nil, nil
}
// Decrypt rand.
erand, err := hex.DecodeString(pack.Head.Rand)
if err != nil {
return nil, nil
}
rand := DecryptS(skey, erand)
if rand == nil {
return nil, nil
}
// Decrypt data.
edata, err := hex.DecodeString(pack.Body.Data)
if err != nil {
return nil, nil
}
data := DecryptS(skey, edata)
if data == nil {
return nil, nil
}
// Check hash.
check := HashSum(bytes.Join(
[][]byte{
rand,
data,
PublicKeyToBytes(pubsend),
PublicKeyToBytes(&receiver.PublicKey),
},
[]byte{},
))
if !bytes.Equal(hash, check) {
return nil, nil
}
return pubsend, data
}
Для улучшения эффективности, допустим при передаче файла, программный код можно изменить так, чтобы снизить количество проверок работы в процессе передачи, но с первоначальным доказательством работы на основе случайной строки (полученной от точки назначения), а потом и с накопленным хешем из n-блоков файла, для i-ой проверки. Таким образом, минимальный контроль работы будет осуществляться лишь ⎡M/nN⎤+1 раз, где M - размер файла, N - размер одного блока. Если доказательство не поступило или оно является неверным, то нужно считать, что файл был передан с ошибкой и тем самым запросить повреждённый или непроверенный блок заново.
Исходные коды
Протокол безопасной передачи информации реализован в фреймворке gopeer: https://github.com/Number571/gopeer
На основе протокола также было реализовано приложение электронной почты - HES, представляющее четвёртую стадию анонимности: https://github.com/Number571/HES
Заключение
В данной работе были проанализированы системы, представляющие безопасность и анонимность пользователей (анонимные сети, тайные каналы связи), выявлены их свойства и особенности, объединяющие (стремление к уменьшению мощности доверия) и разделяющие (методы достижения анонимности). Была приведена градация анонимности в компьютерных сетях, базируемая на мощности анонимности. На основе же градации было выявлено само развитие анонимности и необходимые условия для её существования. Были приведены атаки, базируемые не деанонимизации субъектов, и защита от них. В части о тайных каналах связи, разобраны возможные виды анонимности, представлено разделение каналов по используемым средствам (криптографические, стеганографические), а также были приведены их отличия (шифрование, скрытие) и синтезы (последовательное применение, скрытие информации в цифровой подписи). После анализа скрытых систем был представлен протокол безопасной передачи информации (вместе с примерами программного кода), на основе которого могут базироваться в последующем анонимные сети и тайные каналы связи.
Список литературы
Диффи. В., М. Хеллман. Новые направления в криптографии [Электронный ресурс]. — Режим доступа: https://ee.stanford.edu/~hellman/publications/24.pdf (дата обращения: 19.12.2020).
Шнайер, Б., Фергюсон, Н. Т. Практическая криптография / Б. Шнайер, Н. Т. Фергюсон. - М.: Издательский дом «Вильямс, 2005. - 420 с.
Накамото, С. Биткойн: система цифровой пиринговой наличности [Электронный ресурс]. — Режим доступа: https://bitcoin.org/files/bitcoin-paper/bitcoin_ru.pdf (дата обращения: 19.12.2020).
Таненбаум, Э., Уэзеролл, Д. Компьютерные сети / Э. Таненбаум, Д. Уэзеролл. — СПб.: Питер, 2017. - 960 с.
Рябко, Б. Я., Фионов, А. Н. Криптография в информационном мире / Б. Я. Рябко, А. Н. Фионов. - М.: Горячая линия - Телеком, 2019. - 300 с.
Донован, А.А., Керниган, Б.У. Язык программирования Go / А.А. Донован, Б.У. Керниган. — М.: ООО «И.Д. Вильямс», 2018. - 432 с.
Шелухин, О.И., Канаев, С.Д. Стеганография. Алгоритмы и программная реализация / О.И. Шелухин, С.Д. Канаев. — M.: Горячая линия - Телеком, 2018. - 592 с.
Шнайер, Б. Прикладная криптография. Протоколы, алгоритмы и исходные коды на языке C / Б. Шнайер. — СпБ.: ООО «Альфа-книга», 2018. - 1040 с.