Безопасный консольный 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.txtpython -m pytest tests -q240 тестов: свойства безопасности, сценарии на настоящих сокетах и генеративные проверки — обстрел разборщиков мусором и тысячи случайных партий в дурака.