пятница, 28 декабря 2012 г.

Шифрование данных (cryptoloop)


Шифрование данных (cryptoloop)


План:

1. Введение
2. Шифрование физического раздела
3. Шифрование образа раздела
4. Используемая и рекомендуемая литература

1. Введение


Хотелось бы рассказать о том, как можно легко и непринужденно шифровать конфиденциальные данные.
Итак, сначала обрисуем задачу: необходимо сделать так, чтобы каша байтов на попавшем в посторонние руки носителе не принесла им никакой пользы, а владельцу информации - вреда.
Что имеем:
1. Линукс на компьютере, к которому подсоединен носитель (подразумевается, что это будет либо Ubuntu 8.хх-9.хх либо любой другой дистрибутив свежей версии)
2. Носитель (жесткий диск, флешка, а еще в этой роли может выступать зашифрованный файл на незашифрованном диске, но об этом позже)
3. Информация, которую необходимо скрыть от посторонних глаз (ну с этим-то все просто: потренероваться можно на всяком мусоре или видео)

Погулял по просторам интернета и заметил, что все настойчиво советуют шифровать ТОЛЬКО РАЗДЕЛЫ С ДАННЫМИ (т.е. /home, /var, /tmp и swap). Корневой раздел, где находится сама ОС шифровать не рекомендуют. Это связано в первую очередь с производительностью, во вторую - с бессмысленностью

2. Шифрование раздела


Поехали:
1. Устанавливаем пакет loop-aes-utils.
Код: Выделить всё
apt-get install loop-aes-utils
 После чего необходимо проверить наличие модуля cryptoloop
Код: Выделить всё
sudo depmod -a
sudo modprobe cryptoloop

2. Пароль: для теста можно ввести 12345678901234567890, но лучше что-нибудь страшное x4gWD25Gga4590aD01kf . А еще можно создать файл с одной очень длинной строчкой из всяких произвольных символов.
3. Порядок действий при использовании программы такой:
3.1. Связываем устройство с петлей с использованием шифрования
Код: Выделить всё
losetup -e aes /dev/loop0 /dev/sda1

-e aes - указываем программе, чтобы использовалось шифрование. AES пришел на замену DES и является в наши дни (2009 год) довольно устойчивым к взлому методом.
/dev/loop0 - если совсем не понятно, что такое петля, то можно провести аналогию с виртуальными дисками CD-rom в программе Deamon-tools. Тут их сразу идет 8 (от /dev/loop0 до /dev/loop7). Можно использовать любой из них. Можно добавить еще несколько
Код: Выделить всё
mknod /dev/loop8 c 7 8
mknod /dev/loop9 c 7 9

и так далее, но думаю восьми должно вполне хватить
/dev/sda1 - это тот раздел, который хочется зашифровать. Может быть это будет /dev/sdc5 или вообще файл /home/user/crypt.iso - все зависит от Вашего желания.
3.2. После этой команды программа попросит ввести пароль (шифрование симметричное, т.е. пароль на зашифрование и на расшифрование один и тот же) из 20 символов.
Если пароль у нас хранится в файле, то тогда нам необходимо делать так:
Код: Выделить всё
cat file | losetup -e aes /dev/loop1 /dev/sda1 -p0

3.3. Далее необходимо понять своим нутром, что больше работать с устройством через /dev/sda1 (/dev/sdc5 и т.д.) мы не будем ни... ко... гда...
3.4. А работать мы будем именно с петлевым устройством, на которое замкнули - /dev/loop0. Причем не обязательно каждый раз замыкать на одно и то же устройство. Сегодня это /dev/loop0, а завтра он будет занят - возьмем /dev/loop7, в этом ничего страшного нет.
3.5. После того, как мы связали устройство в петлей необходимо отформатировать раздел, например так:
Код: Выделить всё
mkfs.ext3 /dev/loop0

Пояснение: когда мы привязываем отформатированный раздел к петле с шифрованием получается зашифрованная связь между этими устройствами, то есть если на одно устройство (любое из них) записываешь файл, то на втором мешанина байтов становится еще большей мешаниной. Нам необходимо сделать мешанину на /dev/sda1, а на loop0 скрываемый раздел. Когда мы привязали, мешанина у нас на loop, и мы его даже примонтировать не сможем - там якобы раздела нет, там каша. А чтобы сделать наоборот, мы его единовременно форматируем и там будет раздел для наших скрываемых файлов. В это время наш /dev/sda1 превратился в кашу. По-этому данные на разделе /dev/sda1 необходимо ЗАРАНЕЕ куда-нибудь скопировать, а потом записать их в примонтированный отформатированный loop.
Форматировать можно в любую удобную файловую систему, мы будем использовать ext3.

3.6. Далее работаем с петлей как с обычным разделом: монтируем, пишем в него, прописываем в /etc/fstab, если хочется и пр.
Код: Выделить всё
mkdir /mnt/mydisk
mount /dev/loop0 /mnt/mydisk
cp -R /home/forkostya/myfiles/ /mnt/mydisk/
umount /dev/loop0

3.7. После этого отвязываем устройство от петли
Код: Выделить всё
losetup -d /dev/loop0

Кстати, просмотреть список завязаных (задействованных) петель можно командой
Код: Выделить всё
losetup -a

3.8. Отвязали. Теперь к данным на разделе можно получить доступ только опять привязав к петле и введя 20-значный пароль
Код: Выделить всё
losetup -e aes /dev/loop0 /dev/sda1

Теперь мы имеем раздел /dev/sda1 , который невозможно примонтировать (компьютер не видит на нем файловой системы), а если смотреть чем-либо, например hex-редактором, то увидим кашу, как и хотели. Но мы-то с вами знаем, что на нем хранятся важные данные

3. Шифрование образа раздела


Помимо раздела, можно зашифровать еще и отдельно созданный файл определенного размера, который монтируем как раздел и работаем с его содержимым, как с разделом. Файл можно назвать как-нибудь pak0.pk3 и положить в папку /home/forkostya/quake3/ (в этом есть что-то стеганографическое, не правда ли?), тогда никакие подозрения не упадут на него, в отличие от зашифрованной файловой системы. Для этого сначала создаем файл с помощью утилиты dd. Размер задается параметрами, в данном случае 1к*100 = 100 килобайт.
Код: Выделить всё
dd if=/dev/zero of=/home/forkostya/quake3/pak0.pk3 bs=1k count=100
losetup -e aes /dev/loop0 /home/forkostya/quake3/pak0.pak
mkfs.ext3 /dev/loop0
mount /dev/loop0 /mnt/disk/


4. Используемая и рекомендуемая литература


Продвинутый способ шифрования разделов в Linux, или мной овладела паранойя.

Комментариев нет:

Отправить комментарий