Шифруем файлы с помощью OpenSSL

Итак, эта статья о том, как шифровать файлы с помощью OpenSSL. Вы спросите почему для шифрования файлов надо использовать OpenSSL, а не какую-то другую программу ? Моим ответом на этот вопрос будет статья Брюса Шнайера Ханаанский бальзам и другая его-же статья. Как вы поняли из этих статей, не каждая программа которая обещает шифровать файлы обеспечивает безопасность информации. Как говорит Брюс Шнайер — «Криптография бывает двух типов: криптография, которая помешает читать ваши файлы вашей младшей сестре, и криптография, которая помешает читать ваши файлы дядям из правительства». OpenSSL очень популярная библиотека, которою для криптографии используют многие — как платные, так и бесплатные программы. В OpenSSL реализовано большое количество алгоритмов и режимов шифрования, что позволяет сделать выбор вам самим, а не разработчику программы.
Помимо самой библиотеки в пакет OpenSSL входит набор консольных утилит. В данной статье речь пойдёт о шифровании файлов симметричными алгоритмами.
Для шифрования файла с помощью OpenSSL надо воспользоваться командой openssl enc. Для этого доступен широкий выбор алгоритмов шифрования которые поддерживает OpenSSLBlowfish, Camellia, DES, RC2, RC4, RC5, IDEA, AES и другие. Помимо разнообразных алгоритмов также доступны разные режимы шифрованияECB, CBC, CFB, OFB. Некоторые режимы шифрования можно использовать с разной разрядностью.
Для того что-бы просмотреть список опций команды openssl enc достаточно набрать:

$ openssl enc --help
options are
-in input file
-out output file
-pass pass phrase source
-e encrypt
-d decrypt
-a/-base64 base64 encode/decode, depending on encryption flag
-k passphrase is the next argument
-kfile passphrase is the first line of the file argument
-md the next argument is the md to use to create a key
from a passphrase. One of md2, md5, sha or sha1
-S salt in hex is the next argument
-K/-iv key/iv in hex is the next argument
-[pP] print the iv/key (then exit if -P)
-bufsize buffer size
-nopad disable standard block padding
-engine e use engine e, possibly a hardware device.
Cipher Types
-aes-128-cbc -aes-128-cfb -aes-128-cfb1
-aes-128-cfb8 -aes-128-ecb -aes-128-ofb
-aes-192-cbc -aes-192-cfb -aes-192-cfb1
-aes-192-cfb8 -aes-192-ecb -aes-192-ofb
-aes-256-cbc -aes-256-cfb -aes-256-cfb1
-aes-256-cfb8 -aes-256-ecb -aes-256-ofb
-aes128 -aes192 -aes256
-bf -bf-cbc -bf-cfb
-bf-ecb -bf-ofb -blowfish
-camellia-128-cbc -camellia-128-cfb -camellia-128-cfb1
-camellia-128-cfb8 -camellia-128-ecb -camellia-128-ofb
-camellia-192-cbc -camellia-192-cfb -camellia-192-cfb1
-camellia-192-cfb8 -camellia-192-ecb -camellia-192-ofb
-camellia-256-cbc -camellia-256-cfb -camellia-256-cfb1
-camellia-256-cfb8 -camellia-256-ecb -camellia-256-ofb
-camellia128 -camellia192 -camellia256
-cast -cast-cbc -cast5-cbc
-cast5-cfb -cast5-ecb -cast5-ofb
-des -des-cbc -des-cfb
-des-cfb1 -des-cfb8 -des-ecb
-des-ede -des-ede-cbc -des-ede-cfb
-des-ede-ofb -des-ede3 -des-ede3-cbc
-des-ede3-cfb -des-ede3-cfb1 -des-ede3-cfb8
-des-ede3-ofb -des-ofb -des3
-desx -desx-cbc -idea
-idea-cbc -idea-cfb -idea-ecb
-idea-ofb -rc2 -rc2-40-cbc
-rc2-64-cbc -rc2-cbc -rc2-cfb
-rc2-ecb -rc2-ofb -rc4
-rc4-40 -rc5 -rc5-cbc
-rc5-cfb -rc5-ecb -rc5-ofb
-seed -seed-cbc -seed-cfb
-seed-ecb -seed-ofb

После блока Cipher Types перечисляются доступные алгоритмы вместе с режимами. Шифрования по алгоритму DES представлено несколькими вариантами. Помимо стандартного DES есть ещё тройной 3DES (который тоже в нескольких вариантах) и DESX. Теперь давайте попробуем зашифровать что-то.

$ openssl enc -e -in infile.txt -out outfile.bf_cbc -bf-cbc

Эта команда зашифрует файл infile.txt по алгоритму blowfish в режиме CBC и запишет результат в файл outfile.bf_cbc . Перед тем как зашифровать будет запрошен ключ для шифрования. Для расшифровки этого файла надо воспользоваться такой командой:

$ openssl enc -d -in outfile.bf_cbc -out dec_file.txt -bf-cbc

На запрос ввода ключа надо ввести тот ключ, который был введён при шифровании.
Если вы хотите сжать данные, то делать это надо, по понятным причинам, перед шифрованием.
Теперь давайте разберёмся с опциями командной строки. Опция -e указывает на то, что файл необходимо шифровать (эта опция включена по умолчанию), а опция -d расшифровывать. Ключ для шифрования можно ввести при вызове openssl enc с помощью опции -k, или в файле с помощью опции -kfile.
С помощью опции -nosalt можно отключить использование salt при шифровании ( не рекомендуется так как понижает защищённость шифра).
С помощью этой утилиты также можно выполнять преобразование в base64 и обратно, но это преобразование не есть шифрованием. Детальнее читайте на сайте проекта — http://www.openssl.org/docs/apps/enc.html. Если есть какие-то вопросы спрашивайте.

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

Запись опубликована в рубрике Utils с метками . Добавьте в закладки постоянную ссылку.

Один комментарий: Шифруем файлы с помощью OpenSSL

  1. Мурад говорит:

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

    И чтобы например на мой сайт можно было зайти только при наличии установленного в браузере сертификата?

    Иначе либо выдавалась страница с ошибкой, или вообще как будто такого сайта не существует ?

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>