Материал: Использование шифрования с закрытым ключом

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Глава 2. Шифрование с закрытым ключом в нашей жизни

2.1Ключевая особенность

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

2.2Визуальное представление

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

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

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

Получатель открывает замок ключом  и тайное послание прочитано!

Пользуясь терминологией ассиметричной криптографии с открытым ключом, ключ 1 — это закрытый (приватный) ключ, а ключ 2 — это открытый (публичный) ключ.

2.3 Использование шифрования в Windows

PGP (от англ. PrettyGoodPrivacy) означает «вполне хорошая приватность». На самом деле это очень хорошая приватность. При правильном использовании PGP может защитить содержимое ваших сообщений, текстов и даже файлов от самых серьезных правительственных средств слежки. Когда Эдвард Сноуден говорил «шифрованиеработает», он подразумевал именно PGP и связанные с ней программы.

         К сожалению, PGP – не самый лёгкий для освоения и использования инструмент. Стойкое шифрование, реализованное в PGP (шифрование с открытым ключом) – мощное, но довольно мудрёное средство защиты. Сама программа PGP существует с 1991 года и является ровесником самых первых версий MicrosoftWindows. С тех давних пор внешний вид PGP не особенно изменился.

2.4Социальные сети и шифрование с закрытым ключом

Многие социальные сети используют эту технологию шифрования.

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

2.5Шифрование с закрытым ключом наИнтернет сайтах.

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

2.6Принцип работы закрытого ключа в Веб-сайтах

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

Открытый и закрытый ключ между собой связаны математическими зависимостями, поэтому подобрать открытый или закрытый ключ невозможно за короткое время (срок действия сертификата). Именно поэтому максимальный срок действия SSL сертификатов более высого уровня защиты всегда ниже. Так, сертификаты EV можно заказать максимум на 2 года. При этом заказывая новый SSL сертификат или продлевая старый, важно генерировать новый CSR запрос, так как к нему привязывается Ваш закрытый ключ и при выпуске нового SSL сертификата лучше его обновлять.

Взаимодействие клиента с сервером происходит следующим образом:

1. Браузер на основе открытого ключа шифрует запрос и отправляет его на сервер;

2. сервер, применяя закрытый ключ, расшифровывает полученное сообщение;

3. сервер шифрует закрытым ключом свой цифровой идентификатор и передает его клиенту;

4. клиент сверяет идентификатор сервера и передает свой;

5. после взаимной аутентификации клиент шифрует открытым ключом ключ будущей сессии и передает его на сервер;

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

Таким образом обеспечиваются несколько пунктов безопасности:

§  исключается возможность утечки информации – при перехвате её нельзя будет расшифровать;

§  сервер подтверждает свой адрес и идентификатор, отсекается возможность перенаправления на другой сайт (фишинг);

§  клиенту присваивается индивидуальная сессия, что позволяет отличать его от других клиентов более надежно;

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

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

2.7Пошаговое примененияRSA шифрования

2.6.1 Шаг первый. Подготовка ключей

Я должен проделать предварительные действия: сгенерировать публичный и приватный ключ.

· Выбираю два простых числа. Пусть это будет p=3 и q=7.

· Вычисляем модуль — произведение наших p и qn=p×q=3×7=21.

· Вычисляем функцию Эйлераφ=(p-1)×(q-1)=2×6=12.

Теперь пара чисел {e, n} — это мой открытый ключ. Я отправляю его вам, чтобы вы зашифровали своё сообщение. Но для меня это ещё не всё. Я должен получить закрытый ключ.

Мне нужно вычислить число d, обратное е по модулю φ. То есть остаток от деления по модулю φ произведения d×e должен быть равен 1. Запишем это в обозначениях, принятых во многих языках программирования: (d×е)%φ=1. Или (d×5)%12=1d может быть равно 5 ((5×5)%12=25%12=1), но чтобы оно не путалось с e в дальнейшем повествовании, давайте возьмём его равным 17. Можете проверить сами, что (17×5)%12 действительно равно 1 (17×5-12×7=1). Итак d=17. Пара {d, n} — это секретный ключ, его я оставляю у себя. Его нельзя сообщать никому. Только обладатель секретного ключа может расшифровать то, что было зашифровано открытым ключом.

2.6.2 Шаг второй. Шифрование

Теперь пришла ваша очередь шифровать ваше сообщение. Допустим, ваше сообщение это число 19. Обозначим его P=19. Кроме него у вас уже есть мой открытый ключ: {e, n} = {5, 21}. Шифрование выполняется по следующему алгоритму:

· Возводите ваше сообщение в степень e по модулю n. То есть, вычисляете 19 в степени 5 (2476099) и берёте остаток от деления на 21. Получается 10 — это ваши закодированные данные.

Строго говоря, вам вовсе незачем вычислять огромное число «19 в степени 5». При каждом умножении достаточно вычислять не полное произведение, а только остаток от деления на 21. Но это уже детали реализации вычислений, давайте не будем в них углубляться.

Полученные данные E=10, вы отправляете мне.

Здесь надо заметить, что сообщение P=19 не должно быть больше n=21. иначе ничего не получится.

2.6.3. Шаг третий. Расшифровка

Я получил ваши данные (E=10), и у меня имеется закрытый ключ {d, n} = {17, 21}.

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

Начинаем раскодировать:

· Я делаю операцию, очень похожую на вашу, но вместо e использую d. Возвожу E в степень d: получаю 10 в степень 17 (позвольте, я не буду писать единичку с семнадцатью нулями). Вычисляю остаток от деления на 21 и получаю 19 — ваше сообщение.

Заметьте, никто, кроме меня (даже вы!) не может расшифровать ваше сообщение (E=10), так как ни у кого нет закрытого ключа.

2.6.4 В чём гарантия надёжности шифрования?

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

Постараюсь это показать на примере. Давайте разложим на множители число 360:

· сразу ясно. что оно делится на два (получили 2)

· оставшееся 180 тоже, очевидно чётное (ещё 2)

· 90 — тоже чётное (ещё двойка)

· 45 не делится на 2, но следующая же попытка оказывается успешной — оно делится на три (получили 3)

· 15 тоже делится на 3

· 5 — простое.

Мы на каждом шагу, практически без перебора, получали всё новые и новые множители, легко получив полное разложение 360=2×2×2×3×3×5

Давайте теперь возьмём число 361. Тут нам придётся помучиться.

· оно не чётное

· три — нет, не делится

· пять (допустим, мы поступаем умно и перебираем только простые числа, хотя, на практике, поиск больших простых чисел, сам по себе, является сложной задачей) — не подходит

· семь? — нет.

· …

· и только 19 даст нам ответ: 361=19×19.

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

2.6.5 А как это всё работает на практике?

Давайте рассмотрим чуть более приближенный к жизни пример. Зашифруем и расшифруем слово «КРОТ», предложенное одним из читателей. А заодно, бегло рассмотрим, какие проблемы при этом встречаются и как они решаются.

Сперва сгенерируем ключи с чуть большими числами. Они не так наглядны, но позволят нам шифровать не только числа от нуля до 20.

Оттолкнёмся от пары простых чисел {p, q} = {17, 19}. Пусть наш открытый ключ будет {e, n} = {5, 323}, а закрытый {d, n} = {173, 323}.

Мы готовы к шифрованию. Переведём наше слово в цифровое представление. Мы можем взять просто номера букв в алфавите. У нас получится последовательность чисел: 11, 17, 15, 19.

Мы можем зашифровать каждое из этих чисел открытым ключом {e, n} = {5, 323} и получить шифровку 197, 272, 2, 304. Эти числа можно передать получателю, обладающему закрытым ключом {d, n} = {173, 323} и он всё расшифрует.

2.6.6 Сложности использования

На самом деле, изложенный способ шифрования очень слаб и никогда не используется. Причина проста — шифрование по буквам. Одна и та же буква будет шифроваться одним и тем же числом. Если злоумышленник перехватит достаточно большое сообщение, он сможет догадаться о его содержимом. Сперва он обратит внимание на частые коды пробелов и разделит шифровку на слова. Потом он заметит однобуквенные слова и догадается, как кодируются буквы «a», «и», «o», «в», «к»… Путём недолгого перебора, он вычислит дополнительные буквы по коротким словам, типа «но», «не», «по». И по более длинным словам без труда восстановит все оставшиеся буквы.

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

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

Упрощённо, это выглядит так. Перед шифрованием, мы применяем к сообщению правило: b := (b + a) % n. Где a — предыдущая часть сообщения, а b — следующая. То есть наше сообщение (11, 17, 15, 19) изменяется. 11 остаётся без изменений. 17 превращается в (11 + 17) % 323 = 28. 15 становится (15 + 28) % 323 = 43. A 19 превращается в 62.

Последовательность (11, 28, 43, 62) получается «запутанной». Все буквы в ней как бы перемешаны, в том смысле, что на каждый код влияет не одна буква, а все предыдущие.

Тот, кто получит ваше сообщение, должен будет проделать обратную операцию, со знаком «минус»: b := (b - a) % n. И только тогда он получит коды букв.

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

То есть мы можем добавить случайное число в начало и получить (299, 11, 17, 15, 19). После перемешивания получится: 299, 310, 4, 19, 38. После шифрования уже невозможно будет догадаться где была какая буква.

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








ЗАКЛЮЧЕНИЕ

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

Чтобы этого не происходило, используются специальные дополнительные алгоритмы, суть которых в том, что каждая предыдущая часть сообщения начинает влиять на следующую. Сегодня, в век цифровых технологий, каждый из нас сталкивается с шифрованием даже не замечая этого. Мы ежедневно пользуемся разными Интернет-ресурсами, которые зашифровывают данные для того, чтобы избежать получения этих данных третьими лицами. Набирая текст в поисковой строке, поисковик шифрует доступные ему данные. Когда вы заходите на любой сайт в интернете, информация о Вашем устройстве, IP адресе, MAC адресе и идентификатор сессии так же шифруется. Многие люди не интересуются этой темой и для кого-то это покажется слишком сложным. Действительно, отправляя сообщение своему другу в мессенджере, мы не хотим знать каким образом он его получает, нам важно, чтобы он его получил. В наш век очень ценна информация. Вряд ли Вы хотите, чтобы Ваше сообщение прочитал кто-то другой, а не получатель. Многие передают в сообщениях очень много конфиденциальной и ценной информации. Как раз, чтобы эта информация не попала злоумышленнику, большинство сервисов обмена сообщений поддерживают шифрование. А самые безопасные — шифрование с закрытым ключом. Было издано много технической литературы на эту тему, а также много материалов в Интернете. Все вышесказанное предопределяет актуальность этой темы.