Постановка задачи
Как известно, Интернет создавался как сеть передачи информации, способная функционировать в условиях ядерной войны. Канал связи между двумя точками пролегает везде и нигде, изьятие одного из узлов сети не помешает другим продложать обмениваться пакетами. Однако эта распределенная сеть передачи данных не является распределенной сетью хранения — в принципе, данные хранятся в конкретном месте и в ряде случаев уязвимость конечных узлов очень… мешает.
Вероятно, настало время преодолеть это ограничение. Технологии, позволяющие это сделать, уже придуманы и широко известны, осталось только найти правильный способ сложить их вместе.
Вариант сети передачи данных с распределенным источником — всем нам знакомый протокол торрент. Ясно, однако, что он разрабатывался под узкую цель передачи файлов и не позволяет построить полную и самодостаточную систему.
Я предлагаю схему создания такой системы, отталкиваясь от принципа функционирования торрентов.
Итак, мы будем решать следующую задачу:
создание децентрализованной распределенной сети хранения и передачи информации,
с анонимными, но идентифицируемыми участниками,
действующими на равных правах и не нуждающимися в каком-то едином управляющем властном авторитете,
которая обеспечивает хранение и распространение любой информации до тех пор, пока в системе есть участники, заинтересованные в ее распространении.
Ключом к ее решению является организация распределенной и децентрализованной системы адресации.
Распределенная децентрализованная система адресации
Можно создать ее простейшим способом. Назовем атомом элементарную единицу информации, которая может быть адресована в системе. (Атом будет аналогом файла или же интернет-страницы). Чтобы создать атом, участник системы должен подписать его своей электронной подписью (по схеме с открытым и закрытым ключом).
Ресурс в системе (аналог интернет-сайта) будет идентифицироваться открытым ключом. Никакого другого адреса или идентификатора, функционирующего на уровне протоколов системы, вводить не нужно. Это позволит системе адресации быть вполне децентрализованной и не нуждающейся в организованном контроле.
Атом идентифицируется по адресу ресурса плюс криптостойкой хеш-функции самого атома. Атом должен включать блок метаинформации (с адресом атома и указанием типа атома, т. е. протокола, которым этот атом следует читать) и собственно контента, который на уровне основного протокола системы адресуется и передается как единое целое.
Назовем владельца ключа (ресурса) издателем, а ресурс — издательством. Получился — в первом приближении, готовый вариант необходимой нам системы адресации.
Однако, чтобы с издательствами и их атомами можно было удобно работать, нам потребуется еще одна сущность — файл (тоже атом) метаинформации ресурса. Назовем его публикацией. Публикация задает группировку атомов и связи атомов между собой. В частности, публикация позволит издателю по мере необходимости (создавая новую публикацию) вводить новые редакции атомов (а читателю — находить актуальную версию по адресу старой). Предполагается, что для файлов публикаций будет возможно использование нескольких форматов (по выбору издателя) — очевидным вариантом представляется вариант организации структуры папок, возможным — использование способов запроса данных нереляционных баз.
Публикация предоставляет второй, косвенный тип адресации атома — через адрес публикации и внутренний адрес, способ построения которого задается форматом публикации.
Формат публикации должен также предусматривать возможность дополнительной подписи публикации одного издателя — другим издателем, так, чтобы обе (или больше) подписей были доступны через метаинформацию атома публикации и учитывались на уровне основного протокола системы.
Теперь наша децентрализованная распределенная система адресации практически завершена. Можно назвать ее SRDS (self-representing distributed addressing system). Она отличается тем, что в ней адресуются (специальным образом подготовленные) блоки информации, которые определяются своим содержанием — и более ничем. Содержание каждого атома однозначно соответствует своему адресу и может иметь сколько угодно копий. Принадлежность каждого атома владельцу определенного ключа (издателю) тоже однозначно определяется его содержанием.
Протокол распространения информации Magic Torrent
Возвращаемся в мир привычного интернета. Остается решить совсем простую задачу — организовать доступ к нашим атомам, которые могут находиться где угодно, но однозначно идентифицируются по своему адресу. Воспользуемся для этого идеей протокола торрент: файл публикации передается организатору раздачи (назовем его нодой); владельцы атомов, желающие присоединиться к раздаче (сиды) регистрируются у него — а желающие получить атом (личи) получают с ноды адреса сидов, у которых этот атом имеется и запрашивают атом непосредственно у одного из них. (При необходимости атомы могут быть разбиты на блоки и запрашиваться поблочно; такая разбивка должна быть задана через файл публикации при его создании).
О каких адресах здесь идет речь? Я полагаю, желательно реализовать мультипротокольную работу — т. е. любой участник может присутствовать в системе под тем адресом, под которым ему удобнее, используя либо обычный цифровой TCP-адрес, либо, при желании, адрес в сети tor, i2p и так далее. Первым реализуемым протоколом обмена, ИМХО, разумнее всего сделать https.
Чтобы получить адреса нод, нужно организовать еще один, более высокий уровень — назовем его супернодой. Супернода точно таким же образом регистрирует ноды, соответствующие нашим издателям и файлам публикаций. (Суперноде достаточно хранить SRDS-адрес издателя, хеш-функцию файла публикации и адреса раздающих его нод).
Для эффективности работы ноды (раздающие один и тот же ресурс) и суперноды (желательно все существующие) следует объединить в кольцо — каждый участник которого копирует себе всю информацию, которой располагает любой другой, и обменивается ею в постоянном режиме.
Клиент, желающий получить информацию системы (будем называть этого клиента посетителем), скажем, переходя по ссылке адреса SRDS — должен непосредственно из этой ссылки узнать полный адрес (ресурс-публикация-атом), обратиться к суперноде, получить адреса нод, раздающих нужный ему ресурс, обратиться к любой из них, получить адрес сидера, раздающего требуемый атом (либо, по желанию, актуальную версию этого атома).
Назовем такую систему организации доступа к ресурсам SRDS — протоколом Magic Torrent.
Подобная организация обладает очень высокой устойчивостью — изъятие из нее любого участника практически никак не сказывается на функционировании системы. Более того, даже в случае полного разрушения структуры — удаления всех нод и супернод — она может быть легко воссоздана оставшимися сидерами, которые в инициативном порядке возьмут на себя функции нод и супернод.
К сожалению, существуют причины, по которым наша система не может быть вполне анархичной и децентрализованной. Кольцо супернод является критическим для нее ресурсом, который должен некоторым образом управляться и модерироваться — если в нем будет неограниченно разрастаться либо количество участников, либо количество публикаций, это негативно скажется на эффективности работы системы. Я полагаю, что оно должно формироваться по принципу закрытого клуба, а публикации — приниматься с удостоверяющей подписью (поверх подписи издателя) уполномоченных участниками клуба модераторов. Естественно, через некоторое время возникнет несколько таких клубов, и, соответственно, несколько колец — но естественный отбор, очевидно, оставит лишь небольшое количество широко известных и популярных, которые уже смогут договориться о принципах интеграции. Тем более, что жесткий отбор публикаций, скорее всего, и не потребуется — достаточно ограничить прием злонамеренно генерируемых фейковых ресурсов.
Поскольку система предназначена для свободного обмена информацией, желательно предусмотреть механизмы, защищающие информацию в т.ч. от произвольного удаления ее самими издателями (либо злоумышленниками, завладевшими их ключами). Проектируя протокол работы нод и супернод, следует понимать, что создание и регистрация издателем новой публикации (через суперноду) — это не директивное указание всем нодам перейти на раздачу этой публикации, а предложение, которое некоторыми из них будет принято, некоторыми, возможно, отклонено, а некоторые пожелают раздавать несколько публикаций одного ресурса одновременно. Разумно также предусмотреть флаги, которые будут сообщать посетителям о такого рода версиях публикаций и цели их сохранения.
Режим по умолчанию, скорее, должен ориентироваться на сохранение нодами всех публикаций и всех атомов ресурса (включая устаревшие редакции) либо на исключение только тех публикаций, которые не содержат информации, отсутствующей в более поздних.
Преимущества и применение
Достоинства и недостатки описанной организации, в принципе, очевидны. Она обеспечивает легкое создание ресурсов, возможность бесплатного хранения информации на общественных началах, легкое и естественное масштабирование, а равно, при необходимости, и дупликацию, если возникнет необходимость воспроизвести содержание информационной системы в частично изолированном по техническим (альтернативные протоколы, альтернативные сети), физическим (скажем, на других планетах Солнечной системы) или юридическим причинам сегменте Интернета. Протокол Magic Torrent может быть использован для резервных каналов вещания, устойчивых к ddos-атакам. Адресация SRDS идеально подходит для реализации давней идеи распределенных блогов, и вообще для организации сетевых проектов, судьбу которых нежелательно доверять произволу проприетарного провайдера услуги (скажем, фрилансерских бирж). Но, очевидно, прежде всего напрашивается решение использовать ее для создания сетевых библиотек.
Предложенная система не является альтернативой анонимным сетям — она может дополнить их, при необходимости использовать их возможности, а им предоставить естественный мост для создания общего пространства с традиционным интернетом.
Основной проблемой является необходимость реализации с нуля всех предложенных протоколов и программ — клиентов и серверов сидов, нод и супернод. Отдельной большой темой является организация метафайлов и атомов, способы навигации и просмотра, удобные для работы в Magic Torrent. «Связующей» технологией в обычном вебе является html – но для наших нужд его придется ограничить, модифицировать или чем-то заменить.
Дисклеймер:
1) Насколько мне известно, предложенная мной система принципиально отличается от множества существующих или разрабатываемых, но на полную осведомленность я не претендую и гарантии дать не могу. Если кто-то ткнет пальцем и скажет — «вот то же самое» — думаю, нужно обратить всеобщее внимание на такой проект, потому что он заслуживает большей известности.
2) Ни намерения, ни возможности, ни квалификации реализовывать изложенные идеи у меня нет.
Вместе с тем, придуманная мной схема кажется чрезвычайно мощной, простой и перспективной. Ее воплощение может радикально расширить наши возможности и — через некоторое время — заметно изменить жизнь.
Автор: alexandrli