Описание безопасного протокола

Лабораторная работа №16 | Выполнил студент Федяков О.С.

1. Общие сведения

Разработан протокол защищенного обмена сообщениями на основе симметричного шифрования. Протокол обеспечивает конфиденциальность и целостность передаваемых данных.

Алгоритм шифрования: AES-256-GCM
Размер ключа: 256 бит
Размер IV: 96 бит (12 байт)
Криптографическая библиотека: Web Crypto API

2. Структура протокола

2.1 Установление сессии

  1. Инициатор генерирует случайный 256-битный ключ AES с помощью криптографически стойкого генератора (CSPRNG)
  2. Ключ экспортируется в hex-формат для передачи второму участнику
  3. Ключ передается по внеполосному защищенному каналу (out-of-band)
  4. Второй участник импортирует ключ и устанавливает соединение

2.2 Обмен сообщениями

  1. Для каждого сообщения генерируется уникальный случайный IV (вектор инициализации)
  2. Сообщение шифруется AES-256-GCM с сессионным ключом и IV
  3. GCM обеспечивает аутентификацию (проверку целостности) сообщения
  4. Передается пара (IV, шифротекст)
  5. Получатель расшифровывает сообщение используя ключ и IV

3. Формат сообщения

{
  "id": "a1b2c3d4e5f6...",     // ID сообщения (SHA-256)
  "sender": "Пользователь",    // Имя отправителя
  "encrypted": {
    "iv": "0a1b2c3d4e5f...",   // 12 байт в hex
    "ciphertext": "..."        // Зашифрованные данные
  },
  "timestamp": "2024-01-15T..."
}

4. Анализ безопасности

Обеспечиваемые свойства:

  • Конфиденциальность — данные зашифрованы AES-256
  • Целостность — режим GCM включает MAC (тег аутентификации)
  • Защита от replay-атак — уникальный IV для каждого сообщения

Известные ограничения:

  • Требуется защищенный канал для передачи симметричного ключа
  • Отсутствует Perfect Forward Secrecy (PFS) — компрометация ключа раскрывает всю историю
  • Нет механизма ротации ключей
  • Отсутствует аутентификация участников (только знание ключа)

Рекомендации по улучшению:

  • Использовать протокол Диффи-Хеллмана (ECDH) для обмена ключами
  • Добавить цифровые подписи для аутентификации
  • Реализовать Double Ratchet (как в Signal) для PFS
  • Добавить механизм ротации сессионных ключей

5. Схема работы протокола


┌─────────────┐                      ┌─────────────┐
│  Алиса      │                      │    Боб      │
└──────┬──────┘                      └──────┬──────┘
       │                                    │
       │  1. Генерация ключа K              │
       │  K = AES-256-KeyGen()              │
       │                                    │
       │  2. Передача K по защищенному      │
       │     каналу (out-of-band)           │
       │ ─────────────────────────────────► │
       │                                    │
       │  3. Шифрование сообщения M         │
       │  IV = random(12 bytes)             │
       │  C = AES-GCM(K, IV, M)             │
       │                                    │
       │  4. Отправка (IV, C)               │
       │ ─────────────────────────────────► │
       │                                    │
       │                    5. Расшифровка  │
       │                    M = AES-GCM⁻¹(K, IV, C)
       │                                    │

6. Используемые технологии

  • Next.js 15 (React)
  • TypeScript
  • Web Crypto API (SubtleCrypto)
  • Tailwind CSS
← Вернуться к чату

САФУ | Криптография | 2024