OpenSSL: простое шифрование файлов с использованием пароля

Jun 22, 2017 08:32 · 344 words · 2 minute read ssl

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

Давайте разберемся, как шифровать и расшифровывать файлы с помощью пароля из командной строки Linux используя OpenSSL!

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

Для шифрования данных используется команда:

openssl enc -aes-256-cbc -salt -in file.txt -out file.txt.enc

Здесь:

  • openssl — утилита командной строки;
  • enc — использовать алгоритм симметричного шифрования;
  • -aes-256-cbc — использовать алгоритм AES с длиной ключа 256 бит;
  • -salt — «соль» для увеличения стойкости шифрования (обязательна при использовании пароля);
  • -in file.txt — входной файл для шифрования;
  • -out file.txt.enc — выходной (зашифрованный) файл.

Примечание. По умолчанию, пользователю предлагается вводить пароль в интерактивном режиме.

Для расшифровки данных нужно использовать:

openssl enc -aes-256-cbc -d -in file.txt.enc -out file.txt

Здесь:

  • openssl — утилита командной строки;
  • enc — использовать алгоритм симметричного шифрования;
  • -aes-256-cbc — использовать алгоритм AES с длиной ключа 256 бит;
  • -d — расшифровать (decrypt);
  • -in file.txt.enc — входной (зашифрованный) файл;
  • -out file.txt — выходной (расшифрованный) файл.

Но выполнять шифрование файлов в ручном режиме не совсем удобно — хочется все «обернуть» в bash-скрипт, который будет шифровать нужные данные. А чтобы не вводить пароль, который используется при шифровании/расшифровке, можно использовать дополнительную опцию -pass или -k:

openssl enc -aes-256-cbc -salt -in file.txt -out file.txt.enc -k PASS

Сам скрипт может выглядеть, например, так:

#!/bin/bash
#
# Скрипт выполняет шифрование архива с системными файлами, после чего исходный архив удаляется
#
BKPDIR="/mnt/backup"
PASS=`cat /root/.pass`
ARCHIVE=`ls $BKPDIR | grep 'enc.*.tar.xz$'`
  
if [ -z $ARCHIVE ]; then
    echo "No such ARCHIVE, variable empty";
    exit;
else
    openssl enc -aes-256-cbc -salt -pass pass:$PASS -in $BKPDIR/$ARCHIVE -out $BKPDIR/$ARCHIVE.enc
    rm -f $BKPDIR/$ARCHIVE
fi

Примечание. Главное не потерять пароль, с которым шифровался файл, иначе расшифровать его не получится.

И да, хранить пароль в файле /root/.pass небезопасно, используюте данный скрипт на свой страх и риск или используйте шифрование с открытым ключом.

tweet Share