Почему не надо устанавливать неизвестные сертификаты на свои устройства?

#криптография

В свете того, что в ряде стран пользователей сети Интернет вынуждают устанавливать на компьютеры и смартфоны какие-то “специальные”, непонятные сертификаты безопасности, некоторые знакомые спрашивают, что всё это значит. В этой статье я попробую совсем по-простому объяснить, в чём тут дело, и расскажу вам сказку.

Эта запись также доступна в канале Telegram “DEV: Рубиновые тона”, а обсудить же эту тему можно в нашем чате Telegram.

Присказка

Интернет — вообще штука публичная, огромное количество данных передаётся по сети каждую секунду, и кто даст гарантию, что какой-нибудь хитрец не пытается эти данные перехватить, подслушать? Ну, как перехватывают почтовых голубей, гонцов…

Честно говоря, в простом случае никакой гарантии и нет, ситуация примерно такая же, как и с обычной почтой: ваше письмо в теории может распечатать любопытный сотрудник и посмотреть, что же там такого интересного написано. Может даже дописать что-нибудь от себя; ну, как в мультфильме “Простоквашино”, где у Шарика “хвост отваливается”. К сожалению, в интернете ситуация аналогичная: пакеты информации при желании можно отловить и даже подсунуть туда что-то ещё (в сравнительно безобидном случае — рекламу, в плохом случае — нехороший скрипт, который будет красть пароли, вводимые на web-странице).

Но если это действительно так, то как же от этого защититься?! К счастью, умные люди уже придумали для нас решение, и называется оно “асимметричное шифрование”. Конечно, обо всём этом мы здесь говорим упрощённо, но если вам интересно, у меня есть видео о принципе работы такого шифрования.

Сказ об удалом гонце

Так вот, давайте представим, что веб-сайт, на который вы заходите — хотя бы тот же Гугл, — будет класть информацию для вас (последние новости, полученные вами сообщения, и так далее) в супер-надёжный запертый сундучок. Его невозможно взломать, и отправляться он будет по обычной почте, ведь открыть такой сундучок без ключа любопытный сотрудник уже не сможет.

Но есть маленькая сложность: а как его должны отпирать вы? Иными словами, кто доставит вам ключ, причём так, что никто другой ни в коем случае этот ключ не получит? Может быть, какой-нибудь сказочный гонец, которому вы полностью доверяете? Но если этот гонец настолько сказочный, что может доставить ключ без проволочек, так почему он не может просто привезти вам сразу информацию от Гугла? Ведь его никто не сумеет перехватить! Вот это загадка, и тут я совершенно не шучу.

Проблема доставки ключа в таких ситуациях терзала людей без преувеличения тысячелетия — в большинстве случаев это были военные, которым было нужно отправлять секретные приказы. Да, к сожалению, именно война в этом плане оказалась лучшим двигателем прогресса. Но многие столетия люди действительно полагались на удалых гонцов, которые зачастую с риском для жизни доставляли сообщения адресату. Как вы понимаете, в современных реалиях это невозможно: слишком большие расстояния, да и гонцов на всех пользователей интернета не напасёшься.

Мастер ключей

Долго ли, коротко ли был придуман улучшенный принцип. Представьте, что Гугл нанимает некоего мастера, и он делает весьма хитрые замки для наших надёжных сундучков, а также ключи к ним. Его замки имеют необычное свойство: для запирания требуется один ключ, а для отпирания — уже совсем другой, парный первому.

Гугл может купить у мастера ключик только для себя любимого, хранить его в секрете, и никому не показывать. Это называется “приватный ключ” (private key) — мастер изготовил его лишь в одном экземпляре, и больше никогда такой уже не сделает (помните, это как история с храмом Василия Блаженного). Именно этим ключом Гугл и запирает сундучок с данными, которые отправляет вам.

А как же его отпирать вам? Легко! Как мы уже знаем, сундучок запирается одним ключом (в данном случае секретным), а открывается парным ему. Этот парный ключ называется “открытый” или “публичный” (public key); как подсказывает название, он не является секретным. Выходит, вы можете просто взять этот открытый ключ и отпереть им сундук.

Верно и обратное: вы можете положить в сундучок послание для Гугла, запереть его парным ключом, и лишь Гугл сумеет открыть его. Ведь мы уже знаем, что открывается он только парным ключом, а парным выступает тот самый секретный ключ, его нет ни у кого, кроме Гугла, мастер другого такого ключа никогда не сделает! Следовательно, и прочитать переданную вами информацию никто не сможет.

Признаюсь, это предельное упрощение. Реальность сложнее, чем “взял публичный ключ и прочитал или отправил данные”, так как иначе это мог бы сделать кто угодно. Если кратко, используя парные ключи, вы с Гуглом совместно выковываете по древней технологии одноразовый секретный ключ для конкретно этой переписки — он есть лишь у Гугла и у вас лично. Одноразовым ключом закрываются ваши с Гуглом сундучки до окончания сессии. Подробнее обо всём этом процессе можно узнать в видео.

Однако тут возникает два вопроса:

  • Как вам удостовериться, что сундучок действительно пришёл от Гугла, а не от кого-то, кто выдаёт себя за Гугл?
  • Откуда вам взять открытый ключ?

Делов том, что в нашем сказочном мире живёт несколько мудрецов, коих зовут Удостоверяющие центры (Certification authority). Они имеют право выдавать Гуглу и прочим ресурсам особые грамоты с печатью под названием “сертификаты безопасности”. В этих грамотах написано, кому они были вручены, какой срок действия имеют, и какой открытый ключ, изготовленный мастером, принадлежит этому ресурсу. При этом мудрецы не знают, каким закрытым ключом владеет ресурс.

Получается, Гугл может отправить вам эту грамоту и данные открытыго ключа. Вы проверяете, что печать подлинная, что прислал это именно Гугл, и что открытый ключ верный. Иными словами, теперь вы верите, что послание в сундучке пришло не от кого-то неизвестного.

Кодекс чести мудрецов

Кстати, а почему, собственно говоря, невозможна следующая ситуация? Некому вредному опричнику хочется узнать, о чём это вы там общаетесь с Гуглом — ну, или он хочет общаться с вами якобы от имени Гугла. Например, он будет называть вас в этих посланиях обидными словами, а вы будете думать, что это пишет Гугл? Это будет совсем нехорошо!

Для этого опричник просто нанимает мастера, получает ключевую пару, а потом идёт к мудрецу и просит грамоту. Дескать, дай мне бумагу, которая говорит, что Гугл — это я, и у меня вот такой-то открытый ключ. А я тебе за услугу пожалую жемчуга и золото.

А вот тут мы упираемся в важнейший вопрос доверия. Мудрецов (удостоверяющих центров) в этом мире чрезвычайно мало, они очень дорожат репутацией, и поэтому люди им доверяют. В конце концов, люди ведь доверяют банкам или государственным структурам (до определённых пределов). Здесь ситуация та же; эти мудрецы известны всему миру: это, к примеру, DigiCert, Let’s Encrypt или GlobalSign. Они обязательно ставят на все свои грамоты надёжные печати, которые практически невозможно подделать.

Кстати, известные мудрецы могут брать учеников, которые тоже становятся Удостоверяющими центрами, только уровнем пониже, и они тоже могут выдавать свои грамоты, но и они должны следовать кодексу чести, никогда не выдавая удостоверяющих бумаг “мимо кассы” и следя за тем, чтобы бумаги эти не попали к лихим людям.

Если же кто-то пришлёт вам запертый сундучок с грамотой от неизвестного мудреца, то ваше устройство сообщит, что здесь явно что-то не так: этот мудрец не является доверенным, и он также не является учеником одного из известных мудрецов! Список всех известных мудрецов хранится на вашем устройстве, это называется “доверенные корневые удостоверяющие центры”, и этот список попадает на устройство в момент установки операционной системы.

Злые мудрецы

А теперь представим, что в мире появился мудрец-негодяй, который выпускает грамоты для веб-сайтов, но раздаёт их всем желающим, в том числе противным опричникам. Что это значит? Это как раз и значит, что вы фактически не будете знать, с кем ведёте переписку на данный момент!

Но, постойте, ведь такого мудреца-негодяя нет в списке “доверенных” на вашем устройстве? Мы ведь уже знаем, что если мудрец неизвестен, то нас сразу об этом предупредят. Именно так, но только до тех пор, пока вы собственноручно не добавите имя этого мудреца в список доверенных, то есть сделаете ровно то, что требуют от пользователей в некоторых странах.

Как только вы это сделали, вы начинаете автоматически доверять всем грамотам этого нового мудреца, и всем его ученикам тоже.

Впрочем, доверие тут может быть ограниченным в зависимости от устройства и приложения.

А если есть подозрения, что мудрец нечист на руку, то, быть может, не стоит ему доверять? Кто знает, кому ещё он подарит свою грамоту, и кто ещё сможет подсовывать вам поддельные сайты и читать или менять данные при перехвате соединения… Именно поэтому стоит быть очень разборчивым в том, кому именно вы доверяете.