Здравствуй, дорогой Хабравчанин! В свете последних событий идея о распределенной социальной сети вновь захватила мой разум, так что я хочу пригласить тебя к осмыслению ниже представленных идей, а коли они придутся по душе - буду рад отклику или, чем наука не шутит, даже кооперации :) Если предпочитаешь "кажи код, а потом поговорим" - то вот: https://github.com/state-of-the-art/aSocial aSocial, share your data only with the ones you trust the most. Современный мир представляет собой набор централизованных социальных сетей и мессенджеров, которые рады владеть вашей социальной информацией без каких-либо ограничений на ее фактическое использование. Данный проект создан, чтобы исправить неприятные проблемы централизации хранения важной информации, бороться с цензурой, упростить общение и взаимодействие людей, а также защитить его от посягательств извне. aSocial - распределенная, приватная и защищенная социальная сеть для тех, кому не безразлична свобода коммуникаций и полный контроль за своей социальной информацией. Она позволит взаимодействовать используя защищенные каналы связи, хранить вашу память о поколениях на подконтрольных устройствах, бороться с бесполезной информацией посредством платы за ее прием, упростит поиск новых знакомств и откроет возможности для построения надежных и защищенных социальных приложений. Естественно, исходный код будет полностью открыт для общества - в наше время невозможно доверять закрытым продуктам и закрытым алгоритмам, при помощи которых они обращаются с нашими данными. Платформа будет построена на базе p2p технологий связи, в которых отсутствует центральный сервер - что поднимает безопасность и цензуроустойчивость на недосягаемый для современных систем взаимодействия уровень. Она откроет возможность для монетизации информации при помощи Bitcoin & Lightning сетей, откроет дорогу для упрощения интерфейсов, уберет сложности и волнения при распространении контента, унифицирует и защитит хранение и обработку социальной информации, позволит гибко взаимодействовать с историей - в общем даст полный контроль над тем что, как и когда происходило, происходит и будет происходить в вашей жизни, жизни ваших друзей, родных и других социальных агентов. Основная цель проекта - создать распределенную и безопасную платформу для взаимодействия пользователей в любых формах без ограничений. Свобода и приватность взаимодействия - это высшее благо, к которому следует стремиться и оно не может подвергаться никаким ограничениям. Даже если это общение может казаться кому-то “вредным” - это лишь частное суждение и каждый волен сам выбирать свою судьбу в связи с кругом своего общения. Система также должна быть достаточно защищенной чтобы также обеспечить возможность отрицания взаимодействия, так как это личный выбор личности - раскрывать или нет любую личную информацию, так как мы живем в неидеальном мире, в котором множество угроз зависят от полученной преступниками информации. В целом aSocial должна стать самой распространенной системой для взаимодействия и хранения социальной информации, разрушив барьеры между людьми и упростив коммуникации и обработку подобных данных, в том числе освободив общество от излишней централизации. Для того, чтобы построить хорошую социальную систему - нужно подумать об основных моментах, в которые можно включить: Модульность - можно добавить, или выкинуть не важные компоненты системы (UI - нативный, WEB, консольный) или заменить на аналоги важные (базы данных, например). Это позволит применять систему на серверах или носимых устройствах при соблюдении заданных условий по безопасности и отзывчивости. История - не только возможность создавать элементы (события, агентов…) в нужные моменты времени, но также наблюдать за их изменениями во времени. Например, изменение фамилии у вашего друга - важная информация, в т.ч. возможность поглядеть, как оно было до изменения - не менее важно. Сквозная история изменений с возможностью перемотки Timeline - удобный показ событий и областей жизни (жил/работал) для агентов. Группировка и тегирование изменений Персоны - в основном профили людей или лиц, с которыми мы взаимодействуем в обществе. Могут не иметь профиля, но существовать как ваша (или коллективная) память о них. Вы можете оставить ваше видение о любой персоне. Профиль может иметь несколько персон для разных задач, например “Друзья”, “Работа”, “Отношения” и любые другие. Для них генерируется отдельный адрес и они используются как начальная точка для коммуникаций. Каждая персона содержит пару ключей и генерирует приглашающие ключи для связи с другими персонами. Таким образом формируется дерево связей и с ним можно работать как в форме листьев, так и в форме веток или целого дерева. События - то, что происходит, обычно имеет начало и иногда конец, как текущее место жительства, работа, учеба, вечеринка или когда вы нашли что-то важное. Сообщения - как общение с другими агентами, так и запрос обновлений профиля (которые происходят в основном в бекграунде). Привязаны к монетизации для решения проблемы спама Дерево тредов с возможностью переноса сообщений Название / описание / теги веток Простой импорт из других мессенджеров / соцсетей Запрос обновления (новостей из СМИ, например) Оверлеи - возможность иметь свой взгляд на любую информацию. Могут быть защищенными (паролем) или незащищенными, опциональны (включаются и отключаются по необходимости) и связаны с определенными базовыми объектами или создающие новые объекты. Например вы можете добавить друга в свою сеть, даже если у него нет профиля и позже, если он добавляется - прилинковать его профиль. Или в оверлее можете изменить его имя на альтернативное. Синхронизация - вы владеете несколькими устройствами и эти устройства могут синхронизировать профили между друг другом и выполнять разные роли, например вы можете шарить свою любимую коллекцию фильмов с десктопа, но при этом не иметь их на телефоне. Шаринг - нужен для передачи мультимедиа и других файлов. Использует bittorrent для приема и отдачи. На базе основных возможностей строится (или даже следует) дополнительный функционал: Древо жизни - у каждого из нас есть история поколений, которую мы хотим передать дальше нашим детям, так почему бы не в той же самой социальной сети? Это удобное отображение родственных связей между персонами. Завещания - разновидность хранимых сообщений и возможность задать условия для активации их отсылки или уничтожения. Бесплатно на подконтрольных устройствах и платно на релеях. Например отсутствие онлайн в течении месяца триггерит рассылку этих сообщений. Контракты - сообщения, в которых вы договариваетесь об определенных обязательствах. Эти обязательства подписываются обеими сторонами, могут блокировать определенные средства на определенный срок и т.п. Веб-интерфейс - модуль, при помощи которого вы можете получить доступ к своему профилю удаленно при помощи HTTP, вам лишь нужно запустить приложение, включить модуль в настройках и открыть в браузере нужный хост и порт. Консенсус - дополнение к групповым чатам, чтобы быстро решать вопросы согласования с группой людей. Если человек согласен с предложением, то добавляется один голос. Если нет - он открывает дискуссию чтобы найти компромисс среди всех участников. Решение принимается как только каждый член группы согласен. Разработка aSocial вызовет следующие проблемы: Скорее всего будет слишком сложна в одиночку - можно упустить важные моменты и просчитаться в основных идеях, поэтому необходим peer-review и обсуждение концептов на ранних этапах построения системы. Для этого и существует данный документ - чтобы погрузить потенциальных соратников в проблему и выявить упущенные моменты чтобы в дальнейшем продолжить взаимодействие и совместно довести систему до готового состояния. Принятие новой социальной сети пользователями столкнется с очевидными проблемами: Подозрительность пользователей - все новое естественно вызывает вопросы, особенно такое количество новшеств. Опять-же открытость проекта сможет в общих чертах решить вопрос подозрительности - но наверняка придется приложить дополнительные усилия, чтобы показать и рассказать. Противодействие политиков - они постараются ставить палки в колеса из-за консервативности и сложности управления нецентрализованной системой. Также лоббирование больших корпораций (Facebook) возможно окажет влияние на общее развитие. Путь биткоина в данном плане представляется разумным - пользователи выберут более удобную систему не смотря ни на что. Противодействие спецслужб - они всегда хотят залезть в коммуникации пользователей под видом борьбы с терроризмом, что очевидная чушь. Попытаются встроить бэкдоры под видом полезных функций, но думаю что открытый характер платформы, аудит сообщества и отсутствие централизованного управления нивелирует подобный риск до минимума. Подобные распределенные системы требуют особой тщательности в проработке протокола взаимодействия - так как изменить его будет довольно проблематично. Социальные сети и мессенджеры (на эти области и ориентируется данная разработка), так что выход на рынок первоначально базируется на заинтересованных лицах (гики, программисты, безопасники), откуда вполне может распространиться дальше при наличие удобных средств для взаимодействия. Целевые платформы для запуска приложения: Android - большинство телефонов и носимых устройств в мире Linux - опенсорс и все сервера в интернете Windows - все еще большинство рабочих станций и хомяков MacOSX - рабочие системы с UI, постепенно вытесняет Windows iPhone - возможно, но скорее всего в последнюю очередь ввиду сложности экосистемы. Отдельного железа не потребуется, но необходимо будет учитывать батарею и возможности для связи между устройствами. Как основная платформа используется Qt5 с дополнениями для каждой платформы, приложение делится на два модуля - backend и frontend: Занимается фоновой активностью - взаимодействует с устройствами поблизости и через интернет, передает и принимает данные с других устройств (например, чужие зашифрованные сообщения для дальнейшей передачи), получает обновления. Хранит промежуточные данные в LevelDB. Интерфейс пользователя для управления профилями. Основное хранилище - SqlCipher. Для хранения используется пара локальных баз данных - встроенное незашифрованное nosql хранилище LevelDB, необходимое для поддержание работоспособности сервиса передачи данных и шифрованное sql хранилище SqlCipher (надстройка над sqlite3) для хранения данных профилей. Позволяет хранить key-value данные, которые не представляют ценности для потенциальной атаки - это списки соединений, зашифрованные relay-данные… В общем те данные, которые необходимы для взаимодействия систем в спящем режиме. Также хранит зашифрованные паролем ключи от доступных профилей. Зашифрованная база данных для хранения важной информации о профиле. Расшифровывается кусками по необходимости при помощи длинного ключа. Описанные базы данных хранятся на локальной файловой системе. Обычные файлы и медиа хранятся не зашифровано на файловой системе. Отдельные фото/видео могут быть зашифрованы прямо на файловом уровне при необходимости и будут доступны исключительно из aSocial, так как все известные ОС не поддерживает механизмы дешифровки на файловом уровне. Профиль представляет собой набор данных, зашифрованных криптографическим ключом, зашифрованным паролем. При инициализации соединения с другими профилем (социальным агентом), создается уникальный ключ для коммуникации - т.е. любая связь с внешним миром осуществляется по уникальной паре ключей, чтобы предотвратить проблемы повторного использования одного и того же ключа. Этот ключ может использоваться исключительно тем, кто его получил. В профиль также можно подключить дополнительные ключи (или сгенерировать их) - они могут быть использованы для инициализации новых соединений, распространения своего профиля или приема донатов/единичных сообщений. Попытка найти других людей - это в любом случае публикация информации, но совсем необязательно той, что размещена в вашем профиле: вы можете создать отдельный слой в который можно добавить информацию по вкусу для того, чтобы другие люди смогли найти вас. При коммуникации используются любые доступные средства - Internet, Mesh, WiFi-direct, Bluetooth, NFC, USB-dongle… В качестве протокола взаимодействия нужно осмотреть доступные опенсорс библиотеки для мессенджеров. Они уже поддерживают e2e шифрование, чаты, NAT-traversal и могут быть полезны на начальном этапе. Безопасность - это отправная точка этого проекта. Она заключается не только в шифровании, но и уверенности в полном контроле за принадлежащей вам информации. Любые разрешения на выдачу информации вовне полностью контролируются пользователем используя фильтры и уровни секретности (реализованные как дополнительные оверлеи/слои), которые переключаются при помощи различных паролей и шифруются различными ключами. Считаю, каждый хочет казаться другим людям намного лучше, чем он есть - и мы видим, что профили в социальных сетях в основном вычурно идеальные. Но современные социальные сети в основном забывают, что есть и те самые настоящие люди за красивой картинкой, которые не имеют возможности хранить свои данные где-то кроме своей головы. aSocial улучшит эту систему и позволит хранить и делиться с определенными людьми даже сокровенной и секретной информацией. Таким образом aSocial позволяет создавать разные публичные личности или различные лица могут быть реализованы при помощи разных профилей, которые могут сосуществовать на одном устройстве. Базовый уровень профиля - это ваша публичная личность. При создании профиля для оверлеев инициализируется зашифрованное пространство случайного размера. Это пространство используется для размещения более секретной информации по луковичному принципу (каждый последующий уровень можно открыть из предыдущего при помощи уникального пароля). Таким образом любой пользователь может отрицать само наличие дополнительных уровней. Изначально платформа поддерживает полное шифрование трафика, сквозное шифрование сообщений, возможность правдоподобного отрицания любых действий или наличия профиля вовсе. Встроенная возможно выбрать систему шифрования в зависимости от секретности сообщения: Обычное - стойкое и компактное, можно выбрать разные типы. Размер - сжатое оригинальное сообщение. Двусмысленное - возможность в едином сообщении послать два разных сообщения, которые могут быть выбраны в зависимости от указанного ключа. Зашифрованные сообщения перемешиваются и алгоритм выборки зависит от данных в ключе. Перемешанное со случайным сообщением - разновидность двусмысленного, необходимая для того, чтобы помочь другим людям с двусмысленным шифрованием. Второй ключ не раскрывается, а данные для второго сообщения генерируются случайно. Размер - ~2x сжатое оригинальное сообщение. Применяется по умолчанию для улучшения безопасности всей системы. Вероятностное - очень большой размер сообщения, просто как дополнительная опция для гиков - они гики и знают для чего его использовать) (двусмысленное шифрование, перемешанное с мусором или вероятностное шифрование, которое подразумевает повышенную плату за сообщение из-за его увеличенного размера). Необходимость включения платежной системы в социальную сеть диктуется современными реалиями. Во-первых это позволяет бороться со спамом и рекламой, во-вторых это возможность создать новую платформу для монетизации информации и ее распространения. Основная проблема спама и рекламы - это отвлечение внимания, они буквально пожирают наше время, тем самым мы платим нашим самым дорогим ресурсом за чужой и в основном бесполезное для большинства продвижение продукта. Вспомните приходящие СМС в сетях GSM - они отвлекают, реклама в интернете - безумно отвлекает. Исходя из этого мы должны бороться с подобными вредными явлениями, а лучшее средство борьбы - это увеличение платы за показ сообщения. Таким образом у пользователя появляется возможность ограничить круг лиц, при том не полностью блокируя сообщения извне. В aSocial вы можете установить плату на прием сообщения нескольких уровней в зависимости от значения частоты общения. Т.е. вы получите плату и после этого сообщение появляется, если плата меньше минимальной - игнорируется. В зависимости от уровня оплаты выбирается важность сообщения: Минимальная - появление сообщения в списке сообщений, нет нотификации пользователя. Применяется для последующих сообщений активного разговора. Средняя - доп к минимальной - нормальная всплывающее окошко с оповещением о приходе сообщения. Применяется по умолчанию для первого сообщения нового разговора или для продолжения разговора через продолжительное время. Повышенная - важные сообщения с особым всплывающим окном и продолжительной нотификацией, которая не прекращается, пока сообщение не будет прочитано. Оплата зависит от размера сообщения - большее сообщение займет больше времени на прочтение. Оплату может требовать и запрос (обновление) информации - например, публичный деятель или СМИ может требовать плату за получение публичной информации о нем/последних новостях. Используемая технология - Bitcoin (как сеть Lightning). При добавлении нового контакта вы настраиваете новый Lightning канал для обмена средствами - и они пересылаются туда-обратно при обмене сообщениями. Вначале вы получаете сообщение и идентификатор транзакции, отправленной в сеть биткоина для инициации lightning-канала микротранзакций. Вы его получаете (при достаточности пересланных средств) и продолжаете общение по открытому lightning-каналу или закрываете его и забираете полученные средства. По-сути сообщения пересылаются вместе с контрактом на пересылку платежа, так что перед тем, как вас отвлечь - aSocial проверит достоверность транзакции. При использовании релеев (пересылка и временное хранение сообщения - например из-за недоступности прямой связи с получателем) вы дополнительно оплачиваете прием и хранение до пересылки оператору релея. В меш-сетях (на базе bluetooth/wifi и прочих систем ближней связи) пользователи также могут брать небольшую плату за пересылку/хранение сообщения - но по умолчанию подобная взаимосвязь бесплатна, но регулируется размером кэша, бюджетом на активность приложения и зарядом устройства (чтобы регулировать расход батареи и прочих ресурсов). Например, вы известный на весь мир создатель ядра Linux, ваше время безумно дорого - и вы вправе установить плату за входящие сообщения: для близких друзей, с которыми вы часто общаетесь - плата может быть близка к нулю, для внешних неизвестных - плата устанавливается в зависимости от вашего ЧСВ. Хороший ориентир стоимости - это ваша почасовая зарплата (отвлечение внимания на час) умноженная на 2..4 (так как это личное время). При цене 1BTC=$9400 и вашей почасовой оплате $20 - стоимость сообщения от незнакомца ~$40-$60 (~500тыс сатоши) видиться вполне разумной. Я бы прочитал спам-сообщение за 60$ - вообще не вопрос ;) В мире уже создано немало социальных сетей и мессенджеров с разной степенью защищенности, децентрализации, удобства - так что необходимо понимать на каком фундаменте начинается эта разработка. Упомянем несколько основных вех в развитии: Началось все с IM и чатиков, так как люди хотели общаться. Они позволяют обмениваться сообщениями, ссылками, участвовать в обсуждениях и хранить историю, но очень ограничены в переносе своего Я в виртуальное пространство, т.е. не подходят для хранения социальной информации. Имеют свою базу данных пользователей и в основном централизованы или федеративны. Первые популярные социальные сети в полном значении этого слова. Выделялись удобством использования и отсутствием отдельного клиента (WEB-интерфейс). Позволяли более-менее удобно искать одноклассников и друзей (позволяли создать профиль с хорошим жизнеописанием), а также делиться с ними контентом в форме стены на вашей личной странице - чем и снискали огромную популярность у пользователей. Их основной проблемой оказалась централизация - это огромный горшочек с медом (как и любая более-менее крупная база данных), привлекающий инсайдеров и хакеров. Также не поддерживают p2p шифрования, пропитаны рекламой и продающие/раздающие вашу информацию направо и налево. Думаю, сегодня уже очевидно, что доверять свою информацию бесплатно - не только бесполезно но и вредно. Выгода для конечного пользователя мизерна, а получаемый урон (от рекламы, утечек, ошибок, блокировок, цензуры) гораздо больше. Узкоспециализированные централизованные социальные сети, которые переняли все недостатки своих старших братьев. Активные и довольно неплохо справляющиеся со своей работой мессенджеры, которые в основном нацелены не некоторое подобие приватности, хотя все еще централизованы по своей сути и сосредоточены на “не хранении” секретной информации (секретные чаты), что в целом нивелирует их полезность. К сожалению большинство распределенных социальных сетей так или иначе написаны на веб-ориентированных языках, подразумевающих взаимодействие клиент-сервер и подрывающие саму суть распределенности. Обычно это сложные в установке, требующие баз данных и нетривиальных навыков для поддержки. Другие же сильно устаревшие, контролирующиеся инвесторами или в зачаточном состоянии… Хорошая, но затянувшаяся разработка децентрализованного мессенджера. Интересные наработки по децентрализованной коммуникации с использованием DHT, tor/i2p и NAT-piercing, которые можно будет адаптировать для работы в aSocial. Из недостатков как мессенджера можно отметить: Плохая поддержка мобильных устройств - в современном мире сложно представить приложение, которое изначально не ориентировано на носимые устройства. Морально устаревший интерфейс, отправляющий в 2000 год Выглядит скорее попыткой объединения разрозненных технологий для удобства пользователя, нежели чем попыткой переосмысления общения. Нацелена скорее на борьбу с централизацией, нежели чем защищенность и приватность пользователей. Концепция подов подразумевает полумеру - вашей информацией все еще кто-то владеет кроме вас. Конечно, можно поднять свой под - но это очень нетривиальное занятие. Подобравшиеся довольно близко к децентрализации и анонимности, но отступивший от своих первоначальных идей проект открытого рынка и замены маркетплейсам ebay/amazon. Успешно использует Bitcoin для расчетов, но прогнулся под давление инвесторов и отключивший встроенный функционал анонимности. В целом проект aSocial может стать здоровым выигрышем для всех, поэтому я приглашаю тебя принять участие в обдумывании или даже в кодинге - вместе всяко веселее. Далее ссылки, где можно найти это безобразие: GitHub: https://github.com/state-of-the-art/aSocial/ Site: https://www.state-of-the-art.io/projects/asocial/ Спасибо за внимание. User