Здравствуйте.
Без такой программы по истине не куда
Qwen_python_20260919_he9nzd7oj.zip (14 Kb)
================================================================================
ТЕХНИЧЕСКОЕ ЗАДАНИЕ
на разработку децентрализованного P2P файлообменника
с каскадным шифрованием
================================================================================
Версия документа: 1.0
Дата: 19 сентября 2026 г.
Кодовое название: P2P Cascade
Текущая версия ПО: 7.0
================================================================================
1. ОБЩИЕ СВЕДЕНИЯ
================================================================================
1.1. Полное наименование системы
Децентрализованный P2P файлообменник с графическим интерфейсом,
многоуровневым каскадным шифрованием и скрытым ICMP-транспортом.
1.2. Назначение и цели создания системы
Система предназначена для:
— децентрализованного обмена файлами между узлами без центрального сервера;
— защищённого обмена сообщениями (чат);
— скрытной передачи данных через альтернативные каналы (ICMP);
— обеспечения криптографической стойкости передаваемых данных за счёт
многоуровневого шифрования.
1.3. Области применения
— Децентрализованные коммуникации в условиях ограниченной сетевой
инфраструктуры;
— Образовательные цели (изучение криптографии, сетевых протоколов,
P2P-архитектур);
— Исследовательские проекты в области скрытых каналов связи.
================================================================================
2. ТРЕБОВАНИЯ К ФУНКЦИОНАЛЬНОСТИ
================================================================================
2.1. Сетевая подсистема
┌─────┬────────────────────────┬──────────────────────────────────────────────┐
│ № │ Функция │ Описание │
├─────┼────────────────────────┼──────────────────────────────────────────────┤
│2.1.1│ TCP-транспорт │ Основной транспорт на базе TCP-сокетов с │
│ │ │ JSON-протоколом │
├─────┼────────────────────────┼──────────────────────────────────────────────┤
│2.1.2│ ICMP-транспорт │ Скрытый транспорт через ICMP Echo Request │
├─────┼────────────────────────┼──────────────────────────────────────────────┤
│2.1.3│ Подключение пиров │ Установка соединения по IP

ORT │
├─────┼────────────────────────┼──────────────────────────────────────────────┤
│2.1.4│ Автообнаружение │ Отслеживание подключений/отключений пиров │
├─────┼────────────────────────┼──────────────────────────────────────────────┤
│2.1.5│ Адаптивные задержки │ Динамическая подстройка интервалов на основе │
│ │ │ RTT │
├─────┼────────────────────────┼──────────────────────────────────────────────┤
│2.1.6│ Подтверждения (ACK) │ Гарантия доставки пакетов │
├─────┼────────────────────────┼──────────────────────────────────────────────┤
│2.1.7│ Повторная отправка │ Автоматический повтор потерянных пакетов │
│ │ │ (до 3 раз) │
└─────┴────────────────────────┴──────────────────────────────────────────────┘
2.2. Обмен файлами
┌─────┬────────────────────────┬──────────────────────────────────────────────┐
│ № │ Функция │ Описание │
├─────┼────────────────────────┼──────────────────────────────────────────────┤
│2.2.1│ Расшаривание │ Добавление файлов в общий каталог │
├─────┼────────────────────────┼──────────────────────────────────────────────┤
│2.2.2│ Удаление из расшаренных│ Убирание файла из общего доступа │
├─────┼────────────────────────┼──────────────────────────────────────────────┤
│2.2.3│ Запрос каталога │ Получение списка файлов удалённого пира │
├─────┼────────────────────────┼──────────────────────────────────────────────┤
│2.2.4│ Скачивание │ Загрузка файла с прогресс-баром │
├─────┼────────────────────────┼──────────────────────────────────────────────┤
│2.2.5│ Прямая отправка │ Отправка файла конкретному пиру │
├─────┼────────────────────────┼──────────────────────────────────────────────┤
│2.2.6│ Чанкирование │ Разбиение файлов на части по 8 КБ │
├─────┼────────────────────────┼──────────────────────────────────────────────┤
│2.2.7│ Хеш-идентификация │ SHA-256 хеш как уникальный идентификатор │
│ │ │ файла │
└─────┴────────────────────────┴──────────────────────────────────────────────┘
2.3. Чат
┌─────┬────────────────────────┬──────────────────────────────────────────────┐
│ № │ Функция │ Описание │
├─────┼────────────────────────┼──────────────────────────────────────────────┤
│2.3.1│ Текстовые сообщения │ Обмен сообщениями с выбранным пиром │
├─────┼────────────────────────┼──────────────────────────────────────────────┤
│2.3.2│ История чата │ Отображение входящих/исходящих/системных │
│ │ │ сообщений │
├─────┼────────────────────────┼──────────────────────────────────────────────┤
│2.3.3│ Горячие клавиши │ Ctrl+Enter — отправка, Ctrl+Q — выход, │
│ │ │ Ctrl+I — копировать ID │
└─────┴────────────────────────┴──────────────────────────────────────────────┘
2.4. Система шифрования (каскад)
┌─────┬────────────────┬─────────────────────┬────────────────────────────────┐
│ № │ Слой │ Технология │ Назначение │
├─────┼────────────────┼─────────────────────┼────────────────────────────────┤
│2.4.1│ Слой 1 │ Zlib (уровень 6) │ Сжатие данных │
├─────┼────────────────┼─────────────────────┼────────────────────────────────┤
│2.4.2│ Слой 2 │ TimeBasedKey + HKDF │ AES-шифрование с ключом, │
│ │ │ │ меняющимся каждые 30 секунд │
├─────┼────────────────┼─────────────────────┼────────────────────────────────┤
│2.4.3│ Слой 3 │ PolyAlphabetCipher │ Полиалфавитный шифр │
│ │ │ │ (10000×10000×10000) с │
│ │ │ │ пустышками и слогами │
├─────┼────────────────┼─────────────────────┼────────────────────────────────┤
│2.4.4│ Слой 4 │ Fernet (AES-128-CBC)│ Финальный слой симметричного │
│ │ │ │ шифрования │
└─────┴────────────────┴─────────────────────┴────────────────────────────────┘
2.5. Обмен ключами
┌─────┬────────────────────────┬──────────────────────────────────────────────┐
│ № │ Функция │ Описание │
├─────┼────────────────────────┼──────────────────────────────────────────────┤
│2.5.1│ ICMP Key Exchange │ Передача ключа сессии через ICMP как белый │
│ │ │ шум │
├─────┼────────────────────────┼──────────────────────────────────────────────┤
│2.5.2│ Маркерный протокол │ Скрытый маркер 0xDEADBEEF для идентификации │
│ │ │ пакетов ключа │
├─────┼────────────────────────┼──────────────────────────────────────────────┤
│2.5.3│ Разбиение ключа │ Ключ разбивается на 10 частей по 16 байт │
├─────┼────────────────────────┼──────────────────────────────────────────────┤
│2.5.4│ Таймаут │ Ожидание ключа до 30 секунд │
└─────┴────────────────────────┴──────────────────────────────────────────────┘
================================================================================
3. ТРЕБОВАНИЯ К ПОЛИАЛФАВИТНОМУ ШИФРУ
================================================================================
3.1. Параметры шифра
┌──────────────────────────────┬──────────────────────────────────────────────┐
│ Параметр │ Значение │
├──────────────────────────────┼──────────────────────────────────────────────┤
│ Количество алфавитов │ 10 000 │
├──────────────────────────────┼──────────────────────────────────────────────┤
│ Элементов в алфавите │ 10 000 │
├──────────────────────────────┼──────────────────────────────────────────────┤
│ Компонентов на элемент │ 10 000 │
├──────────────────────────────┼──────────────────────────────────────────────┤
│ Доля пустышек │ 30% │
├──────────────────────────────┼──────────────────────────────────────────────┤
│ Интервал смены алфавита │ каждые 10 символов │
├──────────────────────────────┼──────────────────────────────────────────────┤
│ Размер символьного пула │ ~10 000 Unicode-символов │
└──────────────────────────────┴──────────────────────────────────────────────┘
3.2. Поддерживаемые команды
— NEXT — переход к следующему алфавиту;
— PREV — переход к предыдущему алфавиту;
— SET:N — установка конкретного алфавита по индексу.
3.3. Поддержка слогов
Система распознаёт и шифрует слоги (согласная + гласная) как единый
элемент. Поддерживаются русские слоги (330 комбинаций).
3.4. Ленивая генерация
Компоненты генерируются детерминированно через SHA-256 от индексов,
что эквивалентно хранению 10^12 символов, но требует минимум памяти.
================================================================================
4. ТРЕБОВАНИЯ К ICMP-ТРАНСПОРТУ
================================================================================
4.1. Параметры
┌──────────────────────────────┬──────────────────────────────────────────────┐
│ Параметр │ Значение │
├──────────────────────────────┼──────────────────────────────────────────────┤
│ Минимальный payload │ 32 байта │
├──────────────────────────────┼──────────────────────────────────────────────┤
│ Максимальный payload │ 1400 байт │
├──────────────────────────────┼──────────────────────────────────────────────┤
│ Размер окна │ 4 пакета │
├──────────────────────────────┼──────────────────────────────────────────────┤
│ Таймаут ACK │ 2.0 секунды │
├──────────────────────────────┼──────────────────────────────────────────────┤
│ Максимум повторов │ 3 │
├──────────────────────────────┼──────────────────────────────────────────────┤
│ Минимальная задержка │ 5 мс │
├──────────────────────────────┼──────────────────────────────────────────────┤
│ Максимальная задержка │ 50 мс │
└──────────────────────────────┴──────────────────────────────────────────────┘
4.2. Требования к скрытности
— Рандомизация ICMP ID и Sequence;
— Случайный padding (0–100 байт);
— Рандомизированные размеры пакетов;
— Адаптивные интервалы на основе RTT;
— Отсутствие сигнатур в открытом виде.
================================================================================
5. ТРЕБОВАНИЯ К ГРАФИЧЕСКОМУ ИНТЕРФЕЙСУ
================================================================================
5.1. Технология
Фреймворк: tkinter (встроен в Python)
Без внешних GUI-библиотек.
5.2. Структура интерфейса
┌──────────────────────────────────────────────────────────────────────┐
│ [●] ID: xxx | :6000 ???? 4-слойный каскад ???? ICMP │
│ [???? ID] [Подключиться] │
├────────────────┬──────────────────────────┬──────────────────────────┤
│ │ │ │
│ Пиры │ Чат │ Файлы пира │
│ │ │ │
│ │ │ │
│ ├──────────────────────────┤ │
│ │ Мои файлы │ Передача │
│ │ │ [=========>] │
│ │ │ │
│ │ │ Каскад шифрования │
│ │ │ ICMP статистика │
├────────────────┴──────────────────────────┴──────────────────────────┤
│ Время: 1234567890 v7.0 [Выход] │
└──────────────────────────────────────────────────────────────────────┘
5.3. Функциональные элементы
┌──────────────────────────────┬──────────────────────────────────────────────┐
│ Элемент │ Назначение │
├──────────────────────────────┼──────────────────────────────────────────────┤
│ Индикатор статуса │ Зелёный/красный кружок (работает/ошибка) │
├──────────────────────────────┼──────────────────────────────────────────────┤
│ Список пиров │ Выбор пира для взаимодействия │
├──────────────────────────────┼──────────────────────────────────────────────┤
│ Область чата │ История сообщений + поле ввода │
├──────────────────────────────┼──────────────────────────────────────────────┤
│ Список моих файлов │ Расшаренные файлы │
├──────────────────────────────┼──────────────────────────────────────────────┤
│ Таблица файлов пира │ Имя, размер, хеш │
├──────────────────────────────┼──────────────────────────────────────────────┤
│ Прогресс-бар │ Визуализация передачи │
├──────────────────────────────┼──────────────────────────────────────────────┤
│ Панель статистики шифрования │ Параметры каскада │
├──────────────────────────────┼──────────────────────────────────────────────┤
│ Панель статистики ICMP │ RTT, потери, повторы │
└──────────────────────────────┴──────────────────────────────────────────────┘
================================================================================
6. ТРЕБОВАНИЯ К БЕЗОПАСНОСТИ
================================================================================
6.1. Криптостойкость
— Использование проверенных алгоритмов (AES-128-CBC через Fernet);
— HKDF для деривации ключей (SHA-256);
— Устойчивость к рассинхронизации времени (±1 слот);
— Многослойное шифрование (4 независимых слоя).
6.2. Управление ключами
— Генерация ключа через Fernet.generate_key();
— Возможность обмена ключом сессии через ICMP;
— Временной ключ с автоматической ротацией.
6.3. Целостность данных
— SHA-256 хеширование файлов;
— Контрольные суммы ICMP-пакетов;
— Проверка структуры пакетов.
================================================================================
7. ТРЕБОВАНИЯ К СРЕДЕ ВЫПОЛНЕНИЯ
================================================================================
7.1. Системные требования
┌─────────────┬──────────────────────┬──────────────────────────────────────┐
│ Параметр │ Минимум │ Рекомендовано │
├─────────────┼──────────────────────┼──────────────────────────────────────┤
│ ОС │ Windows 10 / Linux / │ Linux (для ICMP) │
│ │ macOS │ │
├─────────────┼──────────────────────┼──────────────────────────────────────┤
│ Python │ 3.8+ │ 3.10+ │
├─────────────┼──────────────────────┼──────────────────────────────────────┤
│ ОЗУ │ 256 МБ │ 512 МБ │
├─────────────┼──────────────────────┼──────────────────────────────────────┤
│ Диск │ 50 МБ │ 100 МБ │
└─────────────┴──────────────────────┴──────────────────────────────────────┘
7.2. Зависимости
┌──────────────────┬──────────────────┬──────────────────────────────────────┐
│ Пакет │ Обязательность │ Назначение │
├──────────────────┼──────────────────┼──────────────────────────────────────┤
│ cryptography │ Обязательно │ Fernet, HKDF, RSA │
├──────────────────┼──────────────────┼──────────────────────────────────────┤
│ tkinter │ Встроен │ GUI │
├──────────────────┼──────────────────┼──────────────────────────────────────┤
│ Стандартная библ.│ Встроен │ Сеть, шифрование, GUI │
└──────────────────┴──────────────────┴──────────────────────────────────────┘
7.3. Права доступа
— Обычный режим: без специальных прав;
— ICMP-режим: требует root/sudo (Linux/macOS) или прав администратора
(Windows).
================================================================================
8. АРХИТЕКТУРА СИСТЕМЫ
================================================================================
8.1. Компоненты
┌──────────────────────────────────────────────────────────────────────┐
│ P2PApp (GUI) │
├──────────────────────────────────────────────────────────────────────┤
│ P2PNode │
│ ┌──────────────┐ ┌───────────────┐ ┌───────────────┐ │
│ │ TCP-сервер │ │ICMP-транспорт │ │ Хранилище │ │
│ └──────────────┘ └───────────────┘ └───────────────┘ │
├──────────────────────────────────────────────────────────────────────┤
│ CascadeEncryptor │
│ ┌────────┐ ┌──────────────┐ ┌──────────────┐ ┌────────┐ │
│ │ Zlib │ │TimeBasedKey │ │ PolyAlphabet │ │ Fernet │ │
│ └────────┘ └──────────────┘ └──────────────┘ └────────┘ │
└──────────────────────────────────────────────────────────────────────┘
8.2. Поток данных при отправке
Исходные данные
│
▼
[1] Zlib-сжатие
│
▼
[2] TimeBasedKey (AES)
│
▼
[3] PolyAlphabet (с пустышками)
│
▼
[4] Fernet (AES-128-CBC)
│
▼
[5] Base64-кодирование
│
▼
JSON-пакет --> TCP / ICMP
8.3. Поток данных при получении
Обратный порядок:
ICMP/TCP --> JSON --> Base64 --> Fernet --> PolyAlphabet -->
TimeBasedKey --> Zlib --> данные.
================================================================================
9. ПРОТОКОЛ ВЗАИМОДЕЙСТВИЯ
================================================================================
9.1. Формат TCP-пакета
[4 байта: длина][JSON-сообщение]
9.2. Типы сообщений
┌───────────────────┬──────────────┬─────────────────────────────────────────┐
│ Тип │ Направление │ Описание │
├───────────────────┼──────────────┼─────────────────────────────────────────┤
│ HELLO │ двунаправл. │ Приветствие и обмен ID │
├───────────────────┼──────────────┼─────────────────────────────────────────┤
│ CHAT │ двунаправл. │ Текстовое сообщение │
├───────────────────┼──────────────┼─────────────────────────────────────────┤
│ FILE_LIST_REQ │ Запрос │ Запрос списка файлов │
├───────────────────┼──────────────┼─────────────────────────────────────────┤
│ FILE_LIST_RESP │ Ответ │ Список файлов │
├───────────────────┼──────────────┼─────────────────────────────────────────┤
│ FILE_DL_REQ │ Запрос │ Запрос на скачивание │
├───────────────────┼──────────────┼─────────────────────────────────────────┤
│ FILE_META │ Ответ │ Метаданные файла │
├───────────────────┼──────────────┼─────────────────────────────────────────┤
│ FILE_CHUNK │ Ответ │ Часть файла │
├───────────────────┼──────────────┼─────────────────────────────────────────┤
│ FILE_DL_ERR │ Ошибка │ Файл не найден │
└───────────────────┴──────────────┴─────────────────────────────────────────┘
9.3. Формат ICMP-пакета
[ICMP header (8 байт)]
[session_id (2)] [seq (2)] [length (2)]
[зашифрованные данные]
[случайный padding]
================================================================================
10. ЭТАПЫ РАЗРАБОТКИ (РЕАЛИЗОВАННЫЕ)
================================================================================
┌───────┬──────────┬─────────────────────────────────────────────────────────┐
│ Этап │ Версия │ Реализовано │
├───────┼──────────┼─────────────────────────────────────────────────────────┤
│ 1 │ 1.0 │ Базовый P2P, чат, передача файлов │
├───────┼──────────┼─────────────────────────────────────────────────────────┤
│ 2 │ 2.0 │ Расшаривание файлов, каталог │
├───────┼──────────┼─────────────────────────────────────────────────────────┤
│ 3 │ 3.0 │ Шифрование Fernet, ICMP-транспорт │
├───────┼──────────┼─────────────────────────────────────────────────────────┤
│ 4 │ 4.0 │ Скрытый ICMP, адаптивные задержки │
├───────┼──────────┼─────────────────────────────────────────────────────────┤
│ 5 │ 5.0 │ TimeBasedKey, ICMP Key Exchange │
├───────┼──────────┼─────────────────────────────────────────────────────────┤
│ 6 │ 6.0 │ PolyAlphabet (10000×10000×10000) │
├───────┼──────────┼─────────────────────────────────────────────────────────┤
│ 7 │ 7.0 │ Каскад из 4 слоёв, GUI со статистикой │
└───────┴──────────┴─────────────────────────────────────────────────────────┘
================================================================================
11. КРИТЕРИИ ПРИЁМКИ
================================================================================
11.1. Функциональные
[ ] Запуск без ошибок на Windows/Linux/macOS;
[ ] Подключение двух узлов и обмен сообщениями;
[ ] Расшаривание и скачивание файла между узлами;
[ ] Работа всех 4 слоёв шифрования одновременно;
[ ] Отображение статистики каскада в GUI;
[ ] Работа ICMP-транспорта (при наличии прав);
[ ] Обмен ключом сессии через ICMP.
11.2. Нефункциональные
[ ] Время запуска GUI < 3 секунды;
[ ] Потребление ОЗУ < 200 МБ;
[ ] Отсутствие внешних зависимостей кроме cryptography;
[ ] Корректная работа при рассинхронизации времени ±30 секунд;
[ ] Устойчивость к разрывам соединения.
================================================================================
12. ОГРАНИЧЕНИЯ И ДОПУЩЕНИЯ
================================================================================
12.1. Ограничения
— ICMP-транспорт требует прав root/sudo;
— Скорость ICMP значительно ниже TCP;
— Полиалфавитный шифр замедляет обработку больших объёмов;
— Требуется синхронизация времени между узлами (±30 сек).
12.2. Допущения
— Узлы находятся в одной локальной сети или имеют прямой доступ;
— Пользователь имеет базовые навыки работы с командной строкой;
— Ключ шифрования передаётся по защищённому каналу.
================================================================================
13. ПЕРСПЕКТИВЫ РАЗВИТИЯ
================================================================================
13.1. Краткосрочные
— Добавление голосовых сообщений;
— Поддержка передачи папок;
— История чата с сохранением в файл.
13.2. Среднесрочные
— Интеграция с Tor/I2P для анонимности;
— DHT для децентрализованного поиска пиров;
— WebRTC для прямого P2P через NAT.
13.3. Долгосрочные
— Мобильные клиенты (Android/iOS);
— Поддержка блокчейн-идентификации;
— Интеграция с IPFS для контент-адресации.
================================================================================
14. СОГЛАСОВАНИЕ
================================================================================
┌────────────────────────────┬──────────────────────┬──────────┬────────────┐
│ Роль │ ФИО │ Подпись │ Дата │
├────────────────────────────┼──────────────────────┼──────────┼────────────┤
│ Заказчик │ ____________________ │ ________ │ __________ │
├────────────────────────────┼──────────────────────┼──────────┼────────────┤
│ Исполнитель │ ____________________ │ ________ │ __________ │
├────────────────────────────┼──────────────────────┼──────────┼────────────┤
│ Технический руководитель │ ____________________ │ ________ │ __________ │
└────────────────────────────┴──────────────────────┴──────────┴────────────┘
================================================================================
КОНЕЦ ДОКУМЕНТА
================================================================================
Комментарии (0)
Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий