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

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

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

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

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


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL wireshark(("Wireshark")) -.-> wireshark/WiresharkGroup(["Wireshark"]) wireshark/WiresharkGroup -.-> wireshark/decrypt_ssl_tls("Decrypting SSL/TLS") subgraph Lab Skills wireshark/decrypt_ssl_tls -.-> lab-549935{{"Шифрование файлов в OpenSSL"}} end

Установка OpenSSL

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

Перед началом важно понимать, что OpenSSL обычно уже установлен по умолчанию в большинстве дистрибутивов Linux. Однако мы пройдем по процессу установки, чтобы убедиться, что у вас установлена правильная версия и все необходимые компоненты. Вот что мы будем делать:

  1. Сначала нам нужно обновить список пакетов. Это гарантирует, что ваша система знает о последних доступных версиях программного обеспечения:

    sudo apt update
  2. Теперь мы установим OpenSSL. Флаг -y автоматически подтверждает установку, не требуя от вас вводить 'yes' в процессе:

    sudo apt install openssl -y
  3. После установки проверим, что все прошло успешно, проверив версию. Эта команда показывает, какая версия OpenSSL в настоящее время активна на вашей системе:

    openssl version

    Вы должны увидеть вывод, похожий на следующий:

    OpenSSL 3.0.2 15 Mar 2022 (Library: OpenSSL 3.0.2 15 Mar 2022)
  4. Наконец, мы проверим меню справки. Это отображает все доступные команды OpenSSL и подтверждает, что установка работает корректно:

    openssl help

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

Создание примерного файла

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

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

  1. Сначала перейдите в вашу проектную директорию. Это обеспечит правильную организацию всех ваших файлов в одном месте:

    cd ~/project
  2. Теперь создайте и откройте новый файл с именем sample.txt с помощью nano:

    nano sample.txt
  3. Когда nano откроется, вы увидите пустое редактируемое пространство. Введите следующие две строки именно так, как показано:

    This is a sample text file for encryption testing.
    LabEx Cybersecurity Lab - AES Encryption Demo.
  4. Чтобы сохранить свои изменения в nano:

    • Нажмите Ctrl+O (буква O, а не ноль) для "записи" (сохранения) файла.
    • Нажмите Enter, чтобы подтвердить имя файла sample.txt.
    • Нажмите Ctrl+X, чтобы выйти из редактора.
  5. Давайте проверим, что файл был создан правильно, отобразив его содержимое:

    cat sample.txt

    Терминал должен показать ровно те две строки, которые вы ввели. Если что-то выглядит по-другому, вам, возможно, придется отредактировать файл еще раз.

  6. Наконец, проверьте детали файла, чтобы убедиться, что он существует и содержит контент:

    ls -l sample.txt

    Эта команда показывает разрешения файла, владельца, размер и другие детали. Ненулевой размер (обычно 80 - 100 байт) подтверждает, что ваш текст был сохранен правильно.

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

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

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

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

Следуйте этим шагам внимательно, чтобы сгенерировать надежный ключ шифрования AES-256:

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

    cd ~/project
  2. Теперь сгенерируем сам ключ. Команда openssl rand создает криптографически надежные случайные данные. Мы запрашиваем 32 байта (256 бит) случайных данных и форматируем их в шестнадцатеричном виде (основание 16) для удобства чтения:

    openssl rand -hex 32 > symmetric_key.hex
  3. Посмотрим на сгенерированный ключ, чтобы убедиться, что он был создан правильно. Ключ должен выглядеть как длинная строка случайных символов:

    cat symmetric_key.hex

    Вы должны увидеть шестнадцатеричную строку из 64 символов (представляющую 32 байта), похожую на следующую:

    a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890
  4. Поскольку этот ключ может разблокировать ваши зашифрованные данные, нам нужно его защитить. Команда chmod 600 гарантирует, что только вы можете читать или записывать в этот файл:

    chmod 600 symmetric_key.hex
  5. Наконец, проверим свойства файла с ключом, чтобы убедиться, что все настроено правильно:

    ls -l symmetric_key.hex

    Вывод должен показать:

    • Ваше имя пользователя в качестве владельца
    • -rw------- права доступа (только вы можете читать/писать)
    • Размер 65 байт (64 символа + символ новой строки)

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

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

На этом этапе вы будете использовать симметричный ключ, сгенерированный на предыдущем этапе, для шифрования вашего примерного файла с помощью алгоритма AES-256-CBC. AES (Advanced Encryption Standard, Стандарт продвинутого шифрования) - это широко используемый симметричный алгоритм шифрования, обеспечивающий высокий уровень безопасности. Длина ключа в 256 бит обеспечивает надежную защиту, а режим CBC (Cipher Block Chaining, Режим сцепления блоков шифротекста) гарантирует последовательную и безопасную обработку каждого блока данных.

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

Следуйте этим шагам, чтобы зашифровать ваш файл:

  1. Сначала убедитесь, что вы находитесь в правильной рабочей директории, где расположен ваш примерный файл. Это важно, так как OpenSSL должен найти как входной файл, так и файл с ключом:

    cd ~/project
  2. Теперь мы будем использовать команду шифрования OpenSSL. Параметр -aes-256-cbc указывает алгоритм, -in указывает на наш входной файл, -out определяет, куда сохранить зашифрованную версию, а -pass file: сообщает OpenSSL, где найти ключ шифрования:

    openssl enc -aes-256-cbc -in sample.txt -out sample.enc -pass file:symmetric_key.hex
  3. После выполнения команды шифрования проверим, что зашифрованный файл был создан правильно. Зашифрованный файл должен быть немного больше исходного, так как процесс шифрования добавляет дополнительные данные:

    ls -l sample.enc

    Вывод должен показать:

    • Ваше имя пользователя в качестве владельца
    • Размер файла, больший, чем у исходного (из-за накладных расходов на шифрование)
  4. Чтобы убедиться, что шифрование прошло успешно, попробуем просмотреть зашифрованное содержимое. В отличие от исходного текстового файла, это должно выглядеть как случайные бинарные данные, так как оно теперь надежно зашифровано:

    cat sample.enc

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

  5. Для дополнительной проверки мы можем проверить, как система определяет тип файла. Команда file анализирует содержимое файла, чтобы определить его тип:

    file sample.enc

    Вывод должен показать, что это "данные" (а не "ASCII-текст", как исходный файл), что соответствует ожиданиям для зашифрованного файла.

Дешифрование и проверка файла

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

Следуйте этим шагам, чтобы расшифровать и проверить ваш файл:

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

    cd ~/project
  2. Расшифруйте зашифрованный файл с использованием того же симметричного ключа. Флаг -d сообщает OpenSSL, что мы выполняем дешифрование, а остальные параметры совпадают с теми, которые были использованы при шифровании:

    openssl enc -d -aes-256-cbc -in sample.enc -out sample.dec -pass file:symmetric_key.hex
  3. Проверьте, что расшифрованный файл был создан. Команда ls -l показывает подробную информацию о файле, включая его размер и время создания:

    ls -l sample.dec
  4. Сравните расшифрованный файл с исходным. Команда diff проверяет наличие различий между файлами построчно:

    diff sample.txt sample.dec

    Если файлы идентичны (как и должно быть), этой команды не будет выводить никакой результат. Любой вывод будет указывать на несоответствие между исходным и расшифрованным содержимым.

  5. Просмотрите расшифрованное содержимое, чтобы убедиться, что оно совпадает с исходным. Команда cat отображает все содержимое файла в вашем терминале:

    cat sample.dec

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

  6. Для дополнительной проверки проверьте тип файла. Команда file анализирует содержимое файла, чтобы определить его тип:

    file sample.dec

    Вывод должен показать, что это "ASCII-текст", как и исходный файл, подтверждая, что дешифрование успешно восстановило файл в его исходный текстовый формат.

Резюме

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

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