Простой мессенджер на базе DHT Kademlia.
Все сообщения распределённо хранятся на нодах участников сети, при этом система переживает выходы участников и перераспределяет нагрузку при добавлении новых.
Допустим Bob и Alice хотят обмениваться сообщениями:
- Bob и Alice обмениваются своими публичными ключами pkbob и pkalice
- Alice хочет отправить первое зашифрованное сообщение - она кладет его на адрес
h(pkalice, pkbob)
- Alice добавляет в сообщение адрес её следующего сообщения
1st message = (key=h(pkalice, pkbob), encrypt(message(text1, next_key=h(key, text1), ts=t1)))
- Alice отправляет второе сообщение по сгенерированному адресу
2nd message = (key=next_key, encrypt(message(text2, next_key=h(next_key, text2), ts=t2)))
- Образуется цепочка сообщений Alice, которую могут читать как Alice, так и Bob
- Bob аналогично пишет сообщения в цепочку, начиная с адреса
h(pkbob, pkalice)
- Для восстановления диалога Alice или Bob считывают обе цепочки, начиная с генезисных ключей, и мержат по timestamp-ам
- Поднимаем dht ноду на сервере, до которого смогут достучаться остальные участники сети
cd messenger
uvicorn server:app
- Подключаемся к ноде консольным клиентом
cd app
python3 app.py