Переезд на md5
This commit is contained in:
3
lab5/.gitignore
vendored
3
lab5/.gitignore
vendored
@@ -1 +1,2 @@
|
||||
key.txt
|
||||
key.txt
|
||||
*.pyc
|
||||
@@ -1,8 +1,9 @@
|
||||
# Практическая работа №5 — Конфиденциальный обмен сообщениями
|
||||
|
||||
Клиент-серверное приложение для обмена сообщениями по TCP с поддержкой
|
||||
шифрования 3DES-CBC (с затравкой), контроля целостности SHA-256 и
|
||||
аутентификации отправителя HMAC-SHA256.
|
||||
шифрования 3DES-CBC (с затравкой; ключ сессии из SHA-256 от ключа файла и соли),
|
||||
контроля целостности сообщения **MD5** (по варианту, как в работе №2) и опциональной
|
||||
аутентификации отправителя **HMAC-SHA256**.
|
||||
|
||||
## Установка
|
||||
|
||||
@@ -28,7 +29,7 @@ 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 # + SHA-256
|
||||
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 (без шифрования)
|
||||
@@ -52,7 +53,7 @@ uv run main.py client 127.0.0.1 9000 --encrypt --hmac --test-integrity
|
||||
|------|----------|
|
||||
| *(без флагов)* | Открытый текст, без проверки целостности |
|
||||
| `--encrypt` | Шифрование 3DES-CBC с затравкой (соль + IV генерируются случайно для каждого сообщения) |
|
||||
| `--integrity` | Контроль целостности — к сообщению прикладывается SHA-256 хэш открытого текста |
|
||||
| `--integrity` | Контроль целостности — MD5-хэш открытого текста (по индивидуальному заданию) |
|
||||
| `--hmac` | HMAC-SHA256 — контроль целостности + аутентификация отправителя (требует ключ, несовместим с `--integrity`) |
|
||||
| `--test-integrity` | Режим тестирования: отправляется заведомо некорректный хэш/HMAC (требует `--integrity` или `--hmac`) |
|
||||
|
||||
|
||||
16
lab5/main.py
16
lab5/main.py
@@ -71,7 +71,7 @@ def decrypt_message(salt: bytes, iv: bytes, ct: bytes, file_key: str) -> str:
|
||||
|
||||
|
||||
def compute_hash(text: str) -> str:
|
||||
return hashlib.sha256(text.encode()).hexdigest()
|
||||
return hashlib.md5(text.encode(), usedforsecurity=False).hexdigest()
|
||||
|
||||
|
||||
def compute_hmac(file_key: str, text: str, salt: bytes) -> str:
|
||||
@@ -136,10 +136,10 @@ def do_send(
|
||||
if use_integrity:
|
||||
h = compute_hash(text)
|
||||
if test_integrity:
|
||||
h = hashlib.sha256(b"CORRUPTED_" + os.urandom(4)).hexdigest()
|
||||
print(f" [TX] SHA-256: {h} (CORRUPTED!)")
|
||||
h = hashlib.md5(b"CORRUPTED_" + os.urandom(4), usedforsecurity=False).hexdigest()
|
||||
print(f" [TX] MD5: {h} (CORRUPTED!)")
|
||||
else:
|
||||
print(f" [TX] SHA-256: {h}")
|
||||
print(f" [TX] MD5: {h}")
|
||||
msg["hash"] = h
|
||||
|
||||
if use_hmac:
|
||||
@@ -278,7 +278,7 @@ def run_session(
|
||||
if use_encrypt:
|
||||
flags.append("3DES")
|
||||
if use_integrity:
|
||||
flags.append("SHA-256")
|
||||
flags.append("MD5")
|
||||
if use_hmac:
|
||||
flags.append("HMAC-SHA256")
|
||||
if test_integrity:
|
||||
@@ -328,7 +328,9 @@ def run_client(args: argparse.Namespace) -> None:
|
||||
|
||||
|
||||
def build_parser() -> argparse.ArgumentParser:
|
||||
parser = argparse.ArgumentParser(description="Encrypted messaging (3DES-CBC + SHA-256)")
|
||||
parser = argparse.ArgumentParser(
|
||||
description="Encrypted messaging (3DES-CBC; integrity MD5 per assignment; optional HMAC-SHA256)"
|
||||
)
|
||||
sub = parser.add_subparsers(dest="role", required=True)
|
||||
|
||||
for name, sp in [("server", sub.add_parser("server", help="Start server")),
|
||||
@@ -339,7 +341,7 @@ def build_parser() -> argparse.ArgumentParser:
|
||||
sp.add_argument("host")
|
||||
sp.add_argument("port", type=int)
|
||||
sp.add_argument("--encrypt", action="store_true", help="Enable 3DES-CBC encryption")
|
||||
sp.add_argument("--integrity", action="store_true", help="SHA-256 integrity check")
|
||||
sp.add_argument("--integrity", action="store_true", help="MD5 integrity hash (variant / lab 2)")
|
||||
sp.add_argument("--hmac", action="store_true", help="HMAC-SHA256 integrity + authentication")
|
||||
sp.add_argument("--test-integrity", action="store_true", help="Send corrupted hash/HMAC")
|
||||
sp.add_argument("--key", default=DEFAULT_KEY_FILE, help="Path to key file (default: key.txt)")
|
||||
|
||||
Reference in New Issue
Block a user