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

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

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

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

Присказка

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

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

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

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

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

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

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

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

Долго ли, коротко ли был придуман улучшенный принцип. Представьте, что где-то живёт некий мастер, он делает весьма хитрые замки для наших надёжных сундучков, а также ключи к ним. Зовут этого мастера Удостоверяющий центр (Certification authority). Его замки имеют необычное свойство: для запирания требуется один ключ, а для отпирания — уже совсем другой, парный первому. Больше того, по тому, каким ключом был заперт этот замок, вы можете понять, кто же именно его запер — к примеру, тот же Гугл (хотя это предельное упрощение, скажу честно). Как это помогает в решении нашей проблемы?

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

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

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

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

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

А вот тут мы упираемся в важнейший вопрос доверия. Мастеров-ключников в этом мире чрезвычайно мало, их буквально несколько десятков, у них кристально чистая репутация, и поэтому люди им доверяют. В конце концов, люди ведь доверяют банкам или государственным структурам (до определённых пределов). Здесь ситуация та же; эти мастера известны всему миру: это, к примеру, VeriSign или Symantec. Они ставят на свои ключи знак качества, а Гуглу и другим структурам выдают специальный сертификат, который удостоверяет, что это именно Гугл и никто иной, это именно он запер сундучок, поэтому мастера и зовутся Удостоверяющими центрами.

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

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

Злые мастера

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

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

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