A volte si sente la necessita’ di crittare i propri dati personali, ma spesso le domande che ci poniamo sono ?
- Quanto e’ complesso adottare una cosa del genere?
- E’ realmente sicuro?
- Se uso un algoritmo molto complesso le prestazioni degradano?
Le risposte sono molto semplici:
- Con i mezzi che si hanno ora a disposizione, quelli che cerchero’ di spiegarvi, direi proprio di no
- AES ha uno spazio delle chiavi, nel nostro esempio, di 2^256 quindi un bruteforce su un numero di chiavi cosi’ ampio e’ altamente improbabile, inoltre non sono noti risultati di crittanalisi che lo indeboliscano.
- Se l’algoritmo e’ ben implementato le prestazioni non degradano di molto, anzi si puo’ dire che il degrado e’ veramente trascurabile.
=== SETUP DEL SISTEMA ===
Innanzitutto un kernel >=2.6.10, tutto quello che dobbiamo fare e’ configurarlo in
modo che sia in grado di usare l’algoritmo AES in questo modo.
# Code maturity level options --->
Prompt for development and/or incomplete code/drivers
# General setup --->
Support for hot-pluggable devices
# Device Drivers > Multi-device support (RAID and LVM).
Device mapper support
Crypt target support
# Cryptographic options --->
AES cipher algorithms
Dopo aver compilato e riavviato il vostro sistema potrete verificare se il modulo e’ attivo
in questo modo
%> ls -L /dev/mapper/control
se non avete il device mapper basta installare il pacchetto dmsetup.
Su Debian basta installare dmsetup con il comando e non e’ necessario ricompilare
il kernel
%> aptitude install dmsetup
Ora dobbiamo controllare se il supporto ad AES e’ attivo
%> cat /proc/crypto
l’output dovrebbe essere il seguente:
name : aes
module : aes
type : cipher…
se non si ha un output di questo tipo bisogna caricare il modulo a mano con
%> modprobe aes
ora ci serve un tool che ci permetta di gestire in modo semplice dmsetup:
il package si chiama cryptsetup, sempre facendo riferimento a Debian
%> aptitude install cryptsetup
Ora iniziamo con il vero e proprio procedimento di encryption
=== CIFRARE LA PARTIZIONE DI HOME ===
Nel caso in cui si dispone di una partizione apposita per la home, per esempio
/dev/hda3, si procede in questo modo:
# Controllo se ci sono errori nella partizione
%> badblocks -c 10240 -s -w -t random -v /dev/hda3#Riempio la partizione di dati Random
%> dd if=/dev/urandom of=/dev/hda3#Creo una partizione LUKS — Linux Unified Key Setup
%> cryptsetup --verify-passphrase --verbose --hash=sha256 --cipher=aes-cbc-essiv:sha256 --key-size=256 luksFormat /dev/hda3#Ora setto il device mapper
%> cryptsetup luksOpen /dev/hda3 home#per controllare se il tutto funziona
%> cryptsetup status home
/dev/mapper/home is active:
cipher: aes-cbc-essiv:sha256
keysize: 256 bits
device: /dev/.static/dev/hda3
offset: 2056 sectors
size: 20962706 sectors
mode: read/write# Ora creiamo il filesystem
%> mkfs.reiserfs /dev/mapper/home#Monto il filesystem
%> mount /dev/mapper/home /mnt/#Ci copio dentro i file della home e lo smonto
%> cp -axv /home/* /mnt/ && umount /mnt
Ora non ci rimane che settare ad hoc il nostro fstab
# <file system> <mount point> <type> <options> <dump> <pass>
/dev/mapper/home /home ext3 defaults 1 2e il nostro crypttab
# <target device> <source device> <key file> <options>
home /dev/hda3 none luks
e il gioco e’ fatto.
Alcune distro non supportano le partizioni LUCKS di default quindi non le
montano all’avvio, per ovviare a questo problema:
1. Creiamo un file /etc/init.d/cryptinit contenente il seguente script
#! /bin/sh
# if this script is executed when home is opened, tries to close it;
# otherwise, tries to open it, for three times, then continue without
# opening itif [ -b /dev/mapper/home ]; then
/sbin/cryptsetup luksClose home
else
i=3while [ $i -gt 0 ]; do
let “i -= 1″
/sbin/cryptsetup luksOpen /dev/hda3 home && i=0
done
fi
2. Lo rendiamo eseguibile
%> chmod +x /etc/init.d/cryptinit
3. Lo linkiamo in /etc/rcS.d
%> cd /etc/rcS.d
%> ln -sf ../init.d/cryptinit S28cryptinit
4. Editiamo fstab in questo modo
# <file system> <mount point> <type> <options> <dump> <pass>
/dev/mapper/home /home reiserfs defaults 1 2
=== DELEGARE A PAM L’AUTENTICAZONE ===
Un altro modo di crittare la nostra home e delegare a PAM l’autenticazione e’ il
seguente:
Installare i pacchetti libpam-mount cryptsetup openssl
%> aptitude install libpam-mount cryptsetup openssl
aggiungere la seguente riga al file /etc/pam.d/common-auth
auth optional pam_mount.so use_first_pass
in modo da avere i permessi di montarla anche via ssh e in tutti gli altri modi
che PAM ci permette
Aggiungere al file /etc/pam.d/common-session
session optional pam_mount.so
alternativamente si puo’ aggiungere anche la riga “@include common-pammount” in
entrambi i file di cui sopra
aggiungere la seguente riga al file etc/security/pam_mount.conf:
volume my_username crypt – /dev/hda4 /home/my_username cipher=aes aes-256-ecb /home/my_username.key
ora dobbiamo creare la chiave
echo “my dmcrypt password” | openssl aes-256-ecb > /home/my_username.key
oppure usare la stessa password che usiamo anche per il login aggiungendo al
file /etc/security/pam_mount.conf la seguente linea
volume my_username crypt – /dev/hda3 /home/my_username cipher=aes – -
io personalmente consiglio quest’ultimo metodo.
Nel caso non si disponga di una partizione a parte per la home, questa potrebbe
anche essere montata in un immagine loopback anziche’ in un’apposita partizione
Creiamo un file di loopback grande abbastanza da contenere tutti i nostri file
in questo modo:
%> dd if=/dev/urandom of=/home/secret bs= # count= #
sostituite ovviamente le # con il numero di byte
ora settiamo il file come un loop device
%> losetup /dev/loop0 /home/secret
ora creiamo il device logico in questo modo:
%> cryptsetup -y create mycryprt /dev/loop0
e formattiamolo
%> mkfs.reiserfs /dev/mapper/mycrypt
montiamolo
%> mount /dev/mapper/mycrypt /mnt/secret
Ora possiamo copiarci dentro i file che conteneva la nostra home, Pam pensera’
ad autenticarvi ad ogni login decrittando la vostra home.
=== METODO VELOCE ===
#Installare il software%> aptitude install cryptsetup libpam_mount
#Creare la partizione di loop
%> dd if=/dev/urandom of=/home/.joe.img bs=1M count=15000#Settare la partizione di loop
%> losetup /dev/loop0 /home/.joe.img#Creare il volume logico cifrato
%> cryptsetup -c aes-cbc-essiv:sha256 -y -s 256 –verify-passphrase luksFormat /dev/loop0#Formattare il volume logico
%> cryptsetup luksOpen /dev/loop0 cryptedhome
%> mkfs.reiserfs /dev/mapper/cryptedhome
%> cryptsetup luksClose cryptedhome#montare il volume cifrato
%> mkdir /tmp/foo
%> mount /dev/mapper/cryptedhome /tmp/foo– copiate i dati —
#settate PAM
/etc/security/pam_mount.conf:
#
# dm_crypt + LUKS. Monta /home/.user.img
#
# volume * crypt – /home/.&.img /home/& loop – -
volume joe crypt – /home/.joe.img /home/joe loop,cipher=aes – -
###############################################
# Service based pam-mount solution (prefered) #
###############################################/etc/pam.d/login (at the end):
/etc/pam.d/gdm (at the end):
/etc/pam.d/ssh (at the end):@include common-pammount
#############################
# Common pam-mount solution # #############################
/etc/pam.d/common-auth (at the end):
auth optional pam_mount.so use_first_pass
/etc/pam.d/common-session (at the end):
session optional pam_mount.so
Si ringraziano
Stefano Spinucci
Uwe Hermann
http://www.kill-9.org
Tutti quelli che correggeranno o daranno un apporto a questa guida mandatemi
le email con le vostre errata-corrige.
Tag: aes, Crittografia, cryptsetup, debian, kernel, PAM, partizione home, ubuntu
Novembre 27, 2007 alle 5:34 am |
hello
nice