Информационная безопасность
Криптография: симметричная и асимметричная
2011. Sony PlayStation Network взломали и украли данные 77 миллионов пользователей. Причина: приватные ключи ECDSA использовались с одним и тем же случайным числом. Одна ошибка в реализации криптографии - и вся математическая стойкость бесполезна. Понимание того, как работает симметричная и асимметричная криптография, - это не теория. Это инженерная необходимость.
- **TLS 1.3** - каждый HTTPS-запрос за 1 RTT выполняет ECDHE key exchange, проверяет сертификат и устанавливает AES-GCM шифрование
- **Signal Protocol** - использует Double Ratchet: комбинацию ECDH и симметричного ratchet для каждого сообщения, обеспечивая PFS на уровне отдельных сообщений
- **Bitcoin/Ethereum** - ECDSA на кривой secp256k1 для подписи транзакций: приватный ключ -> публичный ключ -> адрес кошелька
Диффи, Хеллман и революция открытых ключей
В 1976 году Whitfield Diffie и Martin Hellman опубликовали 'New Directions in Cryptography' - работу, которая изменила криптографию навсегда. До этого момента все системы шифрования требовали предварительной передачи секретного ключа - защищённым каналом, который часто сам требовал защиты (классическая проблема). Diffie-Hellman решил её математически. АНБ США пыталось классифицировать работу как государственную тайну. Диффи и Хеллман отказались. В 2015 году оба получили премию Тьюринга.
AES: симметричное шифрование
**2001. NIST после 5-летнего конкурса выбрал алгоритм Rijndael бельгийских криптографов Дамена и Рэймена как новый стандарт AES.** До этого 27 лет царил DES с 56-битным ключом - в 1999 году его взломали за 22 часа. AES с 128-битным ключом при брутфорсе потребовал бы времени, превышающего возраст Вселенной, даже на квантовом компьютере без алгоритма Гровера.
**AES (Advanced Encryption Standard)** - блочный шифр. Шифрует блоки по 128 бит (16 байт). Ключ: 128, 192 или 256 бит. Работает через 10-14 раундов преобразований, каждый из которых включает SubBytes (нелинейная замена через S-box в GF(2^8)), ShiftRows, MixColumns и AddRoundKey. Сам по себе AES шифрует один блок - для реальных данных нужен **режим работы**.
**IV должен быть случайным и уникальным для каждого шифрования.** Повторное использование одного IV с одним ключом в GCM катастрофически разрушает безопасность: атакующий может восстановить ключевой поток и расшифровать все сообщения. Именно поэтому `randomBytes(12)` - не опция, а требование.
Почему режим ECB нельзя использовать для шифрования реальных данных?
RSA: асимметричное шифрование
**1977. MIT. Ривест, Шамир и Адлеман опубликовали RSA** - первую практическую схему с открытым ключом. Идея: операция в одну сторону быстрая (возведение в степень по модулю), в обратную - вычислительно невозможная без знания факторов (факторизация больших чисел). Правительство США пыталось засекретить RSA как военные технологии - и проиграло.
**RSA математика:** 1. Выбрать два больших простых числа p и q 2. n = p * q (публично) 3. phi(n) = (p-1) * (q-1) 4. e - открытая экспонента (обычно 65537) 5. d = e^(-1) mod phi(n) - закрытый ключ Шифрование: C = M^e mod n (открытый ключ) Дешифрование: M = C^d mod n (закрытый ключ) Безопасность: зная n, найти d без p и q - задача факторизации. Для 2048-битного RSA это вычислительно неразрешимо.
**RSA нельзя использовать напрямую для шифрования данных большого объёма.** RSA 2048 может зашифровать максимум ~245 байт (с OAEP padding). На практике RSA используют только для передачи симметричного ключа (Key Encapsulation) - а данные шифруют AES. Это называется гибридной схемой.
Почему RSA-2048 не используют для шифрования больших файлов напрямую?
Key Exchange: Diffie-Hellman и ECDH
**Главная проблема криптографии до 1976 года: как передать ключ по незащищённому каналу?** Если канал перехватывается - ключ украдут. Whitfield Diffie и Martin Hellman решили задачу лаконично: можно договориться о секрете, не передавая его. Идея настолько революционная, что они получили премию Тьюринга в 2015 году - через 40 лет после публикации.
**Ephemeral ECDH (ECDHE)** - каждое соединение использует новую пару ключей. Это обеспечивает **Perfect Forward Secrecy (PFS)**: даже если долгосрочный ключ сервера скомпрометирован, прошлые сессии не расшифровать. TLS 1.3 требует ECDHE обязательно - RSA key exchange без PFS запрещён.
Чем ECDHE отличается от обычного ECDH, и почему TLS 1.3 требует именно ECDHE?
Гибридная схема: как TLS соединяет всё вместе
**Ни одна схема не используется в одиночку.** AES быстрый, но нужен общий ключ. RSA решает проблему ключа, но медленный и ограничен в размере. ECDH лаконично договаривается о секрете. TLS 1.3 объединяет всё это в одно рукопожатие длиной в 1 RTT. Каждый запрос к https://example.com использует эту же схему.
**Три роли в TLS:** - **ECDHE**: договориться о shared secret (key agreement) - **RSA/ECDSA certificate**: доказать что сервер - это действительно сервер, а не MITM (authentication) - **AES-GCM**: зашифровать и аутентифицировать все данные сессии (confidentiality + integrity)
HTTPS шифрует данные с помощью RSA - поэтому он безопасен
HTTPS использует гибридную схему: ECDHE для согласования ключей (с PFS), сертификат RSA/ECDSA для аутентификации сервера, и AES-GCM для фактического шифрования данных
RSA слишком медленный для шифрования трафика и ограничен размером (~245 байт). Реальное шифрование данных в HTTPS - это AES-GCM с ключами, полученными через ECDHE. RSA в сертификате используется только для подписи - доказательства того, что публичный ключ принадлежит правильному серверу.
Почему TLS 1.3 запретил RSA key exchange (без ECDHE), хотя RSA технически работает?
Ключевые идеи
- **AES-GCM** - симметричный шифр для реальных данных: быстрый, AEAD (шифрование + аутентификация одновременно). IV должен быть уникальным для каждого шифрования - повтор разрушает безопасность
- **RSA** - асимметричная схема: шифрование публичным ключом, дешифрование приватным. Ограничен ~245 байтами. На практике - только для Key Encapsulation и подписей
- **ECDHE** - Elliptic Curve Diffie-Hellman Ephemeral: позволяет договориться об общем секрете без его передачи. 'E' означает ephemeral - PFS для каждой сессии
- **Гибридная схема (TLS 1.3)**: ECDHE для key agreement + сертификат для authentication + AES-GCM для шифрования данных. Ни одна схема не работает в одиночку
Вопросы для размышления
- Если ECDHE обеспечивает Perfect Forward Secrecy, то зачем нужен сертификат сервера в TLS? От какой атаки он защищает?
- Signal использует Double Ratchet - новый ключ для каждого сообщения. Какую угрозу это решает, которую не решает обычный ECDHE на уровне сессии?
- Что произойдёт с безопасностью RSA и ECDSA при появлении практического квантового компьютера? Какие алгоритмы приходят им на смену?