Просто шифруем файлы в Linux с помощью Truecrypt и Veracrypt
Hack ProofTrueCrypt
На просторах сети есть куча мануалов для приведенных выше утилит в графическом режиме. Мы же попробуем повторить все в консоли. Для начала установим TrueCrypt обязательно версии 7.1a. Для этого запускаем: git clone https://github.com/AuditProject/truecrypt-verified-mirror.git Переходим в директорию truecrypt-verified-mirror/Linux. Здесь необходимо проверить хеш пакета, чтобы нам не подсунули вредонос: md5sum truecrypt-7.1a-linux-x64.tar.gz. Сверяем хеш с приведенным в статье за 2014 год, если совпадает раcпаковываем и ставим пакет. Можно приступать к созданию криптоконтейнера: используем флаг -t(text) и флаг -c (create): truecrypt -t -c

На данном этапе выбираем обычный, а не скрытый том. Далее необходимо выбрать путь к тому, алгоритм шифрования и алгоритм хеширования.

Далее, программа попросит вас выбрать файловую систему. Если вы создаете том размером меньше 4Gb, то рекомендуется выбрать FAT, так как с ней будет проще работать в том случае, если вам вдруг понадобиться примонтировать ваш контейнер под виндой. Если же вы уверены, что такого точно не произойдет, то можете смело выбирать ext4.

Затем, вас попросят ввести пароль. Рекомендуемая длина пароля - не менее 20 символов. После этого можно указать путь до ключей, если вы их уже создали, если нет можно оставить вариант none. И завершающим этапом необходимо рандомно натыкать на клавиатуре 320 символов. Это необходимо для того чтобы повысить криптостойкость ключей шифрования.

Если все опции были выбраны корректно, мы получим примерно такую картину:

Мы создали криптоконтейнер! Можно сделать все покороче:
truecrypt -t -c --volume-type=Normal --size=5000000 --encryption=AES --hash=RIPEMD-160 --filesystem=FAT -k="keys" --random-source=/dev/urandom my_volume.
Теперь поместим туда какие-нибудь данные. Для этого примонтируем его командой truecrypt my_volume /path/to/your/dir. Далее, после ввода верного пароля в уже примонтированный контейнер перемещаем необходимую информацию, после этого отмонтируем контейнер командой truecrypt -d my_volume или truecrypt -d /path/to/your/dir, либо же командой truecrypt -d можно разом отмонтировать все примонтированные в данный момент контейнеры. Для того чтобы узнать сколько в системе примонтировано криптоконтейнеров и куда они примонтированы, можно вызвать утилиту с опцией -l.
Криптоконтейнер с двойным дном.
Так что же все-таки такое это ваше двойное дно? Двойным дном обычно называют скрытый том внутри обычного тома криптоконтейнера. То есть сначала мы создаем обычный, ничем не примечательный криптоконтейнер, помещаем туда какие-нибудь не сильно важные данные, которые не страшно потерять, а уже потом создаем в этом томе скрытый раздел. Этот раздел невозможно обнаружить в непримонтированном состоянии, если о нем не знать. Если вас заинтересует почему это так работает, то можно почитать про недоказуемость криптоконтейнеров. После создания двойного дна у нашего контейнера пробуем его примонтировать. На этапе ввода пароля, если мы вводим новый пароль от только что созданного скрытого тома, то соответственно он и примонтируется. Но если же ввести пароль от хронологически первого контейнера, в системе как ни в чем ни бывало примонтируется обычный том, и для стороннего человека будет совершенно неочевидно, что его где-то обхитрили и подсунули не те данные. Посмотрим как это все выглядит на практике. Возьмем my_volume и создадим внутри него скрытый том.

На этом этапе необходимо указать путь до уже существующего контейнера, который мы возьмем за основу. Ну а дальше действуем по уже описанному алгоритму.

Теперь у нас есть криптоконтейнер с двойным дном. Давайте попробуем в нем что нибудь спрятать. Для этого примонтируем его. Я создал поддиректорию ~/justdir/point, в которую я и буду монтировать. При этом вводим пароль от скрытого тома.

Убеждаемся что контейнер пуст и кладем туда любые данные, которые хотим спрятать. Я пложу туда справочную страничку для утилиты GPG и для пущей достоверности сразу посчитаю ее md5 хеш.

Теперь отмонтируем скрытый раздел и примонтируем обычный.

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

Но есть один небольшой нюанс, если при уже созданном скрытом томе начать запись в родительский том, то появляется риск перетереть свои данные, так как контейнер, который находится на верхнем уровне не знает о существовании скрытого раздела. Поэтому, если вы решили изменить легенду и поменять данные в обычном томе, то его нужно монтировать специальным образом. При монтировании необходимо выбрать опцию Protect hidden volume... и ввести данные для монтирования скрытого тома. В таком случае можно смело помещать данные в первый контейнер, данные второго контейнера не затрутся.

Если работаем без иксов, то получилась бы примерно такая картина:

Шифрование с ключами.
Если мы действительно хотим чтобы наши данные не достались никому, то, конечно, нельзя относиться к самому шифрованию спустя рукава. Будем ипользовать ключи, которые к слову генерируются с помощью того же самого TrueCrypt. Ключей можно создать столько, сколько вы посчитаете нужным, поместить их в одну директорию или хранить каждый ключ отдельно на съемном носителе это уже дело сугубо субъективное. Давайте приступим. Для того чтобы сгенерировать ключи, программа попросит вас превнести рандома хаотичными движениями курсора или набором 320 различных символов на клавиатуре. Также присутствует возможность указать источник --radom-source=..., в качестве которого можно например указать /dev/urandom, но не рекомендуется из соображений криптостойкости генерируемых ключей. Создадим ключи, для этого запустим: truecrypt --create-keyfile (можно еще добавить --radom-source=/dev/urandom если нет душевных сил долбить по клавиатуре).


Второй ключик создадим другим способом:


Можно создать еще несколько ключей, поместить их в отдельную директорию, а при создании контейнера указывать путь уже к ней. Если вы не использовали ключи на этапе создания криптоконтейнера, а также в случае, если ваш ключ скомпрометирован, возникает необходимость поменять (добавить) ключи уже существующему криптоконтейнеру.

В руководстве пользователя (к которому утилита нас настойчиво отсылает) указывается, что при смене пароля и ключей важно не забыть про пересоздание диска восстановления, если вы, конечно, его используете.
VeraCrypt
VeraCrypt это прямой потомок TrueCrypt версии 7.1a, такой же опенсорсный как и его предшественник. В нем был исправлен ряд недостатков, это позволило использовать более современную дял 32-битных систем хеш-функцию - SHA-256. Также было увеличено количество итераций для алгоритма, формирующего ключ на основе пароля - PBKDF2. Драйвера VeraCrypt подписаны цифровой подписью Microsoft, это позволяет утилите без проблем работать под Win 10. Кроме того, был исправлен ряд ошибок и уязвимостей, связанных с утечками памяти и еще некоторыми проблемами в безопасности. Так как корни программы уходят в сторону TrueCrypt, синтаксис утилиты практически не изменился. Скачиваем и ставим софт, не забывая сверить хеши пакетов, и приступаем к шифрованию.



Заметно, что изменениям подверглись алгоритмы шифрования, добавился кузнечик. Также, выкатили поддержку NTFS, exFAT и Btrfs. Кроме того, добавилась такая неизведанная фича как PIM. PIM дословно переводится как множитель персональных итераций. Предполагается, что PIM такое же секретное значение как пароль и используется с ним в связке. Очевидно, что с увеличением PIM повышается и криптостойкость зашифрованных данных. Осталось понять, как грамотно выбрать само численное значение. На официальной сайте продукта указаны минимальные удовлетворительные значения количества итераций для различных случаев. Так, при использовании короткого пароля в сочетании с хеш функциями SHA-512 и Whirlpool минимальное значение будет 485, а при остальных хеш функциях - 98. Можно, конечно, и оставить значение по умолчанию, но не рекомендуется так поступать из соображений безопасности. Кажется, что хорошая идея выбирать значение PIM, не сильно отличающиеся от рекомендованного разрабами. В таком случае специалисту, который будет пытаться расшифровать ваши данные, придется перебирать не просто пароли, а еще и количество итераций. Это заметно снижает вероятность взлома.