Читал в интернете множество статей о размещении ключей шифрования на флешке, в большинстве случаев предлагается 2 варианта:

1. Флешка вставляется при загрузке системы

2. Вставляешь флешку диск автоматом расшифровывается

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

Эта статья описываем один из вариантов решения данной проблемы. На флеш-диске оставляется небольшая не размеченная область, куда помещаются ключи зашифрованные парольной фразой.

1. Подготовка флеш-диска

И так подключаем нашу флешку – в моем случае это JetFlash Transcend 16GB, определившийся в системе как /dev/sdc. Для изменения размера разделов используем fdisk.

[root@localhost ~]# fdisk /dev/sdc
 
The number of cylinders for this disk is set to 1953.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs(e.g., DOS FDISK, OS/2 FDISK)

Просматриваем имеющиеся на диске разделы, нажав p.

Command (m for help): p
 
Disk /dev/sdc: 16.0 GB, 16064184320 bytes
255 heads, 63 sectors/track, 1953 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
 
Device Boot      Start         End      Blocks   Id  System
/dev/sdc1               1        1953    15685632    7  HPFS/NTFS

Переключаемся в режим отображения секторов вместо юнитов.

Command (m for help): u
Changing display/entry units to sectors

Еще раз просматриваем имеющиеся разделы

Command (m for help): p
 
Disk /dev/sdc: 16.0 GB, 16064184320 bytes
255 heads, 63 sectors/track, 1953 cylinders, total 31375360 sectors
Units = sectors of 1 * 512 = 512 bytes
 
Device Boot      Start         End      Blocks   Id  System
/dev/sdc1            2048    31373311    15685632    7  HPFS/NTFS

Удаляем основной раздел, что бы освободить место для ключей.

Command (m for help): d
Selected partition 1

Создаем его заново, для чего нажимаем n – создать новый раздел, затем p – основной, затем 1 – первый раздел. Первый сектор раздела оставляем по умолчанию, а последний вычисляем из расчета последний сектор по умолчанию минус 16 секторов под ключи (в моем случае 31375359-16=31375343).

Command (m for help): n
Command action
e   extended
p   primary partition (1-4)p
Partition number (1-4): 1
First sector (63-31375359, default 63):
Using default value 63
Last sector or +size or +sizeM or +sizeK (63-31375359, default 31375359): 31375343

Проверяем что получилось.

Command (m for help): p
 
Disk /dev/sdc: 16.0 GB, 16064184320 bytes
255 heads, 63 sectors/track, 1953 cylinders, total 31375360 sectors
Units = sectors of 1 * 512 = 512 bytes
 
Device Boot      Start         End      Blocks   Id  System
/dev/sdc1              63    31375343    15687640+  83  Linux

Записываем данные:

Command (m for help): w
The partition table has been altered!
 
Calling ioctl() to re-read partition table.
Syncing disks..

Заполняем бессвязными данными, освобожденное под ключи пространство.

[root@localhost ~]# dd if=/dev/urandom of=/dev/sdc seek=31375343 bs=512 count=16
16+0 records in16+0 records out
8192 bytes (8.2 kB) copied, 0.00858642 seconds, 954 kB/s

Теперь флешку можно отформатировать в нужной файловой системе и хранить на ней файлы как ни в чем не бывало.

2. Cоздание-копирование ключей.

На флешке есть 16 свободных секторов – “контейнеров”, в каждом из которых можно разместить по 1 ключу длинной до 512байт. Расшифровываем один из контейнеров и вводим дважды парольную фразу.

[root@localhost ~]# cryptsetup -c aes-cbc-essiv:sha256 -o 31375344 -b 1 -y create key1 /dev/sdc
Enter passphrase:
Verify passphrase:

Если у вас уже имеется ключевой файл, расположенный к примеру в файле /tmp/devxx.key, можно перенести его в контейнер на флешке следующей командой

[root@localhost ~]# dd if=/tmp/devxx.key of=/dev/mapper/key1 bs=1 count=256

А затем безвозвратно затереть:

[root@localhost ~]# shred -u -z -n 30 /tmp/devxx.key

Если у нас нет готового ключа, то мы можем его создать:

[root@localhost ~]# dd if=/dev/urandom of=/dev/mapper/key1 bs=1 count=256

3. Немножко об использовании.

Подключаем флешку и расшифровываем ключ

[root@localhost ~]# cryptsetup -c aes-cbc-essiv:sha256 -o 31375344 -b 1 -y create key1 /dev/sdc
Enter passphrase:
Verify passphrase:

Расшифровываем раздел ключем с флешки

[root@localhost ~]# cryptsetup -c aes-cbc-essiv:sha256 -d /dev/mapper/key1 -s 256 create esdb /dev/sdb

Отключаем ключ шифрования и вытаскиваем флешку

[root@localhost ~]# cryptsetup remove key1

Монтируем расшифрованный раздел

[root@localhost ~]# mount /dev/mapper/esdb /mnt

Для упрощения можно былобы написать небольшой скрипт вроде:

#/bin/sh
cryptsetup -c aes-cbc-essiv:sha256 -o 31375344 -b 1 -y create key1 /dev/sdc
cryptsetup -c aes-cbc-essiv:sha256 -d /dev/mapper/key1 -s 256 create esdb /dev/sdb
cryptsetup remove key1
mount /dev/mapper/esdb /mnt

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

4. Заключение

Тема защиты информации была и думаю останется для меня достаточно приоритетной. Как сказал Уинстон Черчиль “Кто владеет информацией – тот владеет миром”.

Если в есть как-нибудь идеи в этой области – пишите с удовольствием их рассмотрю.

Заранее спасибо.

33 Коммент. : “Cryptsetup и ключ на флешке”

  1. SirYorik пишет:

    “Если у вас уже имеется ключевой файл, расположенный к примеру в файле /tmp/devxx.key, можно перенести его в контейнер на флешке следующей командой
    [root@localhost ~]# dd if=/dev/urandom of=/dev/mapper/key1 bs=1 count=256″

    что-то тут не то..

  2. Alsigned пишет:

    @SirYorik
    Точно-точно – ошибочка вышла:

    dd if=/dev/devxx.key of=/dev/mapper/key1 bs=1 count=256

    Спасибо за исправления ;)

  3. Дмитрий пишет:

    Захотелось реализовать что-то подобное.
    Насколько я понял, в Debian в составе пакета cryptsetup есть скрипт, который монтирует зашифрованные разделы по данным /etc/crypttab
    В Centos такого скрипта нет, но может быть можно воспользоваться исходником Debian?

  4. Дмитрий, привет.

    Почему нет? CentOS также как и Debian отлично работает с crypttab, правда если нужно сделать более секьюрно, то лучше монтировать вручную.

  5. Как использовать флэшку для шифрования базы данных, например MySQL данные

  6. Уважаемый гуру! не могли бы вы обозначить, каким образом с помощью флэш, шифровать данные на MySQL? Или какие-нибудь ссылки по этому поводу.

  7. Alex. На флешке храняться ключи шифрования, а шифруемые данные храняться на одтельном разделе диска. Что бы зашифровать данные MySQL нужно создать шифрованный раздел скопировать на его все из /var/lib/mysql и смонтировать его туда.

    Вот ;)

  8. OR пишет:

    Друзья!
    очень интересно, но я придумал очень классную утилитку по этому поводу, называется она gipsy, странно, но она решает все наболевшие вопросы и есть достаточно гибкая в настройках пользователя, довольно хорошую, простите очень хорошую защиту дает она. А эта флешка, есть просто интерпритация идентификации и от взломщика мало защитит, лучше вручную все вводить. Плохо то, что я очень хорошо разбираюсь в математике, криптографии, алгоритмах и как пользователь *nix-систем не плох, но я не програмист и это минус. Конечно, я локально попробую все-таки освоить язык программирования для решения этой задачи, но что-то туговато дается мне это, нужен учитель-гуру, который контролировал этот процесс обучения и давал правильные задания. Хотя идеей уже поделился с обществом и возможно ждите ее в скором будущем и удивляйтесь, как все классно! Еще трудность в том, что для лучшей защиты нужно её на уровне ядра использовать!

Оставить комментарий