The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Шифрование отдельных директорий с помощью OpenSSL (crypt ssl fs)


<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>
Ключевые слова: crypt, ssl, fs,  (найти похожие документы)
From: Денис Каледин <hannibal at nline ru> Date: Mon, 24 Jul 2003 14:31:37 +0000 (UTC) Subject: Шифрование отдельных директорий с помощью OpenSSL Шифрование отдельных директорий с помощью OpenSSL - ------------------------------------------------- Рано или поздно перед многими из нас встает проблема конфидециальности данных. Причины и обстоятельства бывают самыми разными - одним домашним компьютером пользуются несколько человек, тогда хочется максимально обезопасить личные данные. Однако чаще всего о криптографической защите данных мы начинаем задумываться в том случае, когда сами эти данные представляют огромный интерес для ваших конкурентов или же правоохранительных органов. Как говорится, когда в ваш дом врывается ФСБ или ФАПСИ, уже можно пожалеть о том, что единственной защитой ваших данных были права доступа "600". ;) Однако это все лирика. Современные криптографические средства для *NIX платформ зачастую предлагают нам шифрование единичных файлов, либо партиций. В последнем случае все осложняется необходимостью пропатчивания и пересборки ядра, для поддержки всевозможных EFS/EVFS (Encrypted FileSystem / Encrypted Virtual FileSystem). Часто данные решения подходят только для определенной официальной версии исходников ядра, т.е. пропатчить ядро от Alan Cox, например, может не получиться. Шифрование единичных файлов не совсем удобно, однако, за основу я беру именно этот путь. Я столкнулся с необходимостью шифрования отдельных директорий, к примеру /home/user/stuff, без значительных на это временных затрат, т.е. выполнение простенького скрипта, как для шифровки, так и для дешифровки данных. В идеале - шифрование директории /home/user, например, при выходе пользователя из системы, однако, об этом в следующий раз. Убедитесь, что у вас установлен пакет OpenSSL, и можем начинать. Я пошел простым путем: для шифрования, пользователь вводит команду: sslenc <директория> <шифр> ВНИМАНИЕ! Необходимо указывать путь к директории полностью, т.к. дальнейшая работа ведется в каталоге /tmp.Скрипт sslenc с помощью команды tar сжимает директорию, затем командой openssl шифрует полученный файл заданным шифром. Если все ОК, содержимое исходной директории очищается и туда помещается зашифрованный tarball. Незашифрованный tarball рекомендуется удалять вручную, однако, если вы уверены в своих действиях, эту команду можно включить в скрипт (в моем скрипте она включена). Помнить необходимо две вещи - использованный шифр и пароль, который попросит задать команда openssl. Ниже приведен мой вариант скрипта sslenc: <--------start script---------> #!/bin/bash # OpenSSL directory encryption script. # 2003 Denis A. Kaledin, <hannibal at nline dot ru> cd /tmp if [ ! -e "$1" ]; then echo "Directory not found!" exit 1 else echo "Preparing to encrypt directory "$1"..." fi if [ "$2" = "base64" ] || [ "$2" = "bf-cbc" ] || [ "$2" = "bf" ] || \ [ "$2" = "bf-cfb" ] || [ "$2" = "bf-ecb" ] || [ "$2" = "bf-ofb" ] || \ [ "$2" = "cast-cbc" ] || [ "$2" = "cast" ] || [ "$2" = "cast5-cbc" ] || \ [ "$2" = "cast5-cfb" ] || [ "$2" = "cast5-ecb" ] || [ "$2" = "cast5-ofb" ] || \ [ "$2" = "des-cbc" ] || [ "$2" = "des" ] || [ "$2" = "des-cfb" ] || \ [ "$2" = "des-ofb" ] || [ "$2" = "des-ecb" ] || [ "$2" = "des-ede-cbc" ] || \ [ "$2" = "des-ede" ] || [ "$2" = "des-ede-cfb" ] || [ "$2" = "des-ede-ofb" ] ||\ [ "$2" = "des-ede3-cbc" ] || [ "$2" = "des-ede3" ] || [ "$2" = "des3" ] || \ [ "$2" = "des-ede3-cfb" ] || [ "$2" = "des-ede3-ofb" ] || [ "$2" = "desx" ] || \ [ "$2" = "rc2-cbc" ] || [ "$2" = "rc2" ] || [ "$2" = "rc2-cfb" ] || \ [ "$2" = "rc2-ecb" ] || [ "$2" = "rc2-ofb" ] || [ "$2" = "rc2-64-cbc" ] || \ [ "$2" = "rc2-40-cbc" ] || [ "$2" = "rc4" ] || [ "$2" = "rc4-40" ] || \ [ "$2" = "aes-128-cbc" ] || [ "$2" = "aes-128-ecb" ] || [ "$2" = "aes-192-cbc" ] || \ [ "$2" = "aes-192-ecb" ] || [ "$2" = "idea" ] || [ "$2" = "aes-256-cbc" ] || \ [ "$2" = "aes-256-ecb" ] || [ "$2" = "rc5" ]; then echo "Good...loading "$2" algorithm" else echo "Cipher "$2" is not supported by OpenSSL!" exit 1 fi echo "Encrypting "$1" directory with "$2" cipher..." tar -cvvf encrypted.tar "$1"/ -P /usr/bin/openssl "$2" -salt -in encrypted.tar -out encrypted.tar.sec if [ ! -e encrypted.tar.sec ]; then echo "Incorrect password!" exit 1 else rm -Rf "$1"/ mkdir "$1" mv encrypted.tar.sec "$1"/ rm encrypted.tar echo "Directory "$1" has been encrypted with "$2" cipher!" fi <-------end script--------> Итак, теперь в /home/user/stuff у нас лежит зашифрованный tarball. Для его расшифровки пользователь вводит команду: ssldec <директория> <шифр>, вводит пароль. Опять же, путь к директории должен быть полным! Программа openssl расшифрует файл, затем команда tar расворачивает его в исходной директории. Зашифрованный tarball, опять же, можно удалять руками, а можно с помощью скрипта. Вот мой вариант скрипта ssldec: <------start script-------> #!/bin/bash # OpenSSL directory decryption. # 2003 Denis A. Kaledin <hannibal at nline dot ru> cd /tmp if [ "$2" = "base64" ] || [ "$2" = "bf-cbc" ] || [ "$2" = "bf" ] || \ [ "$2" = "bf-cfb" ] || [ "$2" = "bf-ecb" ] || [ "$2" = "bf-ofb" ] || \ [ "$2" = "cast-cbc" ] || [ "$2" = "cast" ] || [ "$2" = "cast5-cbc" ] || \ [ "$2" = "cast5-cfb" ] || [ "$2" = "cast5-ecb" ] || [ "$2" = "cast5-ofb" ] || \ [ "$2" = "des-cbc" ] || [ "$2" = "des" ] || [ "$2" = "des-cfb" ] || \ [ "$2" = "des-ofb" ] || [ "$2" = "des-ecb" ] || [ "$2" = "des-ede-cbc" ] || \ [ "$2" = "des-ede" ] || [ "$2" = "des-ede-cfb" ] || [ "$2" = "des-ede-ofb" ] ||\ [ "$2" = "des-ede3-cbc" ] || [ "$2" = "des-ede3" ] || [ "$2" = "des3" ] || \ [ "$2" = "des-ede3-cfb" ] || [ "$2" = "des-ede3-ofb" ] || [ "$2" = "desx" ] || \ [ "$2" = "rc2-cbc" ] || [ "$2" = "rc2" ] || [ "$2" = "rc2-cfb" ] || \ [ "$2" = "rc2-ecb" ] || [ "$2" = "rc2-ofb" ] || [ "$2" = "rc2-64-cbc" ] || \ [ "$2" = "rc2-40-cbc" ] || [ "$2" = "rc4" ] || [ "$2" = "rc4-40" ] || \ [ "$2" = "aes-128-cbc" ] || [ "$2" = "aes-128-ecb" ] || [ "$2" = "aes-192-cbc" ]|| \ [ "$2" = "aes-192-ecb" ] || [ "$2" = "idea" ] || [ "$2" = "aes-256-cbc" ] || \ [ "$2" = "aes-256-ecb" ] || [ "$2" = "rc5" ]; then echo "Muy bien....preparing to decrypt" else echo "Cipher "$2" is not supported by OpenSSL!" exit 1 fi if [ ! -e "$1"/encrypted.tar.sec ]; then echo "There is nothing to decrypt!" exit 1 else echo "Decrypting encrypted.tar.sec..." cp "$1"/encrypted.tar.sec /tmp /usr/bin/openssl "$2" -d -salt -in "$1"/encrypted.tar.sec -out encrypted.tar rm -Rf "$1"/ tar -xvvf encrypted.tar -P if [ ! -e "$1"/ ]; then echo "Invalid password!" mkdir "$1" cp encrypted.tar.sec "$1"/encrypted.tar.sec exit 1 else rm encrypted.tar echo "Directory "$1" has been successfully decrypted." fi fi <------end script--------> Вот, собственно, и все. Скрипты можно положить в /usr/bin или /usr/local/bin и начинать экспериментировать. P.S. Конфидециальную информацию имеет смысл хранить на партиции с журналируемой файловой системой, т.к. это сводит к нулю шансы злоумышленника воспользоваться утилитами типа undelete. ReiserFS в этом плане оптимальна, можно Ext3. По поводу XFS и JFS ничего сказать не могу, не в курсе. Параноики после процесса зашифровки могут произвести какие-либо действия на диске, например покопировать или постирать файлы, это сделает восстановление невозможным. P.P.S. Список доступных алгоритмов шифрования - команда 'openssl help' . По умолчанию, бинарные пакеты OpenSSL не включают в себя достаточно мощные шифры - IDEA и RC5. Если вы не страдаете помешательством на почве соблюдения патентов, доставайте исходники с http://www.openssl.org/ и пересобирайте руками с теми алгоритмами, которые считаете необходимыми. Хотелось бы получить feedback по поводу скриптов, экспериментируйте! =) Денис Каледин, 23.07.2003 hannibal at nline ru

<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>

Обсуждение [ RSS ]
  • 1, EN (?), 18:54, 29/07/2003 [ответить]  
  • +/
    Toze samoje mozno sdelat' 4ere gpg/pgp, no ne v etom cyt'. Cyt' v tom 4to glypo raspakovivat'/zapakovivat' tar-arxiv.
    Esli trydno propatchit' jadro, to est' encryption 4erez NFS(ported to linux from BSD).

    BTW, nazvanije stat'i oshibo4'no - re4' idet o encrypted tar-arxiv, a ne o encrypted dir's/hdd

     
  • 2, Alex (??), 15:28, 16/05/2006 [ответить]  
  • +/
    Большая дыра в этой "защите" то, что данные необходимо расшифровывать. Т.е. они фигурируют незашифрованными. Даже если их потом шифровать, то часть информации можно будет найти в .bak-файлах, дампах ядра, просто в уцелевших секторах диска. Кроме того, данные можно подглядеть, пока они не зашифрованы. Вобщем, уровень защиты стремится к нулю.
    Так можно защищать только backupы или что-то ещё, что распаковывать не придётся никогда.
     
     
  • 4, Art7PK (?), 20:12, 26/02/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Интерено как Alex читает зашифрованые даные не розшифровывая их :)
     

  • 5, karabura (?), 12:56, 10/11/2009 [ответить]  
  • +/
    На мой взгляд, если есть необходимость зашифровать данные (без разницы дир или отдельные файлы), проще создать закриптованную партицию (с криптофс)
    и переместить туда всё - что необходимо. И работать в последующем с этими данными уже с этой криптофс-партиции
     

    игнорирование участников | лог модерирования

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру