loop-AES - szyfrowany system plik贸w

czwartek maja 22, 2008

Loop-AES to modu艂, implementuj膮cy szyfrowanie urz膮dze艅 blokowych, na przyk艂ad dysku twardego lub CD-ROM.
Modu艂 szyfruje urz膮dzenia blokowe podmontowane za pomoc膮 loop device, b臋d膮cego standardowym elementem kernela Linuxa. Do szyfrowania u偶ywany jest algorytm AES-128, AES-192 lub AES-256, dla kt贸rego kluczem jest skr贸t SHA obliczony na podstawie podanego przez u偶ytkownika has艂a (minimum 20 znak贸w).
Szyfrowanie odbywa si臋 w spos贸b przezroczysty dla systemu plik贸w i jest praktycznie niezauwa偶ane w systemie. Najlepsz膮 wydajno艣膰 mo偶na osi膮gn膮膰 konfiguruj膮c szyfrowane loop device na fizycznej partycji dysku, na kt贸rym nast臋pnie mo偶na za艂o偶y膰 dowolny system plik贸w.
AES(ang. Advanced Encryption Standard) zosta艂 zatwierdzony przez NIST (ang. National Institute of Standards and Technology) jako standard dla ameryka艅skiej administracji rz膮dowej oraz sektora finansowego. Jego z艂amanie przy obecnie znanej technologii jest niemo偶liwe.
Nam szarym u偶ytkownikom komputer贸w mo偶e si臋 on przyda膰 do szyfrowania danych do kt贸rych nikt inny nie ma mie膰 dost臋pu. Jest to bardzo dobry spos贸b na przechowywanie r贸偶nego rodzaju: program贸w, muzyki, film贸w itd. Nawet w przypadku kradzie偶y komputera nikt nie odszyfruje danych.

INSTALACJA

  1. 艢ci膮gamy najnowszy kernela ( http://www.kernel.org/ )
  2. Rozpakowujemy do /usr/src/ (powstanie katalog np.: /usr/src/linux-2.6.6)
  3. 艢ci膮gamy loop-AES-v2.1b ( http://loop-aes.sourceforge.net/)
  4. Rozpakowujemy do /usr/src/ (powstanie katalog: /usr/src/loop-AES-v2.1b)
  5. 艢ci膮gamy util-linux-2.12a ( http://www.kernel.org/pub/linux/utils/util-linux/ )
  6. Rozpakowujemy do /usr/src/ (powstanie katalog: /usr/src/util-linux-2.12a)
  7. Przechodzimy do katalogu z kernelem: # cd /usr/src/linux-2.6.6
  8. make menuconfig i zaznaczamy:
    Block devices --->
    
        < > Loopback device support
    
        <*> RAM disk support
        (4096) Default RAM disk size (NEW)
        [*] Initial RAM disk (initrd) support
    
    File systems --->
    
        <*> Ext3 journalling file system support
        <*> Second extended fs
  9. Ustawiamy jeszcze inne potrzebne nam opcje i zapisujemy konfiguracj臋. Mo偶na na pocz膮tku wczyta膰 configa z poprzedniego kernela (przewa偶nie: /boot/config) a nast臋pnie skonfigurowa膰 reszt臋. W pliku komfiguracyjnym sprawdzamy czy mamy:
    CONFIG_MODULES=y
    CONFIG_BLK_DEV_LOOP=n,
    CONFIG_BLK_DEV_RAM=y,
    CONFIG_BLK_DEV_INITRD=y,
    CONFIG_MINIX_FS=m,
    CONFIG_PROC_FS=Y
  10. Kompilacja: # make clean dep bzImage modules
  11. Instalacja modu艂贸w: # make modules_install
  12. Instalacja kernela: # make install (w wersjach 2.4.x trzeba samemu skopiowa膰 nowego kernela do katalogu /boot itd.)
  13. Przechodzimy do katalogu ze 藕r贸d艂ami loop-AES: # cd /usr/src/loop-AES-v2.1b
  14. Wydajemy kolejno polecenia:
    # make clean
    # make
  15. Przechodzimy do katalogu ze 藕r贸d艂ami utils-linux: # cd /usr/src/util-linux-2.12a
  16. Nak艂adamy patcha: # patch -p1 <../loop-AES-v2.1b/util-linux-2.12a.diff
  17. Wydajemy kolejno polecenia:
    # export CFLAGS=-O2
    # export LDFLAGS=’-static -s’
    # ./configure
    # make SUBDIRS=”lib mount”
    # cd mount
    # install -m 4755 -o root mount umount /bin
    # install -m 755 losetup swapon /sbin
    # rm -f /sbin/swapoff && ( cd /sbin && ln -s swapon swapoff )
    # rm -f /usr/share/man/man8/{mount,umount,losetup,swapon,swapoff}.8.gz
    # install -m 644 mount.8 umount.8 losetup.8 /usr/share/man/man8
    # install -m 644 swapon.8 swapoff.8 /usr/share/man/man8
    # rm -f /usr/share/man/man5/fstab.5.gz
    # install -m 644 fstab.5 /usr/share/man/man5
    # cp -p /lib/modules/`uname -r`/block/loop.ko /boot/loop-`uname -r`.ko
  18. Teraz przechodzimy do /usr/src/loop-AES-v2.1b i sprawdzamy czy wszystko jest dobrze:
    # make tests Je艣li uka偶e nam si臋 *** Tests result ok *** to znaczy ze wszystko jest ok.

Loop-AES jest przemy艣lany g艂贸wnie jako modu艂 kernelowy. Przy konfiguracji kernelu nie mo偶e by膰 wybrany loop device (dlatego 偶e zast膮pi go loop-AES).

Mo偶na te偶 obs艂ug臋 loop-aes wkompilowa膰 w kernela. W tym celu b臋d膮c w katalogu ze 藕r贸d艂ami kernela wydajemy polecenie: # patch -p1 < /usr/src/loop-AES-v2.1b/kernel-2.6.6.diff a nast臋pnie zaznaczamy w konfiguracji j膮dra:

Block devices —>
<*> Loopback device support
[*] AES encrypted loop device support (NEW)

Reszta przebiega tak samo jak przy instalacji AES’a jako modu艂.

SZYFROWANIE:

Nasz szyfrowany system plik贸w mo偶e by膰 fizyczn膮 partycj膮 lub po prostu plikiem.

  1. Szyfrowanie partycji
  • Partycj臋 kt贸r膮 chcemy zaszyfrowa膰 np. /dev/hda3 wype艂niamy zerami:
    # dd if=/dev/zero of=/dev/hda3 bs=4k lub losowymi danymi ( # dd if=/dev/urandom of=/dev/hda3 bs=4k ) ale potrwa to znacznie d艂u偶ej.
  • Kojarzymy loop z nasz膮 partycj膮 i wybieramy rodzaj szyfrowania (128, 192 lub 256 bit贸w):
    # losetup -e AES128 -T /dev/loop0 /dev/hda3
    (zostaniemy poproszeni o podanie has艂a min. 20 znak贸w.)
  • Zak艂adamy nowy system plik贸w: # mkfs -t ext3 /dev/loop0
  • Usuwamy skojarzenie mi臋dzy partycj膮 a urz膮dzeniem loop
  • Montujemy partycj臋 np. do katalogu /mnt/code,
    # losetup -e AES128 /dev/loop0 /dev/hda3
    # mount /dev/loop0 /mnt/code
  • Gdy chcemy odmontowa膰 wydajemy polecenia:
    # umount /mnt/tajne
    # losetup -d /dev/loop0
  • Mo偶na te偶 doda膰 odpowiedni wpis (/dev/hda3 /mnt/code ext3 defaults,loop=/dev/loop0,encryption=AES128 0 0) do pliku /etc/fstab montuj膮cy partycj臋 przy starcie, ale w tym momencie system b臋dzie si臋 nam zatrzymywa艂 i czeka艂 na has艂o. Lepiej jest stworzy膰 prosty skrypt kt贸ry podmontuje lub odmontuje nam partycj臋 wtedy kiedy b臋dziemy tego chcieli. W tym celu tworzymy plik o zawarto艣ci:
    #!/bin/bash
    losetup -e AES128 /dev/loop0 /dev/hda3
    mount /dev/loop0 /mnt/code
  • Zapisujemy pod nazw膮 /bin/p
  • Nadajemy prawa do wykonywania: # chmod +x /bin/p
  • I od tej pory po wydaniu polecenia # p system spyta nas o has艂o i podmontuje partycj臋.
  • Analogicznie post臋pujemy z odmontowywaniem.
  1. Szyfrowany plik
    Je艣li nie mamy wolnej partycji, mo偶emy utworzy膰 dowolnej wielko艣ci plik, kt贸ry po odpowiednich zabiegach b臋dzie widoczny w systemie tak jak partycja.
  • Tworzymy odpowiedniej wielko艣ci plik np. 10MB
    # dd if=/dev/zero of=/root/sejf bs=4k count=2560
    Jak obliczy膰 wielko艣膰: (10MB * 1024) / 4 = 2560
  • Kojarzymy loop z nasz膮 partycj膮 i wybieramy rodzaj szyfrowania (128, 192 lub 256 bit贸w):
    # losetup -e AES128 -T /dev/loop1 /root/sejf
    (zostaniemy poproszeni o podanie has艂a min. 20 znak贸w.)
  • Zak艂adamy nowy system plik贸w: # mkfs -t ext3 /dev/loop1
  • Usuwamy skojarzenie mi臋dzy partycj膮 a urz膮dzeniem loop
  • Montujemy partycj臋 np. do katalogu /mnt/sejf
    # losetup -e AES128 /dev/loop1 /root/sejf
    # mount /dev/loop1 /mnt/sejf
  • Gdy chcemy odmontowa膰 wydajemy polecenia:
    # umount /mnt/sejf
    # losetup -d /dev/loop0
  • Aby zwyk艂y user m贸g艂 montowa膰 tak膮 partycj臋 dodajemy wpis:
    /root/sejf /mnt/sejf ext3 users,exec,noauto,sync,loop=/dev/loop1,encryption=AES128 0 0
    do pliku /etc/fstab

W sieci:

Leave a Reply

Comment