Як працює шифрування з відкритим ключем
Як двоє людей, які ніколи не зустрічалися, можуть обмінятися секретом через мережу, де кожен пакет може прочитати провайдер, оператор Wi-Fi чи зловмисник посередині?
Оновлено:
Як двоє людей, які ніколи не зустрічалися, можуть обмінятися секретом через мережу, де кожен пакет може прочитати провайдер, оператор Wi-Fi чи зловмисник посередині? Ще пів століття тому це вважалося нерозв’язним, а сьогодні відповідь спрацьовує щоразу, коли браузер показує замок біля адреси. Це криптографія з відкритим ключем, і зрозуміти її основну ідею можна без жодної формули.
Шифрування одним ключем, розшифрування іншим
У традиційному, симетричному шифруванні один і той самий ключ шифрує й розшифровує повідомлення. Це швидко та надійно, але має фундаментальну проблему: як передати ключ співрозмовнику, якщо канал зв’язку небезпечний? Надіславши ключ поштою, ви віддаєте його всім, хто читає пошту.
Асиметричне шифрування розв’язує це, використовуючи пару математично пов’язаних ключів. Відкритий ключ можна опублікувати де завгодно; закритий ключ ніколи не покидає власника. Пара має дві властивості:
- Усе, що зашифровано відкритим ключем, можна розшифрувати лише закритим. Будь-хто може надіслати вам зашифроване повідомлення, і лише ви його прочитаєте.
- Усе, що підписано закритим ключем, можна перевірити відкритим. Будь-хто може переконатися, що повідомлення надіслали саме ви й його не змінили дорогою.
Уявіть поштову скриньку з прорізом: вкинути листа може кожен (відкритий ключ), а відкрити скриньку — лише той, у кого є ключ від дверцят (закритий ключ). Математично це працює завдяки операціям, які легко виконати в один бік і практично неможливо обернути: перемножити два величезні прості числа просто, а розкласти добуток назад на множники — ні (RSA); аналогічно з операціями на еліптичних кривих (ECDSA, Ed25519), які дають ту ж стійкість із набагато коротшими ключами.
Чому на практиці поєднують два підходи
Асиметричні операції повільні — у тисячі разів повільніші за симетричні. Тому реальні протоколи працюють гібридно: асиметричне шифрування використовують лише для того, щоб безпечно домовитися про випадковий симетричний ключ сеансу, а далі весь трафік шифрують ним. Саме так працює TLS за замком у браузері: рукостискання з відкритими ключами триває мілісекунди, а потому гігабайти даних ідуть через швидкий AES або ChaCha20.
Де це зустрічається щодня
- HTTPS. Сертифікат сайту містить його відкритий ключ, підписаний центром сертифікації. Браузер перевіряє підпис і використовує ключ, щоб узгодити сеансовий ключ із сервером.
- SSH. Ваш відкритий ключ лежить на сервері в
authorized_keys; сервер надсилає виклик, який може підписати лише ваш закритий ключ. Пароль передавати не потрібно. - Месенджери з наскрізним шифруванням. Signal, WhatsApp обмінюються відкритими ключами пристроїв, тож сервер бачить лише зашифровані пакети.
- Підписи програм і оновлень. Виробник підписує пакет закритим ключем; система перевіряє підпис вбудованим відкритим і відмовляється встановлювати підроблений.
- Криптовалюти. Адреса гаманця походить від відкритого ключа; транзакцію підписує закритий.
- Ключі доступу (passkeys). Пристрій генерує пару для кожного сайту; сайт зберігає лише відкритий ключ, тому витік його бази нічого не дає зловмиснику.
Проблема довіри: чий це ключ?
Математика гарантує, що повідомлення прочитає лише власник закритого ключа. Вона не гарантує, що відкритий ключ, який ви отримали, справді належить банку, а не зловмиснику посередині, який підмінив його своїм. Цю прогалину закривають системи довіри: центри сертифікації в HTTPS підписують ключі після перевірки володіння доменом; SSH показує відбиток ключа при першому підключенні, щоб ви його перевірили; месенджери пропонують звірити «коди безпеки» особисто. Більшість практичних атак на криптографію спрямовані саме на цю ланку, а не на математику.
Як безпечно користуватися парами ключів щодня
- Закритий ключ — це і є секрет. Не пересилайте його, не зберігайте в незашифрованому вигляді на спільних дисках, захищайте парольною фразою.
- Для SSH використовуйте ключі замість паролів і вимкніть парольний вхід на сервері.
- Перевіряйте відбитки ключів при першому підключенні та звіряйте коди безпеки в месенджерах для важливих контактів.
- Довіряйте замку в браузері як підтвердженню каналу, а домен читайте окремо: сертифікат підтверджує адресу, а не намір власника.
- Робіть резервну копію закритих ключів у захищеному місці: втрачений ключ означає втрачений доступ.
Часті запитання
Чи можна з відкритого ключа обчислити закритий?
За сучасних алгоритмів і достатньої довжини ключа — ні, на це не вистачить обчислювальних ресурсів планети. Саме тому відкритий ключ можна публікувати вільно.
Чи зламають це квантові комп’ютери?
Достатньо потужний квантовий комп’ютер справді зламає RSA та еліптичні криві. Тому вже впроваджуються постквантові алгоритми (наприклад, ML-KEM), і браузери почали їх використовувати в TLS поряд із класичними.
Що таке відбиток ключа?
Короткий хеш відкритого ключа, який зручно звірити очима або по телефону. Якщо відбитки збігаються — ключ той самий.
Відкритий ключ — це замок, який можна роздати всім; закритий — єдиний ключ, який його відкриває.
Коротко: криптографія з відкритим ключем використовує пару ключів: відкритим шифрують і перевіряють підписи, закритим розшифровують і підписують. На практиці її поєднують зі швидким симетричним шифруванням і доповнюють системами довіри, які підтверджують, кому належить ключ. Захищайте закритий ключ і перевіряйте, чий ключ ви використовуєте.