Это всеобъемлющее руководство исследует продвинутые концепции шифрования, алгоритмы и протоколы, используемые в современных системах безопасной коммуникации. Идеально подходит для разработчиков и специалистов по безопасности.
Алгоритмы симметричного шифрования
AES (Advanced Encryption Standard)
Золотой стандарт для симметричного шифрования, принятый правительством США в 2001 году.
Ключевые особенности
- Размеры ключей: 128, 192 или 256 бит
- Размер блока: 128 бит
- Раунды: 10, 12 или 14 в зависимости от размера ключа
- Производительность: Высоко оптимизирован, доступно аппаратное ускорение
Распространённые режимы
- GCM (Galois/Counter Mode): Аутентифицированное шифрование, рекомендуется для большинства случаев
- CBC (Cipher Block Chaining): Традиционный режим, требует отдельный MAC
- CTR (Counter): Распараллеливаемый, используется в некоторых протоколах
ChaCha20
Современный потоковый шифр, разработанный Дэниелом Дж. Бернстайном, становится всё более популярным как альтернатива AES.
Преимущества
- Быстрее, чем AES на устройствах без аппаратного ускорения
- Реализация с постоянным временем (устойчива к атакам по времени)
- Простой дизайн, проще реализовать безопасно
- Используется с Poly1305 для аутентифицированного шифрования
Асимметричное шифрование
RSA (Rivest-Shamir-Adleman)
Широко используется для обмена ключами и цифровых подписей.
Ключевые соображения
- Минимальный размер ключа: 2048 бит (4096 бит рекомендуется для долгосрочной безопасности)
- Производительность: Вычислительно затратно по сравнению с симметричным шифрованием
- Схемы дополнения: Используй OAEP для шифрования, PSS для подписей
- Квантовая угроза: Уязвим для квантовых компьютеров (алгоритм Шора)
Elliptic Curve Cryptography (ECC)
Более эффективная альтернатива RSA с эквивалентной безопасностью при меньших размерах ключей.
Популярные кривые
- Curve25519: Разработана для обмена ключами ECDH, широко принята
- Ed25519: Для цифровых подписей, используется в SSH, GPG
- P-256 (secp256r1): Стандарт NIST, широко поддерживается
- P-384, P-521: Более высокие уровни безопасности
Преимущества перед RSA
- 256-битный ECC ≈ 3072-битная безопасность RSA
- Более быстрые вычисления
- Меньшие ключи и подписи
- Меньшие требования к пропускной способности и хранению
Протоколы обмена ключами
Diffie-Hellman (DH)
Позволяет двум сторонам установить общий секрет через незащищённый канал.
Варианты
- Классический DH: Оригинальная реализация
- ECDH: Версия на эллиптических кривых (более эффективная)
- X25519: Современный ECDH, использующий Curve25519
Perfect Forward Secrecy (PFS)
Гарантирует, что прошлые коммуникации остаются безопасными, даже если долгосрочные ключи скомпрометированы.
Реализация
- Генерируй эфемерные пары ключей для каждой сессии
- Уничтожай ключи сессии после использования
- Используется в TLS 1.3, Signal Protocol и т.д.
Хеш-функции
Семейство SHA-2
- SHA-256: 256-битный вывод, широко используется
- SHA-384, SHA-512: Более высокие уровни безопасности
- Применения: Цифровые подписи, проверка сертификатов, хеширование паролей (с правильными техниками)
SHA-3 (Keccak)
- Другая конструкция, чем SHA-2 (губчатая функция)
- Устойчив к атакам расширения длины
- Подходит для приложений, требующих высоких запасов безопасности
BLAKE2/BLAKE3
- Быстрее, чем SHA-2 и SHA-3
- Криптографически безопасны
- BLAKE3: Высоко распараллеливаемый, отличен для больших данных
Функции формирования ключей (KDF)
PBKDF2 (Password-Based Key Derivation Function 2)
- Назначение: Формирование криптографических ключей из паролей
- Итерации: Минимум 100 000 (рекомендация OWASP)
- Случай использования: Хранение паролей, формирование ключей
Argon2
Победитель конкурса Password Hashing Competition (2015), рекомендуется для новых приложений.
Варианты
- Argon2id: Гибридный (рекомендуется для большинства случаев)
- Argon2i: Оптимизирован против атак по сторонним каналам
- Argon2d: Максимальная устойчивость к атакам на GPU
scrypt
- Функция, требовательная к памяти (устойчива к аппаратным атакам)
- Используется в Litecoin, Tarsnap
- Хороший баланс безопасности и совместимости
Коды аутентификации сообщений (MAC)
HMAC (Hash-based MAC)
- Комбинирует хеш-функцию с секретным ключом
- Обеспечивает аутентификацию и целостность
- Распространённые: HMAC-SHA256, HMAC-SHA512
Poly1305
- Одноразовый аутентификатор
- Используется с ChaCha20 для аутентифицированного шифрования
- Быстрый и с постоянным временем
Аутентифицированное шифрование
Почему это важно
Одно шифрование не гарантирует целостность. Атакующий может изменить шифротекст без обнаружения. Аутентифицированное шифрование решает эту проблему.
AEAD (Authenticated Encryption with Associated Data)
- AES-GCM: Наиболее широко поддерживается
- ChaCha20-Poly1305: Лучше на мобильных устройствах
- AES-CCM: Используется в некоторых беспроводных протоколах
Цифровые подписи
RSA-подписи
- Дополнение: Используй PSS (Probabilistic Signature Scheme)
- Хеш-функция: SHA-256 или выше
- Размер ключа: Минимум 2048 бит
ECDSA (Elliptic Curve Digital Signature Algorithm)
- Меньшие подписи, чем RSA
- Требует аккуратной генерации nonce (слабый RNG = скомпрометированный ключ)
- Рекомендуется детерминированный вариант (RFC 6979)
Ed25519
- Детерминированный (не требует RNG)
- Быстрая генерация и проверка подписи
- Малые подписи (64 байта)
- Устойчив к атакам по сторонним каналам
Современные протоколы
Signal Protocol
Современный протокол сквозного шифрования, используемый в Signal, WhatsApp, Facebook Messenger.
Ключевые особенности
- Double Ratchet: Непрерывно обновляет ключи
- Perfect Forward Secrecy: Прошлые сообщения остаются безопасными
- Post-Compromise Security: Восстанавливается после компрометации ключа
- Асинхронный: Работает, даже когда получатель не в сети
TLS 1.3
Последняя версия протокола Transport Layer Security.
Улучшения
- Удалены слабые алгоритмы и наборы шифров
- Всегда обеспечивает прямую секретность
- Более быстрое рукопожатие (1-RTT, опция 0-RTT)
- Зашифрованное Server Hello
Noise Protocol Framework
Современный фреймворк криптографических протоколов для построения безопасных систем коммуникации.
Применения
- WireGuard VPN
- Lightning Network
- I2P messaging
Постквантовая криптография
Угроза
Квантовые компьютеры могут взломать RSA и ECC, используя алгоритм Шора. Симметричные алгоритмы затронуты меньше, но требуют больших ключей.
Постквантовые кандидаты NIST
- Kyber: Инкапсуляция ключей на основе решёток
- Dilithium: Цифровые подписи на основе решёток
- SPHINCS+: Подписи на основе хеш-функций
Стратегия перехода
- Гибридный подход: Комбинируй классические и постквантовые алгоритмы
- Увеличь размеры симметричных ключей до 256 бит
- Следи за процессом стандартизации NIST
- Планируй гибкость алгоритмов
Лучшие практики реализации
Не создавай свою криптографию
Используй проверенные, рецензированные библиотеки:
- libsodium: Высокоуровневая, простая в использовании
- OpenSSL: Всеобъемлющая, широко поддерживается
- BoringSSL: Форк OpenSSL от Google
- Ring: Библиотека криптографии для Rust
Управление ключами
- Используй аппаратные модули безопасности (HSM) для критичных ключей
- Внедри политики ротации ключей
- Никогда не вшивай ключи в исходный код
- Используй формирование ключей для разных целей
- Безопасно удаляй ключи из памяти после использования
Безопасная генерация случайных чисел
- Используй криптографически безопасный генератор случайных чисел (CSPRNG)
- Никогда не используй стандартные функции rand()
- Генераторы случайных чисел ОС: /dev/urandom (Linux), CryptGenRandom (Windows)
- Специфичные для языка: crypto.randomBytes (Node.js), модуль secrets (Python)
Предотвращение атак по времени
- Используй сравнение с постоянным временем для секретов
- Избегай ветвлений на основе секретных данных
- Будь осторожен с атаками по времени кеша
- Используй библиотеки, разработанные с устойчивостью к атакам по времени
Тестирование и валидация
Аудиты безопасности
- Регулярное тестирование на проникновение
- Ревью кода экспертами по безопасности
- Сторонние аудиты безопасности
- Программы bug bounty
Соответствие стандартам
- FIPS 140-2/3: Стандарт правительства США
- Common Criteria: Международная сертификация безопасности
- PCI DSS: Требования индустрии платёжных карт
Ресурсы для дальнейшего обучения
Книги
- "Cryptography Engineering" от Ferguson, Schneier и Kohno
- "Serious Cryptography" от Jean-Philippe Aumasson
- "Applied Cryptography" от Bruce Schneier
Онлайн-ресурсы
- Cryptopals Crypto Challenges
- Курсы по криптографии от Stanford (Coursera)
- IACR ePrint Archive
- Crypto Stack Exchange