Skip to content

About

Simple group chat written in Python

Resources

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

p2pchat

Безопасный консольный P2P-чат: попарные каналы Noise, групповой меш, передача файлов и бот с играми. Без сервера, без учётных записей, без хранения переписки.

Noise_XX_25519_ChaChaPoly_BLAKE2s   хендшейк со скрытием идентичности
ротация ключей свежим DH            forward + post-compromise secrecy
попарный меш до 8 участников        никаких общих групповых ключей
сверка SAS голосом                  защита от активного MITM

Пять минут до первого сообщения

pip install cryptography
python -m p2pchat keygen --nick alice
python -m p2pchat invite --address 203.0.113.10:9333

Приглашение — одна строка; отдайте её остальным, а их приглашения примите:

python -m p2pchat roster new друзья
python -m p2pchat roster add-invite p2pchat:KAZFASIB…
python -m p2pchat invite --group          # раздать готовый ростер всем

Запускайте чат:

python -m p2pchat chat --listen 0.0.0.0:9333
python -m p2pchat chat --listen 0.0.0.0:9333 --discover lan   # если все в одной сети

При соединении обе стороны увидят одинаковый код из тридцати цифр. Прочитайте его собеседнику голосом; совпал — введите /verify <ник>. Без этого шага вся криптография ниже не имеет значения.

Документация

Документ О чём
usage.md Установка, все команды, русские синонимы, оформление
connecting.md Все сценарии подключения — восемь случаев с настройкой роутера
security.md Модель угроз, что защищено и что нет, сверка SAS, смена ключа
games.md Четыре в ряд, дурак, мафия, виселица; как добавить свою игру
bot.md Запуск, ключ бота, команды, чего бот не делает
protocol.md Что едет по проводу: кадры, хендшейк, конверты, версии
troubleshooting.md Если не соединяется, нет цвета, не находит в сети
development.md Структура, тесты, инварианты, что делать дальше

Честно о границах применимости

Проект рассчитан на небольшой круг людей, которые доверяют друг другу.

Хендшейк проверен на официальных тест-векторах Noise, свойства безопасности покрыты тестами, чужой ввод обрабатывается с недоверием. Но транспортный слой поверх Noise — собственный и с чужими реализациями не встречался, стороннего аудита не было, метаданные видны наблюдателю, а от анализа трафика защиты нет.

Для переписки и игр с друзьями — добротная вещь. Для человека, которому угрожает конкретный противник с ресурсами, — нет, и доработками это не лечится. Там ответ прежний: Signal.

Тесты

mkdir -p tests/vectors && curl -L -o tests/vectors/cacophony.json https://raw.githubusercontent.com/mcginty/snow/master/tests/vectors/cacophony.txt
python -m pytest tests -q

240 тестов: свойства безопасности, сценарии на настоящих сокетах и генеративные проверки — обстрел разборщиков мусором и тысячи случайных партий в дурака.

About

Simple group chat written in Python

Resources

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages