Выпускная Квалификационная Работа по теме "Разработка децентрализованной системы мгновенного обмена сообщениями"
Демонстрационное видео практической части: https://vk.com/video-209938778_456239019
Идея заключалась в создании мессенджера на основе P2P децентрализации и, в частности, блокчейна. Только вот вместо блокчейна я в своей работе использовал blockDAG - ориентированного ациклического графа, который поддерживает параллельный майнинг, тем самым увеличивающий пропускную способность всей системы.
Система регистрации основывалась на blockDAG, соединение между двумя абонентами образовывалось по протоколу, придуманным лично мной.
Мотивация майнеров основывается на получении валютного вознаграждения, т.е. в данном ВКР поверх blockDAG реализована криптовалюта (хотя и без конкретной реализации вычисления/переводов)
На самом деле в больше степени данный стенд - симуляция. Здесь, конечно, используются настоящие алгоритмы для работы с blockDAG, по-настоящему реализованы протокол рукопожатия и майнинг (из-за чего к слову интерфейс зависает на видео). Но вот p2p не было реализовано, а соединение на самом деле симулировалось timeout`ами и хэш мапами.
Но свою цель демонстрация выполнила - в частности, декан выпал в астрал и все сидели с открытыми ртами.
Протокол (рукопожатие).
Пусть существуют два абонента А и Б, которые хотят создать безопасное соединение и начать общаться.
- Генерация уникальных идентификаторов и ключей. Каждый пользователь создает свой уникальный идентификатор, представляющий собой 36-символьный UUID, и генерирует пару публичного и секретного ключей, используя криптографический алгоритм ECDSA на эллиптической кривой secp256k1.
- Регистрация в децентрализованной сети blockDAG. Абоненты создают соответствующие регистрационные транзакции, добавляют в них свой уникальный идентификатор и публичный ключ, помещают транзакцию в блок рядом с транзакциями других пользователей и отправляют его в сеть для майнинга и последующей валидации.
- Абоненты удостоверяются, что их транзакции попали в сеть и были замайнены.
- Инициирование связи между абонентами. Абонент А желает установить контакт с абонентом Б. Абонент А получает идентификатор абонента Б любым способом.
- Абонент А осуществляет фильтрацию графа и получает блок и регистрационную транзакцию с публичным ключом пользователя Б. Абонент Б выполняет те же самые действия.
- С помощью пиринговой сети и соответствующего алгоритма, абонент А находит абонента Б. Алгоритм идет на выбор клиента, либо зависит от реализации протокола.
- Абонент А генерирует временные ключи для протокола обмена ключами по методу эллиптической кривой на secp256k1 Диффи-Хеллмана (ECDH), абонент Б делает то же самое.
- Абонент А создает полезную нагрузку с собственным идентификатором и временным ECDH публичным ключом, подписывает хэш (через SHA-256) нагрузки своим публичным ключом из blockDAG. Абонент Б делает то же самое.
- Абоненты отправляют друг другу полученные полезные нагрузки с собственными подписями.
- Абоненты проверяют целостность и авторство полученных нагрузок. Если проверить не удалось, или проверка выдает отрицательный ответ, то сразу закончить следующие действия протокола.
- Используя временные ECDH публичные ключи друг друга и свои секретные ECDH ключи, оба генерируют общий AES ключ.
Связь установлена.
После этого пользователи могут общаться, передавая зашифрованные общим секретным ключом сообщения между собой по незащищенному открытому каналу.
1, 2 и 3 пункты реализованы:
Абонент отправляет блок регистрации в пул app\messaging\providers\SimpleProvider.ts (61 строка)
Майнер ловит блок из пула и пытается замайнить его app\blockchain\miner.ts (121 строка)
Остальная часть рукопожатия реализована: в app\messaging\messenger.ts (137 строка)
Далее абоненты отправляют друг другу сообщения, зашифрованные через AES по любому каналу связи напрямую, либо через посредника.
В таком графе могут находится как регистрационные, так и валютные транзакции вместе. Синим выделены блоки в blockDAG, которые являются легальными после проверки графа алгоритмом orderDAG. Черные блоки так же остаются в графе, но они не считаются легальными и в последующем должны игнорироваться участниками сети.
English: Graduation Qualification Work on the topic "Development of a decentralized instant messaging system"
Demo video of the practical part: https://vk.com/video-209938778_456239019
The idea was to create a messenger based on P2P decentralization and, in particular, blockchain. Only instead of blockchain, in my work I used blockDAG - a directed acyclic graph that supports parallel mining, thereby increasing the throughput of the entire system.
The registration system was based on blockDAG, the connection between two subscribers was formed according to a protocol invented by me personally.
The motivation of miners is based on receiving a currency reward, i.e. in this thesis, cryptocurrency is implemented on top of blockDAG (although without a specific implementation of calculations/transfers)
In fact, this stand is more of a simulation. Here, of course, real algorithms are used to work with blockDAG, the handshake protocol and mining are truly implemented (which is why, by the way, the interface freezes during the video). But p2p was not implemented, and the connection was actually simulated by timeouts and hash maps.
But the demonstration fulfilled its goal - in particular, the dean fell into the astral plane and everyone sat with their mouths open.
Protocol (handshake).
Let there be two subscribers A and B who want to create a secure connection and start communicating.
- Generating unique identifiers and keys. Each user creates their own unique identifier, which is a 36-character UUID, and generates a pair of public and private keys using the ECDSA cryptographic algorithm on the elliptic curve secp256k1.
- Registering in the decentralized blockDAG network. Subscribers create the corresponding registration transactions, add their unique identifier and public key to them, place the transaction in a block next to the transactions of other users and send it to the network for mining and subsequent validation.
- Subscribers verify that their transactions entered the network and were mined.
- Initiating communication between subscribers. Subscriber A wants to establish contact with subscriber B. Subscriber A obtains the identifier of subscriber B in any way.
- Subscriber A filters the graph and receives a block and a registration transaction with the public key of user B. Subscriber B does the same.
- Using a peer-to-peer network and the corresponding algorithm, Subscriber A finds Subscriber B. The algorithm is at the client's discretion or depends on the protocol implementation.
- Subscriber A generates temporary keys for the elliptic curve key exchange protocol on secp256k1 Diffie-Hellman (ECDH), Subscriber B does the same.
- Subscriber A creates a payload with its own identifier and a temporary ECDH public key, signs the hash (via SHA-256) of the payload with its public key from blockDAG. Subscriber B does the same.
- Subscribers send each other the received payloads with their own signatures.
- Subscribers check the integrity and authorship of the received payloads. If the check fails, or the check returns a negative answer, then immediately terminate the following protocol steps.
- Using each other's temporary ECDH public keys and their own secret ECDH keys, both generate a common AES key.
Connection established.
After this, users can communicate by sending messages encrypted with a common secret key between themselves over an unprotected open channel.
Items 1, 2 and 3 are implemented:
The subscriber sends a registration block to the pool app\messaging\providers\SimpleProvider.ts (line 61)
The miner catches a block from the pool and tries to mine it app\blockchain\miner.ts (line 121)
The rest of the handshake is implemented: in app\messaging\messenger.ts (line 137)
Then the subscribers send each other messages encrypted via AES via any communication channel directly or through an intermediary.
This column can contain both registration and currency transactions together. Blue blocks in blockDAG are those that are legal after the graph is verified by the orderDAG algorithm. Black blocks also remain in the graph, but they are not considered legal and should be ignored by network participants.

