77 lines
3.9 KiB
Markdown
77 lines
3.9 KiB
Markdown
# Практическая работа №5 — Конфиденциальный обмен сообщениями
|
||
|
||
Клиент-серверное приложение для обмена сообщениями по TCP с поддержкой
|
||
шифрования 3DES-CBC (с затравкой; ключ сессии из SHA-256 от ключа файла и соли),
|
||
контроля целостности сообщения **MD5** (по варианту, как в работе №2) и опциональной
|
||
аутентификации отправителя **HMAC-SHA256**.
|
||
|
||
## Установка
|
||
|
||
```bash
|
||
uv sync
|
||
```
|
||
|
||
## Ключ шифрования
|
||
|
||
Ключ хранится в текстовом файле (не менее 32 символов). Права на файл — только
|
||
чтение владельцем (`600`). Программа проверяет права при запуске и отказывается
|
||
работать, если файл доступен группе или другим пользователям.
|
||
|
||
```bash
|
||
openssl rand -hex 32 > key.txt
|
||
chmod 600 key.txt
|
||
```
|
||
|
||
## Запуск
|
||
|
||
### Сервер
|
||
|
||
```bash
|
||
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 # + MD5 digest
|
||
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 # другой файл ключа
|
||
```
|
||
|
||
### Клиент
|
||
|
||
```bash
|
||
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` | Контроль целостности — MD5-хэш открытого текста (по индивидуальному заданию) |
|
||
| `--hmac` | HMAC-SHA256 — контроль целостности + аутентификация отправителя (требует ключ, несовместим с `--integrity`) |
|
||
| `--test-integrity` | Режим тестирования: отправляется заведомо некорректный хэш/HMAC (требует `--integrity` или `--hmac`) |
|
||
|
||
## Анализ трафика с помощью tcpdump
|
||
|
||
Для наблюдения за передаваемыми данными удобно использовать `tcpdump`.
|
||
При работе на одной машине (loopback):
|
||
|
||
```bash
|
||
sudo tcpdump -i lo -X -n tcp port 9000
|
||
```
|
||
|
||
При работе по сети (замените `eth0` на имя сетевого интерфейса):
|
||
|
||
```bash
|
||
sudo tcpdump -i eth0 -X -n tcp port 9000
|
||
```
|
||
|
||
- **Без шифрования** — в дампе видны сообщения открытым текстом (JSON с полем `"data": "текст сообщения"`).
|
||
- **С шифрованием** — в дампе видны только шифротекст, соль и IV в hex; читаемый текст отсутствует.
|