Cайт веб-разработчика, программиста Ruby on Rails ESV Corp. Екатеринбург, Москва, Санкт-Петербург, Новосибирск, Первоуральск

Протоколы шифрования и хэширования пароля: RSA, ECDH, AES-256-GCM, Ed25519, bcrypt

RSA (Rivest–Shamir–Adleman)

Тип: Алгоритм асимметричного шифрования (1977)

Основа: Вычислительная сложность разложения больших чисел на простые множители (факторизация)

Как работает:

  • Генерируется пара ключей: открытый (public) и закрытый (private)

  • Открытый ключ — произведение двух больших простых чисел

  • Закрытый ключ — сами простые числа

  • Шифрование открытым ключом, расшифровка — закрытым

  • Размер ключа: обычно 2048, 3048, 4096 бит

Применение:

  • Шифрование симметричных ключей

  • Цифровые подписи

  • TLS/SSL, PGP, S/MIME

Особенности:

  • Медленный (в 100-1000 раз медленнее симметричных)

  • Поэтому шифруют не данные, а ключи

  • При 2048 битах — считается безопасным до ~2030 года


ECDH (Elliptic Curve Diffie–Hellman) с Curve25519

Тип: Протокол обмена ключами (2005, Daniel J. Bernstein)

Основа: Алгебраическая структура эллиптических кривых

Как работает:

  • Две стороны генерируют пары ключей (private + public)

  • Обмениваются открытыми ключами

  • Каждая сторона вычисляет общий секрет: private_key × other_public_key

  • Результат одинаков у обеих сторон

  • Из открытых ключей невозможно вычислить общий секрет

Curve25519:

  • Конкретная эллиптическая кривая

  • 256 бит (эквивалент 3072 бит RSA)

  • Быстрее RSA в 3-10 раз

  • Устойчива к атакам по времени выполнения

Применение:

  • TLS 1.3 (обязательный)

  • Signal, WhatsApp (end-to-end)

  • SSH, OpenVPN

Особенности:

  • Не шифрует данные — только обменивается ключами

  • После обмена ключей используется симметричное шифрование


AES-256-GCM (Advanced Encryption Standard — Galois/Counter Mode)

Тип: Алгоритм симметричного шифрования с аутентификацией (2001)

Основа: Блочный шифр с размером блока 128 бит

Как работает:

  • Один ключ для шифрования и расшифровки (симметричный)

  • 256 бит — размер ключа (максимальный)

  • GCM (Galois/Counter Mode) — режим работы:

    • Counter mode — шифрование

    • Galois mode — аутентификация (проверка целостности)

  • Шифрует + проверяет, что данные не изменены

Применение:

  • TLS 1.2/1.3

  • Disk encryption (BitLocker, FileVault)

  • Wi-Fi (WPA2/WPA3)

  • VPN (IPsec, WireGuard)

Особенности:

  • Быстрый (аппаратное ускорение в процессорах)

  • Аутентифицированное шифрование (AEAD)

  • Требует уникальный nonce/IV для каждого сообщения

  • 256 бит — избыточно для большинства задач (128 бит достаточно)


Ed25519 (Edwards-curve Digital Signature Algorithm)

Тип: Алгоритм цифровой подписи (2011, Daniel J. Bernstein)

Основа: Эллиптическая кривая Curve25519 (вариант Edwards)

Как работает:

  • Генерируется пара ключей: private (32 байта) + public (32 байта)

  • Подпись: private_key + message → signature (64 байта)

  • Проверка: public_key + message + signature → true/false

  • Невозможно подделать подпись без private_key

Применение:

  • Цифровые подписи документов

  • Аутентификация в SSH, Git

  • Криптовалюты (Bitcoin, Ethereum)

  • TLS-сертификаты

Особенности:

  • Быстрее RSA (в 10-100 раз)

  • Подпись фиксированного размера (64 байта)

  • Детерминированная подпись (одинаковые входные данные → одинаковая подпись)

  • Устойчива к атакам по времени выполнения

  • Не использует генератор случайных чисел при подписи (важно!)


bcrypt (Blowfish Crypt)

Тип: Алгоритм хеширования паролей (1999, Niels Provos и David Mazières)

Основа: Алгоритм блочного шифрования Blowfish с адаптивной функцией стоимости (key stretching)

Как работает:

  • Принимает пароль + соль (16 байт, генерируется автоматически)

  • Применяет Blowfish в специальном режиме EksblowfishSetup

  • Cost factor (стоимость) — параметр от 4 до 31, определяет сложность

  • Формула: 2^cost итераций → чем выше cost, тем медленнее хеширование

  • Результат: $2b$12$salt...hash (60 символов, соль встроена в хеш)

  • При каждой проверке пересчитывается хеш и сравнивается

Применение:

  • Хранение паролей пользователей

  • Аутентификация в веб-приложениях

  • Rails has_secure_password (через gem bcrypt)

  • Замена устаревшим MD5, SHA1, SHA256 для паролей

Особенности:

  • Адаптивный — со временем можно увеличить cost factor

  • Медленный по дизайну — 100 мс на хеш → brute-force невыгоден

  • Соль встроена — не нужно хранить отдельно

  • Устойчив к GPU-атакам — требует много памяти

  • Не шифрование! — необратим, только сравнение хешей

  • Cost 12 — современный стандарт (около 200-300 мс)

  • Cost 10 — минимум для production

Формат результата:

$2b$12$WApznUPhDubN0oeveSXHp.HQK0eEt4IUFrHBOkD3FJEXAMPLEHASH
 │ │  │  │                              │
 │ │  │  └─ соль (22 символа)           └─ хеш (31 символ)
 │ │  └─ cost factor (12 = 2^12 итераций)
 │ └─ версия алгоритма (2b — актуальная)
 └─ идентификатор алгоритма

 

Сравнительная таблица

Алгоритм

Тип

Скорость

Размер ключа

Применение

RSA

Асимметричное шифрование

Медленный

2048-4096 бит

Шифрование ключей, подписи

ECDH (Curve25519)

Обмен ключами

Быстрый

256 бит

TLS, мессенджеры

AES-256-GCM

Симметричное шифрование

Очень быстрый

256 бит

Шифрование данных

Ed25519

Цифровая подпись

Очень быстрый

256 бит

Подписи, аутентификация

bcrypt

Хеширование паролей

Медленный (намеренно)

Соль 128 бит, хеш 184 бит

Хранение паролей


 

Типичная комбинация в современных системах

  1. ECDH (Curve25519) — обмен симметричным ключом
  2. AES-256-GCM — шифрование данных этим ключом
  3. Ed25519 — подпись сообщений/сертификатов
  4. RSA — только для обратной совместимости
  5. bcrypt — хеширование паролей пользователей