Топ 10: p2p мессенджеры
Р2Р (peer-to-peer — «пиринговые») мессенджеры позволяют организовывать соединение между пользователями без участия сервера провайдера. Таким образом, достигается повышенная надежность и безопасность мессенджера.
Пользователи, которые искали p2p мессенджеры, потом также интересовались следующими продуктами:

Система управления ИТ, бизнес-услугами и сервисным обслуживанием. 86 млн пользователей.

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

Защищенный мобильный мессенджер. Умеет синхронизировать сообщения и файлы между мобильной и
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 осуществляется в Москве и Санкт-Петербурге. Звонки с компьютера на компьютер (как и отправка мгновенных сообщений) остаются бесплатными, — и здесь никаких ограничений по географии собеседников нет.
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-мессенджеры, которые работают без интернета, используя mesh-сеть по протоколам Wi-Fi Direct, Bluetooth, Apple Multipeer Connectivity Framework, ANT+, LoRa и др.
Для эффективной коммуникации приложение нужно скачать максимальному количеству человек до начала блокады интернета. Иначе придётся искать файлы после блокады. Человек с нужными файлами станет настоящим авторитетом в офисе или в классе (как это было в Беларуси в августе 2020 года — за файлами Psiphon люди реально приезжали из других микрорайонов города).
Вообще, вся история сетей wireless mesh намекает на то, что эта технология крайне не нравится правоохранительным органам.
Mesh-сети
Приложения типа FireChat создают mesh-сеть, используя Bluetooth и прямые подключения через Wi-Fi. Они обеспечивают обмен сообщениями и фотографиями в офлайне между устройствами, находящимися друг от друга на расстоянии примерно до 60 метров.
Все пользователи образуют единую сеть, которая расширяется с ростом количества устройств. На пути к получателю (получателям) сообщения передаются от одного устройства к другому.
Другими словами, вам достаточно приблизиться на 60 метров к ближайшему пользователю — и вы можете отправить сообщение кому угодно. Каждый юзер — нода в сети. Без интернета.
Поэтому чем больше людей пользуются приложением, тем больше сеть, и тем лучше она работает. Кстати, в этом фундаментальное отличие mesh-систем от большинства других компьютерных сетей и сетевых технологий, в том числе сетей сотовой связи.
Если какой-нибудь узел mesh-сети вдруг выйдет в интернет, то сообщения пакетом от всех пользователей уйдут получателям по всему миру.
Особенно удобно, если каналы или комнаты в мессенджере создаются автоматически и объединяют людей, которые находятся рядом с друг другом (многоквартирный дом, стадион, концертный зал).
Для передачи текстовых сообщений можно приспособить практически любую mesh-сеть, даже сеть из геометок Apple AirTag, которые вообще-то предназначены не для общения людей, а для поиска утерянных вещей. В мае 2021 года хакерам удалось расшифровать трафик AirTag и передать по сети Apple Find My произвольный текст под видом оригинальных зашифрованных сообщений с GPS-координатами. Скорость передачи составила 3 байта в секунду. Задержка в сети — от 1 до 60 минут.
Подобные mesh-сети есть также у Samsung (Smart Things) и Amazon (Sidewalk) на протоколе LoRa. В принципе, можно использовать эту инфраструктуру для пирингового обмена сообщениями, а также для съёма данных с устройств вне зоны доступа в интернет.
Трагедия FireСhat
FireChat — проприетарное приложение от американской компании Open Garden. Эта фирма прекратила дальнейшую разработку, не открыв исходники.
Последняя версия приложения: 9.0.14 (копия на 4pda) вышла полтора года назад (примечание: доступ к сайту 4pda затруднён с территории РФ).

FireChat
Первая версия FireChat появилась в марте 2014 года под iOS, в апреле — под Android. Среди сооснователей Open Garden и разработчиков программы — Станислав Шалунов и Грег Хазел из компании BitTorrent, где они делали торрент-клиент uTorrent (200 млн пользователей). Там и познакомились.
Вероятно, предприниматели рассчитывали, что FireСhat станет настолько же успешным, как файлоообменные P2P-приложения. Если представить себе эту картину, то весь мир может объединиться в mesh-сеть, а интернет становится практически не нужен! Даже хостинг сайтов теоретически можно размазать в распределённой сети. Такая фантазия.
Очень быстро FireСhat приобрёл популярность в Ираке после того, как местное правительство ввело ограничения на использование интернета, а затем то же самое произошло в Гонконге, во время массовых протестов 2014 года.
Главной проблемой FireСhat во время массовых протестов в Гонконге стала безопасность. Сама архитектура открытой mesh-сети предполагает, что все пользователи приложения «светятся» как радиомаячки на расстоянии 60 метров, а то и больше. Так что полиции отловить их было очень просто. Наличие программы на телефоне однозначно доказывало вину. Можно предположить, что сотни или тысячи пользователей были арестованы благодаря FireСhat. К тому же, в приложении не использовалось шифрование, так что никакие сообщения не были действительно приватными.
Возможно, критика от специалистов по ИБ повлияла на решение американской компании Open Garden прекратить разработку и не публиковать исходники. Ну или ребята увидели, что всемирная популярность торрентов им не светит, а развитие программы пошло совсем не по тому пути.
Когда появился FireСhat, это была единственная программа такого рода, которая позволяла пользователям создавать mеsh-сети в офлайновом режиме (без интернета) и обмениваться сообщениями 1 .
Инструмент, который задумывался для общения людей, де-факто превратился в наводку для репрессий и физического насилия. Пожалуй, в этом есть какая-то трагедия.

Фото из статьи «FireChat — мессенджер, на котором работают протесты в Гонконге», The Guardian
Тем более обидно, если FireСhat создавали специально для Гонконга, как разработку аналогичного приложения Commotion Wireless в 2011 году профинансировал госдепартамент США в преддверии Арабской весны. Хотели как лучше, а получилось как всегда…
После FireСhat фирма Open Garden торговала электронными сим-картами (eSIM), продвигала свою криптовалюту, но в последние годы про неё ничего не слышно.
Вообще, приложение FireСhat было не очень качественным. Во-первых, закрытый код. Во-вторых, для регистрации обязательно (!) был нужен доступ в интернет, хотя потом оно работало в офлайне. Короче, странная программа. Может и хорошо, что разработчики её похоронили.
Рация Zello
Близкой по логике функционирования является интернет-рация Zello, которая заблокирована в Российской Федерации в апреле 2017 года.
Радио работает по принципу уоки-токи или push-to-talk. Основное преимущество — возможность слушать голосовые сообщения по громкой связи в реал-тайме, вообще не притрагиваясь к смартфону и в то же время быть на связи с большим количеством пользователей.
Хотя здесь передаётся не текст/картинки, а звук, но принцип работы такой же — через mesh-сеть, без интернета. Близкие друг к другу пользователи соединяются друг с другом напрямую и передают сообщения дальше, по цепочке. Что важно, здесь используется сквозное шифрование (E2E).
В России приложение получило особую популярность среди дальнобойщиков и других автомобилистов, поскольку очень удобно (и приятно) беседовать с попутчиками, которые едут по той же трассе. Они подскажут о радаре в кустах, о ДТП на дороге и т. д. Репрессии со стороны государства начались после массовых протестов дальнобойщиков в связи с введением обязательной платы миллиардеру Игорю Ротенбергу за проезд тяжёлых грузовиков по дорогам России (система «Платон»). Координация протестов осуществлялась через Zello, поэтому программу решили заблокировать.

Это был первый прецедент, когда власти попытались сломать мессенджер, работающий по VPN. Понадобился целый год, чтобы заблокировать свыше 4 тыс. IP-адресов из облака AWS, что не принесло успеха. Тогда РКН пошёл на шантаж компании Amazon, угрожая заблокировать 26 подсетей AWS, в сумме 13,5 млн адресов.
Компания Amazon оказалась не готова к войне — и отказалась предоставлять услуги Zello. Лишившийся облачной инфраструктуры сервис было легко заблокировать.
После успеха с блокировкой облачной VPN-инфраструктуры Zello, в 2018 году власти решили, что смогут успешно заблокировать такую же облачную инфраструктуру мессенджера Telegram. Но здесь нашла коса на камень: Павел Дуров инвестировал миллионы долларов в покупку всё новых и новых инстансов AWS, его брат Николай с коллегами запрограммировал систему обхода блокировок через прокси, а компании Amazon и Google выдержали блокировку своих подсетей в РФ. В итоге властям пришлось заблокировать 18 миллионов IP-адресов AWS и Google Cloud, что нарушило работу крупных ритейл-компаний, банков из топ-20, частных клиник и тысяч бизнесов в России. После двух лет выматывающей борьбы государство сдалось: руководителя Роскомнадзора уволили, Telegram разблокировали, а IP-адреса облачных сервисов удалили из чёрного списка.
Криптомессенджер Briar
Четыре года назад, в июле 2017 года, вышла первая публичная бета-версия мессенджера Briar, который работает через Tor или в офлайне, через пиринг. Его разработка продолжалась аж три года. Но продукт вышел на редкость качественный.
Это уже честный опенсорс. Приложение можно собрать из исходников (пошаговая инструкция для Android Studio). Оно доступно в каталогах приложений (например, Google Play) и отлично поддерживается: последняя версия 1.2.20 от 2 апреля 2021 года. Реализована стойкая криптография, сквозное шифрование.
По умолчанию мессенджер работает через интернет по протоколу Tor (луковичная маршрутизация). В этом случае программа создаёт на устройстве пользователя скрытый сервис Tor и соединяется со скрытыми сервисами Tor других людей из списка контактов. В случае отсутствия интернета она переходит на peer-to-peer коммуникации через Wi-Fi Direct, локальную сеть или Bluetooth.
Разумеется, при регистрации в криптомессенджере не требуется указывать номер телефона.
Поддерживает передачу сообщений (но не файлов), приватные группы, блоги/статусы и импорт RSS. Есть несколько полезных функций, таких как блокировка приложения (по PIN-коду).
Система относительно защищена от посторонних: добавление новых контактов производится по QR-коду с другого телефона (подразумевается физическое присутствие лица) или через обмен контактами, или по уникальной ссылке. Таким образом, в контакты не должен попасть человек, с которым никто не знаком.

Briar Project — некоммерческий проект, который сейчас ведут шесть добровольцев. Код на 97,7% написан на Java (+немного Kotlin, Python и Ruby) и поставляется под GPLv3. Вскоре после первого релиза код прошёл независимый аудит безопасности от компании Cure53. Она известна своим аудитом проектов SecureDrop, Cryptocat и Dovecot. Так что Briar — действительно надёжный вариант для пиринговых коммуникаций.
Единственный минус, что приложение выпущено только в версии под Android. Официальной версии для iOS нет и не будет, потому что «эта платформа накладывает жёсткие ограничения на разработчиков, не позволяющие реализовать некоторые идеи P2P, и является закрытым проприетарным продуктом».
Но исходный код открыт, так что теоретически кто угодно может попробовать сделать стороннюю реализацию Briar под iOS, например.
- Руководство пользователя Briar (на русском языке)
Matrix, Riot, Element
Официальный клиент Element (бывший Riot) для относительно децентрализованной сети Matrix не поддерживает пиринговые коммуникации в офлайн-режиме и формирование mesh-сети.
В последнее время этот клиент получил некоторую известность. Сейчас количество пользователей Matrix/Element сравнимо с Briar или больше. У него есть сквозное шифрование, мосты в IRC, Slack, Telegram, Jitsi Meet и др. Но именно пиринга в офлайне нет.
См. также:
P. S. Кроме FireСhat, протестующие в Гонконге использовали малоизвестное мексиканское приложение Bridgefy, которое тоже умеет формировать mesh-сеть и передавать сообщения в офлайне. В октябре 2020 года приложение перешло на криптографический протокол Signal.
1 На самом деле ещё раньше были другие приложения, такие как Serval Mesh от проекта Serval Project или древний Commotion Wireless от Open Technology Initiative (с финансированием госдепа), но все эти разработки давно прекращены [вернуться]
На правах рекламы
Мощные виртуальные серверы на базе процессоров AMD EPYC для любых целей, в том числе для установки VPN.
Как работает децентрализованный мессенджер на блокчейне
В начале 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, неудавшаяся из-за большого времени доставки сообщений, нагрузки на процессор и отсутствия мобильных приложений.
А скептицизм связан с тем, что мессенджеры на блокчейне опережают время — люди не готовы брать ответственность за свой аккаунт на себя, владение личной информацией пока не в тренде, а технологии не позволяют обеспечить высокие скорости на блокчейне. Следом будут появляться более технологичные аналоги нашего проекта. Вот увидите.