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

LinuxBeginner
Практиковаться сейчас

Введение

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

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

Установка и проверка OpenSSL

На этом этапе вы установите OpenSSL — мощный инструментарий для реализации защищенных коммуникаций. Хотя OpenSSL часто предустановлен в дистрибутивах Linux, этот шаг необходим, чтобы убедиться в его наличии и готовности к работе.

Сначала проверьте наличие OpenSSL, узнав установленную версию.

openssl version

Вы должны увидеть вывод, похожий на следующий, указывающий версию OpenSSL в вашей системе.

OpenSSL 3.0.2 15 Mar 2022 (Library: OpenSSL 3.0.2 15 Mar 2022)

Наконец, вы можете вызвать справку, чтобы просмотреть список доступных команд и подтвердить корректную работу OpenSSL.

openssl help

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

Создание тестового файла для шифрования

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

Ваш терминал уже должен находиться в директории /home/labex/project. Мы создадим файл именно здесь.

Сначала воспользуйтесь текстовым редактором nano, чтобы создать новый файл с именем sample.txt.

nano sample.txt

Когда nano откроется, введите в редакторе следующий текст:

This is a sample text file for encryption testing.
LabEx Cybersecurity Lab - AES Encryption Demo.

Теперь сохраните файл и выйдите из nano:

  1. Нажмите Ctrl + O, чтобы записать изменения в файл.
  2. Нажмите Enter, чтобы подтвердить имя файла (sample.txt).
  3. Нажмите Ctrl + X, чтобы выйти из редактора.

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

cat sample.txt

Вывод должен в точности соответствовать введенному тексту:

This is a sample text file for encryption testing.
LabEx Cybersecurity Lab - AES Encryption Demo.

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

Генерация симметричного ключа шифрования

На этом этапе вы сгенерируете симметричный ключ — секретный ключ, используемый как для шифрования, так и для расшифровки данных. Мы будем использовать OpenSSL для создания надежного случайного ключа, подходящего для шифрования AES-256, которое является высокозащищенным и общепринятым стандартом.

Убедитесь, что вы находитесь в директории проекта /home/labex/project.

cd ~/project

Используйте команду openssl rand, чтобы сгенерировать 32 байта (256 бит) случайных данных и сохранить их в шестнадцатеричном формате в файл с именем symmetric_key.hex.

openssl rand -hex 32 > symmetric_key.hex

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

cat symmetric_key.hex

Результатом будет 64-символьная шестнадцатеричная строка, представляющая ваш 256-битный ключ. Она будет выглядеть примерно так (ваш ключ будет уникальным):

2f8b5e9a1c3d4e6f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f

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

chmod 600 symmetric_key.hex

Наконец, проверьте права доступа к файлу с помощью ls -l.

ls -l symmetric_key.hex

Вывод должен показывать права -rw-------, что подтверждает защищенность файла.

-rw------- 1 labex labex 65 Nov 15 10:30 symmetric_key.hex

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

Шифрование файла с помощью AES

Теперь вы воспользуетесь симметричным ключом для шифрования sample.txt. Мы применим алгоритм шифрования AES-256-CBC. AES (Advanced Encryption Standard) с 256-битным ключом является стойким алгоритмом, а CBC (Cipher Block Chaining) — это режим работы, который повышает безопасность, делая каждый зашифрованный блок зависимым от предыдущего.

Команда openssl enc отвечает за шифрование. Мы укажем алгоритм, входной файл, выходной файл и файл ключа.

Выполните следующую команду, чтобы зашифровать sample.txt и сохранить результат в sample.enc.

openssl enc -aes-256-cbc -in sample.txt -out sample.enc -pass file:symmetric_key.hex
  • -aes-256-cbc: Указывает алгоритм шифрования.
  • -in sample.txt: Входной файл для шифрования.
  • -out sample.enc: Имя выходного (зашифрованного) файла.
  • -pass file:symmetric_key.hex: Указывает OpenSSL использовать содержимое symmetric_key.hex в качестве пароля (ключа).

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

ls -l

Вы заметите, что sample.enc немного больше по размеру, чем sample.txt, из-за дополнительных данных шифрования, таких как дополнение (padding) и метаданные.

total 12
-rw-r--r-- 1 labex labex   96 Nov 15 10:35 sample.enc
-rw-r--r-- 1 labex labex   89 Nov 15 10:20 sample.txt
-rw------- 1 labex labex   65 Nov 15 10:30 symmetric_key.hex

Если вы попытаетесь просмотреть содержимое зашифрованного файла, вы увидите нечитаемые бинарные данные.

cat sample.enc

Неразборчивый вывод подтверждает, что файл был успешно зашифрован.

Расшифровка файла и проверка целостности

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

Для расшифровки файла снова используйте команду openssl enc, но на этот раз с флагом -d, который обозначает дешифрование.

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

openssl enc -d -aes-256-cbc -in sample.enc -out sample.dec -pass file:symmetric_key.hex

Теперь давайте убедимся, что расшифровка прошла успешно. Лучший способ проверить это — сравнить расшифрованный файл (sample.dec) с оригиналом (sample.txt). Для этого идеально подходит команда diff.

diff sample.txt sample.dec

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

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

cat sample.dec

Вывод должен быть точно таким же, как в вашем исходном файле sample.txt:

This is a sample text file for encryption testing.
LabEx Cybersecurity Lab - AES Encryption Demo.

Вы успешно зашифровали файл и вернули его в исходный вид с помощью OpenSSL.

Резюме

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