Криптография с открытым ключом (ее часто называют асимметричным шифрованием) — это семейство методов, где используется пара математически связанных ключей: открытый можно свободно публиковать, а закрытый хранится в секрете и никогда не передается. Ключевое свойство пары: зная открытый ключ, вычислить закрытый практически невозможно за разумное время.
Содержание
Важно с самого начала не смешивать три разные задачи, которые эта криптография решает разными алгоритмами:
- Шифрование — закрыть данные так, чтобы их прочитал только владелец закрытого ключа (RSA-OAEP).
- Согласование ключа — выработать общий секрет через открытый канал, ничего секретного по нему не пересылая (Диффи-Хеллман, ECDH).
- Цифровая подпись — подтвердить авторство и целостность данных (RSA-PSS, ECDSA, EdDSA).
На этих задачах держатся TLS, электронные подписи и криптовалюты. Ниже разберу принцип, алгоритмы RSA и ECC с прогоняемым кодом, протокол Диффи-Хеллмана, цифровую подпись, актуальные длины ключей на 2026 год и угрозу со стороны квантовых компьютеров. Весь код в статье запущен, вывод в блоках — реальный.
Симметричное и асимметричное шифрование: в чем разница
В симметричном шифровании один и тот же ключ и шифрует, и расшифровывает (так работают AES, ГОСТ «Кузнечик»). Это быстро, но есть проблема: ключ надо как-то передать собеседнику по защищенному каналу, а его-то часто и нет.
Криптография с открытым ключом снимает эту проблему разными ключами для разных операций. Платой становится скорость: операции с открытым ключом обычно существенно дороже симметричных, поэтому ими не шифруют основной поток данных.
| Признак | Симметричное | Криптография с открытым ключом |
|---|---|---|
| Ключи | один общий секретный | пара: открытый + закрытый |
| Скорость | высокая | заметно ниже, поэтому не для основного потока данных |
| Передача ключа | нужен защищенный канал | открытый ключ можно публиковать, но его принадлежность нужно проверить |
| Длина ключа | 128-256 бит | 256 бит (ECC) — 3072+ бит (RSA) |
| Алгоритмы (по задачам) | AES, ChaCha20, «Кузнечик» | RSA — шифрование и подпись; DH/ECDH — согласование секрета; ECDSA/EdDSA — подпись; ECC — семейство методов на эллиптических кривых |
На практике методы почти всегда работают вместе. Так устроен и HTTPS: асимметричная часть только согласует общий сеансовый ключ, а дальше весь трафик шифруется быстрым симметричным алгоритмом. Такую связку называют гибридным шифрованием.
Как работает: пара ключей
Обмен зашифрованными данными идет так:
- Получатель генерирует пару ключей — открытый и закрытый.
- Открытый ключ он передает отправителю. Скрывать его не нужно, но нужно проверить, кому он принадлежит. В TLS эту связь подтверждает сертификат и цепочка доверия.
- Отправитель шифрует данные открытым ключом получателя и отсылает шифртекст.
- Получатель расшифровывает его своим закрытым ключом.
Перехват шифртекста бесполезен: восстановить исходное сообщение можно только закрытым ключом, а он никуда не передавался и известен лишь получателю. Открытый ключ для расшифровки не годится — направление операции одностороннее.
Но у открытого канала есть отдельная опасность: если злоумышленник подменит открытый ключ на свой, он сможет читать переписку, оставаясь незаметным (атака человек посередине, MITM). Поэтому открытый ключ мало получить — нужно убедиться, что он принадлежит именно нужной стороне. За это отвечают сертификаты и инфраструктура доверия (PKI), к которой я еще вернусь.
Математически пара опирается на «одностороннюю функцию с секретом» (trapdoor): вычислить результат легко, а обратить без знания секрета вычислительно неподъемно. У RSA это разложение большого числа на простые множители, у ECC — дискретный логарифм на эллиптической кривой.
Алгоритм RSA
RSA (по фамилиям Rivest, Shamir, Adleman, 1977) держится на сложности факторизации — разложения большого числа на простые множители. Перемножить два простых числа легко, а восстановить их из произведения при длине в сотни цифр — практически нет.
Соберу учебную пару на маленьких простых числах и прогоню шифрование и расшифровку. Это математическая демонстрация textbook RSA: она показывает арифметику, но небезопасна и не годится для production. В реальности p и q — числа длиной в сотни десятичных цифр:
# Математическая демонстрация (textbook RSA) на маленьких числах - НЕ для production
p, q = 61, 53 # два простых числа (в реальности - огромные)
n = p * q # модуль, входит в оба ключа
phi = (p - 1) * (q - 1) # значение функции Эйлера от n
e = 17 # открытая экспонента, взаимно проста с phi
d = pow(e, -1, phi) # закрытая экспонента: (e*d) mod phi = 1
print("n =", n, " phi =", phi)
print("Открытый ключ (e, n):", (e, n))
print("Закрытый ключ (d, n):", (d, n))
m = 42 # число-сообщение, обязательно m < n
c = pow(m, e, n) # шифруем ОТКРЫТЫМ ключом: c = m^e mod n
m2 = pow(c, d, n) # расшифровываем ЗАКРЫТЫМ: m = c^d mod n
print("сообщение:", m, "-> шифр:", c, "-> расшифровка:", m2)
Вывод программы:
n = 3233 phi = 3120
Открытый ключ (e, n): (17, 3233)
Закрытый ключ (d, n): (2753, 3233)
сообщение: 42 -> шифр: 2557 -> расшифровка: 42
Секрет-«лазейка» здесь — множители p и q. Открыто публикуется только модуль n = 3233 и экспонента e = 17. Чтобы вычислить закрытую экспоненту d, нужно знать phi, а для этого — разложить n на 61 и 53. На маленьком числе это мгновенно, на 2048-битном — за пределами возможностей современных компьютеров.
Подпись RSA — отдельная задача, покажу ее отдельным примером на той же учебной паре ключей (n, e, d из кода выше). Это тоже только демонстрация арифметики:
# Отдельный пример: подпись на той же учебной паре (n, e, d) - тоже НЕ для production
n, e, d = 3233, 17, 2753 # та же учебная пара ключей из кода выше
m = 42 # то же число-сообщение
sig = pow(m, d, n) # закрытым ключом получаем значение подписи
check = pow(sig, e, n) # открытым ключом восстанавливаем исходное значение
print("подпись:", sig, "-> проверка открытым ключом:", check)
Вывод программы:
подпись: 3065 -> проверка открытым ключом: 42
Здесь видно, почему подпись и шифрование — разные задачи, хотя обе используют модульное возведение в степень. Шифруют открытым ключом (читает только владелец закрытого), а значение подписи получают закрытым (проверить может каждый). Но это не «шифрование закрытым ключом»: безопасные схемы шифрования (RSA-OAEP) и подписи (RSASSA-PSS) имеют разные кодирования и не взаимозаменяемы. Учебный код выше не добавляет этих обязательных для боевого RSA дополнений, поэтому «голый» textbook RSA небезопасен — не переносите его в production. И еще важнее: сама модель «зашифровать закрытым ключом» — лишь особенность арифметики RSA и не переносится на ECDSA и EdDSA, где подпись устроена принципиально иначе.
Диффи-Хеллман: общий секрет без передачи ключа
Протокол Диффи-Хеллмана решает отдельную задачу — выработать общий секретный ключ через открытый канал, ничего секретного по нему не пересылая. Этот общий ключ дальше используют для быстрого симметричного шифрования.
Идея на свойствах остатков от деления: каждая сторона держит свой закрытый показатель, обменивается только публичными значениями, а из чужого публичного и своего закрытого обе получают одно и то же число:
# Протокол Диффи-Хеллмана: общий секрет через открытый канал
p = 23 # простой модуль (в реальности 2048+ бит)
g = 5 # генератор группы
a = 6 # закрытый ключ Алисы, не покидает ее машину
b = 15 # закрытый ключ Боба, не покидает его машину
A = pow(g, a, p) # Алиса публикует A = g^a mod p
B = pow(g, b, p) # Боб публикует B = g^b mod p
print("Алиса -> Боб (A):", A)
print("Боб -> Алиса (B):", B)
s_alice = pow(B, a, p) # Алиса считает B^a mod p
s_bob = pow(A, b, p) # Боб считает A^b mod p
print("секрет у Алисы:", s_alice)
print("секрет у Боба: ", s_bob)
print("секреты совпали:", s_alice == s_bob)
Вывод программы:
Алиса -> Боб (A): 8
Боб -> Алиса (B): 19
секрет у Алисы: 2
секрет у Боба: 2
секреты совпали: True
Перехватчик видит p, g, A и B, но чтобы получить секрет, ему нужно решить задачу дискретного логарифма (найти a по g^a mod p) — при больших p это вычислительно неподъемно. Отдельно оговорюсь про границу: базовый Диффи-Хеллман согласует ключ, но не подтверждает, с кем именно, поэтому без аутентификации сторон он уязвим к атаке человек посередине. В TLS его всегда дополняют подписью на основе сертификата.
ECC и другие асимметричные алгоритмы
Криптография на эллиптических кривых (ECC) дает ту же стойкость при заметно более коротком ключе, поэтому вытесняет RSA в мобильных устройствах, TLS и блокчейне. Стойкость ECC опирается на сложность дискретного логарифма в группе точек эллиптической кривой.
| Алгоритм | На чем стоит | Для чего |
|---|---|---|
| RSA | факторизация больших чисел | шифрование ключа и подпись |
| Диффи-Хеллман (DH/ECDH) | дискретный логарифм | согласование общего ключа |
| DSA | дискретный логарифм | цифровая подпись (стандарт DSS) |
| ECDSA / EdDSA | дискретный логарифм на кривой | подпись (TLS, Bitcoin, Ethereum) |
| ГОСТ Р 34.10-2012 | дискретный логарифм на кривой | подпись, российский стандарт |
Bitcoin и Ethereum используют ECDSA на кривой secp256k1 для подписи транзакций; современный TLS и мессенджеры чаще берут EdDSA (Ed25519) и обмен ключами X25519. Схема Эль-Гамаля и «классический» DSA сегодня почти не применяются в новых системах, но их полезно знать как исторические основы подписи.
Длина ключа и надежность на 2026 год
Надежность асимметричного шифра определяется длиной ключа и сложностью базовой задачи для текущих вычислительных мощностей. Мощности растут, поэтому пороги длин со временем поднимают. Ключи RSA на 512-1024 бита сегодня считаются небезопасными.
Ниже — ориентир по сопоставимой стойкости (по методике NIST SP 800-57): сколько бит RSA и ECC дают защиту, эквивалентную симметричному ключу.
| Стойкость, бит | Симметричный | RSA (модуль) | ECC (ключ) |
|---|---|---|---|
| 112 | 3DES | 2048 | 224-255 |
| 128 | AES-128 | 3072 | 256-383 |
| 192 | AES-192 | 7680 | 384-511 |
| 256 | AES-256 | 15360 | 512+ |
Практический вывод на 2026 год: для RSA минимум — 2048 бит, а для новых систем с расчетом на годы вперед — 3072 бита и больше. Для ECC достаточно 256-битного ключа (P-256, Ed25519) — он дает стойкость уровня 128 бит при куда меньших накладных расходах, чем RSA-3072.
Отдельная угроза — квантовые компьютеры. Алгоритм Шора теоретически решает и факторизацию, и дискретный логарифм за полиномиальное время, то есть ломает и RSA, и ECC, как только появится достаточно мощная машина (по состоянию на 2026 таких нет). На этот случай NIST в 2024 году утвердил первые постквантовые стандарты (FIPS 203, 204, 205): ML-KEM (FIPS 203) для обмена ключами и ML-DSA, SLH-DSA (FIPS 204, 205) для подписи. Отдельные протоколы и продукты уже внедряют гибридные схемы, но этап и охват перехода зависят от конкретной системы.
Цифровые подписи
Криптография с открытым ключом дает не только секретность, но и подтверждение авторства и целостности. Цифровая подпись — это результат обработки хэша сообщения закрытым ключом отправителя; проверяют ее открытым ключом.
Подпись и шифрование — разные задачи, а не одна операция «наоборот». При шифровании открытым ключом закрывают данные для владельца закрытого. При подписи закрытым ключом фиксируют авторство: проверить подпись открытым ключом может любой, а подделать без закрытого ключа — нет. Если сообщение изменили хоть на бит, хэш не сойдется и проверка провалится. В RSA обе операции опираются на модульное возведение в степень, поэтому их легко перепутать, но у современных подписей (RSASSA-PSS, ECDSA, EdDSA) собственная математика, никак не сводимая к «шифрованию закрытым ключом».
Важная оговорка: подпись доказывает, что данные не менялись и что их подписал владелец конкретного закрытого ключа. Но что этот ключ принадлежит именно «Иванову», подпись сама по себе не гарантирует — за это отвечают сертификаты и удостоверяющие центры (PKI).
Ограничения метода
У асимметричного подхода есть цена и слабые места:
- Скорость. Операции с открытым ключом обычно существенно дороже симметричных, поэтому ими шифруют не сам трафик, а только ключ или хэш (разница зависит от алгоритма, длины ключа, операции и реализации).
- Зависимость от секретности закрытого ключа. Если он утек, скомпрометированы все зашифрованные им данные и все подписи.
- Потеря ключа. Утратив закрытый ключ, владелец теряет и доступ к зашифрованным данным — в криптокошельках это означает безвозвратную потерю средств.
- Доверие к открытому ключу. Нужен способ убедиться, что открытый ключ действительно принадлежит нужной стороне, — отсюда сертификаты и инфраструктура PKI.
Выводы
- Криптография с открытым ключом использует пару ключей и решает три разные задачи разными алгоритмами: шифрование (RSA-OAEP), согласование ключа (Диффи-Хеллман, ECDH) и подпись (RSA-PSS, ECDSA, EdDSA); из открытого ключа закрытый практически не вычислить.
- RSA стоит на сложности факторизации, ECC и Диффи-Хеллман — на дискретном логарифме; ECC дает ту же стойкость при более коротком ключе.
- На 2026 год безопасный минимум — RSA 2048 бит (для новых систем 3072+) или ECC 256 бит; ключи до 1024 бит небезопасны.
- Асимметрию почти всегда сочетают с симметричным шифром (гибридная схема в TLS): медленный асимметричный шаг согласует быстрый сеансовый ключ.
- Против будущих квантовых компьютеров RSA и ECC уязвимы; переход идет на постквантовые стандарты NIST (ML-KEM, ML-DSA), утвержденные в 2024 году.
Где применяется и что учить дальше
Асимметричное шифрование лежит в основе повседневной безопасности: рукопожатие HTTPS/TLS при открытии любого сайта, электронная подпись документов, защищенная почта (S/MIME, PGP), SSH-доступ к серверам, подпись транзакций в блокчейне и криптокошельках. Понимание пары ключей, подписи и длины ключа — база для любой работы с защитой данных.
Освойте тему на практике
Если хочется разобрать криптографию системно — от математики RSA и эллиптических кривых до протоколов, PKI и постквантовых схем — посмотрите курс Криптографическая защита информации. Оценить формат и уровень до старта помогают бесплатные открытые уроки Otus — живые занятия с преподавателями.
FAQ
Каким ключом шифруют, а каким расшифровывают? Шифруют открытым ключом получателя, расшифровывает он своим закрытым. У подписи наоборот: создают закрытым ключом, проверяют открытым.
Почему криптография с открытым ключом не вытеснила симметричное шифрование полностью? Ее операции существенно дороже симметричных, поэтому ими закрывают только ключ или хэш, а сам объем данных — быстрым симметричным алгоритмом. Это и есть гибридная схема в TLS.
Что будет с RSA и ECC, когда появятся квантовые компьютеры? Достаточно мощный квантовый компьютер сломает их алгоритмом Шора. На этот случай с 2024 года есть постквантовые стандарты NIST (ML-KEM, ML-DSA), и переход на них уже начался.



