Глубокое погружение в мир сквозного шифрования: принципы работы систем криптографии с открытым ключом
Последнее обновление: November 29, 2018
При правильном использовании сквозное шифрование может обеспечить защиту содержимого ваших сообщений. Текст (как и файл) будет доступен лишь тем, кому он предназначался. Сквозное шифрование также может быть использовано для проверки целостности сообщения и подлинности личности отправителя.
За последние несколько лет популярность инструментов сквозного шифрования значительно возросла. Инструменты для безопасного обмена сообщениями, такие как Signal (для iOS или Android), используемые для голосовых и видеозвонков, чатов и обмена файлами, являются отличными примерами приложений, использующих сквозное шифрование для кодирования сообщений. Эти инструменты превращают сообщения в нечитаемую форму как для шпионов в сети, так и для самих поставщиков услуг.
Однако некоторые варианты реализации сквозного шифрования могут оказаться достаточно сложными для понимания и использования. Перед применением инструментов, использующих сквозное шифрование, мы настоятельно рекомендуем посвятить некоторое время изучению основ криптографии с открытым ключом.
Тип шифрования, о котором говорится в настоящем руководстве и на котором основываются инструменты, обеспечивающие сквозное шифрование, называется шифрованием с открытым ключом или криптографией с открытым ключом. Чтобы узнать о других видах шифрования, ознакомьтесь с нашим руководством «Что мне нужно знать о шифровании?»
Понимание основополагающих принципов криптографии с открытым ключом поможет вам в успешном применении данных инструментов. Есть то, на что шифрование с открытым ключом способно, и то, чего оно не может. И важно понять, когда и как, вам, возможно, понадобится его использовать.
Что делает шифрование? anchor link
Схема работы шифрования при отправлении тайного послания:
- Ясно читаемое сообщение («Привет, мама») зашифровано и превращено в сообщение, которое никому не будет понятно («OhsieW5ge+osh1aehah6»).
- Зашифрованное сообщение отправлено через интернет, где посторонние смогут увидеть лишь «OhsieW5ge+osh1aehah6».
- По прибытию к предполагаемому получателю только он будет обладает способом превращения послания обратно в исходное сообщение («Привет, мама»).
Симметричное шифрование: история передачи тайного послания с помощью одного ключа anchor link
Юлия хочет отправить своему другу Сезару записку с текстом: «Встретимся в саду» (meet me in the garden). Но она бы не хотела, чтобы её одноклассники увидели это послание.
Послание Юлии несколько раз переходит от одного одноклассника к другому (посреднику) и наконец доходит до Сезара. Несмотря на нейтральность и видимое безразличие посредники любопытны и могут легко подглядеть содержимое письма при передаче. Они могут сделать ещё и копии этого послания перед тем, как передать его дальше, а также запомнить время, когда Юлия передавала сообщение Сезару.
Юлия решает зашифровать своё сообщение с помощью ключа 3, сдвигая буквы алфавита по порядку на 3. Таким образом буква «А» стала буквой «Г», буква «Б» стала «Д» и т.д. Если Юлия и Сезар просто будут использовать этот ключ для шифрования и расшифровывания сообщений, этот код будет легко взломать. Кто-либо сможет путём перебора возможных комбинаций установить подходящий ключ. Другими словами, можно настойчиво пытаться угадать ключ до тех пор, пока сообщение не будет расшифровано.
Способ сдвига букв алфавита на три символа является историческим примером шифрования, использовавшегося Юлием Цезарем. Этот способ называется «Шифр Цезаря». Когда один и тот же ключ используется для шифрования и расшифровывания (как в указанном примере, где ключом является цифра 3), то шифрование называется симметричным.
Шифр Цезаря является слабой формой симметричного шифрования. Однако со времён Юлия Цезаря шифрование существенно эволюционировало. С помощью математики и компьютеров мы имеем возможность сгенерировать ключ, который будет намного длиннее и который намного сложнее угадать. Существенное развитие симметричного шифрования сказалось и на широком его применении.
Тем не менее симметричное шифрование не поможет, если кто-то украдёт ключ для расшифровывания сообщений Юлии и Сезара (можно просто подслушать его, когда кто-либо из них скажет другому, что ключ для расшифровывания это «3»). А что, если Юлия и Сезар находятся в разных странах и не могут лично встретиться?
Как Сезар и Юлия могут решить эту проблему?
Допустим, Юлия и Сезар узнали о криптографии с открытым ключом. Злоумышленник просто не сможет подслушать или перехватить передачу ключа расшифровывания, потому что Сезару и Юлии не нужно обмениваться ключом расшифровывания. При использовании шифрования с открытым ключом ключи шифрования и расшифровывания - разные.
Шифрование с открытым ключом: сказание о двух ключах anchor link
Давайте внимательнее рассмотрим ситуацию. Каким образом отправитель передаст получателю симметричный ключ шифрования , исключая возможность того, что злоумышленник может подслушать и эту беседу тоже? В частности, если отправитель и получатель находятся вдали друг от друга, но хотели бы общаться без посторонних?
Криптография с открытым ключом (именуемая также асимметричной криптографией) имеет изящное решение этой проблемы. Шифрование с открытым ключом предполагает создание каждым собеседником пары ключей – открытого ключа (public key) и закрытого ключа (private key). Эти два ключа связаны друг с другом и являются очень большими числами с определёнными математическими свойствами. Если вы зашифруете сообщение, используя открытый ключ собеседника, расшифровать это сообщение можно лишь с помощью соответствующего закрытого ключа.
Сейчас вместо передачи записок Юлия и Сезар обмениваются зашифрованными сообщениями через компьютеры, используя при этом открытые ключи шифрования. Их одноклассники, передающие записки с парты на парту, заменены компьютерами. Однако между Юлией и Сезаром есть такие же посредники – их точки доступа Wi-Fi, интернет провайдеры, почтовые сервера. В реальности между Юлией и Сезаром могут находиться сотни компьютеров, обслуживающих их общение. Эти посредники каждый раз делают копии сообщений Юлии и Сезара и хранят их.
Юлия и Сезар не против того, чтобы посредники знали, что они общаются, но хотели бы оставить содержание своего общения в тайне.
Для начала Юлии необходимо получить открытый ключ Сезара. Он отправляет свой открытый ключ (в виде файла) по незащищённому каналу связи, например в незашифрованном сообщении электронной почты. Он не против того, чтобы посредники получили доступ к его открытому ключу, потому что открытый ключ может свободно распространяться. Имейте в виду, что здесь метафора с ключом перестаёт быть подходящей – не нужно отождествлять открытый ключ с реальным ключом от замка. Сезар отправляет свой открытый ключ по множеству каналов связи, поэтому посредник не сможет подменить его на свой открытый ключ, отправив его Юлии вместо подлинного.
Юлия получает файл, содержащий открытый ключ Сезара. И теперь она может зашифровать своё сообщение Сезару этим ключом! Она пишет в сообщении: «Встретимся в саду».
Она отправляет зашифрованное сообщение. И оно зашифровано лишь для Сезара.
И Юлия и Сезар смогут прочесть сообщение, но для всех остальных оно будет выглядеть как бред. Посредники смогут видеть метаданные письма, например строку «тема», дату и время отправки, адреса отправителя и получателя сообщения.
Так как сообщение зашифровано с помощью открытого ключа Сезара, прочитать сообщение смогут лишь сам Сезар и отправитель (Юлия).
Сезар может прочитать это сообщения, используя свой закрытый ключ.
Подведём итог:
- Шифрование (криптография) с открытым ключом позволяет отправить свой открытый ключ по небезопасным каналам связи.
- С помощью имеющегося открытого ключа друга вы сможете зашифровать сообщения для него.
- Ваш закрытый ключ используется для расшифровывания сообщений, зашифрованных с помощью вашего открытого ключа.
- Посредники – такие как сервера электронной почты, интернет провайдеры – могут постоянно видеть метаданные: кто кому отправляет сообщения, когда и в какое время сообщение получено, что содержится в поле «тема», зашифровано ли сообщение и т.д.
Другая проблема: если злоумышленник захочет выдать себя за вашего собеседника? anchor link
В нашем примере с Юлией и Сезаром посредники постоянно способны получать метаданные.
Допустим, что один из посредников оказался злоумышленником. Под злоумышленником мы будем подразумевать любого, кто намеревается нанести вам урон, пытаясь украсть либо подменить ваши данные . И по какой-либо причине наш злоумышленник желает узнать о содержимом сообщения Юлии для Сезара.
Допустим, этот злоумышленник смог обмануть Юлию, и она получила подложный файл открытого ключа «Сезара». Юлия не заметила, что это на самом деле не открытый ключ Сезара. Злоумышленник получает сообщение Юлии, просматривает его и передает дальше Сезару.
Злоумышленник может даже изменить содержимое сообщения (файла) перед тем, как передать его Сезару.
В большинстве случаев злоумышленник не изменяет содержимое сообщения. Он пересылает сообщение Юлии Сезару как будто бы ничего и не произошло. Сезар узнаёт, что они с Юлией должны встретиться в саду, но к их удивлению там оказывается и злоумышленник.
Это называется «атакой посредника», где посредником может оказаться человек либо компьютер.
К счастью, использование шифрования с открытым ключом способно предотвратить атаку посредника.
Шифрование с открытым ключом позволяет осуществить двойную проверку соответствия цифрового ключа и личности собеседника посредством так называемой «проверки отпечатков». Лучше всего такую проверку осуществлять при личной встрече. Ваш собеседник сравнит каждый символ отпечатка открытого ключа, предоставленного вами, с отпечатком вашего открытого ключа, находящегося у собеседника. Немного утомительно, но это действительно стоит сделать.
Приложения, использующие сквозное шифрование, также могут проверять отпечатки ключей, хотя и существуют некоторые вариации в названиях и способах реализации. В некоторых случаях необходимо очень внимательно прочитать каждый символ отпечатка, убедившись в том, что отпечаток на вашем экране совпадает с тем, что собеседник видит на своём. Другим способом проверки отпечатка является сканирование QR-кода с экрана телефона собеседника для подтверждения ключа его устройства. В приведённом ниже примере Юлия и Сезар могут встретиться лично, чтобы проверить отпечатки ключей своих телефонов, отсканировав QR-коды друг друга.
Если же роскошь личной встречи вам недоступна, вы можете отправить свой отпечаток по другому безопасному каналу связи, например с помощью другого мессенджера, чата или HTTPS -сайта, использующего сквозное шифрование.
В данном примере Сезар отправляет отпечаток своего открытого ключа Юлии с помощью смартфона, используя при этом другое приложение со сквозным шифрованием.
Напомним:
- Атака посредника – перехват злоумышленником сообщения, предназначенного вашему собеседнику. Атакующий может внести изменения в это сообщение, а может переслать его дальше, просто ознакомившись с содержимым.
- Криптография (шифрование) с открытым ключом позволяет противостоять атаке посредника с помощью проверки личностей отправителя и получателя. Это делается с помощью проверки отпечатков ключей.
- Открытый ключ вашего собеседника используется для шифрования сообщений, отправляемых ему. У каждого открытого ключа есть сокращенная версия - так называемый «отпечаток открытого ключа». Вы можете использовать его для проверки личности вашего собеседника.
- Закрытый ключ используется для шифрования сообщений в качестве цифровой подписи, подтверждающей ваше авторство.
Не забудьте подписаться! anchor link
При использовании шифрования с открытым ключом вам не обязательно каким-то образом передавать получателю сообщения ключ для расшифровывания, потому что у него уже есть этот ключ. Ключом для расшифровывания сообщения является закрытый ключ получателя. Таким образом, для отправки зашифрованного сообщения вам нужен лишь подходящий открытый ключ получателя. А его вы можете с лёгкостью получить, потому что получатель волен свободно им обмениваться с кем угодно, так как открытый ключ подходит лишь для шифрования сообщений, а не для их расшифровывания.
Но есть кое-что ещё! Мы знаем, что, зашифровав сообщение определённым открытым ключом, расшифровать его можно лишь с помощью соответствующего закрытого ключа. Но обратное утверждение будет также верно. При шифровании сообщения с помощью определённого закрытого ключа, расшифровать его можно, лишь используя соответствующий открытый ключ.
Какова польза от этого? На первый взгляд кажется, что преимуществ в шифровании сообщений своим закрытым ключом нет никаких, ведь их сможет расшифровать любой, у кого окажется открытый ключ. Но представьте, что вы напишите в сообщении: «Я должен заплатить Борису 100 долларов», а затем зашифруете его своим закрытым ключом. Расшифровать это сообщение сможет любой, у кого окажется ваш открытый ключ. Однако написать данное сообщение могли только вы – обладатель закрытого ключа, при условии, что вы надёжно храните свой закрытый ключ. В результате, подписав сообщение своим закрытым ключом, вы подтверждаете, что данное сообщение могло быть отправлено только вами. Другими словами, с цифровым сообщением вы делаете то же самое, что и с обычным письмом на бумаге, когда подписываете его.
Подписывая письмо, вы также защищаете его от внесения в него изменений со стороны злоумышленника. Если кто-либо изменит содержимое сообщения с «Я должен заплатить Борису 100 долларов» на «Я должен заплатить Владимиру 100 долларов», то он не сможет снова подписать это сообщение вашим закрытым ключом. Таким образом, подписывая письмо закрытым ключом, вы гарантируете, что сообщение действительно пришло от вас и что в пути следования в него не было внесено никаких изменений.
Повторим: использование шифрования с открытым ключом anchor link
Давайте повторим основные положения. Шифрование с открытым ключом позволяет вам зашифровывать и безопасно отправлять сообщения любому человеку, чей открытый ключ у вас имеется.
Если другим людям известен ваш открытый ключ:
- - они могут посылать вам зашифрованные сообщения, и только вы можете их расшифровать, используя свой соответствующий закрытый ключ, а также
- - вы можете подписывать сообщения своим закрытым ключом, чтобы получатели были уверены в том, что сообщения могли прийти только от вас.
Если вы знаете чей-то открытый ключ:
- Вы сможете расшифровать сообщение, подписанное этим человеком, и быть уверенным в том, что это сообщение могло прийти лишь от него.
Теперь должно быть понятно, что криптография с открытым ключом становится тем более полезной, чем больше людей обладают вашим открытым ключом. Публичным ключом можно и нужно делиться с максимально большим количеством людей, особенно с теми, с кем вы постоянно общаетесь. И не важно, что этот ключ может оказаться у посторонних, ведь любой, кто захочет отправить вам зашифрованное сообщение, сможет им воспользоваться лишь для того, чтобы зашифровать сообщение.
Файл открытого ключа создаётся в паре с файлом закрытого ключа. Аналогия закрытого ключа – реальный ключ от замка, который вы должны хранить в надёжном месте. Закрытый ключ используется для шифрования и расшифровывания сообщений.
Также должно быть очевидно, что вы должны хранить свой закрытый ключ в полной безопасности. Если вы случайно удалите закрытый ключ с вашего устройства, то не сможете прочитать адресованные вам зашифрованные сообщения. Если же кто-то скопирует ваш закрытый ключ (получив доступ к вашему компьютеру физически или с помощью вредоносного ПО, а также если вы случайно опубликовали свой закрытый ключ или поделились им с кем-то), то посторонние смогут прочитать зашифрованные сообщения, отправленные вам. А также они смогут выдавать себя за вас и подписывать сообщения от вашего имени.
Для правительственных служб стало обыденной практикой получение закрытых ключей определённых людей (путём изъятия компьютеров или установки на них вредоносных программ с использованием физического доступа или фишинговых атак). Это полностью нивелирует все ваши усилия по защите конфиденциальности с помощью шифрования. Это похоже на то, что вы установили на входную дверь замок, который невозможно взломать. Однако на улице ваш ключ выкрали из кармана, скопировали его и незаметно вернули обратно в ваш карман. Таким образом злоумышленники получили возможность проникать в ваш дом, даже не взламывая замок, а вы можете этого и не заметить.
Это возвращает нас к моделированию угроз: определите риски и учтите их надлежащим образом. Если вы чувствуете, что кто-либо пойдёт на многое, лишь бы заполучить ваш закрытый ключ, то вы, возможно, откажетесь от использования встроенного в браузер сквозного шифрования. Вместо этого вы можете просто сохранить свой закрытый ключ на своём устройстве (компьютере), а не на чужом (в облаке или на сервере).
Обзор шифрования (криптографии) с открытым ключом и конкретный пример: PGP. anchor link
Итак, мы отдельно рассмотрели симметричное шифрование и шифрование с открытым ключом. Однако следует отметить, что шифрование с открытым ключом также использует симметричное шифрование! С помощью шифрования с открытым ключом просто зашифровывается симметричный ключ, используемый впоследствии для расшифровывания сообщения.
PGP является протоколом, использующим как симметричную криптографию, так и криптографию с открытым ключом (асимметричную). Использование сквозного шифрования, реализованного в PGP, позволит вам подробно изучить методы применения шифрования с открытым ключом.
Чем являются эти ключи? И как они связаны друг с другом? anchor link
Шифрование с открытым ключом основано на существовании двух ключей: один ключ для шифрования и один ключ для расшифровывания. Принцип работы заключается в безопасности передачи открытого ключа по небезопасному каналу, например через интернет. Вы можете публиковать этот открытый ключ везде, где посчитаете нужным, не опасаясь за конфиденциальность содержимого своих зашифрованных сообщений.
Этот общедоступный ключ является открытым ключом – файлом, который вы можете рассматривать в качестве вашего адреса в телефонной книге и распространять его как можно шире. Люди смогут связаться с вами, зашифровав сообщение с помощью этого ключа.
Файл открытого ключа создаётся в паре с файлом закрытого ключа. Вы можете представить, что закрытый ключ — это реальный ключ от замка, который вы должны надёжно хранить в безопасном месте. Закрытый ключ используется для шифрования и расшифровывания сообщений.
Мы собираемся изучить процесс создания ключей в широко используемом алгоритме шифрования с открытым ключом, который называется RSA (Rivest-Shamir-Adleman). Алгоритм RSA часто используется для создания пар ключей для PGP-шифрования электронной почты.
Открытый и закрытый ключи генерируются одновременно и связываются вместе. Оба ключа основаны на одних и тех же громадных простых числах, держащихся в секрете. Закрытый ключ — это представление двух таких чисел, вычисленное посредством определённого алгоритма. А открытый ключ – это произведение тех же двух чисел, которые использовались для создания закрытого ключа. Что удивительно, так это то, что очень трудно выяснить, какие именно два больших простых числа создали конкретный открытый ключ.
Поиск двух первоначальных простых чисел называется факторизацией; и она является весьма сложной и трудоёмкой задачей для компьютерных систем, чем и пользуются некоторые варианты шифрования с открытым ключом. Современная криптография позволяет использовать случайно выбранные, абсурдно гигантские простые числа, которые трудно угадать как людям, так и компьютерам.
А преимущество всего этого состоит в том, что люди могут делиться друг с другом своими открытыми ключами по незащищённым каналам! Но при этом свой закрытый ключ (алгоритмическое представление первоначальных простых чисел), используемый для расшифровывания сообщений, нельзя никому и никогда раскрывать.
Напоминаем: для использования шифрования с открытым ключом отправителю и получателю необходимы открытые ключи друг друга.
Можно представить себе это иначе: открытый ключ и закрытый ключ связаны друг с другом как символ инь-янь. Они сплетены в единое целое.
Открытым ключом можно как свободно обмениваться, так и искать его. Вы можете разослать его кому угодно. Вы можете разместить открытый ключ в социальных сетях, если вас не смущает публичное оглашение адреса вашей электронной почты. Также вы можете разместить его на своём личном сайте. Вы можете свободно публиковать открытые ключи.
Закрытый ключ должен храниться в безопасности, неподалёку. Он должен быть у вас лишь в одном экземпляре. Нельзя его терять, делиться им или делать копии, которые могут достаться кому-либо ещё, так как всё это крайне усложнит задачу по обеспечению конфиденциальности ваших личных сообщений.
Как работает PGP anchor link
Давайте ознакомимся с работой шифрования с открытым ключом на примере PGP. Допустим, вы хотите отправить Артёму секретное сообщение:
- У Артёма есть закрытый ключ и, как опытный пользователь шифрования с открытым ключом, он разместил соответствующий открытый ключ на своём (HTTPS) сайте.
- Вы скачиваете его открытый ключ.
- Вы зашифровываете сообщение для Артёма, используя его открытый ключ, и отправляете ему.
- Лишь Артём сможет расшифровать ваше сообщение, потому что только у него есть соответствующий закрытый ключ.
PGP (Pretty Good Privacy) в основном занимается рутиной создания и использования открытых и закрытых ключей. С помощью PGP вы можете создать пару ключей (открытый и закрытый ключи), защитить закрытый ключ паролем и использовать его вместе с вашим открытым ключом для подписи и шифрования сообщений.
Если из всего сказанного в данном руководстве нужно было бы выделить что-то одно, то это была бы фраза: храните свой закрытый ключ в надёжном месте и защитите его длинной парольной фразой.
Метаданные. На что неспособно шифрование с открытым ключом anchor link
Шифрование с открытым ключом нужно для того, чтобы содержимое сообщения осталось в тайне, было подлинно и не могло быть взломано. Но перечисленное не отражает все возможные проблемы, связанные с обеспечением конфиденциальности. Как мы уже отмечали, информация о ваших сообщениях может быть такой же показательной, как и их содержание (см. «метаданные»).
Если вы обмениваетесь зашифрованными сообщениями с известным в вашей стране диссидентом, то у вас могут быть неприятности лишь из-за факта обычного общения с ним, даже и без расшифровывания этих сообщений. А в некоторых странах вам может грозить тюремное заключение за отказ расшифровать сообщения.
Скрыть факт общения с конкретным человеком сложнее. При использовании PGP одним из способов является использование обоими собеседниками анонимных ящиков электронной почты. Заходить на них необходимо лишь с помощью Tor. Поступая так, вы будете использовать преимущества PGP, обеспечивая конфиденциальность ваших сообщений и уверенность в том, что никто не может подменить содержимое и авторство этих сообщений.
Теперь, когда вы узнали о шифровании с открытым ключом, попробуйте использовать один из инструментов сквозного шифрования, например Signal для iOS или Android.