Основные тезисы:
- Шифрование – это крайне важная технология для информационной безопасности, которая обеспечивает конфиденциальность за счет преобразования данных в нечитаемый формат для тех, у кого нет доступа к ним.
- Такие известные истории методы шифрования, как скитала, квадрат Полибия и шифр Цезаря, повлияли на современные системы шифрования.
- На сегодняшний день шифрование опирается на алгоритмы, в основе которых лежит разложение чрезвычайно больших чисел на простые, и которые защищают хранимые данные, веб-сайты и цифровую коммуникацию.
Вы наверняка встречали на просторах Интернета такой термин, как «шифрование». Но что это такое? Вероятно, это самая важная технология, которой мы располагаем. На нее полагается большая часть мер информационной безопасности – от безопасного просмотра веб-страниц до защиты электронной почты. Если бы у нас не было такой функции, как шифрование, то ни о какой конфиденциальности не могло бы быть и речи.
Что такое шифрование?
Шифрование меняет состав сообщения или данные таким образом, что его могут прочитать лишь люди, которые знают, как привести его в исходную форму. Все остальные просто решат, что это какой-то бессмысленный набор букв и символов.
Это на редкость полезная вещь, особенно если вы пересылаете какую-то конфиденциальную информацию. Хорошая схема шифрования поможет защитить эту информацию от посторонних глаз. Схема шифрования буквально описывает то, как алгоритм меняет сообщение или данные, чтобы сделать их нечитаемыми. Мы приведем несколько примеров устаревших алгоритмов, а затем обсудим, как это происходит сейчас.
Скитала
Еще в давние времена люди использовали различные средства для того, чтобы их личные сообщения смог прочитать лишь предполагаемый получатель, и никто другой. Древние греки плотно обматывали спиралью узкую полоску пергамента вокруг деревянного стержня, который назвался скиталой. Они писали свое послание поверх завернутого пергамента по всей длине этого стержня.
Раскрученный пергамент не имел никакого смысла. Посыльный доставлял его получателю, который должен был прочитать его без посторонних, предварительно обернув его вокруг своей собственной скиталы. Это разновидность перестановочного шифра.
Это довольно примитивный способ, но в нем присутствуют элементы, которые можно найти и в современных системах шифрования. Получается, что и отправитель, и получатель должны знать, что это за схема шифрования и как ее использовать, и для этого им обоим нужны соответствующие приспособления.
Квадрат Полибия
Был еще один метод, который также использовали древние греки. Он заключался в использовании квадрата Полибия. Это была буквенная сетка размером 5х5 или 6х6. Буква находилась по своим координатам, как в игре «Морской бой». Первая буква в первой строке кодировалась как «11», четвертая буква во второй строке – как «42» и т.д.
Разумеется, способов заполнения такой стеки довольно много, и если вы не знаете, как расположены буквы в этой сетке, то расшифровать сообщение будет довольно сложно. Такой метод позволяет вам создать схему с несколькими квадратами с несколькими вариантами расположения букв. Например, вы можете создать семь квадратов и использовать каждый из них в определенный день недели. Схемы, использующие несколько алфавитов, называются полиалфавитными шифрами.
Квадрат Полибия – это разновидность кода. Код заменяет буквы другими символами, в данном случае цифрами. Шифры же заменяют буквы другими буквами.
Шифр Цезаря
Юлий Цезарь назвал этот шифр в свою честь. Этот шифр для выбора буквы использует смещение (или «сдвиг») на заданное расстояние от буквы, которую вы шифруете. Если бы вы использовали смещение, равное двум, то «А» стало бы «С», а «D» - «F». Получатель должен знать точное смещение, необходимое для расшифровки сообщения. Чтобы расшифровать текст, необходимо было вычесть из полученных букв это смещение.
Шифр Цезаря со смещением на 13 позиций также известен как «сдвиг на 13» или ROT13. Он обладает особым свойством. В обычном английском алфавите 26 букв, и 13 делит это количество ровно пополам. Если используется такое смещение, то, чтобы расшифровать какое-то сообщение, вы можете снова выполнить процедуру шифрования. В данном случае двойное шифрование вернет вас к исходному тексту.
Исходный: ABCDEFGHIJKLMNOPQRSTUVWXYZ ROT13: NOPQRSTUVWXYZABCDEFGHIJKLM
Если вы выберите из обычного алфавита буквы «GEEK» и запишете соответствующие буквы из второго алфавита, вы получите «TRRX». Если вы проделаете тоже самое с буквами «TRRX», то снова получите «GEEK».
С точки зрения программирования, такой шифр упрощает нам задачу – нам необходимо написать только программу шифрования. Писать программу для расшифровки не нужно. Именно по этой причине реализация ROT13 стала стандартным упражнением для тех, кто изучает программирование. При этом ROT13 зачастую называют примером шифра крайне низкой криптографической стойкости.
Вы можете попробовать поэкспериментировать с этим шифром с помощью онлайн-программы ROT13. Попробуйте ввести «Alaska Nynfxn», а затем попробуйте передать этот вывод в качестве входного значения.
Так что же такое шифрование?
Все примеры шифров, которые мы здесь рассмотрели, довольно легко взломать, но они иллюстрируют общий элемент, который объединяет их и все виды шифрования. Существует определенный набор правил, которым необходимо следовать, чтобы преобразовать исходные данные, которые называются «открытым текстом», в их зашифрованную версию, которая известна как «шифртекст». Этот набор правил – это алгоритм, который и определяет шифрование.
Это алгоритмы, которые обеспечивают конфиденциальность.
Как работает шифрование сегодня?
Как и древние греки, люди, живущие в эпоху цифровых технологий, желающие хранить и отправлять личные данные, сталкиваются с некоторыми трудностями. Что вы можете сделать, чтобы посторонние лица не смогли получить доступ к этим данным? И что можно сделать, чтобы их обезопасить?
Все старые системы можно легко взломать, если вы знаете систему шифрования. Если вы воспользуетесь стелжнем того же диаметра, то без проблем сможете прочитать сообщение на скитале. Шифр Цезаря также можно легко взломать, просто попробовав разные смещения на первой части сообщения. Получится максимум 25 попыток.
Квадраты Полибия – это уже более сложная задача, так как буквы внутри квадрата могут располагаться как угодно. Если вы знаете, как расположены буквы, то вам ничего не стоит расшифровать сообщение. Ну а если вы понятия не имеете, каким образом составлен квадрат, то вы можете попробовать расшифровать сообщение, изучив непосредственно зашифрованный текст. Это называется криптоанализ.
При простом шифре вы можете использовать такие вспомогательные средства, как частотные таблицы букв. С их помощью вы можете определить, какая буква шифртекста какой букве открытого текста соответствует. Надежная схема шифрования должна оставаться надежной независимо от того, кто знает о принципе шифрования, а шифртекст должен быть устойчив к криптоанализу.
Никаких символов, только биты
Надежные схемы шифрования не работают с буквами и символами по отдельности, как это делают алгоритмы посимвольного шифрования. Они обрабатывают данные частями (блоками) и называются блочными шифрами.
Они оперируют битами (единицами и нулями) внутри каждого блока в соответствии с правилами сложных математических преобразований, заложенных в алгоритмах шифрования. Если алгоритм использует блоки размером 128 бит, то он будет обрабатывать данные порциями по 128 бит. Если последний обрабатываемый блок оказывается меньше, он заполняется незначащей информацией до необходимого размера.
Существует огромное количество схем блочного шифрования. AES (Advanced Encryption Standard – расширенный стандарт шифрования) – это официальный стандарт шифрования правительства США. Разные схемы шифрования используют разные алгоритмы и разные размеры блоков, а также разные комбинации математических преобразований.
Все это хорошо звучит, но как сделать так, чтобы посторонние лица не смогли воспользоваться той же схемой шифрования для расшифровки шифртекста?
Хэш-строки
Для начала рассмотрим частный случай. Данные можно зашифровать с помощью одностороннего преобразования. Это полная противоположность ROT13, так как мы не сможем вернуть полученному шифртексту вид открытого текста. Если быть более точным, то его невозможно расшифровать в какие-то более или менее реальные сроки. Такой тип шифрования используется в хэш-функциях, которые хэшируют строку открытого текста в строку шифртекста, которая называется хэшем или хэш-строкой. Все хэш-строки имеют одинаковую длину.
Насколько это полезно? Что ж, защищенный веб-сайт не будет хранить ваш пароль в виде открытого текста. Он хэширует ваш пароль и сохраняет хэш-строку. Ваш пароль никогда не сохраняется. Когда вы в следующий раз будете заходить в систему и введете пароль, он вновь хэшируется, и полученная хэш-строка будет сравниваться с хэш-строкой, которая хранится в данных вашей учетной записи. Если они совпадают, то это значит, что вы можете войти в систему. Если же вы введете неправильный пароль, то эти хэш-строки не совпадут, и система вас не пропустит.
Таким образом, веб-сайт может использовать функцию аутентификации, и при этом ему не нужно хранить пароль в открытом виде. Если вдруг сайт взломают, пароли не будут скомпрометированы. Помимо этого, перед хэшированием паролей методы могут добавлять к ним уникальные случайные данные, которые называют «солью». Это значит, что, даже если несколько пользователей выберут одинаковые пароли, хэши все равно будут уникальными.
Для чего используется шифрование?
На сегодняшний день шифрование используется почти для всего (ну или, по крайней мере, так должно быть). Вот несколько примеров, с которыми вы встречаетесь практически каждый день.
Зашифрованные накопители данных
В целях предотвращения расшифровки данных посторонними лицами, используется специальный ключ, который определяет, кто их зашифровал, и кто их может расшифровать. Ключ – это длинная последовательность битов, сгенерированная сложным алгоритмом. Как правило, размер ключа варьируется от 128 до 2048 бит и более. Алгоритм шифрования использует ключ при шифровании открытого текста, при этом размер ключа никак не зависит от размера блока.
Для того, чтобы защитить данные, которые хранятся локально, можно зашифровать все жесткие диски. Процедура шифрования в данном случае привязывается непосредственно к учетной записи пользователя, а ключ генерируется и применяется автоматически. Пользователь не взаимодействует с ключом напрямую, и его не нужно никому отправлять.
Так как ключ привязан к учетной записи пользователя, просто извлечь и подключить его к другому компьютеру и получить, таким образом, доступ к данным невозможно. Такой подход обеспечивает защиту данных, которые являются статическими или «хранимыми».
Это относится не только к обычным компьютерам. Хранилища на современных мобильных телефонах также зашифрованы, и не без оснований. Наш телефон – это клондайк личной и конфиденциальной информации, и не стоит допускать, чтобы любой, кто случайно возьмет телефон в руки, мог получить доступ к этой информации.
Если вам необходимо передать данные, то вам стоит подумать, как защитить их при передаче.
Защищенные веб-сайты
Когда вы заходите на сайт и видите в адресной строке замочек, вы понимаете, что зашли на защищенный веб-сайт, не так ли? Ну или что-то в этом роде. На самом деле это значит, что соединение между вашим компьютером и веб-сайтом зашифровано криптографическими протоколами SSL/TLS.
Все это хорошо, но это не говорит о том, что остальная часть веб-сайта также защищена. Веб-сайт может хранить пароли в открытом виде или использовать пароль администратора по умолчанию для доступа к базе данных. Во всяком случае, если вы видите замочек, вы понимаете, что ваше взаимодействие с веб-сайтом зашифровано.
Такое шифрование вполне возможно, так как ваш браузер и веб-сайт использую одну и ту же схему шифрования с несколькими ключами. В начале сеанса ваш браузер и веб-сайт обмениваются открытыми ключами. С его помощью можно расшифровать то, что было зашифровано с использованием закрытого ключа.
Ваш браузер и веб-сайт обмениваются своими открытыми ключами, а затем шифруют их с помощью своих закрытых ключей. Каждый конец соединения получает открытый ключ другого конца, а значит, каждый конец может расшифровать информацию, которую он получил от другого конца. Закрытые ключи не раскрываются.
Такой обмен открытыми ключами полностью безопасен, так как их нельзя использовать для обманного шифрования данных. Так что, даже если вы получаете копию открытого ключа веб-сайта, вы не сможете выдать себя за подлинный веб-сайт, так как у вас нет закрытого ключа. И вот здесь возникает вопрос подлинности. Как понять, что веб-сайт является подлинным владельцем открытого и закрытого ключа, а не сайтом-подделкой, который каким-то образом украл оба ключа у подлинного сайта?
Для проверки подлинности сайта используются сертификаты. Эти сертификаты выдаются специальными сертифицирующими организациями и только после проверки личности заявителя. Веб-сайт оправляет сертификат в качестве подтверждения в самом начале сеанса, чтобы браузер мог его проверить.
Для этого он обращается в сертифицирующую организацию и расшифровывает некоторые сведения о сертификате. Для этого нужны еще ключи. В установочном пакете вашего браузера хранятся открытые ключи основных сертифицирующих организаций. Дальше еще больше. Помимо того, что ваш браузер и веб-сайт обмениваются открытыми ключами, они также создают уникальные сеансовые ключи для того, чтобы обеспечить дополнительную защиту связи.
После того, как ваш браузер проверит подлинность сайта и убедиться в надежности шифрования, он отметит его замочком.
Защищенная электронная почта
Концепция открытого и закрытого ключей вновь и вновь появляется в шифровании. Один из распространенных методов защиты электронных писем при передаче использует все те же пары ключей. Открытыми ключами можно обмениться и не беспокоиться о безопасности, а вот закрытые ключи передавать нельзя. Сообщения шифруются с помощью закрытого ключа отправителя. А получатель может легко его расшифровать и прочитать, воспользовавшись открытым ключом отправителя. Для шифрования ответа они могут использовать свои собственные закрытые ключи.
OpenPGP – это хорошо известная схема шифрования, которая придерживается именно такой модели, но с некоторой изюминкой.
Почтовая программа отправителя генерирует случайный ключ, с помощью которого он шифрует сообщение. Затем этот случайный ключ шифруется с помощью открытого ключа получателя. После этого зашифрованное сообщение и зашифрованный случайный ключ отправляются получателю. С помощью своего закрытого ключа программа получателя расшифровывает случайный ключ, который затем использует для того, чтобы расшифровать сообщение.
У этого дополнительного шага есть особая цель – он призван обеспечить безопасную отправку электронного письма нескольким получателям. Вам не нужно шифровать сообщение отдельно для каждого получателя, достаточно просто сгенерировать случайный ключ.
Разумеется, здесь также встает вопрос подлинности. Вы должны быть уверены в подлинности открытого ключа, который вам отправили. Ключи привязаны к адресам электронной почты. Если открытый ключ был отправлен с адреса, с которым вы будете общаться, это уже хорошо. Большинство почтовых программ способны отображать адрес электронной почты, к которому привязан открытый ключ.
Существует еще один способ проверки подлинности открытого ключа. Вы можете получить ключ из репозитория. Открытые ключи, загруженные в репозитории, всегда проверяются им перед публикацией.
Шифрование лежит в основе нашей жизни в цифровом мире
Шифрование – это, пожалуй, и есть основа нашей цифровой жизни (если, конечно, мы все делаем правильно). Избегайте незащищенных удалённых подключений (будь то удаленная работа или Интернет-магазин), используйте почтовые программы, которые способны шифровать личные сообщения, и используйте мессенджеры со сквозным шифрованием.
Как бы сказал Цезарь: «Lbhe cevinpl vf vzcbegnag, hfr gur nccebcevngr gbbyf gb fnsrthneq vg».