Шифрование.

Шифрование.

@blackbathrobe

Шифрование — математическая наука о кодах, шифрах и засекреченных сообщениях. На протяжении всей истории люди использовали шифрование для обмена посланиями, содержание которых, как они надеялись, не сможет прочитать никто, кроме адресатов. Сегодня есть компьютеры, способные выполнять шифрование, а цифровые технологии шифрования вышли за рамки простых сюжетов. Шифрование теперь применяется для более сложных задач — таких как подтверждение личности отправителя сообщения или анонимный просмотр веб-сайтов с помощью сети Тог. При определенных условиях шифрование может быть полностью автоматическим и легким в применении. Но если что-то пойдет не так, полезно понимать суть происходящего, — тогда вы будете лучше защищены от проблем.


Шифрование. Три важных понятия:

1) Закрытые и открытые ключи

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

2) Сертификаты безопасности

Второе очень важное понятие — сертификат безопасности. Это своего рода открытый ключ для предотвращения атак посредника. Сайт, имеющий доступ к сертификату, может продемонстрировать удаленным системам, что сертификат существует, и что никакая другая система (без сертификата) не пытается изменить передаваемые данные. Веб-браузер на вашем компьютере может устанавливать зашифрованные соединения с сайтами посредством протокола HTTPS. В таких случаях браузер верифицирует сертификаты, проверяя открытые ключи доменных имен (например, www.google.com или www.amazon.com). Использование сертификатов — один из способов подтвердить подлинность имеющегося у вас открытого ключа пользователя или веб-сайта, чтобы вы могли безопасно обмениваться с ним информацией.

Время от времени появляются сообщения об ошибке сертификата безопасности. Как правило, причиной является попытка общественной точки доступа, где вы находитесь, «вскрыть» ваш обмен зашифрованными данными с веб-сайтом. Кроме того, такая ошибка часто появляется из-за бюрократических проблем в системе сертификатов. А также возникает при попытке злоумышленника взломать ваше зашифрованное соединение.

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

3) Отпечатки ключей

Ключи в шифровальных системах с открытым ключом — очень большие числа, иногда из более чем тысячи цифр. Отпечаток ключа гораздо короче. Это число (набор чисел и букв), которое уникально для того или иного ключа и позволяет не анализировать все символы при проверке подлинности ключа. Предположим, вы с собеседником обменялись копиями ключей, а потом решили убедиться, что копии соответствуют оригиналам. Вам пришлось бы потратить уйму времени, сверяя все символы каждого ключа. Вместо этого можно сверить отпечатки ключей. В современных средствах шифрования отпечатки, как правило, состоят из 40 букв и цифр, например: 5d44 4rt8 9167 7401 40dl 5ws4 200z q561 23sd yl91. И если вы аккуратно сверите отпечаток импортируемого ключа с отпечатком, который вам сообщит настоящий владелец, то можете быть уверены в подлинности ключа (некоторые программы предлагают более удобные способы проверки ключей).

Если проверка отпечатка пройдена, больше шансов, что ваш собеседник действительно тот, за кого себя выдает. Но этот метод несовершенен — злоумышленник может использовать тот же отпечаток, если скопирует или украдет ключ.

Основы PGP-шифрования

PGP-шифрование (от англ. Pretty Good Privacy, вполне хорошая приватность) — это одна из первых популярных реализаций шифрования с открытым ключом, созданная программистом Филом Зиммерманном в 1991 году, чтобы помочь пользователям защитить свои коммуникации. При правильном использовании PGP может защитить содержимое ваших сообщений и даже файлов от самых серьезных средств злоумышленников. Когда Эдвард Сноуден говорил о шифровании, он подразумевал именно PGP и связанные с ней программы.

Шифрование открытым ключом

В традиционных шифровальных средствах для шифрования и расшифровки сообщения используют один и тот же ключ. В асимметричном шифровании (шифровании с открытым ключом) используют два парных ключа: один для шифрования (открытый), другой для расшифровки (закрытый). В этом масса преимуществ. В частности, вы можете делиться открытым ключом со всеми. Пока вы имеете доступ к своему закрытому ключу, любой пользователь, у которого есть ваш открытый ключ, может безопасно общаться с вами. Подобные системы используются для шифрования электронных писем и файлов по стандартам PGP, OTR (при обмене мгновенными сообщениями) и SSL/TLS (для просмотра веб-страниц).

К сожалению, PGP — не самый легкий для освоения и использования инструмент. Стойкое шифрование, реализованное в PGP (шифрование с открытым ключом), — мощное, но довольно мудреное средство защиты. Сама программа PGP существует четверть века и является ровесником самых первых версий Microsoft Windows. С тех давних пор внешний вид PGP не очень изменился. Впрочем, разработано много программ, которые скрывают «древний» дизайн PGP и заметно упрощают ее использование, особенно в части шифрования и аутентификации электронной почты (основные функции PGP). Далее вы научитесь работе с этими программами. Но предварительно посвятим несколько минут основам шифрования с открытым ключом.

Игра с двумя ключами

Возьмем обычный текст— например, «Привет, друг!». Зашифруем его — превратим в код, который непонятен для чужих глаз (скажем, ad&dsDE76vx+fdgQl). Отправим этот код через Интернет. Наше сообщение может увидеть множество людей, но кто из них поймет содержание? В таком виде письмо дойдет до получателя. Он и только он может расшифровать и прочитать исходный текст.

Откуда получатель знает, как расшифровать сообщение, если это не может сделать никто другой? У получателя есть дополнительная информация, недоступная для остальных. Назовем ее ключом для расшифровки. Этот ключ раскодирует содержащийся в зашифрованном сообщении текст. Но отправитель должен предварительно сообщить ключ получателю. В этом и заключен недостаток такой стратегии — если вы думаете, что вашу почту могут перехватывать, как вы перешлете ключ? Ведь злоумышленник перехватит и его. Тогда нет смысла отправлять зашифрованные сообщения. С другой стороны, если у вас есть секретный способ передать ключ, почему бы не использовать этот же способ для отправки всех секретных сообщений?

Шифрование с открытым ключом — замечательное решение проблемы. Каждый человек, участвующий в переписке, может создать два ключа. Один ключ {закрытый) нужно держать в тайне и никогда не передавать другим людям. Другой ключ {открытый) можно передать всем, кто желает переписываться. Неважно, кто получит доступ к открытому ключу. Вы можете опубликовать его во Всемирной паутине, откуда его будут скачивать все желающие.

Сами «ключи», по сути, представляют собой очень большие числа с определенными математическими свойствами. При этом открытый и закрытый ключи связаны между собой — если вы шифруете что-либо открытым ключом, расшифровать это можно только парным закрытым ключом.

Допустим, вы хотите отправить своему другу секретное сообщение. У него есть закрытый ключ, а парный ему открытый ключ Он загрузил на свою веб-страницу. Вы скачиваете его открытый ключ, с его помощью шифруете сообщение и отправляете адресату. И только он сможет расшифровать сообщение, потому что лишь у него есть парный закрытый ключ.

Электронная подпись

Шифрование с открытым ключом избавляет вас от проблемы передачи адресату ключа для расшифровки (у адресата уже есть ключ). Нужно лишь получить соответствующий открытый ключ для шифрования — он доступен всем желающим, даже злоумышленникам. Но открытым ключом можно только шифровать, но не расшифровывать.

Итак, то, что зашифровано определенным открытым ключом, может быть расшифровано только парным ему закрытым ключом. Но это еще не все. Если, наоборот, применить к сообщению закрытый ключ, результат можно обработать только с помощью парного открытого ключа.

Зачем? Кажется, нет никакой пользы в защите секретного сообщения при помощи закрытого ключа. Всякий, у кого есть ваш открытый ключ (а он доступен любому в этом мире), может снять такую защиту. Предположим, вы написали сообщение «Привет Андрею!» и применили к этому тексту свой закрытый ключ. Кто угодно может потом прочитать это сообщение, использовав парный открытый ключ, но лишь один человек (и это главное!) мог написать сообщение, — владелец упомянутого закрытого ключа. Конечно, если он аккуратно хранит свой закрытый ключ. Так вы можете подтвердить свое авторство. То же самое мы делаем, когда подписываем бумаги в реальном мире.

Подпись также защищает сообщение от редактирования. Если кто-то попытается изменить текст «Привет Андрею!» на «Привет Владу!», заново подписать сообщение у злоумышленника не получится (у него нет вашего закрытого ключа). Таким образом, цифровая подпись гарантирует, что сообщение было действительно написано его автором и не изменилось при передаче.

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

Вы, вероятно, уже догадались, что пользы от шифрования с открытым ключом тем больше, чем больше людей знает этот ваш ключ. Очевидно также, что надо обеспечить безопасное хранение своего закрытого ключа, — ведь если кто-либо получит копию вашего закрытого ключа, он сможет выдавать себя за вас и подписывать сообщения от вашего имени. В программе PGP имеется функция отзыва закрытого ключа — она позволяет предупредить людей о том, что ключу больше нельзя доверять, но это не лучшее решение. Главное правило для шифрования с открытым ключом: храните закрытый ключ в надежном месте.

Принцип работы PGP

Использование PGP — это, главным образом, работа по созданию и применению открытых и закрытых ключей. С помощью PGP вы можете создать пару ключей (открытый/закрытый), защитить закрытый ключ паролем и использовать ключи для подписания и шифрования сообщений. Программы на основе PGP также позволяют скачивать открытые ключи других пользователей и загружать свой открытый ключ на серверы — хранилища, где другие пользователи могут его найти.

Итак, свой закрытый ключ вы храните в безопасном месте и защищаете его длинным паролем. Открытый ключ можно предоставлять всем, с кем вы хотите переписываться, и тем, кто хочет быть уверенным в подлинности ваших писем.

Сеть доверия

В шифровании с открытым ключом существует потенциальная проблема. Допустим, вы распространяете открытый ключ Эдварда Сноудена (по крайней мере, вы так утверждаете).Если люди вам поверят, они начнут отправлять Сноудену письма, зашифрованные этим ключом. Они также будут считать, что все сообщения, подписанные этим ключом, созданы Сноуденом. Такое случается редко, но в реальной жизни были прецеденты.

Возможен также сценарий атаки, когда злоумышленник находится между двумя сетевыми собеседниками, читает их письма и периодически вставляет в переписку свои (сбивающие с толку) сообщения. Интернет устроен так, что информация проходит через множество разных компьютеров. Поэтому такая атака («атака посредника») вполне возможна. Из-за нее обмен ключами без предварительных договоренностей— дело рискованное. «Вот мой ключ», — говорит Эдвард Сноуден и отправляет вам открытый ключ. Что, если посредник прервал передачу ключа Сноудена и подменил его ключ на собственный? Как убедиться, что ключ действительно принадлежит конкретному человеку?

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

Атака посредника

Представьте, что вы общаетесь с вашим другом (допустим, Дмитрием) с помощью зашифрованных мгновенных сообщений. Чтобы убедиться, что это действительно Дмитрий, вы просите собеседника назвать город, где вы впервые встретились. «Магадан», — отвечает он. Правильно! Увы, втайне от вас и Дмитрия кто-то третий перехватывает ваши сообщения. Ваши послания для Дмитрия попадают к злоумышленнику, а тот, в свою очередь, связывается с Дмитрием, и наоборот. Вы думаете, что наладили безопасный канал связи, а на самом деле общаетесь через шпиона! Такая атака называется атакой посредника. Злоумышленник может перехватывать информацию, изменять и подделывать сообщения. Поэтому программы для коммуникаций в Интернете должны защищать от этого типа атак, от злоумышленников, которые могут контролировать какую-либо часть сетевой инфраструктуры между собеседниками.

Тем не менее, PGP предлагает решение получше — сеть доверия. Если вы считаете, что ключ принадлежит определенному человеку, вы можете подписать этот ключ и загрузить его (вместе с подписью) на сервер открытых ключей. Оттуда подписанный ключ могут скачивать заинтересованные люди. В целом, чем больше людей, которым вы доверяете, подпишет ключ, тем выше доверие к такому ключу. PGP позволяет подписывать чужие ключи и доверять другим пользователям — если они подпишут ключ, ваша программа автоматически будет считать его достоверным. Разумеется, сеть доверия не лишена недостатков. Но на сегодняшний день, если вы не готовы передавать ключи исключительно при личной встрече, использование сети доверия и серверов открытых ключей— самая подходящая альтернатива.