Шифрование в Linux с использованием GnuPG

Шифрование, такая же больная тема как и вирусы. Кому-то нравиться, кому-то нет. Кто-то называет это параноей, ссылаясь на общую не нужность файлов (пусть даже домашняя клубничка или еще чего) пользователя для злоумышленников, кто то считает что это крайняя мера и необходима только на предприятиях, фирмах, банках и прочих корпоротивных учреждениях. Думать можно что угодно и как угодно, тем неменее отдельные очерки, которые то тут, то там появляются в блогосфере, описывают такие случаи, как изымание компьютерной техникой товарищами из “масок шоу” и прочими “оборотнями в погонях”, именующими себя “стражами порядка”. Лично из своего опыта могу сказать следующее, у меня на компьютере храняться такие важные для меня файлы как: сертификаты кошельков Web-money, файл с паролями, данные о кредитных карточках, а так же некоторые документы из армии, которые якобы считаются “секретными”, телефонная книга и т.п. Я считаю необходимым обезопасить такого рода данные по максимуму, так как их потеря может быть опасна для моего банковского счета и счета электронного. Как это сделать в Линукс, читаем ниже

Attention! Ahtung! Warning! Внимание! ??????
Данная статья не расчитана на профессионалов в области криптографии и шифрования

Типы угроз

В Linux существует масса путей как обезопасить свои данные. Но прежде чем заняться их сохранностью, необходимо рассмотреть типы угроз для ваших данных. Давайте сделаем это. И так, рассмотрим следующую ситуацию, у вас дома имеется ноутбук с Linux на борту, на жестком диске ноутбука вы сохранили важные для вас данные. Какие типы угроз могут рассмотриваться в таком случае для вашего ноутбука в целом и ваших данных записанным на винчестере?

  • Злоумышленник может включть компьютер и подобрать логин\пароль от системы
  • Злоумышленник может скопировать ваши данные на внешний носитель (флешка, диск)
  • Злоумышленник может загрузиться с внешнего носителся (флешки, диска) и получить полный доступ к вашей системе
  • Злоумышленник может выкрасть ваш ноутбук (конфисковать), вынуть жесткий диск и подключить к своему компьютеру

Как можно преодолеть часть из этих угроз?

  • Поставить пароль на BIOS, который будет мешать пользователю начать загрузку ОС.
  • Поставить пароль на загрузчик GRUB, ограничев колличество ввода неверного пароля
  • Поставить длинный и сложный пароль на рабочего юзера
  • Поставить длинный и сложный пароль на root’a
  • Защитить папку с вашими данными, присвоив ей права\группу root’a

От чего не спасут подобные действия?

  • От загрузки с внешнего носителя (флешка, диск)
  • От кражи ЖД ноутбука или компьютера

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

Как зашифровать?

Ubuntu в процессе установки предлогает сделать ваш home-раздел зашифрованным, достаточно поставить галочку. Но тут стоит быть осторожным, так как случись что, даже вы не сможете потом восстановить данные, включая не критичные для потери, но важные для вас (рефераты, презентации, статьи, фотографии и прочее)

В том случае, если колличество информации требуемоей к сокрытию не велико, лучше использовать отдельный физический или виртуальный раздел, который с лёгкостью может быть зашифрован\расшифрован, нести в себе только кретичные данные, и быть мобильным, т.е. вы сможете переносить его на диске, флешке или любом другом носителе.

Эталоном шифрования является программа TrueCrypt, она свободна, поддерживает шифрование на лету, и имеет очень серьезный механизм защиты данных. Существуют и куда более изощренные способы шифрования, когда ключи храняться на удаленных серверах, и аутентификация проходит только при целой куче совпадений, IP-адрес, ключ, пароль, MAC-адрес и прочее. Но все эти методы сложны, изощренны и невсегда подходят обывателю.

Кустарный метод

Тот метод который я изложу ниже, был назван мною “кустарным“, он не имеет GUI (без которого сейчас не может жить пол населения планеты), он прост и не прихотлив. Для шифрования используются утилита GPG, она проста в использовании, не требует кропотливого изучения нескольких томов, перед котороми “Война и мир” покажуться вам просто шуткой, и она настолько мощна, что случаев расшифровки информации зашифрованной с помощью GPG я не припомню (это конечно при правильном подходе, когда пароль, это что-то более серьезное чем 12345) и она присутствует практически в любом современном дистрибутиве.

На самом деле, возможности GnuPG просто потрясают, но в принципе, можно обойтись и некоторыми простыми инструкциями, которые по надежности не уступают и великому TrueCrypt. Стоит отметить, что утилита предусматривает следующие алгоритмы:

С открытым ключом: RSA, RSA-E, RSA-S, ELG-E, DSA
Симметричные шифры: 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH, CAMELLIA128, CAMELLIA192, CAMELLIA256

И так, предположим у вас есть некоторый набор файлов, который необходимо зашифровать.
Первое, что нам необхомио сделать, это создать будущий файл-контейнер для хранения информации:

dd if=/dev/zero of=/home/user/secret bs=1k count=1000000
dd if=/dev/zero of=/home/user/secret bs=1k count=1000000

где:
count=10000 – это указатель отводимого места под ваш контейнер.
/home/user/secret – обсолютный путь файла
Помним, что 1Mb~1000Kb, соотвественно 1000000Kb~977Mb

Теперь необходимо создать файловую систему нашему будущему контейнеру:

sudo mke2fs -t ext4 secret
sudo mke2fs -t ext4 secret

где флаг -t – указывает тип файловой системы, утилита mke2fs позволяет указать: ext2/ext3/ext4

Теперь, дабы корректно работать с контейнером и иметь возможность записи\чтения информации уже внутри него, его необходимо примонтировать:

sudo mount -o loop secret /mnt
sudo mount -o loop secret /mnt

Далее вы можете свободно зайти на ваш виртуальный диск. А так же записать туда любую информацию:

cd /mnt
cd /mnt

Посмотреть на диск:

df -h
Файловая система            Разм  Исп  Дост   Исп% смонтирована на
/dev/loop0                         962M   18M  896M   2%    /mnt
df -h
Файловая система            Разм  Исп  Дост   Исп% смонтирована на
/dev/loop0                         962M   18M  896M   2%    /mnt

После того, как вы записали на вновь созданный диск данные, его необходимо отмонтировать:

sudo umount /mnt
sudo umount /mnt

Создаем цифровую подпись, во избежение подмены а так же изменения файла, с целью получить ваш пароль, который вы будете по ошибке вводить к неправильному файлу:

gpg --gen-key
gpg --gen-key

Вам необходимо ответить на несколько вопросов.
Далее программа создаст связку ключей приватный\публичный, которые храняться в базе:
~/.gnupg/pubring.gpg – публичные ключи
~/.gnupg/secring.gpg – приватные ключи

Для дальнейших манипуляций с ключами:

gpg --edit-key UserID 
gpg --edit-key UserID 

Посмотреть уже существующие:

gpg --list-keys
gpg --list-keys

Выполнить экспорт ключа:

gpg --export UserID or KeyID > /home/user/mykey.gpg
gpg --export UserID or KeyID > /home/user/mykey.gpg

И теперь шифруем наш файл-контейнер:
Алгоритм шифрования AES256, самый надежный что может быть.

gpg -e --clearsign --force-mdc --cipher-algo AES256  ./secret
gpg -e --clearsign --force-mdc --cipher-algo AES256  ./secret

где:
–clearsign – создать прозрачную подпись
-e – зашифровать данные
–force-mdc – Принуждает GnuPG использовать шифрование с кодом обнаружения изменений. Всегда используется с более новыми шифрами (с размером блока более 64 бит) или если все ключи получателя поддерживают MDC.
–cipher-algo – Для выбора другого алгоритма

Вас попросят ввести логин\пароль, а так же пароль вашего ключа, который вы задали ранее.
За сим всё, в текщей директории вы получите файл вида: secret.gpg

Если вы хотите удалить оригинал контейнер бесследно, то выполните это:

shred -u -n7 -v -z secret
shred -u -n7 -v -z secret

где флаг -n7 – удалить файл с семью итерациями.

Расшифровать обратно файл secret.gpg вам поможет команда:

gpg -o ./secret_new --decrypt secret.gpg
gpg -o ./secret_new --decrypt secret.gpg

Эта команда автоматически проверит наличие цифровой подписи.

Вывод

Ваши данные отлично защищены.
Для дальнейшего пользования контейнером, проделайте все тоже самое, расшифруйте файл, примонтируйте контейнер и пользуйтесь с удовольствием и не забывайте про подписи которые можно експортировать на внешний носитель или загрузить на сервер. Возможно зваорачивания команд шифровки\расшифровки в скрипт для автоматизации процесса и избавления от необходимости каждый раз вводить длинные команды. Те кто считает длинные команды тяжелыми и не нужными – мудак, так как запомнить их проще, чем пережить кражу денег с банковского счета или кражу ценных документов. Надеюсь статья вам не показалась слишком сложной.