Newsgroup: it.comp.sicurezza.crittografia
Titolo: Relazione tra chiavi di cifratura e password

Salve,
il software Blowfish puň utilizzare per la cifratura di un file uno dei 
seguenti algoritmi:
a.. Blowfish
a.. CAST
a.. ARCFOUR
a.. Serpent
a.. AES
a.. 3DES
a.. Twofish
Detto ciň qual'č la relazione che intercorre tra la lunghezza in bit della 
chiava associata all'algoritmo e la password che l'utente utilizza per 
cifrare e decifrare il file? Ad esempio l'algoritmo Blowfish utilizza chiavi 
di dimensioni variabili da 32 a 448 bit e i blocchi utilizzati per la 
cifratura sono di 64 bit. Se utilizzo una password la cui lunghezza č tale 
da avere una dimensione di 32 bit e fino a 448 bit bene o male quello che 
succede dovrebbe essermi chiaro. Ma se la lunghezza della password ha una 
dimensione minore di 32 bit o superiore i 448 bit?
Spero che la domanda sia innanzitutto lecita e poi comprensibile.
Grazie.
Ciao Gianluca 

La password non è utilizzata come chiave così com'è, ma viene
trasformata in chiave con un algoritmo che ha come input di lungheza
arbitraria la password e come output di lunghezza fissa (quella
richiesta dall'algoritmo di cifratura scelto) la chiave.
Questo algoritmo nel caso più semplice può essere un hash (che ha
appunto la caratteristica di creare un digest di dimensioni fisse da
un input di lunghezza variabile) ma nel caso di software meglio
implementati è una procedura di derivazione della chiave che segue
standard ben precisi (es PBKDF2), fondamentalmente basati sulla
reiterazione di hash crittograficamente forti per centinaia o migliaia
di volte per rendere arbitrariamente lento (e non abbreviabile da
parte di un attaccante) il processo di derivazione della password.
Lo scopo di una procedura di derivazione della chiave più pesante di
un semplice hash è quello di porre un "gettone" di tempo/potenza di
calcolo per ogni tentativo di testare la chiave corrispondente ad una
data password; se per l'utente legittimo questo significa un tempo di
pochi decimi di secondo, nemmeno avvertibile, per un attacco
automatizzato che debba testare milioni o miliardi di password (se a
dizionario, molto di più se è brute force!) questo significherà
espandere enormemente i tempi richiesti.

Ti ringrazio per la risposta che è stata molto chiarificatoria...ed ho fatto 
anche a riprova un test utilizzando winmd5free con il quale ho generato 
degli hash sempre uguali di 32 byte pur fornendogli in input file di 
dimensioni diverse (1 e 10 byet). Detto ciò cortesemente puoi aiutarmi a 
fare il seguente test. Ho un file cifrato con algoritmo Blowfish (ho 
utilizzato il software Blowfish Advanced CS). Vorrei provare ad utilizzare 
qualche software che mi permette di tentare un attacco di tipo brute force o 
di tipo dictionary e lanciare contemporaneamente qualche software che mi 
conta i cicli macchina ed il tempo che il software sta impiagando durante il 
test. Cosa mi consigli?
Grazie ancora per il tuo aiuto.

 input file di dimensioni diverse (1 e 10 byet).
L'md5 genera 128 bit (16 byte); cosa intendi con hash di 32 byte?
Come hai fatto a generare con winmd5free gli hash sempre uguali?
Cristiano 

 test.
Non è molto semplice.
Ti serve innanzitutto un software specifico per il programma di
crittografia su cui vuoi montare l'attacco; questo software deve
conoscere esattamente come il programma crittografico salva i dati
cifrati, in modo da sapere come avviene la validazione della password.
Di solito (spiegato abbastanza superficialmente) c'è un campo nel file
cifrato: la password viene trasformata in chiave, l'algoritmo di
cifratura viene inizializzato con quella chiave e come primo output
viene cifrata una stringa nota che viene salvata da qualche parte
nell'header del file cifrato.
In fase di decifrazione del file l'utente quindi saprà subito dopo la
derivazione della password se questa è corretta o meno (quindi
l'overhead sarà minimo e non dipendente dalla dimensione dei dati per
l'utente legittimo) perchè potrà decifrare correttamente (ottenendo la
stinga nota) il campo di validazione della password.
In caso non sia disponibile (o non sia possibile realizzare) un
software di questo tipo si può comunque organizzare uno script che
madìndi via batch al programma di cifratura le possibili password (da
dizionario o provandole per forza bruta), ma anche in questo caso ci
sono alcune dificoltà di ordine pratico, come ad esempio studiare un
dizionario plausibile per l'utente che si sta attaccando, o come
interfacciare lo script o programma che genera le password con il
programma di crittografia da attaccare; inoltre dato che ad ogni
tentativo si avrà anche l'overhead di dover fare partire (e poi
chiudere) una istanza del programma di crittografia diciamo che questo
non è un approcio ottimale.
Per la parte di misurazione di tempi e cicli macchina richiesti, è
abbastanza semplice inserire un timer nel programma o nello script che
porteranno l'attacco, ma in un ambiente multitasking come i sistemi
moderni è abbastanza difficile capire quanto la/le CPU stavano
lavorando all'attacco e quanto su altri task.
Questo conto IMHO è possibile a spanne ma se vuoi un numero realmente
attendibile di cicli meglio rifarsi a manuali di riferimento con
misurazioni precise e controllate riguardo l'esecuzione degli
algoritmi coinvolti su una data architettura per sapere esattamente
quanti cicli sono stati spesi in cosa.