Loopback Encrypted Filesystem HOWTO
 Copyright di Ryan T. Rhea, [email protected]
 v1.1, 29 novembre 1999

 Questo documento spiega come impostare e quindi usare un file system
 che, quando montato da un utente, cifra in maniera dinamica e traspar�
 ente i suoi contenuti. Il file system viene conservato in un file
 regolare, che pu� essere nascosto o nominato in modo non-evocativo
 cos� che probabilmente passerebbe inosservato. Questo permette di con�
 servare dati ad un alto livello di sicurezza.  Traduzione a cura di
 Isabella Ruocco e di Diego Buffa.  Ultima revisione 3 aprile 2000.

 1.  Prima di iniziare

 Questo procedimento richiede il codice sorgente del kernel, saper come
 compilare questo codice e un sacco di pazienza.  Raccomando caldamente
 di tenere pronto un disco di avvio.  Inoltre, siate sicuri di avere
 una copia prima di memorizzare permanentemente i vostri dati
 importanti sul file system cifrato - potrebbe danneggiarsi come
 qualsiasi altro file system.

 Dovrete applicare le patch come minimo fino alla versione 2.2.9 del
 kernel di linux prima di continuare. Ulteriori istruzioni su come
 applicare le patch si trovano nella sezione ``Dettagli'' pi� avanti in
 questo documento.

 Il codice sorgente del kernel si pu� trovare in:


      <ftp://ftp.kerneli.org/>


 C'� un HOWTO sul procedimento della ricompilazione del kernel in:


      <http://metalab.unc.edu/LDP/HOWTO/>


 This document may be reproduced and distributed in whole or in part,
 without fee, subject to the following conditions:


 �  The copyright notice and this permission notice must be preserved
    complete on all complete or partial copies.

 �  Any translation or derived work must be approved by the author in
    writing before distribution.

 �  If you distribute this work in part, instructions for obtaining he
    complete version of this manual must be included, and a means for
    obtaining a complete version provided.

 �  All source code in this document is placed under the GNU General
    Public License, available via anonymous FTP from:


      <ftp://prep.ai.mit.edu/pub/gnu/COPYING/>


 (Questo documento pu� essere riprodotto e distribuito per intero o in
 parte, senza alcuna tassa, a patto delle seguenti condizioni:


 �  La nota sul copyright e questa nota sul permesso devono essere
    mantenute interamente su tutte le copie parziali o complete.

 �  Qualunque traduzione o lavoro derivato devono essere approvati
    dall'autore per iscritto prima della distribuzione.

 �  Se distribuite in parte questo lavoro, devono essere incluse
    istruzioni per ottenere la versione completa di questo manuale, e
    deve essere fornito un modo per ottenere una versione completa.

 �  Tutto il codice sorgente in questo documento � sotto la licenza GNU
    General Public License, disponibile attraverso FTP anonimo da:


      <ftp://prep.ai.mit.edu/pub/gnu/COPYING/>)



 2.  Introduzione

 Il procedimento usa il dispositivo '/dev/loop*' (dove * pu� essere 0-7
 sulla maggior parte delle installazioni) per montare un file system di
 loopback.  Lo stesso procedimento pu� essere usato senza cifratura per
 tenere un file system linux su una partizione non-linux.  C'� un HOWTO
 su questo nel sito LDP citato precedentemente.

 Si possono usare diversi tipi di cifratura, compresi XOR, DES,
 twofish, blowfish, cast128, serpent, MARS, RC6, DFC e IDEA.  Il
 programma 'losetup' (loopback setup ovvero impostazione del loopback)
 � ci� che associa il vostro file cifrato ad un file system e al suo
 tipo di cifratura. Secondo Alexander Kjeldaas, che mantiene
 kerneli.org e le patch internazionali sulla cifratura, DES e losetup
 sono attualmente incompatibili.  Questo � dovuto alle differenze nel
 modo in cui i due gestiscono i bit di parit�.  Non ci sono progetti
 per supportare il DES poich� � molto pi� insicuro degli altri cifrari.

 Twofish, blowfish, cast128 e serpent hanno tutti una licenza libera
 per qualunque uso.  Gli altri potrebbero o meno avere restrizioni di
 licenza.  Molti di essi sono candidati per lo standard AES.  I
 finalisti forniranno in tutto il mondo l'uso senza royalty dei loro
 cifrari.

 Questo documento usa l'algoritmo serpent perch� � forte e anche
 notevolmente veloce ed � liberamente distribuibile sotto la GPL.  In
 base alla sua documentazione, serpent usa un cifrario a blocchi di 128
 bit progettato da Ross Anderson, Eli Biham e Lars Knudsen.  Esso
 fornisce agli utenti il pi� alto livello pratico di assicurazione che
 non verr� trovato nessun attacco a scorciatoia. La documentazione su
 serpent, cos� come il codice sorgente, si possono trovare in:


      <http://www.cl.cam.ac.uk/~rja14/serpent.html>


 Inoltre, questo documento presuppone che i cifrari siano compilati
 direttamente nel kernel. Potreste installarli come moduli, ma la tec�
 nica non viene discussa in questo documento. Dovrete editare il file
 '/etc/conf.module'; il procedimento � discusso in dettaglio nell'HOWTO
 sulla compilazione del kernel citato in precedenza.


 3.  Sommario

 Ci sono molti passi coinvolti nel procedimento. Fornir� ``Dettagli''
 per questi passi nel prossimo paragrafo.  Ho pensato che sarebbe stato
 carino fornire prima un sommario di riferimento (se voi avete
 esperienza con unix/linux probabilmente non avete bisogno comunque dei
 dettagli).  Sono riassunti come segue:

 1. Scaricate la pi� recente patch internazionale sulla cifratura (io
    ho usato 'patch-int-2.2.10.4' quando questo documento � stato
    scritto) da:



      <http://ftp.kerneli.org/pub/kerneli/>




 2. Applicate la patch al kernel



 3. Eseguite 'config' (o 'menuconfig' o 'xconfig') per configurare il
    vostro 'MakeFile' per il nuovo kernel.  Le opzioni per abilitare la
    cifratura sono sparpagliate.  Prima di tutto, prima che vediate
    qualche altra opzione, dovete abilitare 'Prompt for development
    and/or incomplete code/drivers' sotto 'Code Maturity level
    options'.  Sotto 'Crypto options' abilitate 'crypto ciphers' e
    'serpent'.  Ancora una volta, questo documento presume che stiate
    usando serpent, ma provate quello che volete. Ricordate che DES �
    notoriamente incompatibile con 2.2.10.4 - potrebbe non essere mai
    supportato del tutto.  Ci sono molte opzioni importanti da
    selezionare sotto 'Block Devices'.  Queste includono 'Loopback
    device support', 'Use relative block numbers as basis for transfer
    functions (RECOMMENDED)', e 'General encryption support'. NON
    selezionate la cifratura 'cast 128' o 'twofish' qui. Notate anche
    che non avete bisogno di nessuna delle opzioni sulla cifratura
    sotto le varie categorie di rete. Non andr� oltre nella
    configurazione del kernel, � fuori dagli intenti di questo
    documento e si pu� trovare sul sito LDP.



 4. Compilate il nuovo kernel.



 5. Editate '/etc/lilo.conf' per aggiungere la nuova immagine del
    kernel. Eseguite 'lilo -v' per aggiungere il kernel al boot loader.



 6. Scaricate il sorgente per il pi� recente pacchetto 'util-linux' (io
    ho usato 'util-linux-2.9v') da:



      <ftp://ftp.kernel.org/pub/linux/utils/util-linux/>




 7. Estraete il sorgente 'util-linux'.



 8. Applicate la patch corrispondente trovata nella vostra directory
    '/usr/src/linux/Documentation/crypto/'.



 9. Leggete ATTENTAMENTE il file 'INSTALL'! Questo pacchetto contiene i
    sorgenti per molti file dipendenti dal sistema (strumenti
    importanti come 'login', 'passwd', ed 'init').  Se non editate
    attentamente il file MCONFIG prima di compilare questi sorgenti
    tenete pronto un dischetto di avvio e/o un fucile perch� il vostro
    sistema sar� un po' confuso. Essenzialmente volete impostare quasi
    tutti i campi 'HAVE_*' uguali a 'yes' cos� che gli strumenti
    importanti di autenticazione non vengano compilati e sovrascritti.
    Gli strumenti che volete ricompilare sono 'mount' e 'losetup' in
    modo da adattarli ai nuovi schemi di cifratura. Suggerisco di fare
    riferimento al paragrafo ``Dettali'' nel seguito per questo passo.



 10.
    Compilate ed installate il sorgente 'util-linux'



 11.
    Fate riavviare la macchina con il nuovo kernel.



 12.
    Editate '/etc/fstab', aggiungendo una voce per il vostro mount
    point come segue:




      ______________________________________________________________________
      /dev/loop0  /mnt/crypt  ext2  user,noauto,rw,loop 0 0
      ______________________________________________________________________






 13.
    Create la directory che conterr� il vostro file system, come in
    '/mnt/crypt' sopra.



 14.
    Come utente, create il vostro file cifrato come segue:




      dd if=/dev/urandom of=/etc/cryptfile bs=1M count=10






 15.
    Eseguite losetup come segue:




      losetup -e serpent /dev/loop0 /etc/cryptfile


 Avete una sola possibilit� per digitare la password, state attenti. Se
 volete fare una doppia verifica sulla vostra password, potete usare il
 comando:




      losetup -d /dev/loop0




 Questo disattiver� il vostro dispositivo di loop.  Poi eseguirete
 nuovamente losetup per verificare la vostra password, come segue:




      losetup -e serpent /dev/loop0 /etc/cryptfile






 16.
    Create il vostro file system ext2 come segue:




      mkfs -t ext2 /dev/loop0






 17.
    Ora potete montare il file system cifrato con:




      mount -t ext2 /dev/loop0 /mnt/crypt






 18.
    Quando avrete finito, vorrete smontare  e proteggere il vostro file
    system come segue:




      umount /dev/loop0
      losetup -d /dev/loop0






 4.  Dettagli

 Applicare le patch al Kernel:

 Potete fare l'aggiornamento dalle distribuzioni '2.2.x' applicando le
 patch. Ciascuna patch rilasciata per '2.2.x' contiene correzioni dei
 bachi. Verranno aggiunte nuove caratteristiche al kernel Linux di
 sviluppo '2.3.x'. Per installare applicando le patch, prendete tutte
 le patch pi� recenti e fate quanto segue:



      cd /usr/src
      gzip -cd patchXX.gz | patch -p0




 Ripetete xx, IN ORDINE, per tutte le versioni pi� recenti rispetto a
 quella del vostro albero dei sorgenti corrente.

 La directory predefinita per il sorgente del kernel �
 '/usr/src/linux'.  Se il vostro sorgente � installato da qualche altra
 parte vi suggerirei di usare un collegamento simbolico da
 '/usr/src/linux'.



 Editate 'MCONFIG' per la compilazione del pacchetto 'util-linux':

 Quelle che seguono sono citazioni dal file 'MCONFIG' che ho usato per
 compilare il pacchetto 'util-linux'. Notate che questo � abbastanza
 specifico per la mia configurazione, che � vagamente basata su RedHat
 5.2. Il punto � assicurarsi che non sovrascriviate nessun importante
 strumento di sistema come 'login', 'getty', o 'passwd'. Comunque, ecco
 di seguito le righe importanti:






























 ______________________________________________________________________
 CPU=$(shell uname -m | sed s/I.86/intel/)

 LOCALEDIR=/usr/share/locale

 HAVE_PAM=no

 HAVE_SHADOW=yes

 HAVE_PASSWD=yes

 REQUIRE_PASSWORD=yes

 ONLY_LISTED_SHELLS=yes

 HAVE_SYSVINIT=yes

 HAVE_SYSVINIT_UTILS=yes

 HAVE_GETTY=yes

 USE_TTY_GROUP=yes

 HAVE_RESET=yes

 HAVE_SLN=yes

 CC=gcc
 ______________________________________________________________________





 Suggerimenti:

 Notate che potreste usare uno qualunque degli otto dispositivi di
 loopback, da 'dev/loop0' a '/dev/loop7'. Usate una directory non
 evocativa per il mount point.  Suggerirei di creare una cartella con
 permessi 700 dentro la vostra home directory.  Lo stesso vale per il
 file che contiene i dati. Io uso un nome di file come 'sysfile' o
 'config.data' nella cartella '/etc'.  Questo di solito passer�
 inosservato.

 Ho creato degli script Perl molto semplici per montare e smontare il
 file system con un comando. Scrivete questi, rendeteli eseguibili
 (chmod u+x), e metteteli da qualche parte nel vostro percorso.



      ______________________________________________________________________
      #!/usr/bin/perl -w
      #
      #piccolo file di utilit� per impostare un file system cifrato di loopback
      #Copyright 1999 di Ryan T. Rhea
      `losetup -e serpent /dev/loop0 /etc/cryptfile`;
      `mount /mnt/crypt`;
      ______________________________________________________________________




 Chiamate 'loop' lo script qui sopra, e poi potrete essere sulla strada
 buona con un comando ('loop') ed una password.


      ______________________________________________________________________
      #!/usr/bin/perl -w
      #
      #piccolo file di utilit� per disattivare un fliesystem cifrato di loopback
      #Copyright 1999 di Ryan T. Rhea
      `umount /mount/crypt`;
      `losetup -d /dev/loop0`;
      ______________________________________________________________________




 Chiamate 'unloop' il secondo, e poi digitando 'unloop' si disattiver�
 velocemente il vostro file system.