Как работает шифрование, на котором держится весь интернет
Каждый раз, когда ты вводишь пароль или открываешь сайт с замочком в адресной строке, в дело вступает математика, которую невозможно взломать в лоб даже всеми компьютерами планеты. Разбираемся, как это устроено.
Ты заходишь на сайт банка, видишь маленький замочек рядом с адресом и спокойно вводишь пароль. Но между твоим ноутбуком и сервером банка тянутся тысячи километров проводов, через которые проходят чужие роутеры. Почему же твой пароль не может прочитать никто по дороге? Ответ — в одной красивой математической идее.
Сначала был общий секрет
Шифрование придумали задолго до интернета. Идея простая: ты берёшь сообщение и по какому-то правилу превращаешь его в нечитаемую кашу. Тот, кто знает правило, превращает кашу обратно. Это правило и называют ключом.
Самый древний пример — шифр Цезаря. Берёшь каждую букву и сдвигаешь её на несколько позиций по алфавиту. Сдвиг на 3 превращает «А» в «Г», «Б» в «Д» и так далее. Слово «КОД» становится «НСЖ». Чтобы прочитать, нужно знать число сдвига — это и есть ключ. Современные шифры устроены неизмеримо хитрее, но суть та же: одним и тем же ключом и зашифровывают, и расшифровывают. Такое шифрование называют симметричным, потому что обе стороны держат в руках одинаковый секрет.
И вот тут всплывает проблема, которая ломала всю конструкцию веками. Чтобы переписываться тайно, тебе и собеседнику нужно сначала договориться об общем ключе. Но как передать ему ключ, если все каналы прослушиваются? Не можешь же ты зашифровать ключ — для этого нужен ещё один ключ, который тоже надо как-то передать. Получается замкнутый круг.
Гениальный трюк с двумя ключами
В 1970-х математики совершили переворот. Они придумали асимметричное шифрование: вместо одного ключа — целая пара, которая работает как волшебный замок.
Представь почтовый ящик с прорезью. Бросить письмо в прорезь может кто угодно — это публичное действие. А вот достать письмо может только владелец, у которого есть единственный ключ от дверцы. В криптографии эти две роли играют два связанных числа:
- Открытый ключ — его можно раздавать всем подряд, выкладывать в открытый доступ. Им сообщение зашифровывают.
- Закрытый ключ — его хранят в тайне и никому не показывают. Только им сообщение можно расшифровать.
Самое удивительное: зная открытый ключ, ты можешь зашифровать что угодно, но обратно расшифровать не сможешь. Даже сам отправитель не прочитает то, что только что запечатал. Замок защёлкнулся — открыть его способен лишь хозяин закрытого ключа.
Главный фокус: чтобы переписываться тайно, больше не нужно заранее обмениваться секретом. Ты просто берёшь чужой открытый ключ, который висит на виду, и шифруешь им сообщение.
Почему это нельзя взломать перебором
Откуда берётся такая односторонность? Из задач, которые легко решить в одну сторону и чудовищно трудно — в обратную. Классический пример из алгоритма RSA — перемножение простых чисел.
Перемножить два больших простых числа — секундное дело даже для калькулятора. А вот обратная задача — взять готовое произведение и найти, какие именно два простых числа дали такой результат, — называется разложением на множители. Для чисел из сотен цифр это превращается в кошмар.
Вот аналогия. Размешать ложку сахара в стакане чая — пара секунд. А теперь попробуй вынуть из чая обратно ровно эти кристаллики сахара. Технически молекулы никуда не делись, но собрать их вместе практически нереально. Перемножение чисел — это размешивание, а разложение на множители — попытка достать сахар назад.
Когда числа достаточно большие, перебор всех вариантов занял бы у самых мощных компьютеров мира время, сравнимое с возрастом Вселенной. Шифр не то чтобы невозможно вскрыть в принципе — просто на это не хватит ни времени, ни энергии во всей видимой части космоса. А значит, на практике он надёжен.
Как всё это живёт внутри HTTPS
Теперь самое интересное: в реальном интернете два подхода работают в паре. Дело в том, что асимметричное шифрование надёжное, но медленное — гонять через него гигабайты видео было бы пыткой. А симметричное быстрое, но требует общего секрета. Решение очевидно: возьмём лучшее от обоих.
Когда ты открываешь сайт с замочком (это и есть HTTPS), происходит примерно такой разговор:
- Твой браузер и сервер здороваются. Сервер присылает свой открытый ключ.
- Браузер придумывает случайный одноразовый секрет — будущий симметричный ключ — и шифрует его открытым ключом сервера.
- Этот зашифрованный пакет летит через интернет. Перехватить его может кто угодно, но расшифровать — только сервер своим закрытым ключом.
- Теперь у обеих сторон есть общий секрет, о котором не знает больше никто. Дальше весь трафик идёт через быстрое симметричное шифрование.
Асимметричная математика нужна была всего на пару секунд — только чтобы безопасно передать ключ. Это как обменяться рукопожатием в шумной толпе так, чтобы никто не подслушал, а уже потом спокойно болтать на придуманном вами секретном языке.
Есть ещё один важный кусочек — цифровая подпись. Та же пара ключей умеет доказывать, что сайт настоящий, а не подделка мошенников. Сертификат сервера подписан так, что браузер может проверить подлинность, но подделать подпись невозможно без закрытого ключа. Поэтому замочек означает не только «нас не подслушают», но и «это действительно тот сайт, за который он себя выдаёт».
Так что за крошечной иконкой замка прячется целая башня из математики: простые числа, односторонние функции и пара ключей, которые невозможно разъединить. Каждый раз, когда ты отправляешь сообщение или платишь картой онлайн, эта невидимая конструкция тихо делает свою работу — и держит на себе, без преувеличения, весь современный интернет.