Plokkseadme LUKS formaadis krüptimine
Sisukord
Plokkseadme krüptimine
Kõvakettal olevaid andmeid saab krüptida mitmes kihis, alates plokkseadme plokkidest (need tavaliselt 512 baidi suurused tükid) kuni failisüsteemis asuvate üksikute failide krüptimiseni. Järgnev käsitleb plokkseadme (nt partitsiooni, tarkvaralise RAID lülituse või LVM voluumi) krüptimist.
Plokkseadme krüptimine on üks andmekandja füüsilise turvalisusega seotud instrument. St kui nt krüptitud ja parasjagu kasutuses mitte olev kõvaketas kaotsi läheb või ära varastatakse, siis ei saa seda kasutada ilma vastava parooli või võtmeta. Kui aga krüptitud plokkseadmelt on failisüsteem külge ühendatud, siis ei paku asjaolu, et plokkseade on krüptitud mingit täiendavat kaitset nt süsteemi sisse murdnud pahalase eest. Kõvaketta krüptimine on samuti asjakohane kõvaketta laenutamise või remonti saatmise juhtumil.
Andmekandjal asuvate andmete sh plokkseadme krüptimiseks on konstrueeritud mitmesuguseid tehnikaid, käesolevas palas tutvustatakse Linuxi tuuma dm-crypt alamsüsteemi abil LUKS (ingl. k. Linux Unified Key Setup) formaadis andmete krüptimist. Kerneli vastavate funktsioonide juhtimiseks kasutatakse tarkvara cryptsetup.
LUKS'ile on iseloomulik
- väidetavalt eeskujulikult dokumenteeritud ja standardne lahendus
- LUKSi saab portida erinevatele platvormidele (osalt järeldub eelmisest), nt http://en.wikipedia.org/wiki/FreeOTFE
- haldusprotseduure saab pandlikult sooritada (nt võtmete vahetamine)
Muud tuntud Linux tuuma DM (device mapper) infrastruktuuri kasutavad alamsüsteemid on nt LVM2 (Logical Volume Management) ja multipath. DM võimaldab moodustada füüsilistele plokkseadmetele nn virtuaalseid kihte.
Krüptitud plokkseadme kasutamist võiks ette kujutada selliselt
/home /dev/mapper/c_home /dev/sdb1 failisüsteem <---> loogiline liides <---> füüsiline plokkseade nt ext3 encrypt/decrypt
- füüsilisel plokkseadmed on andmed krüptitud
- selleks, et füüsilisel plokkseadmed olevaid andmed saaks operatsioonisüsteem kasutada moodustatakse loogiline liides, mis on iseenesest samuti plokkseade ja mis töötab vahendajana füüsilise plokkseadme ja nö muu arvuti vahel ja mille ülesanne on ühes suunas liikuvaid andmeid krüptida ja teises suunas lahti krüptida
- failisüsteemi kiht (ja seda kasutavad rakendusprogrammid) kasutab nö tavalist plokkseadet ja ei pea midagi teadma seal taga toimuvast krüptimisest
- cryptsetup tarkvara abil juhitakse skeemil kujutatud loogilise liidese tööd (määratakse krüptoalgoritmid, võtmete pikkused jms)
Ettevalmistused
Selleks, et sissejuhatuses kirjeldatud moel krüptimist korraldada peab olema operatsioonisüsteemi tuumas vajalik tugi ning olemas olema vajalik haldustarkvara. Moodsates Linuxi distributsioonides sisaldub üldiselt kõik vajalik ja midagi ei ole kompileerida tarvis. Debian GNU/Linuxi kasutamisel piisab kui öelda
# apt-get install cryptsetup
Lisaks peab olema kasutada mõni plokkseade, mida saab hakata krüptitud kasutuseks ettevalmistama, nt olgu fdisk abil moodustatud partitsioon /dev/hdb1 ning kavatsus seda kasutada süsteemi kasutajate kodukataloogide jaoks. Lisaks soovitatakse see seade ennem kasutamist kirjutada üle juhuslike andmetega, nt piisavalt kvaliteetse tulemuse võiks saada nii, arusaadavalt hävivad seejuures partitsioonil olnud andmed
# dd if=/dev/urandom of=/dev/sdb1
Plokkseadmele LUKS formaadi moodustamine
Krüptimisel on oluline kasutatav võti, cryptsetup võimaldab kasutada kas failis asuvat võtit või klaviatuurilt sisestatavat parooli. Järgnevas on eelistatud võtme kasutamist failist, kuna sel moel on võtme materjal kvaliteetsem ning praktiliseks kasutamiseks ehk ka mugavam, nt saab bootimisel võtme anda arvutile ette USB pulgalt. Vajadusel saab LUKS võtme omakorda krüptida nt parooliga.
Moodustame 256 baidi pikkuse võtme
# dd if=/dev/random of=/root/cryptsetup-hdb1.key bs=1 count=256
Plokkseadme krüptimiseks tuleb esmalt plokkseadmele vastav LUKS formaat tekitada öeldes
# cryptsetup --key-size=256 luksFormat /dev/hdb1 /root/cryptsetup-hdb1.key
Tulemus saab vaadata öeldes
# cryptsetup luksDump /dev/hdb1 LUKS header information for /dev/hdb1 Version: 1 Cipher name: aes Cipher mode: cbc-essiv:sha256 Hash spec: sha1 Payload offset: 2056 MK bits: 256 MK digest: 69 84 d4 bb 3f 67 0b ac f3 8f 84 b3 4c f7 08 2e 9c 9a c2 ca MK salt: ab e9 db 52 73 54 62 0a 2d bb a3 0e 6b c1 f6 fe 6b 42 c7 bb f2 41 4b 2e 12 61 33 ac 5b ff 82 f6 MK iterations: 10 UUID: 0a9ca3d6-7e86-4fc6-999c-153b0fd0d266 Key Slot 0: ENABLED Iterations: 424787 Salt: 87 7b 1c da 55 bb 0f d2 cc ef a3 a9 f5 e1 ed fa 8b 16 05 53 66 29 ae bf f5 3e e9 b7 d3 fc 39 5e Key material offset: 8 AF stripes: 4000 Key Slot 1: DISABLED Key Slot 2: DISABLED Key Slot 3: DISABLED Key Slot 4: DISABLED Key Slot 5: DISABLED Key Slot 6: DISABLED Key Slot 7: DISABLED
Siinjuures on näha, et selle ühe ja sama plokkseadme puhul saab kasutada kuni kaheksat erinevat võtit/parooli.
Kõik krüptoseadet puudutavad andmed sisalduvad formaaditud seadmes endas va ligipääsuks vajalik võti/parool. Kuna nende andmete hoidmiseks on tarvis krüptitud seadmel natuke ruumi, siis kasutatav krüptitud seadmele vastava loogilise seadme maht on pisut väiksem vastava füüsilise seadme mahust.
Lisaks füüsilisele seadmele saab krüptida ka nt tarkvaralise RAID seadmeid või LVM voluume.
Krüptitud plokkseadme kasutamine
Krüptitud plokkseadme kasutamiseks tuleb seade avada öeldes
# cryptsetup --key-file /root/cryptsetup-hdb1.key luksOpen /dev/hdb1 c_home key slot 0 unlocked. Command successful.
Avatud seadme kohta saab küsida tema andmeid nii
# cryptsetup status c_home /dev/mapper/c_home is active: cipher: aes-cbc-essiv:sha256 keysize: 256 bits device: /dev/dm-43 offset: 2056 sectors size: 100661240 sectors mode: read/write
Tulemusena on moodustatud operatsioonisüsteemi ja krüptitud plokkseadme vahele pala alguses mainitud loogiline liides nimega /dev/mapper/c_home mida saab kasutada nagu tavalist plokkseadet. Antud juhul on nimeks valitud c_home, aga see võib olla ka samahästi midagi muud. Esmakordsel kasutamisel tuleks sinna moodustada failisüsteem
# mke2fs -j /dev/mapper/c_home
ning seejärel saab ta külge ühendada ning kasutama asuda, andmete krüptimisega eest hoolitseb Linuxi tuum
# mount /dev/mapper/c_home /home
Kasutamise lõpetamiseks tuleb ühendada failisüsteem lahti
# umount /dev/mapper/c_home
ja sulgeda loogiline liides, sulgemisel pole vaja võtit/parooli näidata
# cryptsetup luksClose c_home
Selleks, et failisüsteemi külgeühendamine toimuks arvuti alglaadimisel automaatselt sobib kasutada faili /etc/crypttab sisuga kusjuures võtme loabittide väärtuseks on 0600
c_home /dev/hdb1 /root/cryptsetup-hdb1.key luks
ja /etc/fstab
/dev/mapper/c_home /home ext3 defaults 0 2
Arvuti töötamise ajal saab /etc/crypttab'iga töötamist esile kutsuda öeldes
# /etc/init.d/cryptdisks start | stop
Krüptitud seadme haldamine
Kõige levinumaks haldusprotseduuriks on krüptitud seadmega seotud paroolide/võtmetega tegelemine. Nt saab võtme lisada öeldes
# cryptsetup --key-file /root/cryptsetup-hdb1.key luksAddKey /dev/hdb1 /root/cryptsetup-hdb1-teine.key
Seejuures tuleb tähele panna, et nüüd saab kasutada sama krüptitud seadet nende mõlema võtmega.
Võtme eemaldamiseks tuleb öelda
# cryptsetup --key-file /root/cryptsetup-hdb1.key luksKillSlot /dev/hdb1 1 key slot 1 verified. Command successful.
Oluline on mitte kõiki võtmeid/paroole eemaldada, vastasel korral ei pääse enam andmetele juurde.
Krüptitud seadme kasutamise lõpetamiseks tuleb kõik võtmed hävitada ja võtta seade uude kasutusse.
Plokkseadme krüptimine koos tarkvaralise RAID ja LVM lahendusega
Kuna plokkseadme krüptimisel on nö sisendiks ja väljundiks samuti plokkseade, siis saab seda teha RAID ja LVM lahenduse puhul põhimõtteliselt kolmes kohas
- failsüsteem -> LVM -> RAID -> loogiline liides -> krüptitud füüsiline seade (nt /dev/hdb1)
- failsüsteem -> LVM -> loogiline liides -> krüptitud RAID seade (nt /dev/md0)-> füüsiline seade
- failsüsteem -> loogiline liides -> krüptitud LVM voluum (nt /dev/system/home) -> RAID -> füüsiline seade
Valiku tegemisel peab arvestama, millised asjaolud on olulised. Nt kui krüptida LVM voluume, siis saab igale voluumile omistada erineva parooli/võtmega; kui krüptida kiht madalamal, siis on kõik voluumid plokkseadme krüptimise mõttes kaitstud sama LUKS parooli/võtmega.