# [HOW-TO] Szyfrowanie CD/DVD

## ozman

W dzisiejszych czasach wiadomo jak ważna jest ochrona informacji. Linux posiada wbudowane narzędzia do szyfrowania jak dm-crypt. Do tej pory zostały opisane how-to które prowadzą krok po kroku jak zaszyfrować partycję, lub nawet cały system. W tym temacie chciałem Wam przedstawić jak sporządzić zaszyfrowany obraz ISO i wypalić go na płytce.

Oczywiście niezbędne jest wkompilowanie w jądro obsługi  dm-crypt, loop device, algorytmów kodowania ( w tym przypadku aes, cbc, sha256), oraz zainstalowanie pakietu cryptsetup-luks. Szczegóły znajdziecie na forum.

Przejdzmy zatem do samego skryptu , który tworzy gotowy obraz ISO do wypalenia na DVD.

- Skrypt uruchomiony w danym katalogu dodaje wszystkie pliki i podkatalogi do szyfrowanego obrazu ISO

- Zaszyfrowany obraz znajduje się w /tmp/image.iso

- Zastosowano szyfrowanie aes-cbc z kluszem 256bitowym, jest to pewien bezpieczny standard, lecz w przyszłości nalezy pomyśleć o aes-lrw.

"eDVD.sh"

```

#!/bin/bash

 

if [ $(whoami) != root ]; then echo "ten skrypt musi być uruchomiony przez root.";   exit 1; fi

 

ISODIR=$(pwd)                                       # Bierzący katalog, który utworzy obraz

MOUNTDIR=/mnt/cdrom                              # Katalog do montowania płyt CD/DVD

MAXSIZE=$(( 4700 *2 ))k                                # Ilość 512 bloków

ISO=/tmp/image.iso                              # ścieżka gdzie powstanie obraz

CRYPT="-y -c aes-cbc-essiv:sha256 -h 256"                    # Opcje szyfrowania cryptsetup

MAPPER="cryptocd"                              

a=$(du -kcs $ISODIR|head -n1|cut -d/ -f1)                     # Sprawdza rozmiar plików i katalogów które szyfrujemy directory                            

b=4587450                                                                                           # Bezpieczny maksymalny rozmiar dla DVD 4.4G 

           

if [ -a $ISO ]; then rm -v $ISO; fi                           # Usuwa stary obraz ISO jeżeli jest

 

if (( a > b ))

   then

      echo "przekroczono maksymany rozmiar dla płyty DVD ${b}k"

      exit

   elif [ $(find $ISODIR -type d -name 'VIDEO_TS') ]

      then

              echo "wykryto dvd-video"

              MKISOFS="-dvd-video"

   else

         MKISOFS="-input-charset iso8859-2 -joliet-long -iso-level 3 -l -J -r"        # Opcje dla systemu plików iso9660

fi

 

for i in $(seq 0 7); do   losetup /dev/loop$i >/dev/null 2>&1 

     if [ $? -eq 1 ]; then LOOP=/dev/loop$i; break; fi

done

 

if [ -z "$LOOP" ]; then echo "brak wolnego urządenia loop" >&2;   exit; fi

 

dd if=/dev/urandom of=$ISO bs=512 count=2048

dd if=/dev/urandom of=$ISO bs=512 count=1 seek=$MAXSIZE

losetup $LOOP $ISO

cryptsetup $CRYPT luksFormat $LOOP

cryptsetup luksOpen  $LOOP $MAPPER

 

SIZE=$(mkisofs $MKISOFS $ISODIR | dd of=/dev/mapper/$MAPPER bs=512 2>&1 | grep "zapisanych recordów" | cut -f1 -d+)

SIZE_VOL1=$(blockdev --getsize /dev/mapper/$MAPPER)

SIZE_LOOP=$(blockdev --getsize $LOOP)

cryptsetup luksClose $MAPPER

losetup -d $LOOP

 

SIZE=$(( $SIZE + ($SIZE_LOOP - $SIZE_VOL1) ))

dd if=$ISO of=$ISO bs=512 count=0 skip=$SIZE seek=$SIZE

 

echo "testowanie obrazu ISO..."

losetup $LOOP $ISO

losetup -d $LOOP

 

# Opcjonalnie można zamontować sobie obraz

# echo "Podaj hasło"

# cryptsetup luksOpen $LOOP $MAPPER

# 

# echo "Montowanie zaszyfrowanego nośnika"

# mount -t iso9660 /dev/mapper/$MAPPER $MOUNTDIR

 

echo "Zakończono szyfrownie DVD/CD."

 
```

Montowanie szyfrowanej płytki w gnome 2.18 jest teoretycznie tak proste jak montowanie innych urządzeń, niestety w skutek błędu w programie gnome-mount po wpisaniu hasła do okna dialogowego nic się nie dzieje.

Z pomocą przychodzą kolejne dwa skrypty do montowania i odmontowania płyt.

"emount.sh"

```

#!/bin/bash

 

if [ $(whoami) != root ]; then echo "ten skrypt musi uruchomoć root.";   exit; fi

 

MOUNTDIR=/mnt/cdrom                              # Katalog montowania płyt CD/DVD

CDROM=/dev/cdrom                              

MAPPER="cdrom"                                      

LOOP_DEVICE_FILE="/usr/local/sbin/cdrom-loop"

for i in $(seq 0 7); do   losetup /dev/loop$i >/dev/null 2>&1 

     if [ $? -eq 1 ]; then LOOP=/dev/loop$i; break; fi

done

 

if [ -z "$LOOP" ]; then echo "no free loop device" >&2;   exit; fi

 

losetup $LOOP $CDROM && echo $LOOP > $LOOP_DEVICE_FILE

cryptsetup luksOpen $LOOP $MAPPER

mount /dev/mapper/$MAPPER $MOUNTDIR

```

"eunmount.sh"

```

#!/bin/bash

 

if [ $(whoami) != root ]; then echo "ten skrypt musi uruchomoć root.";   exit; fi

 

error() {

   echo "bład, wychodzę."

   exit

}

 

MOUNTDIR=/mnt/cdrom                           

MAPPER="cdrom"                              

LOOP=$(cat /usr/local/sbin/cdrom-loop)

 

umount $MOUNTDIR || error

cryptsetup luksClose /dev/mapper/$MAPPER              # kończy szyfrowanie dla zmapowanego urządzenia

losetup -d $LOOP                  

```

UWAGI:

Oczywiście należy zmienić sobie ścieżki na odpowaiadające tym w Waszych systemach.

Pozdrawiam i mam nadzieję że się przyda.

----------

## 13Homer

Genialne! Wypróbuje przy najbliższej okazji. Domyślam się, że pod Windowsami płyty będą bezużyteczne. Mylę się?

----------

## ozman

Programem który obsługuje cryptosetup-LUKS w Windows jest freeotfe do pobrania ze strony http://www.freeotfe.org/index.html. Niemniej nie sprawdzałem  czy uda nim się zamonować szyfrowaną płytkę.

----------

## sir KAT

Kiedyś cdrecord miał opcję -encrypt do tworzenie szyfrowanych CD ale od pewnego czasu z niewiadomych przyczyn ta opcja zniknęła.

----------

