Перейти к содержанию
HexaTransfer
Вернуться к блогу
Шифрование и безопасность

Основы криптографии с открытым ключом: безопасный обмен

Изучите основы криптографии с открытым ключом и как она обеспечивает безопасный обмен. 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 году. Схема элегантна:

  1. Выберите два больших простых числа p и q.
  2. Вычислите n = p × q (модуль) и φ(n) = (p-1)(q-1).
  3. Выберите e, взаимно простое с φ(n), обычно 65537.
  4. Вычислите d такое, что e × d ≡ 1 (mod φ(n)).
  5. Открытый ключ: (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 по целым числам по модулю большого простого числа):

  1. Обе стороны договариваются о большом простом p и генераторе g.
  2. Алиса выбирает секрет a, отправляет A = g^a mod p.
  3. Боб выбирает секрет b, отправляет B = g^b mod p.
  4. Алиса вычисляет B^a mod p = g^(ab) mod p.
  5. Боб вычисляет 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.

Подписи: доказательство авторства

Криптография с открытым ключом делает то, чего не может симметричная: доказывает авторство. При подписании роли шифрования меняются местами — вы «шифруете» (подписываете) своим приватным ключом, а любой, у кого есть ваш публичный ключ, может «расшифровать» (проверить). Если проверка проходит, значит, вы держали приватный ключ.

Настоящие подписи используют хеш-функции для обработки сообщений произвольного размера:

  1. Вычислите h = SHA-256(сообщение).
  2. Подпишите h приватным ключом (RSA-PSS, ECDSA или Ed25519).
  3. Проверяющий хеширует полученное сообщение и сравнивает его с подписью с помощью публичного ключа.

Применения: сертификаты 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 ГБ бесплатно со сквозным шифрованием. Регистрация не требуется. Ваши файлы шифруются в браузере перед загрузкой — никто другой не может их прочитать.

Отправить файл