{"id":34556944,"url":"https://github.com/oditynet/tsss","last_synced_at":"2026-05-29T10:31:26.840Z","repository":{"id":329642400,"uuid":"1120247149","full_name":"oditynet/tsss","owner":"oditynet","description":"cryptochat RSA","archived":false,"fork":false,"pushed_at":"2025-12-27T21:45:20.000Z","size":529,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-12-29T22:46:10.352Z","etag":null,"topics":["aes","chat","crypto","cryptochat","python","rsa"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/oditynet.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-12-20T19:46:01.000Z","updated_at":"2025-12-27T21:45:23.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/oditynet/tsss","commit_stats":null,"previous_names":["oditynet/tsss"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/oditynet/tsss","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oditynet%2Ftsss","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oditynet%2Ftsss/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oditynet%2Ftsss/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oditynet%2Ftsss/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/oditynet","download_url":"https://codeload.github.com/oditynet/tsss/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oditynet%2Ftsss/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33648530,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-29T02:00:06.066Z","response_time":107,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["aes","chat","crypto","cryptochat","python","rsa"],"created_at":"2025-12-24T08:30:28.283Z","updated_at":"2026-05-29T10:31:26.833Z","avatar_url":"https://github.com/oditynet.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cimg alt=\"GitHub code size in bytes\" src=\"https://img.shields.io/github/languages/code-size/oditynet/tSSS\"\u003e\u003c/img\u003e\n\u003cimg alt=\"GitHub license\" src=\"https://img.shields.io/github/license/oditynet/tSSS\"\u003e\u003c/img\u003e\n\u003cimg alt=\"GitHub commit activity\" src=\"https://img.shields.io/github/commit-activity/m/oditynet/tSSS\"\u003e\u003c/img\u003e\n\u003cimg alt=\"GitHub Repo stars\" src=\"https://img.shields.io/github/stars/oditynet/tSSS\"\u003e\u003c/img\u003e\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"https://github.com/oditynet/tSSS/blob/main/logo.jpg\" width=\"250\" height=\"auto\" /\u003e\n\u003c/div\u003e\n\n\n\u003ca name=\"readme-left\"\u003e\u003c/a\u003e\n\u003cdiv align=\"left\"\u003e\n\ntSSS - это защищенный чат с end-to-end шифрованием, реализованный на Python. Приложение обеспечивает безопасную передачу сообщений и файлов между пользователями с использованием современных криптографических технологий.\nИдея: сервер принимает на регистрацию логин и открытый ключ. Любой может положит ключ и зарегистрироваться. Сервер отвечает только за защиту выложенного ключа и его подмену. Пользователь выбирает с кем общаться. Ваш закрытый ключ лежит у вас, а открытый публикуется на сервере. Отправка файла и текста осуществляется через шифрованный канал. Если вы сидите за NAT , то проект https://github.com/ekzhang/bore/ поможет вам выбраться наружу. Его минус - статический порт может в любое время кем-то заняться и вас переключит.\n\n# 🛡️ Криптографические технологии\nАсимметричное шифрование (RSA)\nБиблиотека: cryptography.hazmat.primitives.asymmetric.rsa\n\nДлина ключа: 4096 бит\n\nИспользование:\n\n - Генерация пары ключей для каждого пользователя\n - Шифрование сессионных ключей\n - Проверка подлинности ключей (верификационный код)\n - Процесс верификации ключей с использованием SHA-256 хэшей\n - Симметричное шифрование (AES через Fernet)\n - Библиотека: cryptography.fernet.Fernet\n - Алгоритм: AES-128 в режиме CBC с HMAC-SHA256\n - Длина ключа: 32 байта (256 бит) после base64-кодирования\n\nХэш-функции\nАлгоритм: SHA-256\n\nИспользование:\n\n - Генерация верификационных кодов (первые 20 байт хэша)\n - PBKDF2 для получения ключа из пароля пользователя\n - Создание уникальных идентификаторов сообщений\n\nПроизводные ключи (PBKDF2)\nАлгоритм: PBKDF2-HMAC-SHA256\n\nПараметры:\n\n- Длина ключа: 32 байта\n- Соль: 16 случайных байт\n- Итерации: 700,000\n\nИспользование: Преобразование пароля пользователя в симметричный ключ для шифрования приватного ключа RSA\n\n\n# Типы сообщений (JSON протокол)\nКлиент → Сервер\n\n - register\tРегистрация с публичным ключом\tusername, public_key\n - search\tПоиск пользователей\tusername, online_only\n - get_key\tЗапрос публичного ключа\tusername\n - message\tОтправка сообщения\tto, message, session_key, message_id\n - typing\tСтатус печатания\tto, is_typing\n - delivery_status\tСтатус доставки\tmessage_id, status, to\n - read_receipt\tУведомление о прочтении\tmessage_id, to\n - ping\tПроверка соединения\t\n\nСервер → Клиент\n\n - register_ok\tПодтверждение регистрации\tmessage, username\n - search_results\tРезультаты поиска\tresults, search_term\n - key_response\tОтвет с публичным ключом\tusername, public_key, online\n - message\tВходящее сообщение\tfrom, message, session_key, message_id\n - typing\tСтатус печатания от других\tfrom, is_typing\n - delivery_status\tОбновление статуса\tmessage_id, status\n - read_receipt\tУведомление о прочтении другими\tmessage_id, reader\n - error\tОшибки\tmessage\n - pong\tОтвет на ping\t-\n\n# Запуск\n\n```\nbore local 5555 --to bore.pub --port 9435\npython server.py\n```\n\n```\npython client.py\n```\n\n\n# Telnet syntax\n```\ntelnet bore.pub 9435\n```\n```\n{\"type\":\"register\",\"username\":\"vasya\",\"public_key\":\"-----BEGIN PUBLIC KEY-----\n\\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA6P5g9Nn9h0QxX2zJ7M8D\\nLwT3f7Hv4X8Kk9mD5tRwV1Y5X6sT7b2N1P3qZ8rF4aG2yV9cL1bN3pQ5tRwV1Y5\\nX6sT7b2N1P3qZ8rF4aG2yV9cL1bN3pQ5tRwV1Y5X6sT7b2N1P3qZ8rF4aG2yV9c\\nL1bN3pQ5tRwV1Y5X6sT7b2N1P3qZ8rF4aG2yV9cL1bN3pQ5tRwV1Y5X6sT7b2N1\\nP3qZ8rF4aG2yV9cL1bN3pQ5tRwV1Y5X6sT7b2N1P3qZ8rF4aG2yV9cL1bN3pQ5t\\nRwV1Y5X6sT7b2N1P3qZ8rF4aG2yV9cL1bN3pQ5tRwV1Y5X6sT7b2N1P3qZ8rF4a\\nG2yV9cL1bN3pQ5tRwV1Y5X6sT7b2N1P3qZ8rF4aG2yV9cL1bN3pQ5tRwV1Y5X6s\\n-----END PUBLIC KEY-----\"}\n```\n```\n\"type\":\"ping\",\"username\":\"vasya\"}\n```\n```\n{\"type\":\"search\",\"username\":\"alex\",\"online_only\":false}\n```\n```\n{\"type\":\"get_key\",\"username\":\"alex\"}\n```\n\n\u003cimg src=\"https://github.com/oditynet/tsss/blob/main/connect.png\" title=\"example\" width=\"800\" /\u003e\n\u003cimg src=\"https://github.com/oditynet/tsss/blob/main/search.png\" title=\"example\" width=\"800\" /\u003e\n\u003cimg src=\"https://github.com/oditynet/tsss/blob/main/messages.png\" title=\"example\" width=\"800\" /\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foditynet%2Ftsss","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Foditynet%2Ftsss","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foditynet%2Ftsss/lists"}