Протоколы шифрования и хэширования пароля: 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 бит |
Хранение паролей |
Типичная комбинация в современных системах
- ECDH (Curve25519) — обмен симметричным ключом
- AES-256-GCM — шифрование данных этим ключом
- Ed25519 — подпись сообщений/сертификатов
- RSA — только для обратной совместимости
- bcrypt — хеширование паролей пользователей