Что такое шифрование файлов
Файлы под защитой шифрования – как защитить важную информацию
На дисках компьютеров, на внешних носителях и в памяти мобильных устройств, – мы храним всё больше и больше данных. Это как обыденная и, казалось бы, незначительная информация, так и очень ценная, которая не должна оказаться в чужих руках. Там могут оказаться личные фотографии, личные данные, номера банковских счетов, медицинские записи, информация для доступа к различным сервисам, счета-фактуры и результаты нашей напряженной работы.
Незащищенные данные – это прямой путь к краже личности. Кроме того, другие члены семьи, друзья или коллеги, имеющий прямой физический доступ к вашему компьютеру, смогут узнать о вас «слишком много».
Однако, прежде чем мы начнем защищать важные для нас коллекции – используя, например, шифрование – необходимо также обеспечить эффективную антивирусную защиту и регулярное сканирование компьютера, установить мощный брандмауэр (firewall) и архивировать наиболее ценные файлы.
Эти архивы также нужно защитить от несанкционированного доступа, если инструмент, с помощью которого мы выполняем резервное копирование, не имеет такой возможности.
Что такое шифрование файлов
Шифрование файлов и папок и передавашемых через интернет данных, направлена на сохранение конфиденциальности данных. В зависимости от используемого метода (алгоритма), оно может быть менее или более эффективным.
Как это работает? Исходные данные соответствующим образом изменяются, чтобы они стали нечитаемыми. Конечно, это процесс обратимый. Для того, чтобы восстановить их в предыдущее состояние, необходимо использование ключа расшифровывания, который известен только лицу, имеющему право. Чаще всего таким ключом является пароль.
Шифрование осуществляется с использованием специальных, сложных математических алгоритмов. Зашифрованный файл становится набором, казалось бы, случайных нулей и единиц. Только зная метод шифрования и соответствующий ключ, мы в состоянии прочитать, содержащуюся в файле информацию.
Мало кто догадывается, как часто каждый день мы имеем дело с шифрованием. Использование сети Wi-Fi, использовать интернет-банкинга или обычный разговор по мобильному телефону – это действия, которые требуют шифрования. Оно имеет то преимущество, что наши данные надежно защищены даже в случае физической потери телефона, ноутбука или флешки, а в результате кражи или утери.
Интересно, что для защиты данных вовсе не надо использовать платные или дополнительных инструменты. Часто просто программное обеспечение для шифрования уже встроено в операционную систему.
Простое шифрование
Некоторые читатели, конечно, слышали о шифре Цезаря, который также называют циклическим. Этот метод изобретен более 2000 лет назад, а принцип его действия основывается на шифровании и дешифровании с использованием 26 букв алфавита.
Чтобы закодировать сообщение, буквы заменяли на другие, которые в алфавите сдвинуты от заменяемой на «x» позиций, например, на 3. Если шифруемая буква последняя в алфавите, мы возвращаемся в начало. В таком случае ключом шифрования будет значение «x».
Перейдём к способам, которые мы можем использовать каждый день. Если под рукой нет приложений для шифрования, а мы хотим защитить файл или папку, мы можем использовать встроенный в Windows архиватор ZIP. К сожалению, с появлением седьмой версии Windows из компрессора исчезла возможность защиты архивов паролем. Но ничего не потеряно, потому что само сжатие данных приводит к изменению организации отдельных байтов в непонятный набор символов.
Некоторые пользователи отсутствие пароля пытаются заменить изменением расширения файла с *.ZIP на другой, например,*.DLL. Этот метод вполне уместен, но нет никакого смысла в повторном сжатии, которое якобы должно затруднить считывание информации. Если же вы хотите защитить архив паролем, в распоряжении у вас есть бесплатный инструмент – 7-ZIP.
Полное шифрование диска
Для того, чтобы лучше защитить все данные (включая файлы операционной системы) на жестком диске вашего компьютера от несанкционированного доступа третьих лиц, лучше использовать шифрование всего диска.
Он заключается в обеспечении доступа к компьютеру с использованием ключа. Это может быть обычный пароль, который необходимо запомнить, модуль TPM, файл на флешке или биометрический считыватель.
Важно, что ключ шифрования должен быть введен еще до загрузки операционной системы, потому что файлы были закодированы и нечитаемы для загрузчика. Без знания пароля или ключа мы не получим доступа к компьютеру. Перенос диска на другой компьютер также ничего не даст, потому что весь диск зашифрован – кроме небольшого раздела, ответственного за принятие ключа и дешифрацию.
Это метод защищает не только данные пользователей, но и файл подкачки и временные коллекции, из которых можно было бы извлечь секретную информацию. Кроме того, мы скрываем структура каталогов, имена файлов, их размеры, метаданные. Благодаря методу полного шифрования дисков, мы защищаем все данные, а не только выбранные файлы.
Такой способ, однако, имеет недостатки. Для полного шифрования диска можно использовать бесплатный инструмент под названием VeraCrypt, разработанный на основе программы TrueCrypt. Но, к сожалению, в некоторых случаях применение только шифрования может представлять опасность, например, когда кто-то получит доступ к включенному компьютеру. Поэтому стоит наиболее ценные данные дополнительно шифровать на уровне файлов.
Шифрование на уровне файлов
В интернете вы найдёте много бесплатных приложений, позволяющих осуществлять шифрование файлов и папок с использованием различных методов и алгоритмов. Если вы хотите использовать их в работе, стоит проверить лицензию, допускает ли она применение данного инструмента в коммерческих целях.
Первым примером такого приложения является Cryptomator. Он бесплатный (открытый исходный код) и имеет свои версии для разных ОС и устройств. Эта утилита шифрует данные, которые мы посылаем в облачные сервисы, такие как Dropbox или Google Диск. С её помощью мы также можем защитить файлы и папки на локальном жестком диске компьютера.
Cryptomator шифрует данные с помощью алгоритма AES с 256-разрядным ключом ещё до того, как файлы будут скопированы на диск онлайн. Работа программы заключается в создании, так называемых, крипт, то есть закодированных файлов (контейнеров), в которых хранятся наши коллекции. Их количество неограниченно.
Что важно, данные в «криптах» имеют скрытую структуру каталогов, названия и даже размеров. Доступ к каждому контейнеру защищен паролем, только после введения которого открывается выбранный «крипт».
Второе достойное внимания приложение для защиты файлов и папок – Encrypto. Принцип его работы совершенно иной и заключается в перетаскивании коллекций в специальные окна или выборе опции «Добавить файл» (Add file. ) или «Добавить папку» (Add folder. ). Затем, содержащиеся в них данные автоматически шифруются, и пользователь может сохранить их в произвольно выбранном месте. Для этого нужно установить пароль и возможную подсказку. Чтобы расшифровать защищенный файл или папку, щелкните по нему два раза мышкой и введите пароль. Благодаря этому, каждая коллекция может быть защищена уникальным паролем, что повышает безопасность.
Легкая и быстрая защита
Иногда нам нужно быстро защитить отдельные файлы, например, документы. Нам не нужно для этого устанавливать продвинутое программное обеспечение для шифрования, а только выбрать одно из бесплатных приложений такого типа, позволяющего выполнить такую операцию с помощью контекстного меню системы.
Отличным примером такого средства является AxCrypt. Перед началом использования приложения необходимо создать учетную запись, указав адрес электронной почты, на который мы получим код подтверждения, необходимый для установления пароля. Поскольку пароль является общим для всех файлов, AxCrypt заботится о том, чтобы он был достаточно надежным. Большим преимуществом программы является возможность безопасного удаления файлов с жесткого диска путем перезаписи содержимого случайными данными. Благодаря этому никто не восстановит файл в незашифрованной версии.
Более того, с помощью AxCrypt мы постоянно имеем доступ к содержимому зашифрованного файла, нам не нужно каждый раз его расшифровать. Мы можем нормально его использовать, например, редактировать документ в Word, а сам файл всё время будет зашифрован.
Другой пример приложения для быстрого шифрования файлов, также не требующий установки, EasyCrypt, который мы можем перенести на USB-накопитель. После запуска приложения достаточно выбрать файл, указать задачи (шифрование и дешифрование), указать место назначения, и установить пароль. В заключение, нажмите кнопку «Decrypt» (Зашифровать) или «Encrypt» (Расшифровка). Дополнительной опцией является возможность просмотра пароля в явном форме (вместо точек). EasyCrypt использует 256-битный алгоритм шифрования AES.
Скрытие файлов и папок
Интересным методом защиты данных является возможность скрытия их присутствия на дисках. Ничто не стоит на пути, чтобы таким образом замаскировать существование также зашифрованных файлов, что дополнительно повысит их безопасность.
С этой целью мы можем воспользоваться, например, специальными инструментами, подробнее о которых мы писали в статье Как спрятать файлы и папки на компьютере.
BitLocker и TPM-модуль
В системах Windows 7 и более поздних версиях, предназначенных для профессионального использования (в версии Pro, Ultimate, Enterprise), встроена функция шифрования разделов, включая системный. Во втором случае операция более сложная и требует нескольких дополнительных процедур, особенно если у вас в компьютере не установлен TPM (Trusted Platform Module), предназначенный для авторизации оборудования.
Затем в системном поиске вводим фразу BitLocker, что вызовет запуск панели управления этой функцией. Если вы хотите зашифровать несистемный раздел, достаточно установить пароль доступа и все готово. В противном случае (если у нас нет TPM) необходимо в групповой политике активировать опцию «Разрешить использование BitLocker без совместимого TPM» (Подробнее о шифровании без TPM).
Затем нужно вернуться к панели управления и активировать BitLocker для системного раздела, а утилита попросит ввести пароль или вставить USB-носитель, который будет использоваться для авторизации и позволит загрузить операционную систему. Затем следует создать резервную копию ключа, например, в виде файла, и в конце выбрать метод сжатия – «Только занятое место» или «Весь диск» (второй способ является более безопасным).
Теперь при каждом включении компьютера (до загрузки системы), мы должны ввести пароль или вставить USB-носитель. Стоит также добавить, что функция BitLocker выполняет шифрование памяти мобильных устройств (опция BitLocker To Go).
Преимущество наличия TPM является отсутствие необходимости входа в систему с помощью пароля. Мы вводим его только в окне входа в систему Windows.
Зачем нужно шифрование?
Даже если вы никогда не задумываетесь над этим,у вас наверняка есть тайны, достойные быть зашифрованными!
За века своего существования человечество придумало множество способов хранения тайны. В Древнем Риме, например, чтобы тайно передать письмо, брили голову рабу, писали на коже сообщение, а потом, дождавшись, когда волосы отрастут, отправляли его к адресату. Конечно, XXI век не позволяет делать дела столь неспешно, да и защита в этом примере обеспечивается только тем, что о письме никто не знает.
К счастью, компьютеры, изначально созданные для взлома военных шифров, дают каждому из нас прекрасный способ хранения личных тайн – информацию можно зашифровать. То, что долгое время было доступно только государственным службам, сегодня может применить любой пользователь. И, что более существенно, даже если вы не задумываетесь над этим, у вас наверняка есть тайны, достойные шифрования.
Есть что скрывать
«У меня нет никаких тайн, мне нечего скрывать», – часто можно услышать от пользователей, когда речь заходит о шифровании и других средствах защиты конфиденциальности. Обычно за этой фразой стоит нечто другое – «я считаю, что никто не потрудится лезть в мой телефон или компьютер, чтобы там найти что-то ценное». Но практика показывает, что это не так. Файл, сохраненный на рабочий стол компьютера или телефон, оставленный в гостиной, довольно быстро будет изучен кем-то из домочадцев.
Все ли письма, фотографии и документы вы готовы показывать жене, брату, теще, детям? Возможно, там нет ничего криминального. Но готовы ли вы сообщить номер своей кредитной карты и ее PIN-код детям-подросткам? Отдать брату пароли от почты и социальных сетей? Демонстрировать все семейные фото друзьям, которые пришли в гости и на пятнадцать минут сели за компьютер? Есть ли желание объяснять жене, что Элеонора – это начальник отдела смежников на работе, а встреча с ней завтра – это совещание с участием еще десяти человек?
И уж конечно, совсем грустной будет история, если на компьютер проникнет вредоносное приложение. В последнее время встречаются зловреды, крадущие всю доступную информацию с компьютера: документы, изображения, сохраненные в браузере пароли и формы – все. Известны случаи, когда среди краденых изображений находились фото документов, которые были использованы для разных форм мошенничества. Или случаи, когда пикантные фото использовались для шантажа.
Особо неприятной формой кражи в последние два-три года стала кража смартфона. Теперь это делается не только для перепродажи краденой трубки, более «продвинутые» воры перед сбытом выключают все беспроводные модули и заглядывают в память устройства в надежде найти что-то ценное вроде тех же паролей, номеров кредиток и фото паспорта.
Семь бед – один ответ
Угроз, как мы видим, существует много, и от каждой из них можно придумать свой способ защиты: изолировать компьютер в запертой спальне, поставить PIN-код на включение смартфона и так далее. Но если защитить информацию не путем физической изоляции, а так, чтобы ее мог прочитать только владелец, результат будет более надежным и всеобъемлющим. Абсолютно все перечисленные неурядицы – большие и малые – могли бы не случиться, если бы важная информация, предназначенная не для всех глаз, хранилась бы в зашифрованном виде.
Иногда вы сталкиваетесь с шифрованием, даже если не задумываетесь об этом, – например, заходя в Gmail или на сайт онлайн-банкинга по протоколу HTTPS, вы связываетесь с банком по зашифрованному каналу. Встроено шифрование и в самый популярный сегодня стандарт сотовой связи GSM. Но сегодня мы сосредоточимся на другом – шифровании данных, хранящихся на компьютере или смартфоне.
Что такое шифрование
Шифрование – это преобразование информации, делающее ее нечитаемой для посторонних. При этом доверенные лица могут провести дешифрование и прочитать исходную информацию. Существует множество способов шифрования/дешифрования, но секретность данных основана не на тайном алгоритме, а на том, что ключ шифрования (пароль) известен только доверенным лицам.
Необходимо отличать шифрование от кодирования. Кодирование тоже преобразует информацию, но лишь для удобства хранения и передачи, секретность не является основной задачей. Типичные способы кодирования – азбука Морзе и двоичное кодирование букв для хранения в компьютере.
Ваш цифровой сейф
Самое удобное на сегодня решение по шифрованию файлов на компьютере – это создание «контейнера», который виден в системе как отдельный диск. На этот диск можно сохранять или копировать любую информацию, с ним можно работать из любой программы, он ничем, по сути, не отличается от флешки или раздела винчестера, чем и удобен.
Важное «но» – на самом деле контейнер является отдельным большим файлом на вашем винчестере, доступ к которому организован через специальную программу, например Kaspersky CRYSTAL. Любой файл, сохраняемый на этот особый диск, будет «на лету» зашифрован и записан в общий файл-контейнер.
Файл-хранилище может увидеть любой посторонний, его даже можно украсть (скопировать). Но это не даст злоумышленнику или просто любопытному ровным счетом ничего – внутри файла содержится лишь мешанина символов, и можно потратить многие годы на то, чтобы подобрать пароль, который превращает этот файл в диск с читабельными файлами.
Чтобы зашифрованный контейнер стал эффективной защитой вашей информации, нужно соблюдать несколько простых правил:
Сейф на смартфоне
Ответом на вышеописанную проблему с кражей смартфонов стало включение в современные мобильные ОС функций шифрования. Ключевая информация в смартфоне постоянно хранится в зашифрованном виде и всякий раз расшифровывается, когда владелец вводит пароль или PIN-код разблокировки. Apple не дает пользователю глубоко управлять этой функцией, но значительное количество информации подвергается шифровке при активации защитного PIN-кода на включение смартфона/планшета.
В Android в настройках безопасности имеется опция полной шифровки содержимого телефона, которая делает все данные на устройстве недоступными без ввода пароля. Для максимальной надежности в обоих случаях рекомендованы свежие версии мобильных ОС – iOS с 6.1 и Android с 4.1.
«Облачная» защита
Среди прочих видов информации в наибольшей степени требуют шифрованного хранения ваши пароли – ведь к каждому сайту и сервису они должны быть разными, оставаясь надежными, длинными и стойкими. Именно поэтому все качественные «хранители паролей» постоянно держат базу данных в зашифрованном виде. Это позволяет без особых опасений передавать ее по Интернету, синхронизируя между разными компьютерами и мобильными устройствами. Подобные сервисы помогают держать все свои пароли под рукой, не снижая уровень защищенности.
Как защитить файлы от злоумышленников: осваиваем шифрование
Вы наверняка слышали об опасностях обмена файлами через интернет. В них тайком «подселяют» вредоносный код, который с определёнными правами может натворить на устройстве чёрт-те что. А если речь идёт об обмене важными рабочими файлами, опасность выходит на новый уровень: корпоративные данные сольют, текст договоров подменят — в общем, караул.
Для защиты на этом уровне используются криптографические алгоритмы. Базовая информация о них неплохо изложена в википедии. Если отбросить всю теорию, то обычно рассматривают симметричные, асимметричные и бесключевые криптографические алгоритмы. В первых для шифрования и дешифрования используется один и тот же ключ, во вторых — разные ключи, а в третьих ключи не используются вовсе. Каждый из типов алгоритмов применяется по-своему.
Хеш-функции
Беcключевые алгоритмы обычно используются для вычисления хеш-функций, или функций свёртки. Хеш-функция преобразовывает массив входных данных произвольной длины в выходную битовую строку установленной длины. Прелесть такого преобразования в том, что если объект изменился, то скорректируется и его хеш-функция.
Рассмотрим это на примере утилиты openssl, установленной в Linux. К примеру, у нас есть текстовый файл, содержащий «this is simple text»:
Вычислим от этого файла хеш-функцию при помощи алгоритма md5:
А теперь изменим содержимое файла:
Обратите внимание: мы добавили в файл новую строку («but changed»), вычислили заново хеш от файла, и он стал другим. То есть при любом изменении содержимого файла хеш-функция не останется прежней. Это можно использовать для контроля целостности критических файлов: если их хеш изменится — системному администратору придёт оповещение. Или для проверки, загрузился ли файл полностью: если это так, на сайте опубликуется его хеш.
В Windows для вычисления хеша я рекомендую утилиту Sigcheck из пакета Sysinternals. Для примера вычислим значение хеша md5 от файла PsExec.exe:
Другой вариант — использовать утилиту certutil, предустановленную в Windows. Вычислим с её помощью значение хеша md5 от файла PsExec.exe:
Также можно загрузить пакет openssl для ОС Windows. Качаем архив под нужную архитектуру процессора отсюда, распаковываем его и переходим в консоли в каталог bin. Нам нужен файл openssl.exe:
Теперь нам доступны почти все возможности пакета openssl в Windows. Например, вычислить хеш, как делали в предыдущих примерах для Linux (не забываем про абсолютные и относительные пути к файлам):
Пакет лучше переместить в каталог C:/OpenSSL, а конфигурационный файл openssl.cnf — из каталога bin в каталог OpenSSL. Избежим ошибки, как на скрине выше:
Теперь рассмотрим реализацию криптографических алгоритмов.
Симметричные криптоалгоритмы
Если говорить упрощённо, то симметричные алгоритмы шифрования применяют один ключ для шифрования и дешифрования. Таких алгоритмов много, и на практике обычно применяют те, которые имеют достаточную длину ключа и ещё не были скомпрометированы. Симметричные алгоритмы делятся на блочные (DES, RC2, Blowfish, AES, «Кузнечик» и т. д.) и потоковые (RC4, SEAL, CryptMT и другие).
Стойкость к взлому у всех блочных криптографических алгоритмов во многом определяется длиной ключа. Если она составляет 128 бит и более, шифрование считается сильным, так как для расшифровки информации без ключа потребуются годы работы на мощных компьютерах. Кому любопытно — об алгоритмах шифрования с точки зрения длины ключа можно прочитать в посте на Хабре.
Попрактикуемся: при помощи пакета openssl зашифруем созданный нами ранее текстовый файл. Для этого используем команду:
Для расшифровки нужно указать введённый при шифровании ключ и используемый алгоритм. Команда примерно следующая:
При шифровании симметричными алгоритмами есть несколько интересных проблем.
Такие проблемы обычно решают при помощи асимметричных алгоритмов шифрования.
Асимметричные алгоритмы шифрования
Главное преимущество асимметричного шифрования по сравнению с симметричным — возможность сторон обмениваться данными друг с другом, не используя секретные каналы связи.
Криптографическая система на основе асимметричного шифрования использует открытые (public key) и закрытые (private key) ключи для шифрования и расшифровки данных. Эти ключи образуют ключевую пару, компоненты которой связаны зависимостью, но отличаются друг от друга. Идея в том, что, зная открытый ключ, нельзя из него получить закрытый, хотя алгоритм генерации известен.
Открытый ключ передаётся по незащищённым каналам связи и известен всем. Его можно использовать для шифрования файлов и не только. Для расшифровки применяется закрытый ключ, который хранится в тайне.
У многих асимметричных алгоритмов, особенно тех, что основаны на проблемах теории чисел, минимальная длина ключа для надёжного шифрования — 1024 бит. Это сильно ограничивает их применение — симметричные алгоритмы позволяют с меньшей длиной ключа надёжно зашифровать файлы.
При практической реализации асимметричных алгоритмов обычно используют сертификат. Это файл, хранящий ключ (открытый и закрытый) в определённом формате. Подробнее об этом можно почитать в статье «Формат SSL-сертификата».
Рассмотрим два основных стандарта для реализации сертификатов шифрования.
X.509 — стандарт ITU-T для инфраструктуры открытых ключей. Определяет стандартные форматы данных и процедуры распределения открытых ключей с помощью соответствующих сертификатов с цифровыми подписями. Именно он обычно используется для электронной цифровой подписи (ЭЦП) и шифрования, например, в openssl.
OpenPGP — стандарт, выросший из программы PGP (к середине 90-х годов она распространилась в интернете как надёжное средство шифрования электронной почты). Став стандартом де-факто, PGP начал встраиваться во множество приложений и систем. С особенностями можно ознакомиться на специализированном ресурсе об OpenPGP.
Посмотрим, как это выглядит на практике. Начнём с асимметричных алгоритмов в openssl — для этого в Windows командную строку надо запустить с правами администратора.
Создадим закрытый ключ в виде сертификата. Команда следующая:
Теперь надо извлечь из полученного закрытого ключа публичный. Сделать это можно командой:
Ключ мы получили в виде сертификата в формате pem (ASCII-файл в кодировке base64). Это не единственный формат хранения сертификатов — с другими можно ознакомиться в материале, который уже рекомендовался выше.
Стоит учесть, что таким сертификатом мы не сможем зашифровать объект, превосходящий по размеру сам сертификат. Поэтому поступим хитрее: зашифруем файл симметричным алгоритмом, а ключ шифрования от этого алгоритма зашифруем при помощи сертификата. По шагам:
Вот как это выглядит на практике. Вначале шифруем текстовый файл алгоритмом AES (пароль 123456):
Теперь сохраним наш пароль (123456) в файл pass.txt. И зашифруем файл при помощи сертификата. Команда:
Теперь можем переслать этот файл по открытому каналу связи. Перехват такой информации мало что даст злоумышленнику, если у него нет закрытого ключа. Попробуем расшифровать файл закрытым ключом и извлечь пароль для расшифровки:
Мы получили пароль — теперь с его помощью можно расшифровать файл, который мы с ним зашифровали при помощи алгоритма AES:
Как видим, всё расшифровывается. На практике в такой схеме есть особенность: именно получатель должен генерировать открытый и закрытый ключи. А затем потенциальный получатель должен выслать будущему отправителю свой открытый ключ, которым тот будет шифровать передаваемые данные. Поэтому публичный ключ делают доступным всем. Например, можно использовать серверы хранения ключей в интернете или отправить ключ по почте. Чтобы усилить безопасность, рекомендуется вычислять хеш у передаваемых файлов: так получатель сможет проверить, тот ли файл ему отправили.
В этой статье я показал, как работать с шифрованием файлов. В следующей мы подробнее остановимся на стандарте OpenPGP и научимся использовать шифрование в электронной почте.
Работа с криптографическими алгоритмами — это лишь малая часть одного из курсов факультета информационной безопасности Geek University. Ближайший поток стартует 28 декабря — неплохой подарок на Новый год 😉 Кроме того, до 29 декабря вы сможете выбрать ещё один факультет Geek University для себя или в подарок и получить его бесплатно.
Вы наверняка слышали об опасностях обмена файлами через интернет. В них тайком «подселяют» вредоносный код, который с определёнными правами может натворить на устройстве чёрт-те что. А если речь идёт об обмене важными рабочими файлами, опасность выходит на новый уровень: корпоративные данные сольют, текст договоров подменят — в общем, караул.
Для защиты на этом уровне используются криптографические алгоритмы. Базовая информация о них неплохо изложена в википедии. Если отбросить всю теорию, то обычно рассматривают симметричные, асимметричные и бесключевые криптографические алгоритмы. В первых для шифрования и дешифрования используется один и тот же ключ, во вторых — разные ключи, а в третьих ключи не используются вовсе. Каждый из типов алгоритмов применяется по-своему.
Хеш-функции
Беcключевые алгоритмы обычно используются для вычисления хеш-функций, или функций свёртки. Хеш-функция преобразовывает массив входных данных произвольной длины в выходную битовую строку установленной длины. Прелесть такого преобразования в том, что если объект изменился, то скорректируется и его хеш-функция.
Рассмотрим это на примере утилиты openssl, установленной в Linux. К примеру, у нас есть текстовый файл, содержащий «this is simple text»:
Вычислим от этого файла хеш-функцию при помощи алгоритма md5:
А теперь изменим содержимое файла:
Обратите внимание: мы добавили в файл новую строку («but changed»), вычислили заново хеш от файла, и он стал другим. То есть при любом изменении содержимого файла хеш-функция не останется прежней. Это можно использовать для контроля целостности критических файлов: если их хеш изменится — системному администратору придёт оповещение. Или для проверки, загрузился ли файл полностью: если это так, на сайте опубликуется его хеш.
В Windows для вычисления хеша я рекомендую утилиту Sigcheck из пакета Sysinternals. Для примера вычислим значение хеша md5 от файла PsExec.exe:
Другой вариант — использовать утилиту certutil, предустановленную в Windows. Вычислим с её помощью значение хеша md5 от файла PsExec.exe:
Также можно загрузить пакет openssl для ОС Windows. Качаем архив под нужную архитектуру процессора отсюда, распаковываем его и переходим в консоли в каталог bin. Нам нужен файл openssl.exe:
Теперь нам доступны почти все возможности пакета openssl в Windows. Например, вычислить хеш, как делали в предыдущих примерах для Linux (не забываем про абсолютные и относительные пути к файлам):
Пакет лучше переместить в каталог C:/OpenSSL, а конфигурационный файл openssl.cnf — из каталога bin в каталог OpenSSL. Избежим ошибки, как на скрине выше:
Теперь рассмотрим реализацию криптографических алгоритмов.
Симметричные криптоалгоритмы
Если говорить упрощённо, то симметричные алгоритмы шифрования применяют один ключ для шифрования и дешифрования. Таких алгоритмов много, и на практике обычно применяют те, которые имеют достаточную длину ключа и ещё не были скомпрометированы. Симметричные алгоритмы делятся на блочные (DES, RC2, Blowfish, AES, «Кузнечик» и т. д.) и потоковые (RC4, SEAL, CryptMT и другие).
Стойкость к взлому у всех блочных криптографических алгоритмов во многом определяется длиной ключа. Если она составляет 128 бит и более, шифрование считается сильным, так как для расшифровки информации без ключа потребуются годы работы на мощных компьютерах. Кому любопытно — об алгоритмах шифрования с точки зрения длины ключа можно прочитать в посте на Хабре.
Попрактикуемся: при помощи пакета openssl зашифруем созданный нами ранее текстовый файл. Для этого используем команду:
Для расшифровки нужно указать введённый при шифровании ключ и используемый алгоритм. Команда примерно следующая:
При шифровании симметричными алгоритмами есть несколько интересных проблем.
Такие проблемы обычно решают при помощи асимметричных алгоритмов шифрования.
Асимметричные алгоритмы шифрования
Главное преимущество асимметричного шифрования по сравнению с симметричным — возможность сторон обмениваться данными друг с другом, не используя секретные каналы связи.
Криптографическая система на основе асимметричного шифрования использует открытые (public key) и закрытые (private key) ключи для шифрования и расшифровки данных. Эти ключи образуют ключевую пару, компоненты которой связаны зависимостью, но отличаются друг от друга. Идея в том, что, зная открытый ключ, нельзя из него получить закрытый, хотя алгоритм генерации известен.
Открытый ключ передаётся по незащищённым каналам связи и известен всем. Его можно использовать для шифрования файлов и не только. Для расшифровки применяется закрытый ключ, который хранится в тайне.
У многих асимметричных алгоритмов, особенно тех, что основаны на проблемах теории чисел, минимальная длина ключа для надёжного шифрования — 1024 бит. Это сильно ограничивает их применение — симметричные алгоритмы позволяют с меньшей длиной ключа надёжно зашифровать файлы.
При практической реализации асимметричных алгоритмов обычно используют сертификат. Это файл, хранящий ключ (открытый и закрытый) в определённом формате. Подробнее об этом можно почитать в статье «Формат SSL-сертификата».
Рассмотрим два основных стандарта для реализации сертификатов шифрования.
X.509 — стандарт ITU-T для инфраструктуры открытых ключей. Определяет стандартные форматы данных и процедуры распределения открытых ключей с помощью соответствующих сертификатов с цифровыми подписями. Именно он обычно используется для электронной цифровой подписи (ЭЦП) и шифрования, например, в openssl.
OpenPGP — стандарт, выросший из программы PGP (к середине 90-х годов она распространилась в интернете как надёжное средство шифрования электронной почты). Став стандартом де-факто, PGP начал встраиваться во множество приложений и систем. С особенностями можно ознакомиться на специализированном ресурсе об OpenPGP.
Посмотрим, как это выглядит на практике. Начнём с асимметричных алгоритмов в openssl — для этого в Windows командную строку надо запустить с правами администратора.
Создадим закрытый ключ в виде сертификата. Команда следующая:
Теперь надо извлечь из полученного закрытого ключа публичный. Сделать это можно командой:
Ключ мы получили в виде сертификата в формате pem (ASCII-файл в кодировке base64). Это не единственный формат хранения сертификатов — с другими можно ознакомиться в материале, который уже рекомендовался выше.
Стоит учесть, что таким сертификатом мы не сможем зашифровать объект, превосходящий по размеру сам сертификат. Поэтому поступим хитрее: зашифруем файл симметричным алгоритмом, а ключ шифрования от этого алгоритма зашифруем при помощи сертификата. По шагам:
Вот как это выглядит на практике. Вначале шифруем текстовый файл алгоритмом AES (пароль 123456):
Теперь сохраним наш пароль (123456) в файл pass.txt. И зашифруем файл при помощи сертификата. Команда:
Теперь можем переслать этот файл по открытому каналу связи. Перехват такой информации мало что даст злоумышленнику, если у него нет закрытого ключа. Попробуем расшифровать файл закрытым ключом и извлечь пароль для расшифровки:
Мы получили пароль — теперь с его помощью можно расшифровать файл, который мы с ним зашифровали при помощи алгоритма AES:
Как видим, всё расшифровывается. На практике в такой схеме есть особенность: именно получатель должен генерировать открытый и закрытый ключи. А затем потенциальный получатель должен выслать будущему отправителю свой открытый ключ, которым тот будет шифровать передаваемые данные. Поэтому публичный ключ делают доступным всем. Например, можно использовать серверы хранения ключей в интернете или отправить ключ по почте. Чтобы усилить безопасность, рекомендуется вычислять хеш у передаваемых файлов: так получатель сможет проверить, тот ли файл ему отправили.
В этой статье я показал, как работать с шифрованием файлов. В следующей мы подробнее остановимся на стандарте OpenPGP и научимся использовать шифрование в электронной почте.
Работа с криптографическими алгоритмами — это лишь малая часть одного из курсов факультета информационной безопасности Geek University. Ближайший поток стартует 28 декабря — неплохой подарок на Новый год 😉 Кроме того, до 29 декабря вы сможете выбрать ещё один факультет Geek University для себя или в подарок и получить его бесплатно.