Введение в криптографию. Общие вопросы, проблемы и решения

  • Автор:

introduction-to-cryptography-000.pngС криптографией сегодня мы сталкиваемся на каждом шагу и это неудивительно. Широкое распространение портативных устройств с доступом к сети интернет заставило по-новому взглянуть на безопасность процесса передачи данных. В тоже время для многих криптография остается неким черным ящиком и если для простых пользователей это простительно, то недостаток знаний у технических специалистов способен привести к серьезным проблемам с безопасностью. Поэтому приглашаем всех желающих повысить свой уровень знаний в данном вопросе ознакомиться с нашим новым материалом.

Онлайн-курс по устройству компьютерных сетей
На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.

"Какая криптография, зачем? Мне скрывать нечего!" - подобные утверждения часто можно слышать от пользователей если речь заходит о шифровании данных. К сожалению, во многом стараниями масс-медиа, криптография и шифрование у простого обывателя четко ассоциируется со шпионами, хакерами или иными представителями андеграунда. Однако, если поставить вопрос по-другому, хотят ли они, чтобы их переписка в социальных сетях, содержимое почтового ящика или учетные данные от банковского счета стали достоянием широкой общественности - то ответ будет сугубо отрицательным.

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

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

Итак, Алиса хочет отправить сообщение Бобу...

Симметричное шифрование

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

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

introduction-to-cryptography-001.png

Взяв с полки томик любимого автора Алиса достаточно быстро превращает текст:

Привет Боб

в последовательность чисел:

3/9 1/8 5/1 7/1 2/2 6/3 4/3 1/5 1/13 

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

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

Ключ - основа секретности любого криптографического алгоритма и должен сохраняться в тайне.

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

Итак, Алиса успешно зашифровала сообщение и отправила его Бобу. Но возникает новая сложность - каким образом передать Бобу ключ?

introduction-to-cryptography-002.png

Послать второй экземпляр книги по почте? Сообщить название и тип издания по телефону? Ни один из этих способов не дает гарантии, что ключ получит именно Боб и что он не станет известен Еве. Ведь располагая секретным ключом Ева не только может читать переписку Алисы и Боба, но и общаться с Бобом от имени Алисы, а с Алисой от имени Боба.

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

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

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

Алгоритм Диффи-Хеллмана

Передача ключа по незащищенному каналу была большой проблемой криптографии в XX веке. Действительно, возникал некий, неразрешимый на первый взгляд, парадокс: для защиты открытого канала стороны должны прежде обменяться секретной информацией, которую нельзя передавать по открытым каналам. Однако в 1976 году Уитфилдом Диффи и Мартином Хеллманом, а также независимо от них Ральфом Мерклом был предложен алгоритм, получивший впоследствии название алгоритм (протокол) Диффи-Хеллмана.

introduction-to-cryptography-003.png

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

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

Итак, Алиса хочет послать сообщение Бобу...

introduction-to-cryptography-004.pngДля того, чтобы выработать общий секрет, который впоследствии будет использоваться в качестве ключа шифрования, Алиса и Боб договариваются о некотором общем цвете. Пусть это будет один из оттенков желтого, данная информация является общедоступной и может быть известна Еве.

Затем каждый добавляет к одной части общей краски часть секретной, которая известна только Алисе или только Бобу, в итоге получается некий промежуточный цвет, который можно отправить по открытому каналу другой стороне. Даже перехватив оба этих цвета и располагая сведениями об общем цвете Ева в разумный промежуток времени не сможет быстро восстановить исходные цвета Алисы и Боба.

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

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

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

Кроме очевидных достоинств, алгоритм Диффи-Хеллмана имеет и существенные недостатки, один из которых - отсутствие взаимной аутентификации сторон, т.е. у Алисы нет уверенности, что промежуточный цвет прислал ей именно Боб и наоборот. Это делает возможными атаки типа "человек посередине" о которых мы поговорим позже.

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

Асимметричное шифрование

Годом позже изобретения алгоритма Диффи-Хеллмана была представлена первая асимметричная система шифрования с открытым ключом - RSA. Можно сказать, что с этого момента произошло возникновение массовой криптографии в том виде, в котором мы ее знаем сейчас. Принципиальное отличие асимметричных систем состоит в создании ключевой пары: открытого и закрытого (приватного) ключей. Открытый ключ является общедоступным, но все что зашифровано с его помощью не может прочесть никто, кроме владельца закрытого ключа.

Вернемся к нашим героям.

introduction-to-cryptography-005.pngАлиса генерирует ключевую пару и, поместив закрытый ключ в надежное хранилище, публикует открытый в виде сертификата. Сертификат, кроме собственно ключа, содержит ряд служебной информации, которая помогает определить личность владельца ключа, срок его действия и некоторые иные параметры. Никакой тайны данные сведения не составляют и наоборот являются общедоступными, в чем можно удостовериться, открыв для просмотра любой сертификат.

introduction-to-cryptography-006.pngБоб, желая написать сообщение Алисе получает от нее сертификат и шифрует свое сообщение содержащимся в нем открытым ключом. Точно такой же сертификат может получить и Ева, но это не даст ей ничего, так как прочитать зашифрованное открытым ключом не может никто, кроме Алисы.

Чтобы отправить обратное сообщение можно воспользоваться аналогичной схемой: Алиса берет открытый ключ Боба... Но на практике данная схема не нашла своего применения по целому ряду причин. Одна из них - крайне низкая производительность асимметричных алгоритмов, вторая - необходимость формирования ключевой пары для всех участников переписки.

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

introduction-to-cryptography-007.png

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

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

Но у данного подхода есть один существенный недостаток, так как сессионный ключ передается внутри зашифрованного канала, то в случае компрометации закрытого ключа Алисы любопытная Ева сможет расшифровать с его помощью все сессионные ключи, а затем прочитать всю перехваченную ею переписку. Чтобы этого избежать в настоящее время для формирования сессионного ключа используется алгоритм Диффи-Хеллмана, который позволяет создать общий секрет без передачи его по каналу связи.

Атака "Человек посередине"

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

introduction-to-cryptography-008.pngВстречаем нового персонажа - Мэллори. Если Ева была просто любопытной особой, то Мэллори не только любопытная, но и деятельная. Когда Боб хочет отправить сообщение Алисе он обращается к ней за открытым ключом, Мэллори перехватывает это сообщение и отправляет Бобу собственный открытый ключ. После чего она обращается к Алисе и получив ее сертификат также устанавливает защищенный канал связи с ней.

Таким образом и Алиса, и Боб думают, что общаются друг с другом, у обоих имеется защищенное соединение, однако на самом деле их канал полностью контролирует Мэллори. Получив сообщение от Боба, зашифрованное сеансовым ключом Мэллори-Боб, она расшифровывает его, при необходимости изменяет, и, зашифровав сеансовым ключом Алиса-Мэллори отправляет уже Алисе. Это уже гораздо более серьезная уязвимость, так как позволяет не только перехватывать, но и изменять передаваемую в таком канале информацию.

В данном случае мы показали классический пример атаки на RSA, но точно таким же образом Мэллори может осуществить атаку и на алгоритм Диффи-Хеллмана.

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

Вторая группа риска - системные администраторы, которые в целях контроля перехватывают защищенный трафик из внутренней сети. В этом случае шлюз выступает в роли Мэллори, так как отдает клиенту собственный ключ (которому клиент доверяет) и сам осуществляет соединение с запрошенным узлом, расшифровывая и контролируя проходящий через него трафик.

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

Удостоверяющий центр

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

Для этого есть несколько способов. Самый простой из них, когда, получив сертификат Алисы, Боб может лично ей позвонить и спросить некую контрольную сумму, скажем, SHA-хэш (отпечаток ключа), данные алгоритмы построены таким образом, что даже малейшее изменение исходного значения дает принципиально иной результат для функции хэширования.

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

introduction-to-cryptography-009.pngВ дальнейшем значение хэша кешируется и при последующих соединениях отпечаток ключа сервера сравнивается со значением из кеша. Поэтому получив повторно подобный запрос с иным значением хеша следует глубоко задуматься и незамедлительно начать расследование, так как изменение отпечатка говорит о том, что вы подключаетесь к иному узлу (либо администратор переустановил ОС или вручную перегенерировал ключи).

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

Также Алиса может выпустить и передать Бобу сертификат своего удостоверяющего центра (CA, Certification authority), который содержит открытый ключ, позволяющий проверить подлинность любого выпущенного Алисой при помощи данного удостоверяющего центра сертификата. Здесь возникает еще один интересный момент. Сертификат CA не содержит секретных сведений, но его не следует передавать по незащищенным каналам, а также следует хранить его так, чтобы избежать доступа к нему третьих лиц.

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

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

А как быть если стороны не знают друг друга? Скажем Боб хочет приобрести что-то в интернет магазине Алисы, про которую он читал много хороших отзывов, но он не знает Алису лично и не имеет возможности с ней встретиться, чтобы проверить подлинность сертификата. Да и Алиса вряд ли будет иметь столько свободного времени, чтобы иметь возможность лично знакомиться с каждым своим покупателем.

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

introduction-to-cryptography-010.pngТаким образом Алиса должна лично посетить нотариуса Трента, который сначала проверит личность Алисы, а затем заверит ее сертификат своей подписью. Получив такой сертификат Боб всегда может связаться с Трентом и получить от него образец подписи, который он может сравнить с тем, что на сертификате. Если подписи совпали, то данный сертификат действительно принадлежит Алисе, чему порукой авторитет Трента.

Если сертификат не содержит подписи Трента, то Боб не может проверить, принадлежит данный сертификат Алисе, либо это проделки Мэллори и поэтому, при невозможности точно проверить подлинность, такие (самоподписанные) сертификаты следует отклонять.

Может ли Мэллори подписать свой сертификат у Трента? Вполне, но она сможет подписать его только от своего имени и представиться Алисой у нее уже не получится.

В современной инфраструктуре открытых ключей (PKI, Public Key Infrastructure) роль нотариуса Трента исполняют доверенные корневые центры сертификации, сертификаты которых поставляются в составе операционной системы и располагаются в защищенном хранилище.

introduction-to-cryptography-011.png

Это означает, что система будет автоматически доверять сертификатам, которые имеют подписи данных удостоверяющих центров, но что означает это доверие? Здесь мы вплотную подошли к тому, какие бываю типы сертификатов и что они удостоверяют. Выделяют три основных типа сертификатов, которые различаются уровнем удостоверения владельца и, соответственно, стоимостью.

DV - Domain Validation - самый простой и недорогой вид сертификата, который можно получить очень быстро, а с некоторых пор и бесплатно. Данный вид сертификата всего лишь удостоверяет факт владения доменом, т.е. для его получения необходимо выполнить некоторые действия доступные только владельцу домена, например, разместить файл в определенном месте на сайте или ввести код отправленный на почтовый ящик, указанный во WHOIS.

Соединение с сайтом, использующим DV-сертификат выглядит следующим образом, а в поле Субъект сертификата находится только доменное имя:

introduction-to-cryptography-012.pngО чем нам говорит этот сертификат? О том, что вы действительно связались с сайтом interface31.ru и передаваемые между вами данные недоступны третьим лицам. Однако он ничего не говорит о том, что владельцы данного сайта существуют или являются теми, за кого себя выдают. Само по себе наличие зеленого замка и защищенного соединения еще никак не обозначает, что данный сайт безопасен или не является мошенническим, единственное в чем вы можете быть уверены - что ваш канал связи защищен.

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

Несмотря на это, DV - самый распространенный и используемый в сети вид сертификатов. Он идеально подходит тем сайтам, которым не нужно удостоверять личность владельца, а всего лишь надо предоставить своим пользователям защищенный канал.

OV - Organization Validation - для получения данного сертификата требуется не только подтвердить факт владения доменом, но и факт существования компании владельца или личность физического лица. Это позволяет обеспечить дополнительный уровень доверия для сайтов, осуществляющих бизнес в сети.

Внешне соединение с таким сайтом ничем не отличается от сайта с DV-сертификатом, но поле Субъект содержит дополнительные сведения о владельце.

introduction-to-cryptography-013.pngДанные сертификаты широко используются в бизнес-целях, когда требуется не только подтвердить факт безопасного соединения с данным ресурсом, но и факт его принадлежности определенной компании или физлицу. Так впервые попав на новый сайт Алисы и проверив поле субъект в OV-сертификате Боб может быть уверен, что принадлежит данный сайт именно Алисе, а не Еве или Мэллори.

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

EV - Extended Validation - сертификат с расширенной проверкой, выдается только компаниям и только после ряда дополнительных проверок. В частности, проверяется не только факт существования компании, но и соответствие указанных сведений действительности, например, проверяется наличие компании по указанному адресу, принадлежность компании указанных телефонов и возможность по ним связаться и т.д., и т.п.

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

introduction-to-cryptography-014.pngДанный тип сертификата предусматривает гораздо более высокий уровень доверия. Например, Боб теперь может быть уверен, что данный сайт не просто принадлежит компании Алисы, но и если он пройдет по указанному в уставных документах адресу, то там он с большой вероятностью обнаружит указанную компанию и Алису собственной персоной.

Однако не следует впадать в эйфорию и читать EV-сертификат залогом добросовестности компании или высокого качества ее работы, он всего лишь подтверждает, что компания не только существует, но и ведет свою деятельность по указанным координатам, ни больше, ни меньше. Так наличие у Почты России DV-сертификата нисколько не уменьшит уровень доверия к ним, ровно как наличие у ООО "Рога и копыта" сертификата уровня EV доверия к ним не повысит.

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

Онлайн-курс по устройству компьютерных сетей
На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.

Помогла статья? Поддержи автора и новые статьи будут выходить чаще:

Поддержи проект!

Или подпишись на наш Телеграм-канал: Подпишись на наш Telegram-канал



Loading Comments