Anunţ

Caută printre mesajele de pe forum înainte de a scrie unul nou!
Formulează corect întrebarea sau problema pe care o ai.
Respectă regulile forumului și Codul de Conduită!

#1 13 Jan 2015 18:56:29

guletz2002
Membru
Locaţie: Brasov
Înregistrat: 09 Sep 2009
Mesaje: 1512

LUKS (Linux Unified Key Setup): criptare block device - introducere

Buna ziua,


Unealta din titlu permite criptarea un disk complet sau a unei partitii de disk, sau a orice care expune un BLOCK-DEVICE(deci un fisier via loop, sau volum iSCSI, etc). Caz concret, avem un laptop, avem un linux deja instalat si o partitie/disk neutilizata, sa zicem ca se numeste /dev/sdaX. Ajustati dupa cazul vostru concret. Acest sistem este considerat cel mai sigur mod de criptare de pe linux. Se poate face ca tot discul sa fie criptat, si imediat dupa boot, se introduce o parola, si sistemul se decripteaza on-the-fly. Evident performantele la lucrul cu un sistem/partitie criptata e mai redus decat la un sistem necriptat. Al doilea mare dezavantaj, este ca daca avem ceva probleme cu acel BD(block-device), ca in cazul in care pica curentul, e posibil sa avem probleme mari si sa ne trezim cu un sistem inutilizabil. Dar pentru asta s-a inventat backup-ul. Oricum in cazul unui laptop, acest risc este f.mult redus. A doua masura de siguranta care se poate lua, este ca acest sistem criptat sa se afle peste un volum manager(LVM / btrfs /zfs). Aceste sisteme permit crearea de "poze"(snapshot-ri) a ceea ce se afla pe ele, si in felul asta riscul mentionat devine aproape NULL(de departe va recomand zfs).
  Avem nevoi sa ne decidem daca decriptarea dorim sa o facem cu o parola, sau cu o keie de criptare. Varianat cu parola este cea mai potrivita la un laptop, cu mentiunea ca portiune criptata poate fi atacata cu un sistem de tip "brute-force". Varianata cu keie este deci mai sigura din punctul asta de vedere, dar managementul keilor de criptare aduce o complexitate in plus. Mai departe voi prezenta doar varianta cu parola. Mai trebuie sa ne stabilim un algoritm de criptare. Se considera actualmente ca algoritmul AES, este f. sisgur, si ca nu exista metotde de atac rezonabil(adica consumand timp si avand resurse hardware desobite) care sa reuseasca chiar si prin brute-force. De aceea, este folosit de firme mari, banci, armata, samd in toata lumea. Totusi, specialistii in criptare considera, ca este mult mai greu de spart algoritmul numit SERPENT. De asemenea trebuie mentionat ca procesoarele INTEL mai noi(i5, i7 de exemplu),au suport integrat pentru AES, deci au un spor de viteza. Mie nu-mi place asta, intrucat nu poti fi sigur ce "balaurii" misca pe acolo.....  Deci eu voi continua mai departe cu serpent .... "prietenii stiu de ce", nu-i asa ? wink

Orice sistem linux din ultimii 3-4 ani are disponibi luks. Comenzile urmatoare se presupun a se exexuta sub un user cu drept de root.

1. Verificam ce stie kernelul nostru despre criptare(la voi poate sa arate diferit):

Cod:

cat /proc/crypto | grep name
name         : cbc(serpent)
name         : cbc(serpent)
name         : stdrng
name         : lzo
name         : arc4
name         : aes
name         : tnepres
name         : serpent
name         : twofish
name         : blowfish
name         : des3_ede
name         : des
name         : wp256
name         : wp384
name         : wp512
name         : sha512
name         : md5
name         : md4
name         : twofish
name         : aes

- stergem bine acea partitie - atentie sa nu stergeti ALTA:

Cod:

badblocks -c 10240 -s -w -t random -v /dev/sdaX

- putem sa repetam stergerea de 2-3 ori ca sa fim siguri

2. Incarcam modulele de kernel necesare:

Cod:

modprobe dm-crypt
 
modprobe dm-mod
 
modprobe serpent
 
modprobe sha256
 
modprobe blowfish
 
modprobe aes

- importante sunt: serpent, sha256 si dm-crypt

3. Initializam partitia neutilizata sdaX, ca partitie criptata luks, iaca asa:

Cod:

cryptsetup --verify-passphrase --cipher serpent-cbc-essiv:sha256 --key-size 256 luksFormat /dev/sdaX

- ni se cere o parola(intai confirmam cu YES - majuscule), pe care o introducem de la tastatura si apoi o tastam din nou.

Evident, trebuie sa alegem o parola buna si sa o si pastram undeva la loc sigur, in 2 locatii diferite, daca nu vrem probleme. Cateva ideii:
- luam adresa MAC a placii de retea de la un prieten bun, sau de la o placa de retea mai veche, dar pe care nu o mai folosim, si aplicam asa:

Cod:

echo "4C:2E:1C:9E:90:CB"|md5sum|sha512sum

, si obtinem  ceva de genul:

Cod:

2e42612a45d36e7613d047712086cf853f7efa74af09393e3d008010a5bdb005307d6e3f2c05e618e087c9d50346291b9ef3463ca9a50b16f09bedb6e1aa0e71  -

- si din sirul de mai sus vom schimba/adauga cateva caractere ....
- pe acelasi principiu, in loc de adresa MAC a placii de retea, putem lua o fraza oarecare dintr-o carte preferata: "Nu stiu altii cum sunt dar eu cand ma gandesc ....", si aplicam acelasi algoritm
- sau am putea lua o poza, un fisier mp3,un mail, etc:

Cod:

cat nume_fisier|md5sum|sha512sum

Ideea este ca parola de criptare/decriptare o obtinem din ceva ce AVEM(adresa MAC, fisier, etc) si din ceva ce STIM(md5sum si sha512 + cateva caractere modificate de noi)



Este totusi recomandabil ca cat timp lucram cu configurarea, sa nu avem nici o conexiune la internet(evident, nu?).

Bun deci am creat acea partitie criptata.

4. Verificam, ca avem acea partitie criptata:

Cod:

cryptsetup isLuks /dev/sdaX; if [[ $? == 0 ]]; then echo "Yes"; else echo "No"; fi

- daca apare Yes, inseamna ca este bine, daca nu am gresit ceva(poate testam alata partitie decat sdaX?)

5. Verificam informatiile de criptare:

Cod:

cryptsetup luksDump /dev/sdaX
LUKS header information for /dev/sdaX
 
Version:        1
Cipher name:    serpent
Cipher mode:    cbc-essiv:sha256
Hash spec:      sha1
Payload offset: 2056
MK bits:        256
MK digest:      14 2d 70 4b a5 ec 9b 84 14 45 1c 1d ad a9 3a 43 dd 10 d6 56
MK salt:        ab 28 fc 71 e8 51 dc 21 40 bd 70 83 00 51 27 fa
                ef 83 37 11 27 f4 80 5d 76 19 29 31 cc 8b 17 b2
MK iterations:  47625
UUID:           ac893c93-ad97-4cb0-a6b2-07e0c5e918c4
 
Key Slot 0: ENABLED
        Iterations:             190775
        Salt:                   f6 cb b8 66 e4 ad bf c5 14 7c 20 7a 20 93 75 aa
                                74 51 3d e3 10 23 18 11 c4 fc f3 54 e7 07 38 e9
        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

- daca apare ceva de genul asta este OK;
- observati ca sunt 8 sloturi pentru kei/parole de criptare, si noi folosim Slot 0, deci putem crea inca 7 parole diferite de criptare, daca dorim sau de exemplu acel laptop este folosit de mai multe persoane;
- evident se pot si modifica aceste kei/parole de criptare;

6. De-criptarea partitiei, se face prin pasii:

- aflam id-ul

Cod:

cryptsetup luksUUID /dev/sdaX

... si vedem ceva in genul asta:

Cod:

ac893c93-ad97-4cb0-a6b2-07e0c5e918c4

... si cu id-ul obitinut anterior, decriptam acesta partitie(si ni se cere parola stabilita de noi la pct. 3, la initializare ):

Cod:

cryptsetup luksOpen /dev/sdaX ac893c93-ad97-4cb0-a6b2-07e0c5e918c4

Deci, daca parola introdusa a fost ce corecta, din momentul asta partitia este DECRIPTATA. Fizic, aceasta partitie decriptata este mapata in /dev/mapper/id:

Cod:

ls -l /dev/mapper/ac893c93-ad97-4cb0-a6b2-07e0c5e918c4

lrwxrwxrwx 1 root root 7 2015-01-13 18:27 /dev/mapper/ac893c93-ad97-4cb0-a6b2-07e0c5e918c4 -> ../dm-0

7. Formatarea partitiei cu sistem ext4(presupun ca avem un disk cu sectoare 4K/AFS, adica - b 4096 ):

Cod:

mkfs.ext4 -b 4096 -L URAURA /dev/mapper/ac893c93-ad97-4cb0-a6b2-07e0c5e918c4

8. Montarea partitiei decriptate undeva in sistem(/mnt/private de ex.):

Cod:

mount -o defaults,noatime /dev/mapper/ac893c93-ad97-4cb0-a6b2-07e0c5e918c4  /mnt/private

- din momentul asta, putem folosi zona criptata din /mnt/private

9. Demontarea:

Cod:

umount  /mnt/private

10. Inchiderea zonei criptate(pe baza id-ui ):

Cod:

cryptsetup luksClose ac893c93-ad97-4cb0-a6b2-07e0c5e918c4

- in acest moment toate datele sunt pastrate in forma criptata
Daca Doamne fereste ati pierdut laptop-ul la o cafenea, puteti totusi sa stati linistit, pozele compromitatoare .... se afla la loc sigur, luks sa traiasca !!! Glumeam evident wink


Recomandare: criptati orice se poate(mail-ri, fisiere, stiti voi mai bine .... ), si face-ti backup regulat la datele criptate !!!! Testati intai setup-ul intr-o masina virtuala, si atentie care-i /dev/sdX-ul in cazul vostru! A, sa nu uit .... un ultim tips, putem intr-o partitie cripatata, sa cream alta partitie cripatat, cu alt algoritm/parametrii/parola, sau keie.

Daca sunt amatori pot face si o continuare(criptare cu keie, management kei de criptare, etc, numa sa fie si amatori)

Cam asta a fost, sper sa nu-mi fi scapat ceva ca data trecuta cu GeoIP wink

Update 01: daca acea partitie nu este peste ceva care suporta snapshot, atunci este recomandabil(as zice chiar obligatoriu) sa creati un backup al hederelor luks, cam asa:

Cod:

cryptsetup luksHeaderBackup /dev/sdaX --header-backup-file /cale_backup/luksHeaderBackup.txt

- acest fisier de backup trebuie pus/pastrat pe altceva decat pe masina sursa(un HDD mobil de ex.), si nu ar fi rau ca el sa fie criptat
- acest backup trebuie re-creat daca modificam kei luks(adaugare/stergere/modificare)
- in caz de probleme, cu acest fisier, se restaureaza hederele din lucks, asa:

Cod:

cryptsetup luksHeaderRestore /dev/sdaX --header-backup-file  /cale_backup/luksHeaderBackup.txt

Update 02: Cu ce facem backup la aceasta partitie criptata cu luks? Ia sa va vad .... daca aveti idei bune !!!

Editat ultima oară de guletz2002 (20 Jan 2015 08:26:23)


Daca retea Nu e, atunci nimic nu e !!!
LiCo : Proud GNU/Linux User since 2003.

Offline

 

#2 13 Jan 2015 22:58:43

ionelbogos
Membru
Locaţie: unknown
Înregistrat: 02 May 2013
Mesaje: 101
Site web

Re: LUKS (Linux Unified Key Setup): criptare block device - introducere

Eu nu am serpent asta.

Cod:

cat /proc/crypto | grep name
name         : ccm(aes)
name         : ctr(aes)
name         : ctr(aes)
name         : ecb(arc4)
name         : arc4
name         : cbc(aes)
name         : hmac(sha256)
name         : hmac(sha1)
name         : stdrng
name         : lzo
name         : crct10dif
name         : crc32c
name         : aes
name         : sha384
name         : sha512
name         : sha224
name         : sha256
name         : sha1
name         : md5

I would love to change the world but they won´t give me the source code.

Offline

 

#3 13 Jan 2015 23:09:11

guletz2002
Membru
Locaţie: Brasov
Înregistrat: 09 Sep 2009
Mesaje: 1512

Re: LUKS (Linux Unified Key Setup): criptare block device - introducere

poti sa nu ai, dar vezi daca poti incarca modulul de kernel:

modprobe serpent

Daca merge incarcarea e ok, si verifici din nou cu
cat /proc/crypto sa vezi daca apare serpent.


Daca retea Nu e, atunci nimic nu e !!!
LiCo : Proud GNU/Linux User since 2003.

Offline

 

#4 13 Jan 2015 23:14:15

V3n3RiX
Membru
Locaţie: Birmingham UK
Înregistrat: 03 Sep 2011
Mesaje: 1021
Site web

Re: LUKS (Linux Unified Key Setup): criptare block device - introducere

Daca nu ai, tresa recompilezi kernelul. Gasesti serpent la Cryptographic options. De acolo activezi/dezactivezi algoritmi de criptare, optimizari ale algoritmilor in functie de setul de instructiuni, de arhitectura, etc. Uite cum apare la mine (activat cam tot + optimizari):

Cod:

name         : hmac(sha256)
name         : sha256
name         : hmac(sha224)
name         : sha224
name         : hmac(sha1)
name         : sha1
name         : xts(aes)
name         : cmac(aes)
name         : rfc3686(ctr(aes))
name         : ctr(aes)
name         : ofb(aes)
name         : cfb(aes)
name         : cbc(aes)
name         : ecb(aes)
name         : ghash
name         : stdrng
name         : stdrng
name         : lz4hc
name         : lz4
name         : lzo
name         : crct10dif
name         : crc32
name         : crc32c
name         : michael_mic
name         : zlib
name         : deflate
name         : salsa20
name         : seed
name         : anubis
name         : khazad
name         : xeta
name         : xtea
name         : tea
name         : ecb(arc4)
name         : arc4
name         : cast6
name         : cast5
name         : camellia
name         : aes
name         : tnepres
name         : serpent
name         : twofish
name         : blowfish
name         : fcrypt
name         : des3_ede
name         : des
name         : tgr128
name         : tgr160
name         : tgr192
name         : wp256
name         : wp384
name         : wp512
name         : sha384
name         : sha512
name         : sha224
name         : sha256
name         : sha1
name         : rmd320
name         : rmd256
name         : rmd160
name         : rmd128
name         : md5
name         : md4
name         : digest_null
name         : compress_null
name         : ecb(cipher_null)
name         : cipher_null
name         : xts(serpent)
name         : lrw(serpent)
name         : ctr(serpent)
name         : cbc(serpent)
name         : ecb(serpent)
name         : __xts-serpent-avx
name         : __lrw-serpent-avx
name         : __ctr-serpent-avx
name         : __cbc-serpent-avx
name         : __ecb-serpent-avx
name         : xts(twofish)
name         : lrw(twofish)
name         : ctr(twofish)
name         : cbc(twofish)
name         : ecb(twofish)
name         : __xts-twofish-avx
name         : __lrw-twofish-avx
name         : __ctr-twofish-avx
name         : __cbc-twofish-avx
name         : __ecb-twofish-avx
name         : xts(cast6)
name         : lrw(cast6)
name         : ctr(cast6)
name         : cbc(cast6)
name         : ecb(cast6)
name         : __xts-cast6-avx
name         : __lrw-cast6-avx
name         : __ctr-cast6-avx
name         : __cbc-cast6-avx
name         : __ecb-cast6-avx
name         : ctr(cast5)
name         : cbc(cast5)
name         : ecb(cast5)
name         : __ctr-cast5-avx
name         : __cbc-cast5-avx
name         : __ecb-cast5-avx
name         : xts(camellia)
name         : lrw(camellia)
name         : ctr(camellia)
name         : cbc(camellia)
name         : ecb(camellia)
name         : __xts-camellia-aesni
name         : __lrw-camellia-aesni
name         : __ctr-camellia-aesni
name         : __cbc-camellia-aesni
name         : __ecb-camellia-aesni
name         : crct10dif
name         : sha384
name         : sha512
name         : sha224
name         : sha256
name         : crc32
name         : sha1
name         : crc32c
name         : ghash
name         : __ghash
name         : xts(aes)
name         : lrw(aes)
name         : __xts-aes-aesni
name         : __lrw-aes-aesni
name         : pcbc(aes)
name         : rfc4106(gcm(aes))
name         : __gcm-aes-aesni
name         : ctr(aes)
name         : __ctr-aes-aesni
name         : cbc(aes)
name         : ecb(aes)
name         : __cbc-aes-aesni
name         : __ecb-aes-aesni
name         : __aes-aesni
name         : aes
name         : xts(serpent)
name         : lrw(serpent)
name         : ctr(serpent)
name         : cbc(serpent)
name         : ecb(serpent)
name         : __xts-serpent-sse2
name         : __lrw-serpent-sse2
name         : __ctr-serpent-sse2
name         : __cbc-serpent-sse2
name         : __ecb-serpent-sse2
name         : salsa20
name         : xts(twofish)
name         : lrw(twofish)
name         : ctr(twofish)
name         : cbc(twofish)
name         : ecb(twofish)
name         : twofish
name         : ctr(blowfish)
name         : cbc(blowfish)
name         : ecb(blowfish)
name         : blowfish
name         : xts(camellia)
name         : lrw(camellia)
name         : ctr(camellia)
name         : cbc(camellia)
name         : ecb(camellia)
name         : camellia
name         : aes

Editat ultima oară de V3n3RiX (13 Jan 2015 23:15:30)


Distribution : Redcore Linux 1801 x86_64
Desktop Environment : LXQT 0.12.0
System Information : Dual Quad Core Intel Xeon E5430 @ 2.66GHz + 24 GB Buffered Quad Channel ECC RAM
Website : https://redcorelinux.org

Offline

 
Feed

Antet forum

Powered by FluxBB