Блог ИТ склеротика.

Страницы

Расширенный поиск в статьях блога

18 февраля 2012 г.


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


Шифруем файлы с помощью OpenSSL
В наши дни шифрование стало обязательной процедурой не только в организациях, но и на домашних машинах. Со всех сторон враги, того и гляди какой-нибудь хацкер влезет в компьютер и украдет твою ценную рукопись. Приходится заниматься самообороной и искать инструменты для надежного шифрования файлов. Но зачем ходить далеко, когда все есть под рукой, в команде под названием openssl.
В качестве универсального средства шифрования каталогов и дисков OpenSSL, конечно, подходит плохо, но для криптования отдельно взятых файлов лучше инструмента не найти. В качестве примера попробуем зашифровать файл secret.txt:
$ openssl enc aes-256-cbc -salt -in secret.txt -out secret.aes
enter aes-256-cbc encryption password:
Verifying - enter aes-256-cbc encryption password:
Здесь мы используем алгоритм шифрования AES (один из лучших на сегодня) с длиной ключа 256 байт и режимом шифрования CBC (который хоть и скомпрометировал себя, но для домашних нужд вполне сгодится). Также с помощью опции -salt добавим соли чтобы результат получился совсем мудреный. В ответ на запрос пароля вводим пароль (дважды).
После выполнения этой процедуры файл secret.aes можно спокойно хранить хоть в домашнем каталоге или таскать с собой на флешке до того момента пока не понадобится извлечь его содержимое. А сделать это просто:
$ openssl aes-256-cbc -d -in secret.aes -out secret.txt
Вводим пароль - получаем оригинал. Если требуется зашифровать простую строку текста, то от входного файла можно избавиться:
$ echo секретный текст | openssl aes-256-cbc -salt -out secret.aes
Объединив этот способ со всемогущим netcat получаем сетевой cp:
приемник...$ nc -l -p 666 | openssl aes-256-cbc -d
передатчик.$ echo секретный текст | openssl aes-256-cbc -salt | nc 192.168.0.1 666
Чтобы зашифровать сразу несколько файлов можно написать небольшой скрипт:
$ for f in * ; do [ -f $f ] &&\
    openssl enc -aes-256-cbc -salt -in $f -out $f.enc\
    -pass file:/tmp/passwd ; done
Оцпия -pass file:/tmp/passwd здесь используется чтобы не вводить пароль для каждого файла. Достаточно просто поместить его в указанный файл и дело в шляпе (можно также использовать опцию -pass pass:пароль для прямого указания пароля, но это небезопасно, он осядет в истории bash).
С другой стороны, для шифрования каталога лучше использовать такой прием с начальной упаковкой файлов:
$ tar c каталог | openssl enc -aes-256-cbc -e > secret.tar.enc
Также OpenSSL удобно использовать для генерирования стойких паролей:
$ openssl rand 8 -base64
O0Hqtv9l0sY=
И хэшей для записи в /etc/passwd:
# openssl passwd -1 my-secret-pass
$1$WA7AVhQL$y9VaGwseiKRLSGoJg21TP0
И даже фиктивных MAC-адресов:
$ openssl rand -hex 6 | sed 's/\(..\)/\1:/g; s/.$//'
f2:9e:56:fd:5a:93

.

Счетчик тИЦ и PR Яндекс.Метрика Msn bot last visit powered by MyPagerank.NetYahoo bot last visit powered by MyPagerank.Net ping fast  my blog, website, or RSS feed for Free