Часть II. Работа с простыми томами.
0. Создание простого тома tcplay/truecrypt
Команда для шифрования тома:
tcplay --create --device=/dev/loopX --cipher=шифр_или_каскад_шифров_через_за
где:--create
– указание программе создать новый шифрованный том--device=/dev/loopX
– устройство, которое требуется зашифровать, в данном случае loop-устройство с которым ассоциирован файл-контейнер.--cipher=шифр_или_каскад_шифров_через_за
– указание, какой алгоритм шифрования необходимо использовать, или же необходимо использовать несколько алгоритмов последовательно (они перечисляются через запятую). В настоящий момент tcplay поддерживает алгоритмы: AES-256-XTS, TWOFISH-256-XTS, SERPENT-256-XTS, таким образом, поддерживаются комбинации этих трех, двух, или одного из этих шифров, перечисленных через запятую.
В случае использования только одного из них – запятая после его указания не нужна.
Примечание: Если вы используете несколько шифров, особенно на слабой машине, то это может существенно замедлить работу компьютера. Из всех перечисленных шифров AES самый быстрый (на современных машинах он даже поддерживается на аппаратном уровне), но TWOFISH и SERPENT надежнее, хотя и медленнее.--pbkdf-prf=алгоритм
– алгоритм формирования ключа для шифрования на основе пароля. На самом деле, содержимое нашего ключевого файла тоже пароль, «ключ» в криптографии это несколько иное, но, поскольку объяснить вам всю криптографию в трех словах я не могу, отсылаю к специализированным источникам.
Кратко прочесть про PBKDF можно здесь
Вместо алгоритм
надо подставить конкретный алгоритм. На данный момент tcplay поддерживает RIPEMD160, SHA512, whirpool--keyfile=path/to/key/file
– указание программе, где взять ключевой файл для шифрования. Если нужно использовать несколько ключевых файлов, то нужно указать несколько параметров --keyfile=
, например:tcplay --create --device=/dev/loop0 --cipher=
TWOFISH-256-XTS --pbkdf-prf=
RIPEMD160 --keyfile=/path/to/key/file01 --keyfile=/path/to/key/file02
Если ключевой файл не нужен, а достаточно пароля, вводимого с клавиатуры, параметр --keyfile
не указывается. Пароль будет запрошен перед шифрованием.
Итак, предположим, что контейнер ассоциирован с устройством /dev/loop0, в качестве алгоритма шифрования мы выбрали один – AES-256, в качестве алгоритма PBKDF выбран whirlpool, а ключ находится в /keys/keyfile
Тогда команда приобретает вид:tcplay --create --device=/dev/loop0 --cipher=AES-256-XTS --pbkdf-prf= whirlpool --keyfile=/keys/keyfile
Можно также добавить ключ --insecure-erase
, тогда процесс пройдет быстрее, т.к. будет произведено затирание данных на диске. Поскольку я параноик, и в незашифрованном виде на диске ничего не храню, а свежий файл-контейнер представляет собой гигабайт нулей, то я смело его добавлю:tcplay --create --device=/dev/loop0 --cipher=AES-256-XTS --pbkdf-prf= whirlpool --keyfile=/keys/keyfile –-insecure-erase
После ввода команды и нажатия Enter, нам предложат ввести парольную фразу и повторить ее. Если хочется кроме ключевого файла установить еще и пароль (или ключевой файл вообще не нужен), то вводим пароль и подтверждаем его, если указан ключевой файл, а пароль не нужен, жмем два раза Enter.
Далее попросят подтвердить свои действия, если все сделано правильно – отвечаем утвердительно, после чего нужно будет некоторое время подождать, пока tcplay не сгенерирует т.н. истинно-случайные числа и не завершит шифрование.
В конце процесса нам скажут All Done!, если так, значит шифрование файла-контейнера окончено.
1. Подключение файла-контейнера и подготовка его к работе.
1.1. Если файл-контейнер не ассоциирован с loop-устройством, это надо сделать, как описано здесь в пункте 5.
1.2. Далее необходимо, чтобы tcplay открыл доступ к зашифрованному диску, делается это следующей командой:tcplay --map=tomename --device=/dev/loopX --keyfile=/path/to/key/file
где:--map=tomename
– параметр, указывающий имя, по которому мы будем обращаться к зашифрованному диску после его расшифровки--device=/dev/loopX
- параметр, указывающий имя устройства, с которым ассоциирован контейнер, например /dev/loop0
--keyfile=/path/to/key/file
– параметр, указывающий путь к ключевому файлу, если такой наличествует, если файлов несколько, то и параметров --keyfile,
следует указывать соответственно.
Если все указано верно, то tcplay
ответит All ok! и доступ к зашифрованному диску будет открыт.
На свежесозданном зашифрованном томе в первую очередь необходимо создать таблицу разделов и файловую систему. Для простоты предположим, что на зашифрованном томе будет присутствовать один раздел в файловой системе ext2. На самом деле внутри тома, как и на обычном физическом устройстве можно создать несколько разделов, но к этому вопросу я вернусь в следующих заметках.
Форматируем том:mkfs -t ext2 /dev/mapper/tomename
где:-t ext2 –
указание программе mkfs форматировать том в системе Ext2 (можно и в любой другой из поддерживаемых дистрибьютивом)/dev/mapper/tomename –
путь к подключенному tcplay виртуальному дисковому устройству (имя задавалось в параметре --map,
все такие устройства находятся в /dev/mapper/
).
Теперь на зашифрованном диске создана файловая система и он готов к работе, можно создать точку монтирования:mkdir /mnt/tomename
И смонтировать его обычным образом:mount -t ext2 /dev/mapper/tomename /mnt/tomename
2. Алгоритм подключения файла-контейнера.
2.1. Ассоциировать файл-контейнер с loop-устройством:losetup /dev/loopX /path/to/file/disk01.crypt
где вместо X – номер свободного петлевого устройства, а вместо /path/to/file/disk01.crypt
путь к реальному файлу-контейнеру
2.2. Подключение зашифрованного диска с помощью tcplay:
tcplay --map=tomename --device=/dev/loopX --keyfile=/path/to/key/file
где:--map=tomename
– параметр, указывающий имя, по которому мы будем обращаться к зашифрованному диску после его расшифровки--device=/dev/loopX
- параметр, указывающий имя устройства, с которым ассоциирован контейнер, например /dev/loop0
--keyfile=/path/to/key/file
– параметр, указывающий путь к ключевому файлу, если такой наличествует, если файлов несколько, то и параметров --keyfile,
следует указывать соответственно.
2.3. Создание, если еще не создана, точки монтирования:mkdir /mnt/tomename
2.4. Монтирование раздела:mount -t ext2 /dev/mapper/tomename /mnt/tomename
3. Отключение файла-контейнера.
После того, как работа с контейнером окончена, необходимо его отключить.
3.1. Отмонтировать диск:umount /mnt/tomename
3.2. Отключить диск с помощью tcplay:tcplay --unmap=tomename
3.3. Освободить петлевое устройство:losetup -d /dev/loop0
4. Получение информации о томе.
Если том уже подключен с помощью tcplay, то информацию можно получить командойtcplay --info-mapped=tomename
где вместо tomename
нужно подставить имя тома, заданное в команде --map=
Если том ассоциирован с устройством loop, но еще не подключен, можно воспользоваться командой tcplay --info --device=/dev/loop0
Если том зашифрован с помощью ключевого файла, то команду следует дополнить ключом --keyfile=/path/to/key
Обе команды выдадут информацию о томе, выглядящую приблизительно так:
Device: /dev/loop0 PBKDF2 PRF: whirlpool PBKDF2 iterations: 1000 Cipher: AES-256-XTS Key Length: 512 bits CRC Key Data: 0xee2c7c2d Sector size: 512 Volume size: 2096640 sectors IV offset: 256 sectors Block offset: 256 sectors
5. Смена пароля, ключевого файла, алгоритма формирования ключа
Как и в TrueCrypt в tcplay можно сменить пароль, ключевой файл или алгоритм формирования ключа. Делается это с помощью опции
--modify.
5.1. Сначала нужно ассоциировать файл-контейнер с loop-устройством, если он еще не ассоциирован:
losetup /dev/loop0 /path/to/file/disk01.crypt
5.2. Если том в данный момент наоборот используется, то его нужно отмонтировать и отключить в tcplay командой tcplay --unmap=tomename
5.3. Теперь можно приступать к модификации тома.Например, команда замены ключевого файла будет выглядеть так:
tcplay --modify --device=/dev/loop0 --keyfile=/path/to/old/key --new-keyfile=/path/to/new/key
Естественно, вместо
/path/to/new/key
и /path/to/old/key
должны быть указаны пути к старому и новому ключевому файлу. Если диск был зашифрован при помощи пароля, то параметр --keyfile
опускается. Старый пароль будет предложено ввести перед процедурой смены пароля.Для смены алгоритма формирования ключа, команда дополняется параметром
--new-pbkdf-prf=алгоритм
где вместо алгоритм
надо подставить конкретный алгоритм (RIPEMD160, SHA512, whirpool).Кроме смены алгоритма формирования ключа, ключевых файлов и паролей, с помощью опции
--modify
можно сделать резервную копию заголовка тома.6. Резервное копирование заголовка тома.
Была полезная опция в TrueCrypt, позволявшая сделать бэкап заголовка тома, т.к. в случае повреждения последнего расшифровка становилась невозможной. Есть эта опция и в tcplay.
Кстати говоря, tcplay делает резервную копию заголовка в конце тома, но при желании можно скопировать заголовок и в отдельный файл. Делается это также с помощью опции
--modify
6.1. Сначала необходимо ассоциировать файл-контейнер с loop-устройством:
losetup /dev/loop0 /path/to/file/disk01.crypt
6.2 Далее необходимо ввести следующую команду:tcplay --modify --device=/dev/loop0 --save-hdr-backup=/path/to/backup.hdr --keyfile=/path/to/key --new-keyfile=/path/to/key
Внимание! Будет запрошен новый пароль и/или нужно указать новый ключевой файл, если будет указан новый ключевой файл/пароль, то в томе изменений не будет (не будут установлены новый пароль/ключевой файл), а вот в бэкапе заголовка информация будет изменена. Соответственно, при восстановлении из бэкапа нужно будет использовать новый пароль/ключевой файл. Чтобы это предотвратить, можно указать в качестве новых данных старые.
7. Если не удается расшифровать файл. Или восстановление заголовков.
В случае если файл не удается расшифровать, а ключевой файл не поврежден/пароль введен правильно, можно попробовать восстановить заголовок тома.
7.1. Из внутреннего бэкапа, создаваемого tcplay внутри тома.
Сначала пробуем подключить поврежденный том, используя опции
--map
и --use-backup:
tcplay --map=tomename --device=/dev/loopX --keyfile=/path/to/key/file --use-backup
Естественно, если ключевые файлы не используются, а установлен только пароль, опция
--keyfile=
не нужна. Если том успешно подключился, то отключаем его
tcplay --unmap=tomename
и восстанавливаем заголовок:
tcplay --modify --device=/dev/loop0 --keyfile=/path/to/key/file --restore-from-backup-hdr
или используя опцию
--use-backup
:
tcplay --modify --device=/dev/loop0 --keyfile=/path/to/key/file --new-keyfile=/path/to/key/file --use-backup
7.2. Из внешнего бэкапа заголовка тома.
tcplay --modify --device=/dev/loop0 --keyfile=/path/to/old/key --new-keyfile=/path/to/new/key --use-backup --use-hdr-file=/path/to/header/backup
Внимание! Будет запрошен новый пароль и/или нужно указать новый ключевой файл, если будет указан новый ключевой файл/пароль, то при восстановлении изменится ключевой файл/пароль тома.
В принципе, понятно для чего это сделано. Восстанавливаешь заголовок - поменяй пароль. С бэкапом заголовков тома есть один подводный камень:
Внимание! Если злоумышленник получит ключевой файл (или узнает старый пароль), а также получит соответствующий ему бэкап заголовка тома, то он сможет восстановить заголовок тома и получить доступ к его содержимому. Такое может произойти, например, если без присмотра остался старый бэкап заголовка и старый ключевой файл. И на практике такое случалось, потому что про неиспользуемые ключевые файлы люди банально забывают, как и про старые бэкапы. Своевременно и надежно уничтожайте устаревшие ключевые файлы и бэкапы заголовков! Например, при помощи утилиты
shred
[копия] Начало.
Продолжение следует.