Skip to content

slavashell/dht-messenger

Folders and files

NameName
Last commit message
Last commit date

Latest commit

bed763c · Mar 31, 2022

History

79 Commits
Mar 31, 2022
Mar 31, 2022
Mar 23, 2022
Mar 23, 2022
Mar 23, 2022
Mar 24, 2022
Mar 30, 2022
Mar 31, 2022

Repository files navigation

dht-messenger

Простой мессенджер на базе DHT Kademlia.

Все сообщения распределённо хранятся на нодах участников сети, при этом система переживает выходы участников и перераспределяет нагрузку при добавлении новых.

Приницип работы

Допустим Bob и Alice хотят обмениваться сообщениями:

  1. Bob и Alice обмениваются своими публичными ключами pkbob и pkalice
  2. Alice хочет отправить первое зашифрованное сообщение - она кладет его на адрес h(pkalice, pkbob)
  3. Alice добавляет в сообщение адрес её следующего сообщения
  4. 1st message = (key=h(pkalice, pkbob), encrypt(message(text1, next_key=h(key, text1), ts=t1)))
  5. Alice отправляет второе сообщение по сгенерированному адресу
  6. 2nd message = (key=next_key, encrypt(message(text2, next_key=h(next_key, text2), ts=t2)))
  7. Образуется цепочка сообщений Alice, которую могут читать как Alice, так и Bob
  8. Bob аналогично пишет сообщения в цепочку, начиная с адреса h(pkbob, pkalice)
  9. Для восстановления диалога Alice или Bob считывают обе цепочки, начиная с генезисных ключей, и мержат по timestamp-ам

Развертывание

  1. Поднимаем dht ноду на сервере, до которого смогут достучаться остальные участники сети
cd messenger
uvicorn server:app
  1. Подключаемся к ноде консольным клиентом
cd app
python3 app.py