Offsite Backup–parte 3: PeoneFS

Dove eravamo rimasti? Una buona alternativa all’encryption di RsyncCrypto, unico tool “compatibile” con l’algoritmo di Rsync, doveva essere farina del mio sacco. Ecco al mondo la versione “stabile” di PeoneFS.

Innanzitutto un po’ di teoria. Ci sono tanti algoritmi crittografici con svariati livelli di sicurezza. Per un backup offsite casalingo un algoritmo superveloce anche se poco sicuro è la migliore soluzione. Una classificazione piuttosto grossolana divide tali algoritmi in due macro-classi: crittografia a blocchi e crittografia a stream (non ho l’equivalente italiano a portata di mano). Questi ultimi si basano di solito sulla simmetria delle operazioni di XOR e sul fatto che un algoritmo XOR perfetto è impenetrabile (Vernam cipher) come dimostrato da Shannon in altri tempi: quest’ultimo si basa sul concetto di “password” infinita che però non ha nessuna implementazione pratica. Algoritmi più pratici come l’RC4 si basano su una password “infinita” pseudo-casuale genata da una normale chiave di testo o sequenza di byte. Come approssimazione è abbastanza buona, anche se comunque attaccabile: questo non è un problema per l’uso che di questo algoritmo ne va fatto. Io ho fatto una piccola ulteriore modifica personale per ottenere una maggiore velocità in cambio di un’ulteriore debolezza: la chiave invece di essere infinita ha un periodo di 64MB, che sono abbastanza per la tipologia di file interessata. Un’ulteriore debolezza intrinseca è il fatto che per tutti i file viene usata praticamente la stessa chiave; con l’RC4 è infatti consigliato l’uso di un nonce che però davvero non saprei per ora come implementare e se ne valga davvero la pena. L’obiettivo è di scoraggiare il ladro occasionale dallo sbirciare le foto del mio album di famiglia e – secondo la mia modesta opinione – l’obiettivo dovrebbe essere più che centrato (centratissimo?).

Lato pratico ho voluto creare un EXE portabilissimo anche se richiede l’uso di .Net 4. Si può lanciarlo in modalità di test o previo opportuno parametro chiederne l’installazione/disinstallazione come servizio. Nel primo caso non c’è bisogno di privilegi amministrativi, nel secondo l’eseguibile provvederà a richiedere un prompt UAC, autorilanciarsi/installare/eseguire/ritornare senza colpo ferire. Questa parte tecnica è risultata essere molto interessante in quanto sono riuscito a mantenere l’illusione che ad eseguire il compito è lo stesso processo mentre in realtà viene creato un processo figlio elevato e non-visibile che comunica con il padre via named-pipe ricreando l’output nel terminale del processo di partenza. Forse parlo arabo, ma ciò nonostante la cosa si è rivelata alquanto interessante. Tutta la configurazione infine avviene tramite un banale file di configurazione con cui è possibile “montare” più folder criptati. Il download è disponibile nell’apposita pagina.

Update. Dettaglio importante: oltre a criptare il contenuto dei file, il nome dei file e dei folder viene pesantemente offuscato sempre in maniera simmetrica. Ciò significa che se si copia un file dal folder criptato al folder originario lo stesso file apparirà in chiaro.

Nel prossimo (ultimo?) appuntamento racconterò come tutti i pezzi del puzzle si incastrano per creare l’offsite backup casalingo più spensierato che ci sia.

-quack

Potrebbero interessarti anche:
Commenti (23):
1. 0verture
martedì 12 ottobre 2010 alle 11:00 PM - firefox 3.6.10 Windows 7
   

Più o meno quanti secoli ci vogliono per forzare la chiave di un archivio criptato ?

   
2. 0verture
martedì 12 ottobre 2010 alle 11:08 PM - firefox 3.6.10 Windows 7
   

E poi, una volta installato cosa ci si dovrebbe fare ?

Ho installato dokan e fatto partire peone come test. E' uscita un'unità da 1GB piena per 512MB che però fa riferimento a non si sa cosa. Come prosegue l'avventura ?

   
3. Paperino
martedì 12 ottobre 2010 alle 11:10 PM - chrome 6.0.472.63 Windows 7
   

La chiave non si può forzare nel senso tradizionale del termine in quanto non è memorizzata in nessun modo (neanche un hash) nei file di destinazione. Contro questo tipo di crittografia l'unico attacco possibile è quello di generare possibili chiavi, decriptare i file e guardare se si ottiene qualcosa di sensato. 

   
4. Galdom
martedì 12 ottobre 2010 alle 11:37 PM - chrome 6.0.472.63 Windows XP
   

Ciao Papero,

sto testando PeoneFS sul mio "muletto" WinXp Sp3,
ho installato prima Dokan, ho riavviato e poi installato PeoneFS.
Ho lanciato il prog. con "peonefs install" et voilà:

Unhandled Exception: System.Exception: Exception of type 'System.Exception' wasthrown.   at RunElevated.ProcessHelper.IsProcessElevated(Process process)   at RunElevated.RunElevated.RunElevatedMethod(String argument)   at RunElevated.RunElevated.Main(String[] args) 
 Peccato!!!

Adesso provo su Vista Gold NoSPx..... 

   
5. Paperino
martedì 12 ottobre 2010 alle 11:38 PM - chrome 6.0.472.63 Windows 7
   

Yes, scarica la nuova versione messa online oggi. Mi son accorto del baco ieri sera, quando l'ho lanciato su Win2k3.

   
6. Galdom
mercoledì 13 ottobre 2010 alle 12:07 AM - chrome 6.0.472.63 Windows XP
   

Yes, scarica la nuova versione messa online oggi. Mi son accorto del baco ieri sera, quando l'ho lanciato su Win2k3.

OK! Papero!! Adesso funzia!. Tu parli di ieri sera, ma per me sono passate solo 3 ore da una versione all'altra e stavo già impazzendo con la vecchia .... ma almeno funzionava in modalità test sia su Xp che Vista/7.

Hai impostato "in code"  la dimensione totale ed occupata del disco virtuale, vero?

Credo che PeoneFS abbia bisogno solo di una piccola GUI per le poche opzioni e la tray icon per caricare/scaricare/interrogare il driver. La parte magica del codice credo che ci sia gia!!! Aspetto curioso gli ultimi pezzi del tuo puzzle, gli ultimi punti del ricamo.....

Buon lavoro, Papero

Galdom

 

   
7. Paperino
mercoledì 13 ottobre 2010 alle 12:16 AM - chrome 6.0.472.63 Windows 7
   

Hai impostato "in code"  la dimensione totale ed occupata del disco virtuale, vero?

Non so da dove escono quei numeri, credo siano valori di default di Dokan o qualcosa del genere. Siccome il drive montato è read-only la cosa aveva poca rilevanza... Per la UI bassissima priorità, tanto il drive non è che un 'servizio' che si riavvia da solo.

Battuta del secolo di pessimo gusto: chi è il santo protettore dei File System? San Dokan.

 

 

   
8. 0verture
mercoledì 13 ottobre 2010 alle 1:34 AM - firefox 3.6.10 Windows 7
   

guardare se si ottiene qualcosa di sensato

Basterebbe verificare i primi byte di ogni file e confrontarlo con una tabella di riferimento dico bene ?

Comunque continuo a non capire cosa farci adesso che ho installato dokan. Devo aspettare il programma completo o già adesso si può fare qualcosa ?

   
9. Paperino
mercoledì 13 ottobre 2010 alle 1:46 AM - chrome 6.0.472.63 Windows 7
   

Basterebbe verificare i primi byte di ogni file e confrontarlo con una tabella di riferimento dico bene ?

Non è così semplice perché la chiave è quella che rende leggibili tutti i file, non solo uno. Quindi devi prendere un campione disparato di header e tentare tutte le combinazioni possibile per vedere se tutto il campione restituisce buoni risultati. Chiaro che sia possibile ed un terzo abbastanza intenzionato ce la potrebbe fare in un tempo 'relativamente' breve (mesi?).

Comunque continuo a non capire cosa farci adesso che ho installato dokan. Devo aspettare il programma completo o già adesso si può fare qualcosa ?

Readme.TXT:

  1. Installa dokan
  2. scarica lo zip e scompatta in un folder qualsiasi
  3. edita il file di configurazione
  4. lancia l'eseguibile da riga di comando. Ci sono le istruzioni lì.

(ho aggiornato di nuovo PeoneFS per un baco che non permetteva di mappare più di un folder)

   
10. Paperino
mercoledì 13 ottobre 2010 alle 1:48 AM - chrome 6.0.472.63 Windows 7
   

P.S. non c'è nessun programma completo. Galdom parlava di UI per questione di comodità. Una volta che parte PeoneFS il mitico Explorer (Esplora cartelle) è la UI. Vai in MyComputer e dovresti trovare il tuo nuovo drive di zecca (ci mette qualche secondo ad apparire)

   
11. 0verture
mercoledì 13 ottobre 2010 alle 2:08 AM - firefox 3.6.10 Windows 7
   
  1. edita il file di configurazione
  2. lancia l'eseguibile da riga di comando. Ci sono le istruzioni lì
No che non ci sono le istruzioni, a parte installare o togliere il servizio. Una volta che ho editato il file di configurazione (che ci metto dentro ? una cartella da condividere ?) cosa succede ?
   
12. 0verture
mercoledì 13 ottobre 2010 alle 2:18 AM - firefox 3.6.10 Windows 7
   

ok no comincio a capire. Se voglio spedire un file criptato lo riprendo dal drive fasullo invece che dalla sorgente e se ricevo via mail un file criptato per riaverlo originale che combino ?

   
13. 0verture
mercoledì 13 ottobre 2010 alle 2:22 AM - firefox 3.6.10 Windows 7
   

L'idea comincia ad essere chiara però se tieni le password in chiaro nel file di configurazione mi sa che ci scappa una debolezza in più (forse una piccola gui che trasformi la pass in un hash non sarebbe male) senza contare che una volta che il file risulta "peonizzato" non si può più cancellare fino alla chiusura di peone stesso.

   
14. Paperino
mercoledì 13 ottobre 2010 alle 5:44 AM - chrome 7.0.517.36 Windows 7
   

(ho messo online una nuova versione che ignora i folder non esistenti, utile nei casi di chiavette USB ecc.).

@0verture:

Partiamo prima dal mio obiettivo. Ho un folder 'pippo' in chiaro contenente documenti personali. Lo vorrei dare in pasto all'applicazione WonderfulBackup che fa il backup sui server X. Il problema è che se WonderfulBackup non supporta l'encryption (o se l'encryption supportata è troppo lenta per cui inutile) i file sul server X partirebbero all'origine in chiaro. Poi magari l'azienda che ospita il server X garantisce che sono criptati e lo giura sulla testa del CEO, ma rimane il fatto che dall'origine partono sempre in chiaro anche se viaggiassero su un canale cryptato come l'HTTPS o SSL, ecc.

Cioè

Casa (chiaro) -> HTTPS Encrypt --- INTERNET ---> HTTPS Decrypt (chiaro) -> Server X (encrypt) -> Hard-Disk X (criptato)

La mia idea è banale. Creare un drive virtuale in cui i folder non sono altro che la versione criptata dei folder di un altro drive che è quello che fa PeoneFS.

Crea un drive (Z:) e vi ci mette un folder Pippo_crypt che è il mirror criptato di C:\pippo. Ogni volta che una applicazione accede a Z:\Pippo_Crypt in realtà sta accedendo a C:\pippo in versione criptata al volo. In aggiunta Z:\ è marcato a sola lettura. A questo punto dici all'applicazione WonderfulBackup di fare il backup del drive Z:\ e sei a posto. Nel momento in cui WFBackup accede ai file li ritroverà già criptati.

Come fare per decriptare? L'algoritmo è simmetrico. Basta copiare i file da Z:\pippo_crypt in C:\temp e ri-criptare C:\temp in Z:\decriptato e quei file diventeranno di nuovo visibili come prima.

Salvare la password in chiaro non introduce nessuna vulnerabilità: se qualcuno può accedere al file di configurazione può altresì accedere alle directory non criptate. Ricorda l'obiettivo: una volta criptate virtualmente le directory le puoi copiare su una chiavetta USB e se la perdi non sarà possibile decifrarne il suo contenuto?

È più chiaro adesso? In futuro mi riservo di migliorare il post e pubblicare il codice sorgente da qualche parte (codeplex?). Ovviamente GPL3.

   
15. 0verture
mercoledì 13 ottobre 2010 alle 11:32 AM - firefox 3.6.10 Windows 7
   

Ovviamente GPL3

Veramente lo metti sotto quella licenza ? E' una ripicca verso Ballmer ?

   
16. Phenix
mercoledì 13 ottobre 2010 alle 2:27 PM - chrome 6.0.472.63 Windows 7
   

Non vedo l'ora di vederne il sorgente

   
17. Paperino
mercoledì 13 ottobre 2010 alle 4:52 PM - chrome 7.0.517.36 Windows 7
   
   
18. Snake
mercoledì 13 ottobre 2010 alle 6:36 PM - firefox 3.6.10 Windows 7
   

Nuooo, il dominio savefile.com è scaduto

   
19. Paperino
mercoledì 13 ottobre 2010 alle 7:17 PM - chrome 6.0.472.63 Windows 7
   

@Phenix: http://peonefs.codeplex.com

Se volete contribuire (soprattutto per quanto riguarda la documentazione, per ora scarsissima) mandatemi una mail con il nome dell'account codeplex.

@0verture: MS reciprocal license. Era chiaro che scherzavo.

   
20. Paperino
mercoledì 13 ottobre 2010 alle 9:15 PM - chrome 6.0.472.63 Windows 7
   
   
21. 0verture
mercoledì 13 ottobre 2010 alle 9:28 PM - firefox 3.6.10 Windows 7
   

MS reciprocal license. Era chiaro che scherzavo.

Che peccato, ci sarebbe stato da ridere

GNU Barbun License

   
22. Phenix
giovedì 14 ottobre 2010 alle 9:16 AM - chrome 6.0.472.63 Windows XP
   

@ Paperino

Mi guarderò il sorgente con calma, ieri sera gli ho dato una scrollata in velocità. Per la documentazione intendi commentare il codice?

   
23. Paperino
giovedì 14 ottobre 2010 alle 5:49 PM - chrome 7.0.517.41 Windows 7
   

Per documentazione intendo l'arricchire il mio post con qualche esempio, figura ecc. dopo averlo chiaramente tradotto in inglese. Insomma mettere in bella copia quello che ho scritto finora tra post e commenti, ecc.

Però se qualcuno volesse cimentarsi anche nel migliorare il codice o aggiungere una trayapp ecc. è più che benvenuto. Ditemi solo se volete collaborare in qualsiasi modo e il vostro handle.

   
Lascia un commento:
Commento: (clicca su questo link per gli smiley supportati; regole di ingaggio per i commenti)
(opzionale, per il Gravatar)