Способы шифрования текстовых файлов

Как зашифровать любые данные. Часть 2

Шифрование электронных писем

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

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

После того, как вы получили, или обменялись цифровыми идентификаторами, вы можете отослать зашифрованное сообщение, используя меню Файл -> Параметры -> Центр управления безопасностью -> Параметры центра управления безопасностью -> Защита электронной почты и выберете опцию «Шифровать содержимое и вложения исходящих сообщений».

Шифрование сообщений Gmail

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

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

Шифрование документов Word, Excel и PowerPoint

В Microsoft Office 2013 и 2010 существуют встроенные инструменты для шифрования документов. Для доступа к ним перейдите в меню «Файл», выберите вкладку «Сведения» и затем нажмите на кнопку «Защита документа».

Наконец, выберите опцию «Зашифровать с использованием пароля».» и задайте безопасный пароль для файла. Теперь для дешифрования документа потребуется ввести пароль. Помните, что безопаснее отправлять сам документ и пароль разными каналами.

Шифрование файлов PDF

Шифрование записей Evernote

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

Для этого нужно открыть заметку, выделить требуемую информацию и вызвать контекстное меню правой кнопкой мыши. В всплывающем меню выберите опцию «Зашифровать выделенный текст (Encrypt selected text)» и задайте пароль. Evernote спрячет выбранную информацию с помощью иконки замка. Для повторного доступа к этим данным, сделайте двойной клик по иконке и введите пароль.

Шифрование любых других данных

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

Для использования TrueCrypt загрузите дистрибутив и пройдите несложную процедуру установки приложения. Затем запустите TrueCrypt и выберите в меню «Тома» опцию «Создать новый том». Появится мастер создания томов TrueCrypt, который будет сопровождать пользователя во время процедуры создания тома. В первых двух диалоговых окнах, оставьте все настройки по умолчанию и нажмите «Далее». Третье окно запросит местоположение нового тома – место, где будет храниться зашифрованная информация на жестком диске. Выберите соответствующее местоположение, используя кнопку «Файл» и введите соответствующее имя в поле «Имя файла».

Следующее диалоговое окно запросит настройки шифрования. Оставим настройки по умолчанию и нажмем «Далее». Потом Вам нужно указать размер тома. Все файлы после шифрования будут помещаться именно в этот раздел, поэтому выберите необходимый объем пространства. Если нужно хранить только текстовые документы — 500MB будет достаточно, но для хранения большого объема мультимедийных файлов потребуется как минимум несколько гигабайт. Наконец программа запросит пароль – введите безопасный пароль.

На этом процесс настройки программы закончится, нажимаем «Далее», затем «Разметить» и начнется процесс форматирования тома.

Теперь, когда раздел создан, его можно использовать для хранения и шифрования файлов. В окне TrueCrypt выберите опцию «Файл» и выберите только что созданный раздел. Затем выберите букву диска и нажмите опцию вставить «Смонтировать». После ввода пароля TrueCrypt создаст виртуальный логический диск, с которым можно полноценно работать как с обычным жестким диском. Вы можете обращаться к нему с любого другого диска с помощью Проводника Windows или любого другого файлового менеджера.

Просто перетаскивайте файлы, которые нужно зашифровать на этот виртуальный диск. После завершения операции нажмите опцию извлечь «Размонтировать» в окне TrueCrypt. Файлы, сохраненные на виртуальном диске являются зашифрованными и хранятся на ранее созданном разделе. Для повторного доступа к ним, запустите TrueCrypt и смонтируйте соответствующий том.

По материалам интернет-портала PCWorld

Источник

10 популярных кодов и шифров

Авторизуйтесь

10 популярных кодов и шифров

Коды и шифры — не одно и то же: в коде каждое слово заменяется другим, в то время как в шифре заменяются все символы сообщения.

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

Стандартные шифры

Этот шифр известен многим детям. Ключ прост: каждая буква заменяется на следующую за ней в алфавите. Так, А заменяется на Б, Б — на В, и т. д. Фраза «Уйрйшоьк Рспдсбннйту» — это «Типичный Программист».

Попробуйте расшифровать сообщение:

Сумели? Напишите в комментариях, что у вас получилось.

Шифр транспонирования

В транспозиционном шифре буквы переставляются по заранее определённому правилу. Например, если каждое слово пишется задом наперед, то из hello world получается dlrow olleh. Другой пример — менять местами каждые две буквы. Таким образом, предыдущее сообщение станет eh ll wo ro dl.

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

Из этого способа мы получим шифр holewdlo lr. А вот столбчатая транспозиция, реализованная программно:

Азбука Морзе

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

Сможете расшифровать сообщение, используя картинку?

Шифр Цезаря

Это не один шифр, а целых 26, использующих один принцип. Так, ROT1 — лишь один из вариантов шифра Цезаря. Получателю нужно просто сообщить, какой шаг использовался при шифровании: если ROT2, тогда А заменяется на В, Б на Г и т. д.

А здесь использован шифр Цезаря с шагом 5:

Моноалфавитная замена

Коды и шифры также делятся на подгруппы. Например, ROT1, азбука Морзе, шифр Цезаря относятся к моноалфавитной замене: каждая буква заменяется на одну и только одну букву или символ. Такие шифры очень легко расшифровываются с помощью частотного анализа.

Читайте также:  Способы оценки экономической эффективности организации

Например, наиболее часто встречающаяся буква в английском алфавите — «E». Таким образом, в тексте, зашифрованном моноалфавитным шрифтом, наиболее часто встречающейся буквой будет буква, соответствующая «E». Вторая наиболее часто встречающаяся буква — это «T», а третья — «А».

Однако этот принцип работает только для длинных сообщений. Короткие просто не содержат в себе достаточно слов.

Шифр Виженера

Представим, что есть таблица по типу той, что на картинке, и ключевое слово «CHAIR». Шифр Виженера использует принцип шифра Цезаря, только каждая буква меняется в соответствии с кодовым словом.

В нашем случае первая буква послания будет зашифрована согласно шифровальному алфавиту для первой буквы кодового слова «С», вторая буква — для «H», etc. Если послание длиннее кодового слова, то для (k*n+1)-ой буквы, где n — длина кодового слова, вновь будет использован алфавит для первой буквы кодового слова.

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

Попробуйте расшифровать эту фразу самостоятельно:

Подсказка длина кодового слова — 4.

Шифр Энигмы

Энигма — это машина, которая использовалась нацистами во времена Второй Мировой для шифрования сообщений.

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

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

Цифровые шифры

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

Двоичный код

Текстовые данные вполне можно хранить и передавать в двоичном коде. В этом случае по таблице символов (чаще всего ASCII) каждое простое число из предыдущего шага сопоставляется с буквой: 01100001 = 97 = «a», 01100010 = 98 = «b», etc. При этом важно соблюдение регистра.

Расшифруйте следующее сообщение, в котором использована кириллица:

Шифр A1Z26

Это простая подстановка, где каждая буква заменена её порядковым номером в алфавите. Только нижний регистр.

Попробуйте определить, что здесь написано:

Шифрование публичным ключом

Алгоритм шифрования, применяющийся сегодня буквально во всех компьютерных системах. Есть два ключа: открытый и секретный. Открытый ключ — это большое число, имеющее только два делителя, помимо единицы и самого себя. Эти два делителя являются секретным ключом, и при перемножении дают публичный ключ. Например, публичный ключ — это 1961, а секретный — 37 и 53.

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

Как-то RSA выделила 1000 $ в качестве приза тому, кто найдет два пятидесятизначных делителя числа:

Как расшифровать код или шифр?

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

Источник

Как защитить файлы от злоумышленников: осваиваем шифрование

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

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

Хеш-функции

Бе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 зашифруем созданный нами ранее текстовый файл. Для этого используем команду:

openssl enc -e -aes256 -in simpletext.txt -out simple_enc_text.txt

  • enc — указывает модуль для шифрования;
  • -e — указывает, что файлы нужно шифровать;
  • -aes256 — алгоритм шифрования;
  • -in — указывает на исходный файл;
  • -out — указывает на зашифрованный файл.

Выглядит это так:

Для расшифровки нужно указать введённый при шифровании ключ и используемый алгоритм. Команда примерно следующая:

openssl enc -d-aes256 -in simple_enc_text.txt -out simpletext.txt

  • enc — указывает модуль для шифрования;
  • -d — указывает, что файлы нужно расшифровать;
  • -aes256 — алгоритм шифрования;
  • -in — указывает на исходный файл;
  • -out — указывает на расшифрованный файл.

При шифровании симметричными алгоритмами есть несколько интересных проблем.

  • Длина ключа. Как уже упоминали, желательно не менее 128 бит
  • Сложность использования при большом количестве шифруемых объектов — приходится запоминать много параметров.
  • Сложность обмена параметрами шифрования (паролями, алгоритмами и подобным) — необходимо обеспечить их надёжную передачу адресату.

Такие проблемы обычно решают при помощи асимметричных алгоритмов шифрования.

Асимметричные алгоритмы шифрования

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

Криптографическая система на основе асимметричного шифрования использует открытые (public key) и закрытые (private key) ключи для шифрования и расшифровки данных. Эти ключи образуют ключевую пару, компоненты которой связаны зависимостью, но отличаются друг от друга. Идея в том, что, зная открытый ключ, нельзя из него получить закрытый, хотя алгоритм генерации известен.

Читайте также:  Способ режима твердения бетона

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

У многих асимметричных алгоритмов, особенно тех, что основаны на проблемах теории чисел, минимальная длина ключа для надёжного шифрования — 1024 бит. Это сильно ограничивает их применение — симметричные алгоритмы позволяют с меньшей длиной ключа надёжно зашифровать файлы.

При практической реализации асимметричных алгоритмов обычно используют сертификат. Это файл, хранящий ключ (открытый и закрытый) в определённом формате. Подробнее об этом можно почитать в статье «Формат SSL-сертификата».

Рассмотрим два основных стандарта для реализации сертификатов шифрования.

X.509 — стандарт ITU-T для инфраструктуры открытых ключей. Определяет стандартные форматы данных и процедуры распределения открытых ключей с помощью соответствующих сертификатов с цифровыми подписями. Именно он обычно используется для электронной цифровой подписи (ЭЦП) и шифрования, например, в openssl.

OpenPGP — стандарт, выросший из программы PGP (к середине 90-х годов она распространилась в интернете как надёжное средство шифрования электронной почты). Став стандартом де-факто, PGP начал встраиваться во множество приложений и систем. С особенностями можно ознакомиться на специализированном ресурсе об OpenPGP.

Посмотрим, как это выглядит на практике. Начнём с асимметричных алгоритмов в openssl — для этого в Windows командную строку надо запустить с правами администратора.

Создадим закрытый ключ в виде сертификата. Команда следующая:

openssl genrsa -aes256 -out private.pem 8912

  • genrsa — указывает, что мы используем модуль для генерации закрытого ключа на основе алгоритма RSA;
  • -aes256 — указывает на алгоритм AES для шифрования сертификата;
  • -out private.pem — файл для сохранения сертификата;
  • 8912 — размер ключа.

Теперь надо извлечь из полученного закрытого ключа публичный. Сделать это можно командой:

openssl rsa -in private.pem -pubout -out public.pem

  • rsa — модуль для работы с RSA;
  • -in private.pem — задаёт путь к закрытому ключу, из которого извлечём открытый;
  • -pubout — извлекает публичный ключ;
  • -out public.pem — имя файла для полученного открытого ключа.

Ключ мы получили в виде сертификата в формате pem (ASCII-файл в кодировке base64). Это не единственный формат хранения сертификатов — с другими можно ознакомиться в материале, который уже рекомендовался выше.

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

  1. Генерируем сертификаты (пару из открытого и закрытого ключа).
  2. Шифруем текст симметричным алгоритмом AES (его вроде бы ещё не взломали). Предположим, получим файл enc.1.
  3. Далее выбранный для шифрования пароль шифруем публичным ключом (предположим, получим файл enc.2).
  4. Теперь можно передать зашифрованный файл enc.1 и файл enc.2 по незащищённому каналу связи.
  5. На другом конце у получателя должна быть вторая часть ключа (закрытый ключ). Ей он вначале расшифровывает файл enc.2 и извлекает оттуда пароль для дешифровки файла enc.1.
  6. Profit!

Вот как это выглядит на практике. Вначале шифруем текстовый файл алгоритмом AES (пароль 123456):

Теперь сохраним наш пароль (123456) в файл pass.txt. И зашифруем файл при помощи сертификата. Команда:

openssl rsautl -encrypt -inkey public.pem -pubin -in pass.txt -out pass.ssl

  • rsautl — включаем модуль для шифрования, дешифрования и подписывания данных алгоритмом RSA;
  • -inkey public.pem — указывает путь к открытому ключу;
  • -pubin — указывает, что файл ключа является публичным ключом;
  • -in pass.txt — файл для шифрования;
  • -out pass.ssl — выходной зашифрованный файл.

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

Мы получили пароль — теперь с его помощью можно расшифровать файл, который мы с ним зашифровали при помощи алгоритма 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 зашифруем созданный нами ранее текстовый файл. Для этого используем команду:

openssl enc -e -aes256 -in simpletext.txt -out simple_enc_text.txt

  • enc — указывает модуль для шифрования;
  • -e — указывает, что файлы нужно шифровать;
  • -aes256 — алгоритм шифрования;
  • -in — указывает на исходный файл;
  • -out — указывает на зашифрованный файл.

Выглядит это так:

Для расшифровки нужно указать введённый при шифровании ключ и используемый алгоритм. Команда примерно следующая:

openssl enc -d-aes256 -in simple_enc_text.txt -out simpletext.txt

  • enc — указывает модуль для шифрования;
  • -d — указывает, что файлы нужно расшифровать;
  • -aes256 — алгоритм шифрования;
  • -in — указывает на исходный файл;
  • -out — указывает на расшифрованный файл.

При шифровании симметричными алгоритмами есть несколько интересных проблем.

  • Длина ключа. Как уже упоминали, желательно не менее 128 бит
  • Сложность использования при большом количестве шифруемых объектов — приходится запоминать много параметров.
  • Сложность обмена параметрами шифрования (паролями, алгоритмами и подобным) — необходимо обеспечить их надёжную передачу адресату.

Такие проблемы обычно решают при помощи асимметричных алгоритмов шифрования.

Асимметричные алгоритмы шифрования

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

Криптографическая система на основе асимметричного шифрования использует открытые (public key) и закрытые (private key) ключи для шифрования и расшифровки данных. Эти ключи образуют ключевую пару, компоненты которой связаны зависимостью, но отличаются друг от друга. Идея в том, что, зная открытый ключ, нельзя из него получить закрытый, хотя алгоритм генерации известен.

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

У многих асимметричных алгоритмов, особенно тех, что основаны на проблемах теории чисел, минимальная длина ключа для надёжного шифрования — 1024 бит. Это сильно ограничивает их применение — симметричные алгоритмы позволяют с меньшей длиной ключа надёжно зашифровать файлы.

При практической реализации асимметричных алгоритмов обычно используют сертификат. Это файл, хранящий ключ (открытый и закрытый) в определённом формате. Подробнее об этом можно почитать в статье «Формат SSL-сертификата».

Рассмотрим два основных стандарта для реализации сертификатов шифрования.

X.509 — стандарт ITU-T для инфраструктуры открытых ключей. Определяет стандартные форматы данных и процедуры распределения открытых ключей с помощью соответствующих сертификатов с цифровыми подписями. Именно он обычно используется для электронной цифровой подписи (ЭЦП) и шифрования, например, в openssl.

OpenPGP — стандарт, выросший из программы PGP (к середине 90-х годов она распространилась в интернете как надёжное средство шифрования электронной почты). Став стандартом де-факто, PGP начал встраиваться во множество приложений и систем. С особенностями можно ознакомиться на специализированном ресурсе об OpenPGP.

Посмотрим, как это выглядит на практике. Начнём с асимметричных алгоритмов в openssl — для этого в Windows командную строку надо запустить с правами администратора.

Создадим закрытый ключ в виде сертификата. Команда следующая:

openssl genrsa -aes256 -out private.pem 8912

  • genrsa — указывает, что мы используем модуль для генерации закрытого ключа на основе алгоритма RSA;
  • -aes256 — указывает на алгоритм AES для шифрования сертификата;
  • -out private.pem — файл для сохранения сертификата;
  • 8912 — размер ключа.

Теперь надо извлечь из полученного закрытого ключа публичный. Сделать это можно командой:

openssl rsa -in private.pem -pubout -out public.pem

  • rsa — модуль для работы с RSA;
  • -in private.pem — задаёт путь к закрытому ключу, из которого извлечём открытый;
  • -pubout — извлекает публичный ключ;
  • -out public.pem — имя файла для полученного открытого ключа.

Ключ мы получили в виде сертификата в формате pem (ASCII-файл в кодировке base64). Это не единственный формат хранения сертификатов — с другими можно ознакомиться в материале, который уже рекомендовался выше.

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

  1. Генерируем сертификаты (пару из открытого и закрытого ключа).
  2. Шифруем текст симметричным алгоритмом AES (его вроде бы ещё не взломали). Предположим, получим файл enc.1.
  3. Далее выбранный для шифрования пароль шифруем публичным ключом (предположим, получим файл enc.2).
  4. Теперь можно передать зашифрованный файл enc.1 и файл enc.2 по незащищённому каналу связи.
  5. На другом конце у получателя должна быть вторая часть ключа (закрытый ключ). Ей он вначале расшифровывает файл enc.2 и извлекает оттуда пароль для дешифровки файла enc.1.
  6. Profit!

Вот как это выглядит на практике. Вначале шифруем текстовый файл алгоритмом AES (пароль 123456):

Теперь сохраним наш пароль (123456) в файл pass.txt. И зашифруем файл при помощи сертификата. Команда:

openssl rsautl -encrypt -inkey public.pem -pubin -in pass.txt -out pass.ssl

  • rsautl — включаем модуль для шифрования, дешифрования и подписывания данных алгоритмом RSA;
  • -inkey public.pem — указывает путь к открытому ключу;
  • -pubin — указывает, что файл ключа является публичным ключом;
  • -in pass.txt — файл для шифрования;
  • -out pass.ssl — выходной зашифрованный файл.

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

Мы получили пароль — теперь с его помощью можно расшифровать файл, который мы с ним зашифровали при помощи алгоритма AES:

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

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

Работа с криптографическими алгоритмами — это лишь малая часть одного из курсов факультета информационной безопасности Geek University. Ближайший поток стартует 28 декабря — неплохой подарок на Новый год 😉 Кроме того, до 29 декабря вы сможете выбрать ещё один факультет Geek University для себя или в подарок и получить его бесплатно.

Источник

Оцените статью
Разные способы