3.7 KiB
3.7 KiB
Практическая работа №5 — Конфиденциальный обмен сообщениями
Клиент-серверное приложение для обмена сообщениями по TCP с поддержкой шифрования 3DES-CBC (с затравкой), контроля целостности SHA-256 и аутентификации отправителя HMAC-SHA256.
Установка
uv sync
Ключ шифрования
Ключ хранится в текстовом файле (не менее 32 символов). Права на файл — только
чтение владельцем (600). Программа проверяет права при запуске и отказывается
работать, если файл доступен группе или другим пользователям.
openssl rand -hex 32 > key.txt
chmod 600 key.txt
Запуск
Сервер
uv run main.py server --port 9000 # без шифрования
uv run main.py server --port 9000 --encrypt # 3DES-CBC
uv run main.py server --port 9000 --encrypt --integrity # + SHA-256
uv run main.py server --port 9000 --encrypt --integrity --test-integrity # отправка с повреждённым хэшем
uv run main.py server --port 9000 --encrypt --hmac # 3DES + HMAC-SHA256
uv run main.py server --port 9000 --hmac # только HMAC (без шифрования)
uv run main.py server --port 9000 --key /path/to/key.txt --encrypt # другой файл ключа
Клиент
uv run main.py client 127.0.0.1 9000
uv run main.py client 127.0.0.1 9000 --encrypt
uv run main.py client 127.0.0.1 9000 --encrypt --integrity
uv run main.py client 127.0.0.1 9000 --encrypt --integrity --test-integrity
uv run main.py client 127.0.0.1 9000 --encrypt --hmac
uv run main.py client 127.0.0.1 9000 --encrypt --hmac --test-integrity
Режимы работы
| Флаг | Описание |
|---|---|
| (без флагов) | Открытый текст, без проверки целостности |
--encrypt |
Шифрование 3DES-CBC с затравкой (соль + IV генерируются случайно для каждого сообщения) |
--integrity |
Контроль целостности — к сообщению прикладывается SHA-256 хэш открытого текста |
--hmac |
HMAC-SHA256 — контроль целостности + аутентификация отправителя (требует ключ, несовместим с --integrity) |
--test-integrity |
Режим тестирования: отправляется заведомо некорректный хэш/HMAC (требует --integrity или --hmac) |
Анализ трафика с помощью tcpdump
Для наблюдения за передаваемыми данными удобно использовать tcpdump.
При работе на одной машине (loopback):
sudo tcpdump -i lo -X -n tcp port 9000
При работе по сети (замените eth0 на имя сетевого интерфейса):
sudo tcpdump -i eth0 -X -n tcp port 9000
- Без шифрования — в дампе видны сообщения открытым текстом (JSON с полем
"data": "текст сообщения"). - С шифрованием — в дампе видны только шифротекст, соль и IV в hex; читаемый текст отсутствует.