https://github.com/oditynet/tsss
cryptochat RSA
https://github.com/oditynet/tsss
aes chat crypto cryptochat python rsa
Last synced: 23 days ago
JSON representation
cryptochat RSA
- Host: GitHub
- URL: https://github.com/oditynet/tsss
- Owner: oditynet
- License: gpl-3.0
- Created: 2025-12-20T19:46:01.000Z (6 months ago)
- Default Branch: main
- Last Pushed: 2025-12-27T21:45:20.000Z (6 months ago)
- Last Synced: 2025-12-29T22:46:10.352Z (6 months ago)
- Topics: aes, chat, crypto, cryptochat, python, rsa
- Language: Python
- Homepage:
- Size: 517 KB
- Stars: 1
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README

tSSS - это защищенный чат с end-to-end шифрованием, реализованный на Python. Приложение обеспечивает безопасную передачу сообщений и файлов между пользователями с использованием современных криптографических технологий.
Идея: сервер принимает на регистрацию логин и открытый ключ. Любой может положит ключ и зарегистрироваться. Сервер отвечает только за защиту выложенного ключа и его подмену. Пользователь выбирает с кем общаться. Ваш закрытый ключ лежит у вас, а открытый публикуется на сервере. Отправка файла и текста осуществляется через шифрованный канал. Если вы сидите за NAT , то проект https://github.com/ekzhang/bore/ поможет вам выбраться наружу. Его минус - статический порт может в любое время кем-то заняться и вас переключит.
# 🛡️ Криптографические технологии
Асимметричное шифрование (RSA)
Библиотека: cryptography.hazmat.primitives.asymmetric.rsa
Длина ключа: 4096 бит
Использование:
- Генерация пары ключей для каждого пользователя
- Шифрование сессионных ключей
- Проверка подлинности ключей (верификационный код)
- Процесс верификации ключей с использованием SHA-256 хэшей
- Симметричное шифрование (AES через Fernet)
- Библиотека: cryptography.fernet.Fernet
- Алгоритм: AES-128 в режиме CBC с HMAC-SHA256
- Длина ключа: 32 байта (256 бит) после base64-кодирования
Хэш-функции
Алгоритм: SHA-256
Использование:
- Генерация верификационных кодов (первые 20 байт хэша)
- PBKDF2 для получения ключа из пароля пользователя
- Создание уникальных идентификаторов сообщений
Производные ключи (PBKDF2)
Алгоритм: PBKDF2-HMAC-SHA256
Параметры:
- Длина ключа: 32 байта
- Соль: 16 случайных байт
- Итерации: 700,000
Использование: Преобразование пароля пользователя в симметричный ключ для шифрования приватного ключа RSA
# Типы сообщений (JSON протокол)
Клиент → Сервер
- register Регистрация с публичным ключом username, public_key
- search Поиск пользователей username, online_only
- get_key Запрос публичного ключа username
- message Отправка сообщения to, message, session_key, message_id
- typing Статус печатания to, is_typing
- delivery_status Статус доставки message_id, status, to
- read_receipt Уведомление о прочтении message_id, to
- ping Проверка соединения
Сервер → Клиент
- register_ok Подтверждение регистрации message, username
- search_results Результаты поиска results, search_term
- key_response Ответ с публичным ключом username, public_key, online
- message Входящее сообщение from, message, session_key, message_id
- typing Статус печатания от других from, is_typing
- delivery_status Обновление статуса message_id, status
- read_receipt Уведомление о прочтении другими message_id, reader
- error Ошибки message
- pong Ответ на ping -
# Запуск
```
bore local 5555 --to bore.pub --port 9435
python server.py
```
```
python client.py
```
# Telnet syntax
```
telnet bore.pub 9435
```
```
{"type":"register","username":"vasya","public_key":"-----BEGIN PUBLIC KEY-----
\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA6P5g9Nn9h0QxX2zJ7M8D\nLwT3f7Hv4X8Kk9mD5tRwV1Y5X6sT7b2N1P3qZ8rF4aG2yV9cL1bN3pQ5tRwV1Y5\nX6sT7b2N1P3qZ8rF4aG2yV9cL1bN3pQ5tRwV1Y5X6sT7b2N1P3qZ8rF4aG2yV9c\nL1bN3pQ5tRwV1Y5X6sT7b2N1P3qZ8rF4aG2yV9cL1bN3pQ5tRwV1Y5X6sT7b2N1\nP3qZ8rF4aG2yV9cL1bN3pQ5tRwV1Y5X6sT7b2N1P3qZ8rF4aG2yV9cL1bN3pQ5t\nRwV1Y5X6sT7b2N1P3qZ8rF4aG2yV9cL1bN3pQ5tRwV1Y5X6sT7b2N1P3qZ8rF4a\nG2yV9cL1bN3pQ5tRwV1Y5X6sT7b2N1P3qZ8rF4aG2yV9cL1bN3pQ5tRwV1Y5X6s\n-----END PUBLIC KEY-----"}
```
```
"type":"ping","username":"vasya"}
```
```
{"type":"search","username":"alex","online_only":false}
```
```
{"type":"get_key","username":"alex"}
```