Версия 1.0.0, 1 януари 2009
Веселин Колев, Софийски Университет "Св. Климент Охридски"
Адрес за кореспонденция: vesso AT vesselin.org
Първоизточник: http://www.vesselin.org
Лиценз на документа: CC Attribution-ShareAlike
Съдържание:
Твърде често в новинарските емисии се появяват съобщения за изгубени лични данни на клиенти на банки, застрахователни агенции и други. Ако изгубените носители на информация, съдържащи лични данни попаднат в престъпни ръце, това създава огромен риск за гражданите, фирмите и дръжавните институции. С откраднати лични данни могат да бъдат извършени редица престъпни дейности като пране на пари, незаконно прехвърляне на движимо или недвижимо имущество, застрахователни и данъчни измами и др. Всичко това може лесно да се предотврати, ако лични или изобщо важни данни, се пренасят в криптиран вид не само през Интернет, но и чрез информационен носител (най-често CD или DVD диск).
В съвремените условия на лесен и евтин достъп до клъстери с голяма изчислителна мощност, няма място за използване на "слаби" криптографски алгоритми. Именно затова винаги следва да се използват най-сигурните и неразбиваеми към момента криптографски алгоритми и хеш функции. В изложението по-долу са дадени примери с използването само на сигурни и надеждни криптографски алгоритми и хеш функции.
Предимството на криптирания CD или DVD носител е, че дава директен достъп до криптираната информация, което спестява време. За да се направи съпоставка, нека опишем стандартния случай, при който не се създава ISO изображение, а цялото криптирано съдържание е в някакъв файл. Ако например по този стандартен начин се криптира директория, това трябва да стане на две стъпки: (i) създава се архив, например tar или zip и (ii) полученият архив се криптира. Следователно за да може след това да се достъпи даден файл от криптираната директория, трябва да се декриптира целия архив. За архив с големина от няколко гигабайта, дори при съвременната процесорна мощ, това е дълъг и енергоемък процес. В противовес на това е криптираното ISO изображение. При него криптирането и декриптирането са поточни процеси и след като дадено криптирано ISO изображение се монтира като файлова система, достъпа до файловете и директориите в него е изключително лесен и сравнително бърз.
Документът е предназначен за всички организации боравещи с лични данни и съхраняващи ги или пренасящи ги върху CD или DVD носители. Примерите по-долу са реализирани върху операционна система Linux 2.6.18, дистрибуция Red Hat Enterprise Linux 5, но почти без никаква промяна са приложими и върху други Linux базирани дистрибуции. Представените рецептури са обобщение на добрата практика, публикувана в Интернет.
Криптирането на важна информация следва да се извършва със сигурен ключ/парола, който не може да бъде лесно отгатнат (например с помощта на речници) и да бъде устойчив на атака на грубата сила (за целта трябва да е с подходяща дължина). Най-добре е такъв ключ да съдържа в себе си само случайна информация и да не представлява символен низ с познато или отгатваемо съдържание. Затова тук ще бъде даден пример с генериране на ключ на база на генератора на псевдослучайни числа на операционната система (/dev/urandom
):
$ dd if=/dev/urandom of=passkey-1 bs=512 count=1
С изпълнението на горния команден ред, се създава ключ/парола, на чиято основа впоследствие ще бъде изчислен 256 битовия ключ, използван от криптографския алгоритъм AES256 за криптиране или декриптиране на данните. Генерираният ключ е с дължина 512 байта (4096 бита).
Съдържанието на файла passkey-1
не бива да бъде достъпно за никого, освен за този, който криптира или декриптира съдържанието. Най-лесният начин да бъде ограничен достъпа е съдържанието да бъде криптирано посредством GnuPG (с използване на публична или симетрична криптография, в зависимост от предпочитанията или конкретните изисквания на случая).
Съдържанието на ключа трябва да бъде изпращано на получателя на криптираното съдържание или съхранявано само в криптиран вид. Възможно е за всеки създаван криптиран носител да бъде генериран индивидуален ключ. Въпреки, че добрата практика е да се използва индивидуален ключ за всеки създаден криптиран носител, тя рядко се спазва по различни обективни или субективни причини. Но ако се държи на максимално високо ниво на сигурност, тряба да се използва точно този подход.
За пълнота ще бъде представен пример за криптиране на съдържанието на генерирания ключ с инструмента gpg
:
$ gpg -c passkey-1
След като бъде въведена два пъти правилно паролата за криптиране на съдържанието, ще бъде създаден файла passkey-1.gpg
, но няма да бъде изтрит файла с некриптираното съдържание passkey-1
. Следователно след криптирането трябва да се изтрие passkey-1
. За най-добри резултати при изтриването на съдържанието на passkey-1
, може да се използва презаписването на файла със случайни числа, отново взети от генератора на случайни числа на операционната система /dev/urandom
(т.е. трябва отново да се изпълни командния ред за генериране на ключа, указан по-горе). За най-добри резултати може да се използва десетократно презаписване. След това така презаписаният файл може да се изтрие по обичайния за целта начин:
$ rm -f passkey-1
Файлът с криптирания ключ passkey-1.gpg
трябва да се съхранява като две или повече копия, за да се предотврати изгубването му. Ако този файл бъде изгубен, изтрит или увреден частично, криптираното с него съдържание на CD или DVD носителя няма да може да бъде прочетено! Копие от този файл се предоставя на получателя на криптирания CD или DVD носител, като предварително се уговаря паролата, с която ключа е криптиран (ако се използва публична криптография, ключът се криптира с публичния ключ на получателя)
Създаването на криптиран CD или DVD носител следва следната логика. Върху локалната файлова система се създава файл с нули, с капацитет равен на този на физическия носител, върху който след това ще буде записан. Този файл се форматира и монтира като криптиран дял с използването на cryptsetup и "device mapper" слоя на операционната система. След това в точката на монтиране на криптирания цял се създава ISO изображение. Следва демонтиране на криптирания дял със създаденото в него ISO изображение и поточното му записване върху носителя (CD или DVD).
Създаваният файл с нули следва да бъде равен или по-малък от капацитета на носитетеля. Това означава, че ако ще се създава криптиран CD носител за носител с капацитет 700 MB, създавания файл трябва да е с големина 700 MB и т.н. Независимо от нужния капацитет, създаването на файла с нули става с инструмента dd
, например за носител с капацитет 700 MB:
$ dd if=/dev/zero of=/home/user/image.file bs=700M count=1
Резултатът от изпълнението ще е файла /home/user/image.file
с големина 700 MB. Този файл трябва да бъде монтиран като псевдоустройство и да бъде форматиран като криптирана файлова система с инструмента cryptsetup
. За да се изпълнят тези две стъпки се изискват привилегии на супер потребител и достъп до ключа, генериран в секция 2 на тази статия (по-точно до некриптирания ключ):
# losetup /dev/loop1 /home/user/image.file # cryptsetup luksFormat -s 256 /dev/loop1 /home/user/passkey-1
Първият команден ред асоциира съдържанието на файла с псевдоустройството /dev/loop1
. Вторият извършва създаването на криптиран дял върху псевдоустройството, като преди да се извърши това, от потребителя ще бъде изискано въвеждането в диалогово меню на символния низ "YES" за потвърждение. Вече форматирания криптиран дял трябва да се монтира в "device mapper" слоя, като за целта под формата на аргумент се указва пътя до файла с генерирания ключ (виж предишната секция за подробности относно генерирането на ключа):
# cryptsetup luksOpen /dev/loop1 encriso -d /home/user/passkey-1
След това се извършва директен поточен запис на съдържанието, което ще бъде криптирано (за примера то се намира в директория /home/users/directory
), под формата на ISO изображение:
# mkisofs -r -R -J -l -L -allow-multidot /home/users/directory | dd of=/dev/mapper/encriso # cryptsetup luksClose /dev/mapper/encriso # losetup -d /dev/loop1
Когато записа на ISO изображението върху криптирания дял приключи, той трябва да се размонтира и да се спре асоциацията на псевдоустройството с файла, в който е реализиран дяла:
# cryptsetup luksClose /dev/mapper/encriso # losetup -d /dev/loop1
При успешното изпълнение на всички командни редове по-горе, криптираното ISO изображение ще се намира във файла /home/user/image.file
. Съдържанието му трябва да бъде записано на CD или DVD носител по същия начин, по който се записва некриптирано ISO изображение. Ако за целта се използва стандартен графичен софтуер за записване на ISO изображения (примерно k3b), това ще доведе до съобщение за грешка, долкото за софтуера изображението във файла няма да е валидно ISO изображение (то е криптирано и "невидимо" за инструментариума). Поради тази причина се използва инструмента за инкрементален запис growisofs
:
$ growisofs -Z /dev/dvdrw=/home/user/image.file -speed=8
В горния пример е указана скорост на записа 8x, но всеки може да зададе скорост оптимална за типа на носителя и записващото устройство. Процесът на записване може да се извърши с права на непривилигерован потребител. Физическото устройство използвано за примера е /dev/dvd
, но за различните хардуерни конфигурации, може да има различно име и това следва да се съобрази.
След като носителят бъде създаден, е добре да се пресметне SHA-256 сумата на файла с изображението /home/user/image.file
и тя да бъде използвана за проверка на целостта на криптирания носител (CD или DVD). Подробности за това могат да бъдат намерни в секция 5.
За да бъде монтиран криптиран CD или DVD носител са нужни права на супер потребител и достъп до ключа, с който е било криптирано съдържанието (виж секция 2 за подробности относно генерирането и съхранението на ключа). Създава се псевдоустройство, което след това с помощта на cryptsetup
и ключа за декриптиране, се монтира като дял в "device mapper" слоя на операционната система. Накрая създадения в "device mapper" слоя дял, се монтира като файлова система.
# losetup /dev/loop1 /dev/dvd # cryptsetup luksOpen /dev/loop1 encdvd -d /home/user/passkey-1 # mount /dev/mapper/encdvd /mnt/encdvd
След успешното изпълнение на посочените по-горе три командни реда, съдържанието в криптираното ISO изображение ще бъде достъпно за прочит през точката на монтиране /mnt/encdvd
. Ако потребителят не е запознат с някои от особеностите на "device mapper" реализацията, би счел за уместно директно да подаде името на устройство /dev/dvd
като аргумент на инструмента cryptsetup
, вместо /dev/loop1
(т.е. да пропусне първия команден ред и да модифицира втория). Причините да не може да бъде използвано директно устройството /dev/dvd
са комплексни и няма да бъдат дискутирани тук. Възможно е в по-новите реализации на "device mapper" слоя подобна директна поддръжка на това устройство да се появи, но към момента на написване на тази статия такава не е налична.
Демонтирането на вече монтирано криптирано ISO изобрежение става със следния примерен набор командни редове:
# umount /mnt/encdvd # cryptsetup luksClose /dev/mapper/encdvd # losetup -d /dev/loop1
Ако се следва рецептурата от секция 3, то се получава файл, съдържащ криптираното ISO изображение. Този файл за примера е /home/user/image.file
. Ако бъде изчислена неговата SHA-256 сума:
$ sha256sum /home/user/image.file
нейната стойност може да се използва за проверка на целостта на изображенията създадени върху CD или DVD носител. За целта тази стойност се изпраща на получателя на криптирания носител, заедно с носителя или се публикува на място, от което да бъде намерена по всяко време. След това получателят изчислява SHA-256 сумата на съдържанието върху получения криптиран носител:
$ dd if=/dev/dvd | sha256sum
и сравнява двете суми (получената от изпращача и получената от локалното пресмятане). Ако двете суми съвпаднат, то няма нарушение на целостта на криптираното изображение. В противен случай може да има повреда върху носителя или той да е модифициран при преноса. Отново трябва да се отбележи, че името на устройство /dev/dvd
от последния команден ред е примерно. В различни системи четеца на CD или DVD носители може да има друго име на устройство и това трябва да се съобрази.
Този документ е с OpenPGP подписано съдържание
[информация] [електронен подпис][TimeStamp]