Як насправді працює криптографія з відкритим ключем
Практичний розбір асиметричного шифрування, пар ключів і цифрових підписів без махання руками та математичних аналогій.
Кожен раз, коли ви підключаєтесь SSH до сервера або завантажуєте HTTPS сайт, два математично пов'язаних ключі роблять важку роботу. Один публічний, один приватний, і стосунок між ними — це те, що спочатку робить можливою безпечну комунікацію по недовіреній мережі.
Базова ідея
При симетричному шифруванні один ключ як блокує, так і розблоковує дані. Це добре працює, якщо обидві сторони вже поділяють секрет, але безпечне поширення цього секрету — складна частина. Криптографія з відкритим ключем (асиметрична) вирішує це, генеруючи математично пов'язану пару: публічний ключ, який ви передаєте комусь, і приватний ключ, який ви ніколи не ділите.
Дані, зашифровані публічним ключем, можна розшифрувати тільки відповідним приватним ключем. Дані, підписані приватним ключем, можна перевірити будь-кому, хто має публічний ключ. Ці дві властивості покривають майже все, для чого ми це використовуємо: конфіденційність та аутентифікацію.
RSA, класичний приклад
RSA спирається на те, що множення двох великих простих чисел швидко, але факторизація добутку назад у ці прості числа обчислювально жорстока в масштабі. 2048-бітний RSA ключ побудований з двох простих чисел приблизно по 1024 біти кожне. Публічний ключ — це (n, e) — n є добутком простих чисел, e фіксований показник ступеня типу 65537. Приватний ключ виводиться з використанням функції Ейлера від n і включає знання вихідних простих чисел.
Шифрування — це модульне піднесення до степеня: c = m^e mod n. Розшифрування розвертає його з приватним показником d: m = c^d mod n. Насправді ніхто не шифрує великі навантаження прямо RSA на практиці — це повільно і має обмеження розміру, пов'язані з довжиною ключа. Натомість RSA зазвичай обертає симетричний сеансовий ключ (AES-256, наприклад), і симетричний шифр обробляє основні дані. Це гібридний підхід, який використовує TLS.
Криптографія еліптичної кривої і чому вона захоплює
ECC дає еквівалент безпеки RSA з набагато меншими ключами. 256-бітний ECC ключ (типу curve secp256r1 або Curve25519) приблизно порівнювальний за силою з 3072-бітним RSA ключем. Менші ключі означають швидші рукостиски і менше пропускної здатності, тому сучасні TLS конфігурації, SSH реалізації та протокол Signal спираються на ECC.
Математика інша — вона базується на задачі дискретного логарифму над точками на еліптичній кривій, а не на факторизації цілих чисел — але стосунок публічного/приватного ключа та гарантії концептуально такі ж.
Цифрові підписи: інша половина рівняння
Шифрування зберігає дані конфіденційними. Підписи доводять автентичність та цілісність. Щоб підписати повідомлення, ви його хешуєте (зазвичай SHA-256) та шифруєте цей хеш своїм приватним ключем. Будь-хто з вашим публічним ключем може самостійно захешувати повідомлення, розшифрувати ваш підпис і перевірити, чи збігаються ці два хеші.
Це точно те, що відбувається, коли ви запускаєте git commit -S з GPG ключем, або коли Certificate Authority підписує TLS сертифікат. Приватний ключ CA підписує ваш сертифікат; браузери поставляються з публічним ключем CA, який вже доверений, тому вони можуть перевірити автентичність вашого сертифіката без прямого спілкування з CA.
Де це з'являється щодня
SSH аутентифікація ключем — це прямий додаток: ssh-keygen -t ed25519 генерує пару ключів, ви скидаєте публічну половину в ~/.ssh/authorized_keys на сервері, і аутентифікація відбувається через виклик-відповідь з використанням приватного ключа, пароль ніколи не передається.
TLS рукостиски використовують асиметричну криптографію коротко, просто щоб встановити спільний симетричний ключ (через ECDHE обмін ключами в сучасних конфігураціях), потім переходять на швидке симетричне шифрування для фактичного сеансу. PGP/GPG шифрування електронної пошти також дотримується гібридного патерну — шифрують повідомлення з випадковим AES ключем, потім шифрують той AES ключ публічним RSA або ECC ключем одержувача.
Що насправді ламається на практиці
Математика за RSA і ECC не була зламана через класичні обчислення. Те, що йде не так, це майже завжди реалізація: слабка генерація випадкових чисел при створенні ключів (баг Debian OpenSSL з 2008 року є підручниковим випадком), повторне використання nonce в ECDSA підписах, що витікає приватні ключі, або padding oracle атаки проти погано реалізованого RSA (атака Bleichenbacher проти PKCS#1 v1.5 padding). Квантові обчислення — це довгострокова теоретична загроза — алгоритм Шора зламав би і RSA, і ECC, якби існував достатньо великий квантовий комп'ютер — тому NIST вже стандартизував пост-квантові алгоритми типу ML-KEM (раніше Kyber) для майбутної міграції.
Якщо ви хочете піти далі з цим, трек криптографії Korra Studio покриває протоколи обміну ключами та внутрішню роботу хеш-функцій більш детально, а сегменти мереж показують, як все це вписується в фактичний TLS рукостиск байт за байтом.
Написано з допомогою штучного інтелекту, перевірено та опубліковано Мішалем Пільчем (CISSP), Korra Studio.
Це одна замітка з бази знань Korra Studio — платформа поєднує кожну тему з 1-на-1 менторингом.
Початок безплатноarrow_forward