Читал в интернете множество статей о размещении ключей шифрования на флешке, в большинстве случаев предлагается 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 и ключ на флешке”
“Если у вас уже имеется ключевой файл, расположенный к примеру в файле /tmp/devxx.key, можно перенести его в контейнер на флешке следующей командой
[root@localhost ~]# dd if=/dev/urandom of=/dev/mapper/key1 bs=1 count=256″
что-то тут не то..
@SirYorik
Точно-точно – ошибочка вышла:
Спасибо за исправления
Захотелось реализовать что-то подобное.
Насколько я понял, в Debian в составе пакета cryptsetup есть скрипт, который монтирует зашифрованные разделы по данным /etc/crypttab
В Centos такого скрипта нет, но может быть можно воспользоваться исходником Debian?
Дмитрий, привет.
Почему нет? CentOS также как и Debian отлично работает с crypttab, правда если нужно сделать более секьюрно, то лучше монтировать вручную.
Как использовать флэшку для шифрования базы данных, например MySQL данные
Уважаемый гуру! не могли бы вы обозначить, каким образом с помощью флэш, шифровать данные на MySQL? Или какие-нибудь ссылки по этому поводу.
Alex. На флешке храняться ключи шифрования, а шифруемые данные храняться на одтельном разделе диска. Что бы зашифровать данные MySQL нужно создать шифрованный раздел скопировать на его все из /var/lib/mysql и смонтировать его туда.
Вот
Друзья!
очень интересно, но я придумал очень классную утилитку по этому поводу, называется она gipsy, странно, но она решает все наболевшие вопросы и есть достаточно гибкая в настройках пользователя, довольно хорошую, простите очень хорошую защиту дает она. А эта флешка, есть просто интерпритация идентификации и от взломщика мало защитит, лучше вручную все вводить. Плохо то, что я очень хорошо разбираюсь в математике, криптографии, алгоритмах и как пользователь *nix-систем не плох, но я не програмист и это минус. Конечно, я локально попробую все-таки освоить язык программирования для решения этой задачи, но что-то туговато дается мне это, нужен учитель-гуру, который контролировал этот процесс обучения и давал правильные задания. Хотя идеей уже поделился с обществом и возможно ждите ее в скором будущем и удивляйтесь, как все классно! Еще трудность в том, что для лучшей защиты нужно её на уровне ядра использовать!