Създаване и употреба на криптирани CD и DVD носители

Версия 1.1.0, 4 януари 2009

Веселин Колев, Софийски Университет "Св. Климент Охридски"

Адрес за кореспонденция: vesso AT vesselin.org

Първоизточник: http://www.vesselin.org

Лиценз на документа: CC Attribution-ShareAlike

 

Съдържание:

  1. Увод

  2. Създаване и управление на ключове

  3. Създаване на криптиран CD или DVD носител

  4. Монтиране, прочит и демонтиране на криптиран CD или DVD носител

  5. Проверка за цялост на криптираното изображение

  6. Предишни версии на документа

 

1. Увод.

Твърде често в новинарските емисии се появяват съобщения за изгубени лични данни на клиенти на банки, застрахователни агенции и други. Ако изгубените носители на информация, съдържащи лични данни попаднат в престъпни ръце, това създава огромен риск за гражданите, фирмите и дръжавните институции. С откраднати лични данни могат да бъдат извършени редица престъпни дейности като пране на пари, незаконно прехвърляне на движимо или недвижимо имущество, застрахователни и данъчни измами и др. Всичко това може лесно да се предотврати, ако лични или изобщо важни данни, се пренасят в криптиран вид не само през Интернет, но и чрез информационен носител (най-често CD или DVD диск).

В съвремените условия на лесен и евтин достъп до клъстери с голяма изчислителна мощност, няма място за използване на "слаби" криптографски алгоритми. Именно затова винаги следва да се използват най-сигурните и неразбиваеми към момента криптографски алгоритми и хеш функции. В изложението по-долу са дадени примери с използването само на сигурни и надеждни криптографски алгоритми и хеш функции.

Предимството на криптирания CD или DVD носител е, че дава директен достъп до криптираната информация, което спестява време. За да се направи съпоставка, нека опишем стандартния случай, при който не се създава ISO изображение, а цялото криптирано съдържание е в някакъв файл. Ако например по този стандартен начин се криптира директория, това трябва да стане на две стъпки: (i) създава се архив, например tar или zip и (ii) полученият архив се криптира. Следователно за да може след това да се достъпи даден файл от криптираната директория, трябва да се декриптира целия архив. За архив с големина от няколко гигабайта, дори при съвременната процесорна мощ, това е дълъг и енергоемък процес. В противовес на това е криптираното ISO 9660 изображение. При него криптирането и декриптирането са поточни процеси и след като дадено криптирано ISO 9660 изображение се монтира като файлова система, достъпа до файловете и директориите в него е изключително лесен и сравнително бърз.

Документът е предназначен за всички организации боравещи с лични данни и съхраняващи ги или пренасящи ги върху CD или DVD носители. Примерите по-долу са реализирани върху операционна система Linux (ядро 2.6.18), дистрибуция Red Hat Enterprise Linux 5, съотв. CentOS 5, но почти без никаква промяна са приложими и върху други Linux базирани дистрибуции, които имат поддръжка на dm-crypt. Представените рецептури са обобщение на добрите практики за работа с dm-crypt при създаването и употребата на крипитани ISO 9660 изображения, публикувани в Интернет.

 

2. Създаване и управление на ключове.

Криптирането на важна информация следва да се извършва със сигурен ключ/парола, който не може да бъде лесно отгатнат (например с помощта на речници) и да бъде устойчив на атака на грубата сила (за целта трябва да е с подходяща дължина). Най-добре е такъв ключ да съдържа в себе си само случайна информация и да не представлява символен низ с познато или отгатваемо съдържание. Затова тук ще бъде даден пример с генериране на ключ на база на генератора на псевдослучайни числа на операционната система (/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 носител, като предварително се уговаря паролата, с която ключа е криптиран (ако се използва публична криптография, ключът се криптира с публичния ключ на получателя)

 

3. Създаване на криптиран 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

Горният команден ред работи за Fedora (9, 10 и по-високи версии), но не работи за Red Hat Enterprise Linux 5 и CenOS 5. Там трябва да се изчисли колко 1024 или 512 байтови блока са нужни, например:

$ dd if=/dev/zero of=/home/user/image.file bs=1024 count=716800

И в двата случая резултатът от изпълнението ще е файла /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, но всеки може да зададе скорост оптимална за типа на носителя и записващото устройство. Процесът на записване може да се извърши с права на непривилигерован потребител. В различни системи записващото устройство за CD или DVD носители може да е достъпно като друго (различно от /dev/dvd, /dev/dvdrw, /dev/dvdwriter и т.н) и това трябва да се съобрази.

След като носителят бъде създаден, е добре да се пресметне SHA-256 сумата на файла с изображението /home/user/image.file и тя да бъде използвана за проверка на целостта на криптирания носител (CD или DVD). Подробности за това могат да бъдат намерни в секция 5.

 

4. Монтиране, прочит и демонтиране на криптиран CD или DVD носител.

За да бъде монтиран криптиран 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

В различни системи четеца на CD или DVD носители може да е достъпен като друго устройство (различно от /dev/dvd) и това трябва да се съобрази.

 

5. Проверка за цялост на криптираното изображение.

Има известни затруднения с проверката на целостта на съдържанието за едно криптирано ISO изображение. Единствената достъпна за момента процедура е следната. Преди да се създаде криптираното ISO изображение, се изчисляват SHA-256 сумите на съдържащите се в него файлове. След като криптираното ISO изображение се създаде и се запише на носителя (CD или DVD), то се монтира и се изчисляват SHA-256 сумите на намиращите се в него файлове. Ако сумите получени за файловете преди влагането им в криптираното изображение, съвпаднат с тези, пресметнати за файловете от криптираното съдържание, то може да се твърди, че записът е цялостен и няма дефекти. Ако това наистина е така, се пресмята SHA-256 сумата на самото криптирано изображение и самата тя се използва като индикатор дали изображението е променяно впоследствие при съхранени или пренос (например нарушена е целостта на носителя и др).

Ето как конкретно се реализира тази процедура, като ще се предполага, че файловете, които са били поставени в криптираното ISO изображение се намират в директория /home/user/to_encrypt.


Пресмятат се SHA-256 сумите на файловете от локалната файлова система, които са били поставени или ще бъдат поставени в криптираното ISO изображение:

$ cd /home/users/to_encrypt
$ find . -type f -exec sha256sum {} \; > /home/user/sha256sums-fs.asc

Пресметнатите SHA-256 суми и имената на файловете, за които са пресметнати те, ще се намират във файла /home/user/sha256sums-fs.asc.

След като се създаде криптираното ISO изображение и се запише на носителя (CD или DVD), последния се монтира (например в точка на монтиране /mnt/encrcd) и се извършва пресмятане на SHA-256 сумите на файловете, намиращи се в него:

$ cd /mnt/encrcd
$ find . -type f -exec sha256sum {} \; > /home/user/sha256sums-iso.asc

Списъкът със сумите и файловете, за които те са изчислени, ще се намира във файла /home/user/sha256sums-iso.asc.

След това трябва да се прегледат за съответстви сумите в двата файла - всеки файл трябва да има една и съща SHA-256 сума върху файловата система (от файла /home/user/sha256sums-fs.asc) и от криптираното изображение (взета от файла /home/user/sha256sums-iso.asc). Това сравнение може да стане автоматизирано чрез инструмента diff:

$ cd /home/user
$ diff -Nur sha256sums-iso.asc sha256sums-fs.asc

Ако при изпълнението на последния команден ред не бъде изведено никакво съобщение, то SHA-256 сумите на файловете върху локалната файлова система и в криптираното изображение съвпадат, което означава, че няма дефект при записването на изображението върху носителя и няма проблеми с прочита му. Нужно е да се отбележи, че ако не се спазва рецептурата по-горе точно, особено в частта с влизането в правилната директория (cd ...), то инструмента diff винаги ще дава резултат за разлика, без да има проблеми със SHA-256 сумите, само защото относителните пътища до файловете ще са различни!

След успешна проверка по горната рецептура на SHA-256 сумите на файловете, може да се приеме, че криптираното изображение не е дефектно и е записано правилно върху носителя (CD или DVD). Следователно може да се изчисли SHA-256 сумата на криптираното ISO изображение (при поставен криптиран носител в четящото устройство) и тя да се използва като индикатор за неговата цялост:

$ dd if=/dev/dvd | sha256sum

Ако в конкретната система четящото устройство не е достъпно като /dev/dvd, трябва в горния команден ред да се зададе коректния път до него.


След като бъде изчислена SHA-256 сумата на криптираното изображение, тя може да се използва за проверка на целостта му при съхранение или пренос. Например, ако трябва да се изпрати криптирано ISO изображение, заедно с носителя се изпраща SHA-256 сумата на изображението (или се публикува на подходящото място в Интернет). Получателят пресмята сумата чрез примерния команден ред:

$ dd if=/dev/dvd | sha256sum

и сравнява двете суми (получената от изпращача и получената от локалното пресмятане). Ако те съвпаднат, то няма нарушение на целостта на криптираното изображение. В противен случай може да има повреда върху носителя или той да е модифициран при преноса. Отново трябва да се отбележи, че пътя до устройство /dev/dvd от последния команден ред е примерен. В различни системи четеца на CD или DVD носители може да е достъпен като друго устройство и това трябва да се съобрази.

Подобна процедура може да се следва и при проверка на целостта на архивни копия на носители, съдържащи крипитани ISO изображения.

 

6. Предишни версии на документа.

Версия 1.0.0
архив: encrypted_cd_dvd-v1.0.0.tar.bz2 [електронен подпис][TimeStamp]
diff:encrypted_cd_dvd-v1.1.0-v1.0.0.diff.gz [електронен подпис][TimeStamp]

 

Този документ е с OpenPGP подписано съдържание
[информация] [електронен подпис][TimeStamp]

Creative Commons - Признание 2.5 Valid CSS! Valid XHTML 1.1!