Основы криптографии с открытым ключом: безопасный обмен
Изучите основы криптографии с открытым ключом и как она обеспечивает безопасный обмен. RSA, Diffie-Hellman объяснены.
Криптография с открытым ключом — иначе называемая асимметричной криптографией — использует два математически связанных ключа: публичный, который можно раздавать свободно, и приватный, который нужно тщательно охранять. Зашифруйте что-то моим публичным ключом — и только мой приватный ключ сможет это прочитать. Это решает старейшую задачу криптографии: как два незнакомца, никогда не встречавшихся, могут обменяться секретом через открытый канал. Изобретённая Диффи и Хеллманом в 1976 году и воплощённая в практику RSA год спустя, сегодня она лежит в основе TLS 1.3, Signal, SSH, подписания кода с Ed25519 и каждого сервиса передачи файлов, аутентифицирующего пользователей. Вот как это работает на самом деле.
Математический «люк»
Вся криптография с открытым ключом опирается на функции с «люком» — вычисления, которые легко выполнить в прямом направлении, но практически невозможно обратить без дополнительной информации. Доминируют два семейства:
- Целочисленная факторизация (RSA): перемножить два больших простых числа тривиально; разложить на множители их произведение — экспоненциально сложно. 2048-битный ключ RSA использует два ~1024-битных простых числа. Наилучшая известная атака, General Number Field Sieve, требует примерно 2^112 операций — что недостижимо.
- Дискретные логарифмы на эллиптических кривых (ECDH, ECDSA, Ed25519): вычисление умножения точки на кривой выполняется быстро; обратная операция для нахождения множителя — сложна. 256-битные кривые, такие как Curve25519, обеспечивают безопасность, эквивалентную 3072-битному RSA.
Оба класса задач легко решаются квантовыми компьютерами с помощью алгоритма Шора, поэтому NIST в 2024 году стандартизировал постквантовые альтернативы (ML-KEM и ML-DSA) в FIPS 203–205.
RSA на практике
Рон Ривест, Ади Шамир и Леонард Адлеман опубликовали RSA в 1977 году. Схема элегантна:
- Выберите два больших простых числа
pиq. - Вычислите
n = p × q(модуль) иφ(n) = (p-1)(q-1). - Выберите
e, взаимно простое сφ(n), обычно 65537. - Вычислите
dтакое, чтоe × d ≡ 1 (mod φ(n)). - Открытый ключ:
(n, e). Приватный ключ:(n, d).
Шифрование: шифртекст = сообщение^e mod n. Дешифрование: сообщение = шифртекст^d mod n. Математика работает благодаря теореме Эйлера.
Реальный RSA использует дополнение OAEP (RFC 8017) для предотвращения атак на основе выбранного шифртекста. Учебниковый RSA катастрофически небезопасен. RSA-2048 — текущий минимум для новых систем; RSA-3072 или 4096 — для всего долгоживущего.
Diffie-Hellman: общие секреты без передачи ключей
RSA позволяет шифровать для известного получателя. Diffie-Hellman делает нечто тонко иное: позволяет двум сторонам вывести общий секрет через открытый канал, не передавая сам секрет.
Классическая версия (DH по целым числам по модулю большого простого числа):
- Обе стороны договариваются о большом простом
pи генератореg. - Алиса выбирает секрет
a, отправляетA = g^a mod p. - Боб выбирает секрет
b, отправляетB = g^b mod p. - Алиса вычисляет
B^a mod p = g^(ab) mod p. - Боб вычисляет
A^b mod p = g^(ab) mod p.
Оба приходят к g^ab mod p, не передав ни a, ни b. Подслушивающий видит g, p, A, B, но вычислить g^ab из A и B означает решить задачу дискретного логарифма.
Современный DH использует эллиптические кривые (ECDH). X25519 — стандартный выбор: 32-байтные ключи, 32-байтные общие секреты, реализация защищена от атак по времени.
Эллиптические кривые и почему они победили
RSA выглядит устаревшим — во многом потому, что так и есть. Криптография на эллиптических кривых вытеснила его по трём практическим причинам:
- Меньшие ключи. 256-битный ключ EC обеспечивает безопасность, эквивалентную 3072-битному ключу RSA. Это 32 байта против 384 байт.
- Более быстрые операции. ECDH на Curve25519 занимает около 70 микросекунд на современном CPU. Генерация ключа RSA-3072 занимает секунды.
- Лучшая устойчивость к слабости генераторов случайных чисел. Ed25519 детерминирован — подписи не требуют случайного nonce на сообщение, что исключает катастрофу Sony PS3 с ECDSA в 2010 году, когда постоянный nonce раскрыл мастер-ключ.
Кривые NIST (P-256, P-384, P-521) широко поддерживаются, но исторически вызывали у некоторых криптографов подозрение из-за необъяснённых констант. Curve25519 и Ed25519, разработанные Дэниэлом Бернштейном, — это современные стандарты, используемые в TLS 1.3, WireGuard, Signal и SSH.
Подписи: доказательство авторства
Криптография с открытым ключом делает то, чего не может симметричная: доказывает авторство. При подписании роли шифрования меняются местами — вы «шифруете» (подписываете) своим приватным ключом, а любой, у кого есть ваш публичный ключ, может «расшифровать» (проверить). Если проверка проходит, значит, вы держали приватный ключ.
Настоящие подписи используют хеш-функции для обработки сообщений произвольного размера:
- Вычислите
h = SHA-256(сообщение). - Подпишите
hприватным ключом (RSA-PSS, ECDSA или Ed25519). - Проверяющий хеширует полученное сообщение и сравнивает его с подписью с помощью публичного ключа.
Применения: сертификаты TLS (CA подписывает публичный ключ сайта), подписание кода (нотаризация Apple, Microsoft Authenticode), подписание коммитов Git, менеджеры пакетов (apt, Homebrew, npm).
Как передача файлов использует криптографию с открытым ключом
Для анонимных передач на основе ссылок (SwissTransfer, HexaTransfer) криптография с открытым ключом часто не используется напрямую — случайный симметричный ключ во фрагменте URL обрабатывает всё. Но для сервисов на основе аккаунтов публичные ключи имеют значение:
- Аутентификация сервера TLS 1.3. Каждое HTTPS-соединение начинается с сертификата сервера, проверяемого по цепочке CA. Эфемерный обмен ключами ECDHE затем выводит ключ сессии.
- Шифрование между аккаунтами. Tresorit, Proton Drive и Mega выдают пользователям пару ключей при регистрации. Файлы, которыми делятся между аккаунтами, оборачиваются публичным ключом получателя.
- Подписанные клиенты и обновления. Десктопные приложения верифицируют обновления с помощью подписей Ed25519 или RSA, чтобы предотвратить атаки на цепочку поставок.
- Аутентификация без паролей. WebAuthn и Passkeys используют ключи EC, хранимые в защищённом аппаратном обеспечении (Touch ID, Windows Hello, YubiKey).
Распределение ключей: нерешённая проблема
Криптография с открытым ключом решает одну задачу распределения ключей, но создаёт другую: как убедиться, что публичный ключ действительно принадлежит тому, за кого себя выдаёт? Три модели:
- PKI (Public Key Infrastructure). Центры сертификации подписывают публичные ключи. Используется TLS с корнями доверия в Chrome, Firefox, Safari.
- Сеть доверия. Подход PGP — пользователи подписывают ключи друг друга. Гибко, но проблемы масштабирования удержали распространение в нише.
- TOFU (Trust On First Use). Подход SSH — принять ключ при первом подключении, предупреждать при изменении. Просто, но уязвимо к первоначальному перехвату.
- Прозрачность ключей. Логи на основе дерева Меркла, где все публичные ключи публично проверяемы. Используется WhatsApp, iMessage Contact Key Verification и современными системами passkey.
Для передачи файлов неизвестным получателям обмен через фрагмент URL обходит это полностью — отправитель передаёт получателю ключ напрямую через ссылку, а подлинность зависит от канала, используемого для отправки ссылки.
Что изменит квантовые вычисления
Крупномасштабный квантовый компьютер, запускающий алгоритм Шора, сломает как RSA, так и криптографию на эллиптических кривых. Текущие оценки ставят временной горизонт в 10–20 лет, но риск уже существует для данных с долгим сроком жизни: атаки «собери сейчас, расшифруй позже» записывают зашифрованный трафик сегодня и расшифруют его в 2040 году.
Постквантовые стандарты NIST 2024 года:
- FIPS 203 (ML-KEM) — заменяет Diffie-Hellman / ECDH для обмена ключами. Основан на задачах на решётках.
- FIPS 204 (ML-DSA) — заменяет RSA/ECDSA для подписей.
- FIPS 205 (SLH-DSA) — резервные подписи на основе хеш-функций.
Cloudflare и Google уже поддерживают ML-KEM в обмене ключами TLS 1.3. Сервисы передачи файлов последуют в течение ближайших нескольких лет. Симметричное шифрование (AES-256-GCM) в основном не затронуто — алгоритм Гровера лишь вдвое снижает его эффективную стойкость.
Итог
Для чувствительных передач сегодня: TLS 1.3 с обменом ключами X25519 защищает соединение, AES-256-GCM обрабатывает массовое шифрование, а для сервисов на основе аккаунтов ECDH с Curve25519 оборачивает ключи отдельных файлов. Сервисы на основе ссылок пропускают уровень аккаунта, но выигрывают в простоте. Обе модели обеспечивают надёжную безопасность при правильной реализации.
Попробуйте на hexatransfer.com — бесплатно, без регистрации, до 10 ГБ.
Безопасная отправка больших файлов со сквозным шифрованием
Передавайте файлы до 10 ГБ бесплатно со сквозным шифрованием. Регистрация не требуется. Ваши файлы шифруются в браузере перед загрузкой — никто другой не может их прочитать.
Отправить файл