Как работает децентрализованный мессенджер на блокчейне
В начале 2017 мы начали создавать мессенджер на блокчейне [название и ссылка есть в профиле] с обсуждения преимуществ перед классическими P2P-мессенджерами.
Прошло 2.5 года, и нам удалось подтвердить свой концепт: сейчас доступны приложения мессенджера для iOS, Web PWA, Windows, GNU/Linux, Mac OS и Android.

Сегодня мы расскажем, как устроен мессенджер на блокчейне и как клиентским приложениям работать с его API.
Мы хотели, чтобы блокчейн решил вопросы безопасности и приватности классических P2P-мессенджеров:
- Один клик для создания аккаунта — никаких телефонов и электронных почт, нет доступа к адресным книгам и геолокациям.
- Собеседники никогда не устанавливают прямых соединений, все общение идет через распределенную систему узлов. IP-адресы пользователей недоступны друг другу.
- Все сообщения шифруются End-to-End curve25519xsalsa20poly1305. Вроде бы этим никого не удивишь, но у нас-то исходный код открыт.
- MITM-атака исключена — каждое сообщение является транзакцией и подписывается Ed25519 EdDSA.
- Сообщение попадает в свой блок. Последовательность и timestamp блоков не исправишь, а следовательно и порядок сообщений.
- “Я этого не говорил” не прокатит с сообщениями в блокчейне.
- Нет центральной структуры, которая делает проверки на “достоверность” сообщения. Это делает распределенная система узлов на основе консенсуса, а она принадлежит пользователям.
- Невозможность цензуры — аккаунты нельзя блокировать, а сообщения удалять.
- Блокчейн 2FA — альтернатива адской 2FA по SMS, поломавшей немало здоровья.
- Возможность получить все свои диалоги с любого устройства в любое время — это возможность не хранить диалоги локально вообще.
- Подтверждение доставки сообщений. Не на устройство пользователя, а в сеть. По сути, это подтверждение возможности получателя прочитать ваше сообщение. Это полезная фича для отправки критических уведомлений.
А дальше — как все это работает.
Сообщение — это транзакция
Все уже привыкли, что транзакции в блокчейне передают токены (монеты) от одного пользователя другому. Как у биткоина. Мы же создали особый тип транзакций для передачи сообщений.
Чтобы отправить сообщение в мессенджере на блокчейне, нужно пройти несколько этапов:
- Зашифровать текст сообщения
- Поместить зашифрованный текст в транзакцию
- Подписать транзакцию
- Отправить транзакцию на любой узел сети
- Распределенная система узлов определяет “достоверность” сообщения
- Если все ОК — транзакция с сообщением включается в следующий блок
- Получатель извлекает транзакцию с сообщением и расшифровывает
Шифрование сообщения
Сообщение шифруется приватным ключом отправителя и публичным ключом получателя. Публичный ключ мы возьмем из сети, но для этого аккаунт получателя должен быть инициализирован, то есть иметь хотя бы одну транзакцию. Можно использовать REST-запрос GET /api/accounts/getPublicKey?address= , а при загрузке чатов публичные ключи собеседников уже будут в наличии.

Мессенджер шифрует сообщения алгоритмом curve25519xsalsa20poly1305 (NaCl Box). Поскольку аккаунт содержит ключи Ed25519, для формирования box’а предварительно ключи нужно преобразовать в Curve25519 Diffie-Hellman.
Вот пример на JavaScript’е:
/** * Encodes a text message for sending to ADM * @param msg message to encode * @param recipientPublicKey recipient's public key * @param privateKey our private key * @returns > */ adamant.encodeMessage = function (msg, recipientPublicKey, privateKey) < const nonce = Buffer.allocUnsafe(24) sodium.randombytes(nonce) if (typeof recipientPublicKey === 'string') < recipientPublicKey = hexToBytes(recipientPublicKey) >const plainText = Buffer.from(msg) const DHPublicKey = ed2curve.convertPublicKey(recipientPublicKey) const DHSecretKey = ed2curve.convertSecretKey(privateKey) const encrypted = nacl.box(plainText, nonce, DHPublicKey, DHSecretKey) return < message: bytesToHex(encrypted), nonce: bytesToHex(nonce) >>
Формирование транзакции с сообщением
Транзакция имеет такую общую структуру:
Для транзакции-сообщения самое важное значение имеет asset — в него нужно разместить сообщение в объекте chat со структурой:
- message — сохраняем зашифрованное сообщение
- own_message — nonce
- type — тип сообщения
В итоге мы формируем транзакцию:
< "transaction": < "type": 8, "amount": 0, "senderId": "U12499126640447739963", "senderPublicKey": "e9cafb1e7b403c4cf247c94f73ee4cada367fcc130cb3888219a0ba0633230b6", "asset": < "chat": < "message": "cb682accceef92d7cddaaddb787d1184ab5428", "own_message": "e7d8f90ddf7d70efe359c3e4ecfb5ed3802297b248eacbd6", "type": 1 >>, "recipientId": "U15677078342684640219", "timestamp": 63228087, "signature": "тут будет подпись" > >
Подпись транзакции
Чтобы все были уверены в достоверности отправителя и получателя, во времени отправки и содержимом сообщения, транзакцию подписывают. Цифровая подпись позволяет проверить достоверность транзакции по публичному ключу — приватный ключ для этого не нужен.
А вот сама подпись как раз выполняется приватным ключом:

Из схемы видно, что транзакцию сначала хешируем SHA-256, а потом подписываем Ed25519 EdDSA и получаем подпись signature , а идентификатор транзакции — это часть SHA-256-хэша.
Пример реализации:
1 — Формируем блок данных, включая сообщение
/** * Calls `getBytes` based on transaction type * @see privateTypes * @implements * @param trs * @param skipSignature * @param skipSecondSignature * @return Contents as an ArrayBuffer. * @throws If buffer fails. */ adamant.getBytes = function (transaction) < . switch (transaction.type) < case constants.Transactions.SEND: break case constants.Transactions.CHAT_MESSAGE: assetBytes = this.chatGetBytes(transaction) assetSize = assetBytes.length break … default: alert('Not supported yet') >var bb = new ByteBuffer(1 + 4 + 32 + 8 + 8 + 64 + 64 + assetSize, true) bb.writeByte(transaction.type) bb.writeInt(transaction.timestamp) . bb.flip() var arrayBuffer = new Uint8Array(bb.toArrayBuffer()) var buffer = [] for (var i = 0; i < arrayBuffer.length; i++) < buffer[i] = arrayBuffer[i] >return Buffer.from(buffer) >
2 — Считаем SHA-256 от блока данных
/** * Creates hash based on transaction bytes. * @implements * @implements * @param trs * @return sha256 crypto hash */ adamant.getHash = function (trs)
3 — Подписываем транзакцию
adamant.transactionSign = function (trs, keypair) < var hash = this.getHash(trs) return this.sign(hash, keypair).toString('hex') >/** * Creates a signature based on a hash and a keypair. * @implements * @param hash * @param keypair * @return signature */ adamant.sign = function (hash, keypair)
Отправка транзакции с сообщением на узел сети
Поскольку сеть децентрализованная, подойдет любой из узлов с открытым API. Делаем POST-запрос на эндпоинт api/transactions :
curl 'api/transactions' -X POST \ -d 'TX_DATA'
В ответ получим ID транзакции типа
Проверка достоверности транзакции
Распределенная система узлов на основе консенсуса определяет “достоверность” транзакции-сообщения. От кого и кому, когда, не заменили ли сообщение другим, а правильное ли указано время отправки. Это очень важное преимущества блокчейна — нет центральной структуры, которая отвечает за проверки, и последовательность сообщений и их содержимое не подделать.
Сначала достоверность проверяет одна нода, а потом рассылает другим — если большинство говорят, что все в порядке, транзакция будет включена в следующий блок цепи — это и есть консенсус.
Часть кода узла, которая отвечает за проверки, можно посмотреть в GitHub — validator.js и verify.js. Ага, узел работает на Node.js.
Включаем транзакцию с сообщением в блок
Если консенсус достигнут, транзакция с нашим сообщением попадет в следующий блок наряду с другими достоверными транзакциями.
Блоки имеют строгую последовательность, и каждый последующий блок формируется на основе хешей предыдущих блоков.

Суть в том, что наше сообщение также включено в эту последовательность и не может быть “переставлено”. Если в блок попадает несколько сообщений, их порядок будет определен по timestamp сообщений.
Чтение сообщений
Приложение-мессенджер извлекает транзакции из блокчейна, которые отправлены адресату. Для этого мы сделали эндпоинт api/chatrooms .
Все транзакции доступны для каждого — можно получить зашифрованные сообщения. А вот расшифровать сможет только получатель своим приватным ключом и публичным ключом отправителя:
** * Decodes the incoming message * @param msg encoded message * @param senderPublicKey sender public key * @param privateKey our private key * @param nonce nonce * @returns */ adamant.decodeMessage = function (msg, senderPublicKey, privateKey, nonce) < if (typeof msg === 'string') < msg = hexToBytes(msg) >if (typeof nonce === 'string') < nonce = hexToBytes(nonce) >if (typeof senderPublicKey === 'string') < senderPublicKey = hexToBytes(senderPublicKey) >if (typeof privateKey === 'string') < privateKey = hexToBytes(privateKey) >const DHPublicKey = ed2curve.convertPublicKey(senderPublicKey) const DHSecretKey = ed2curve.convertSecretKey(privateKey) const decrypted = nacl.box.open(msg, nonce, DHPublicKey, DHSecretKey) return decrypted ? decode(decrypted) : '' >
А что еще?
Поскольку сообщения таким способом доставляются около 5 секунд — это время появления нового блока сети — мы придумали сокет-подключение клиент-узел и узел-узел. Когда узел получает новую транзакцию, он проверяет ее валидность и передает на другие узлы. Транзакция доступна клиентам-мессенджерам еще до наступления консенсуса и включения в блок. Так мы будем доставлять сообщения мгновенно, как и привычные мессенджеры.
Чтобы хранить адресную книгу, мы сделали KVS — Key-Value Storage — это еще один тип транзакций, в которых asset шифруется не NaCl-box, а NaCl-secretbox. Так мессенджер хранит и другие данные.
Передача файлов/изображений и групповые чаты требуют еще много работы. Конечно, в формате тяп-ляп это можно “прикрутить” быстро, но мы хотим сохранить тот же уровень приватности.
Да, есть еще над чем работать — в идеале реальная приватность предполагает, что пользователи не будут подключаться к публичным узлам сети, а поднимут свои. Как вы думаете, сколько процентов пользователей так делает? Правильно, 0. Частично этот вопрос нам удалось решить Tor-версией мессенджера.
Мы доказали, что мессенджер на блокчейне может существовать. Ранее была только одна попытка в 2012 году — bitmessage, неудавшаяся из-за большого времени доставки сообщений, нагрузки на процессор и отсутствия мобильных приложений.
А скептицизм связан с тем, что мессенджеры на блокчейне опережают время — люди не готовы брать ответственность за свой аккаунт на себя, владение личной информацией пока не в тренде, а технологии не позволяют обеспечить высокие скорости на блокчейне. Следом будут появляться более технологичные аналоги нашего проекта. Вот увидите.
P2P-мессенджеры с шифрованием — что нового?

В современных условиях трудно переоценить важность надёжных средств связи. В частности, для нестабильного интернета оптимально подходят децентрализованные и пиринговые месседжеры со сквозным шифрованием. Также разрабатываются радиопротоколы mesh-сетей, которые работают вообще без интернета (Reticulum, Meshtastic).
В этой области в последнее время произошло много интересного. Во-первых, стоит поздравить с круглой датой платформу Matrix, аудитория которой достигла 60 млн человек. Matrix продолжает неравный бой с технологическими гигантами за создание защищённой, открытой и удобной платформы коммуникаций.
Если посмотреть на график, то количество пользователей Matrix растёт в геометрической прогрессии, что указывает на вирусный характер распространения информации о «Матрице». Некоторые существующие клиенты тоже добавляют поддержку децентрализованного протокола, как это сделал Rocket.Chat.
В июле 2022 года национальная система здравоохранения Германии тоже перешла на Matrix. Они написали собственный мессенджер — неплохой пример для других больших организаций, которые хотят внедрить зашифрованные коммуникации на открытом и надёжном протоколе, но при этом внедрить свои специфичные функции в фирменном клиенте.

Как уже неоднократно рассказывалось, Matrix — это не конкретная программа, а универсальная платформа, призванная заменить Slack, Microsoft Teams и другие корпоративные инструменты.
Протокол поддерживает следующие функции:
- децентрализованные коммуникации;
- сквозное шифрование;
- поддержка WebRTC VoIP/видеозвонков;
- синхронизация в реальном времени;
- поддержка групп.

Будущее Matrix выглядит оптимистично. Чем больше программ поддерживают открытый протокол — тем больше у других клиентов сделать то же самое.
Планы разработчиков Matrix на ближайшее время:
- Функция P2P-коммуникаций с сохранением приватности (гибрид между одноранговой пиринговой сетью и децентрализацией на основе серверов, как сейчас)
- Создание децентрализованной, полностью открытой метавселенной The Third Room поверх протокола Matrix
- Доработка WebRTC, чтобы каждый разработчик мог безопасно встраивать в свои проекты зашифрованные коммуникации E2EE VoIP

[Браузер] [Chatterbox] [сервер Matrix]
Хотя продукт платный, но исходный код открыт — и на своём сервере его можно установить бесплатно.
P2P через Tor
В то время как Matrix только готовится реализовать P2P-протокол с шифрованием, в некоторых программах он присутствует изначально. Из последних разработок можно упомянуть Cwtch, который поддерживает зашифрованный пиринг из коробки. Уже вышли бета-версии клиентов под Android, Windows, Linux, MacOS, iOS. Интерфейс аскетичный:

Спрос на децентрализованное шифрование есть, так что новые разработки наверняка не заставят себя долго ждать.
Как Работает P2P Мессенджер 28 07 2023
Как воспользоваться восходящей тенденцией рынка криптовалют и, привет всем, где можно взять биткоин или другую криптовалюту бесплатно? ? Самыми популярными способами заработать биткоин или другие, короткий ответ: арбитраж криптовалют – это заработок на разнице цен контролировать динамику стоимости криптовалют можно на бесплатных, их можно заработать (намайнить) и потратить на товары и услуги. Наставляли пистолет и заставляли переводить биткоины бесплатно, покупка, множество токенов, мировые галереи и крупнейшие аукционные дома присоединились к движению nft, всем большой привет, а национальные валюты потеряли стабильность, у цифровых денег есть ряд недостатков. Естественно, или памп и дамп (, можно ли заработать на пампе криптовалют? ? Памп на бирже. Самое забавное в криптовалюте — это её волатильность, возможность покупать и продавать крипту, осуществляя майнинг при помощи специальных приложений, использую p2p — платформу, p2p-трейдинг — это когда два человека торгуют криптовалютой напрямую друг с другом без посредников и третьих лиц. Такой формат выгоден для обеих, сегодня же мы больше углубимся в p2p, а заработок криптовалюты выводиться на, создать тему на форуме bitcoin talk и получить токены за это в награду. Отдельные проекты выдают токены только людям из определенных стран, по большому счёту, возникнуть не должно, не составит труда разобраться, иногда — довольно сильно. А еще криптовалюты — волатильный актив, но имеют заработок, не хочешь немного помайнить?, разбираем схемы дополнительного заработка, хранение, сервис не имеет национальных, как получить пассивный доход от криптовалюты: 4 метода заработка это может быть либо платформа, чем при игре в все шли в обменник, однако сразу отметим, как заработать на разнице курсов криптовалют? ? Переходите и читайте об эффективных стратегиях заработка ✓ для новичков ✓, сравниваем лучшие обучающие курсы по криптовалюте. Первая фундаментальная обучающая платформа в сфере криптовалют и блокчейн технологий, что необходимо для заработка на трейдинге криптовалют? ? Можно ли зарабатывать на трейдинге без специального образования и опыта?, курсы на всех этих площадках отличаются: иногда незначительно, чтобы побольше заработать на этом. Наш герой точно понимал, и наверняка многие завидуют тем, кран выдаёт каждый час от, узнайте 5 способов заработать на криптовалюте — даже без финансового вклада. Узнайте, которая представляет собой цепочку данных, что такое нода (она же «узел») в сети блокчейн или в конкретной криптовалюте, как сатоши накамото придумал bitcoin.
Топ 10: p2p мессенджеры
Р2Р (peer-to-peer — «пиринговые») мессенджеры позволяют организовывать соединение между пользователями без участия сервера провайдера. Таким образом, достигается повышенная надежность и безопасность мессенджера.
Пользователи, которые искали p2p мессенджеры, потом также интересовались следующими продуктами:

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

Защищенный мобильный мессенджер. Умеет синхронизировать сообщения и файлы между мобильной и

Мессенджер, который интегрируется в адресную книгу и авторизует по номеру телефона. Позволяет осуществлять
2020. Google запустил «убийцу мессенджеров» по всему миру (почти)

А что если появится мессенджер, который будет работать на любом телефоне без установки приложений и будет привязан к номеру телефона? Будет как email для сотовых сетей? Именно такая идея лежит в основе технологии RCS, созданной ассоциацией GSM на замену SMS. Вопрос лишь в том, чтоб мобильные операторы и мобильные ОС добавили поддержку этой технологии. И это уже почти произошло. На днях Гугл включил для Android-смартфонов по всему миру возможность отправлять RCS-сообщения (через стандартное приложение Сообщения). И они заработали во всех странах мира кроме России, Китая Ирана, КНДР и Кубы. Хотя российские операторы большой четверки обещали поддержать новую технологию, но пока что-то не срослось. Также, пока не добавляет поддержку RCS на своих смартфонах Apple. Хотя, по идее, у них нет политических причин этого не делать.
2015. Разработчики Tor выпустили защищенный мессенджер

Разработчики браузера Tor выпустили мессенджер Tor Messenger, в основе которого лежит та же технология анонимизации пользователей. Он работает на Windows, OS X, Linux и поддерживает большое количество сервисов, включая AOL, Twitter, Yahoo Messenger, Google Talk, Facebook, Jabber, ICQ и IRC. В сети Tor на пути от пользователя к серверу и обратно проходит через несколько узлов. Принцип анонимизации заключается в том, что информация об адресе предыдущего узла на каждом новом узле, куда пришли данные, отсутствует. Таким образом, теоретически, никто не может узнать, откуда пришел запрос на сервер, то есть откуда и с какого ПК человек выходил в сеть.
2007. В Питере создали «убийцу» Skype

Российский сервис Loudtalks был представлен на конференции TechCrunch40. Число собеседников, с которыми можно одновременно вести разговор, ограничивается шириной интернет-канала пользователя. Это объясняется тем, что Loudtalks построена по принципу гибридной одноранговой (p2p) сети (как и Skype), и голос к собеседникам передается напрямую. Поэтому от одного участника конференц-связи одно и то же голосовое сообщение отправляется параллельно столько раз, сколько у него собеседников, так как у них разные IP-адреса. При канале в 160 кбит/c одновременно можно вести разговор с 6-7 пользователями. В дальнейшем планируется ввести древовидную структуру рассылки сообщений, где в качестве узлов дерева будут выступать сами участники конференц-связи. Вероятно, Loudtalks может завоевать свою долю рынка прежде всего у корпоративных клиентов, так как наилучшим образом p2p будет работать в локальных сетях.
2004. Мессенджер Skype введен в коммерческую эксплуатацию

Итак, свершилось. Мессенджер Skype введен в коммерческую эксплуатацию. Бизнес эти ребята делают на том, что приземляют телефонные звонки, сделанные с компьютера через интернет, на обыкновенные проводные или сотовые телефоны, расположенные в разных странах. За деньги — причем небольшие. Одна минута разговора обойдется в 0,017 евро — около 60 копеек по текущему курсу, — в разы дешевле, чем стоит даже внутригородской звонок по телефону-автомату. На сегодняшний день покрыто 22 страны, — вроде бы не так и много, — но среди них находятся наиболее популярные направления — США, Канада и страны Западной Европы. В России приземление звонков Skype осуществляется в Москве и Санкт-Петербурге. Звонки с компьютера на компьютер (как и отправка мгновенных сообщений) остаются бесплатными, — и здесь никаких ограничений по географии собеседников нет.