Pull to refresh

Просто шифруем файлы в Linux с помощью Truecrypt и Veracrypt

Level of difficultyEasy
Reading time8 min
Views9.8K

В данной статье будет затронута тема создания криптоконтейнеров с помощью различного опенсорсного софта. Коснемся TrueCrypt и VeraCrypt, рассмотрим все с самых азов. Разберемся как создать простой том, том с двойным дном, как создать ключи шифрования и прочее. Все это проделаем под линуксом в консольном режиме.

С чего все начиналось?

Начнем сначала. В далеком 2004 году группа разработчиков энтузиастов выкатила первую релизную версию программы для работы с криптоконтейнерами под названием TrueCrypt. Она была основана на опенсорсном ПО для шифрования на лету под названием Encryption for the Masses (E4M), поддержка которой была прекращена с приходом нового тысячелетия в 2000 году. На тот момент TrueСrypt была единственным опенсорсным софтом, обладающим этим функционалом. Первые версии программы были доступны только для Windows 98(ME) и 2000(XP), но начиная с TrueCrypt 4.0 была добавлена поддержка Linux и x86-64 платформ. В течение следующих 10 лет после появления первой версии программы разработчиками постоянно выкатывались обновления, была добавлена версия для работы под MacOS, появилась поддержка параллельного шифрования/дешифрования. Одним из последних крупных новшеств стало аппаратное ускорение AES шифрования в версии TrueCrypt 7.0 2010 года, которое позволило увеличить быстродействие в 8 раз, а также появление поддержки томов с размером блоков 1024, 2048 и 4096 байт. В 2013 на почве громких разоблачений Сноудена начался сбор средств для проведения независимого аудита TrueCrypt 7.1a. Одной из причин этого стала анонимность разработчиков TrueCrypt, а как следствие возникновение жарких споров на просторах интернета, о том кем финансируется проект и не наложили ли спецслужбы свою руку на все это дело. В итоге на благие цели аудита получилось собрать более 60.000 USD, которые были переданы некоммерческой организации Open Crypto Audit Project, которая в последующем и проводила проверку. 28 мая 2014 года произошло то, что до сих пор трудно однозначно оценить - релиз TrueCrypt 7.2, который поддерживал лишь часть функций для работы с уже созданными криптоконтейнерами, создавать новые тома было невозможно, а на каждом шаге всплывало настойчивое уведомление о том, что TrueCrypt небезопасен и разработчики настоятельно рекомендуют использовать BitLocker - проприетарный софт от Microsoft, который сама же команда TrueCrypt постоянно высмеивала на протяжении предыдущих 10 лет. Все предшествующие версии программы были стерты из репозиториев, а на официальном сайте сообщалось, что разработчиками была найдена критическая уязвимость, которую они не в состоянии исправить и опять же ссылка на вышеупомянутый BitLocker. Но несмотря на все это аудит версии TrueCrypt 7.1a не прекращался, и в апреле 2015 года был завершен, при этом не было выявлено никаких серьезных уязвимостей или недостатков и был сделан вывод, что TrueCrypt 7.1a - хорошо спроектированная криптографическая программа, но при этом она все же не лишена недостатков. На основе отчета полученного в ходе аудита, был начат новый проект, в основание которого лег TrueCrypt 7.1a, и получил название VeraCrypt. По заявлениям разработчиков, в VeraCrypt реализованы обновления, которые дают ему превосходство над своим предшественником в области безопасности. Соответственно, зашифрованные данные должны быть более устойчивы к брутфорс атакам.

TrueCrypt

На просторах сети есть куча мануалов для приведенных выше утилит в графическом режиме. Мы же попробуем повторить все в консоли. Для начала установим 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, не сильно отличающиеся от рекомендованного разрабами. В таком случае специалисту, который будет пытаться расшифровать ваши данные, придется перебирать не просто пароли, а еще и количество итераций. Это заметно снижает вероятность взлома.

Так чем же все-таки шифровать?

У каждого специалиста свои предпочтения. Но если бы мне пришлось выбирать между этими двумя утилитами, то я бы остановил свой выбор на VeraCrypt. Этот софт более новый и там исправлены ошибки, которые были найдены при аудите TrueCrypt. Но, независимо от ПО, которым вы пользуетесь, рекомендуется поделить данные на разные категории и хранить в различных контейнерах. Так, при работе с одной категорией в системе примонтирован только один контейнер, а остальные, следовательно, находятся в безопасности. Но даже умея грамотно защищать свои данные, необходимо помнить, что ни одна система не является надежной и всегда есть обходные пути и лазейки.

P.S.

Ссылки:

Tags:
Hubs:
Total votes 11: ↑10 and ↓1+9
Comments33

Articles