An open API service indexing awesome lists of open source software.

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

Awesome Lists containing this project

README

          

GitHub code size in bytes
GitHub license
GitHub commit activity
GitHub Repo stars




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"}
```