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

Чествуем победителя

Этот текст был прислан на конкурс авторов, который мы запустили весной. Мы разобрались с большим количеством пришедших текстов, подвели итоги и наградили победителей. Автор этой заметки получил приз — годовую подписку на «Хакер». Поздравляем!

LUKS (Linux Unified Key Setup) — стандарт шифрования блочных устройств. Штука полезная, но, к сожалению, она малоэффективна при встрече с Border Patrol Agent (BPA), так как он попросит ввести пароль, если обнаружит, что твои диски зашифрованы. В случае с LUKS это нетрудно сделать, поскольку заголовок хранится в незашифрованном виде. Достаточно выполнить

hexdump -C -n 100 /dev/sda2

или простым grep:

grep -rnw /dev/sda2 -e "LUKS"
LUKS container vs Border Patrol Agent. Как уберечь свои данные, пересекая границу

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

С помощью LUKS можно шифровать не только целые диски, но и отдельные файлы, сделав из них контейнеры. Вот этим мы и воспользуемся. Для управления LUKS применяется утилита cryptsetup. Чтобы не оставлять следов на диске, будем работать в оперативной памяти. Для начала создадим рабочую директорию и примонтируем ее в оперативку:

mkdir temp_storage mount -t tmpfs -o size=100M tmpfs temp_storage/

Проверяем:

df -Th temp_storage/
LUKS container vs Border Patrol Agent. Как уберечь свои данные, пересекая границу

Далее создадим наш контейнер:

cd temp_storage/ dd if=/dev/zero of=enrypted_container bs=1M count=50
LUKS container vs Border Patrol Agent. Как уберечь свои данные, пересекая границу

Шифруем:

cryptsetup luksFormat -h whirlpool -i 5555 enrypted_container
LUKS container vs Border Patrol Agent. Как уберечь свои данные, пересекая границу

Версия cryptsetup 1.7.0 и выше использует довольно-таки хорошие опции шифрования по умолчанию, а именно шифр aes-xts-plain64, размер ключа 256 и хеш-функцию SHA-256. Количество итераций для PBKDF2 — 2000.

В моем примере я использовал другую хеш-функцию и большее количество итераций. Теперь откроем наш контейнер:

cryptsetup open enrypted_container my_stuff ls -lA /dev/mapper/
LUKS container vs Border Patrol Agent. Как уберечь свои данные, пересекая границу

Пока ничего записать в него не получится, так как он не содержит никакой файловой системы. Для ее создания используем команду

mkfs.ext4 -L "My Diary" /dev/mapper/my_stuff
LUKS container vs Border Patrol Agent. Как уберечь свои данные, пересекая границу

Ключ -L служит для создания метки файловой системы и не обязателен.

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

mount /dev/mapper/my_stuff /mnt/

Проверяем:

df -Th /mnt/
LUKS container vs Border Patrol Agent. Как уберечь свои данные, пересекая границу

Копируем наши файлы в /mnt. Примонтировать можно в любое место, для простоты я использовал /mnt. После того как все файлы скопированы, отмонтируем и закроем наш контейнер:

umount /mnt cryptsetup close /dev/mapper/my_stuff

Почти все готово, осталось сделать резервную копию заголовка и зашифровать его:

cryptsetup luksHeaderBackup --header-backup-file my_diary_luks_header.bin enrypted_container

Смотрим, что за файл получился:

file my_diary_luks_header.bin

Шифруем симметричным шифром при помощи GnuPG:

gpg -a -c --cipher-algo AES256 my_diary_luks_header.bin
LUKS container vs Border Patrol Agent. Как уберечь свои данные, пересекая границу

Удаляем незашифрованный файл:

rm -f my_diary_luks_header.bin

Проверяем зашифрованный файл:

file my_diary_luks_header.bin.asc

Пользователям Windows не стоит отчаиваться, для них существует TrueCrypt и его наследник VeraCrypt, которые тоже умеют создавать зашифрованные контейнеры.

Теперь можно смело загружать наш контейнер и резервную копию заголовка к себе в облако — Google Drive или любое другое хранилище. Скачать этот файл себе на ноут, находясь уже внутри страны, думаю, не должно составить никаких проблем. После того как скачал, все как обычно: открываем, монтируем. Этот способ хорош, если нужно перевезти небольшое количество информации. Проблемы могут возникнуть, если захочется перевезти сотни гигабайт или терабайты. В этом случае придется подыскать облако побольше и запастись терпением.

Напоследок хотелось бы добавить, что перевозить кристально чистые диски тоже не стоит, так как это может вызвать дополнительные вопросы. В принципе, можно ответить, что только купил новый винт, так как старый пришел в негодность, но отличить перезаписанный нулями от нового можно при помощи S.M.A.R.T. Также не стоит забывать, что встреча с BPA может состояться не только на въезде в страну, но и на выезде.

Конкурс продолжается

Мы решили продлить конкурс и превратить его в постоянную акцию. Прислав нам описание хака, полезный совет или описание клевой неизвестной проги, ты по-прежнему можешь получить подписку на месяц, три месяца или, если постараешься, на год. Следуй рекомендациям и присылай свой текст!