Oppure

Loading
19/03/08 11:03
eddiewrc
scusate (l'eventuale) ignoranza ma guardando il file cript.c a me sembra che il programma semplicemente prelevi 128 byte di dati da cifrare alla volta con questa struzione n=fread(buf,1,128,inf);
dopodichè controlla che siano stati effettivamente letti un numero corretto di dati con questa istr if(!n)break; e alla fine con questo for viene eseguita la cifratura:
for(i= 0,j= 0;i< n;buf[ i ]+=key[i%(len-1)],i++);
che si poteva scrivere tranquillamente come

for(i = 0,j = 0; i< n; i++);
buf[ i ] += key[i%(len-1)]

ovvero ad ogni byte del testo in chiaro viene sommato il valore del byte di posizione
i mod (lunghezza chiave - 1)
che fa in modo che anche se la chiave inserita è più corta del buffer di lettura (di 128 bytes) non vengano superati gli indici dell'array che contiene la chiave.

mi sembra quindi che questo algoritmo sia un cifrario a trasposizione polialfabetica, analogo alla "Chiffrè Indecifrable" proposta da Blaise de Vigenère nel 1586 e forzata da Charles Babbage 270 anni dopo. Le differenze sono che Vigenère usava 26 alfabeti e qui invece si rimanda alla lunghezza della password (che comunque difficilmente sarà di 26 caratteri, immagino.) e che lui faceva una somma modulo 26 (21 sono le lettere dell'alfabeto latino) mentre con la tabella ascii si hanno 256 possibili caratteri. Oltretutto la somma
buf[ i ] += key[i%(len-1)] non è "protetta" da nessun modulo, per cui se buf[ i ] = 'ù' e key[ i%(len-1)] = 'ù' il risultato sarà il carattere 256 che nn esiste nella tabella ascii.

l'algoritmo in generale NON è sicuro perchè i cifrari di questo tipo, anche se più complessi dei cugini monoalfabetici, sono comunque vulnerabili all'analisi statistica delle frequenze, per cui con qualche calcolo in più e un po' di fortuna sono risolvibili. C'è solo un caso in cui questo algoritmo (come gli altri simili) sono INDECIFRABILI, ovvero se si usa quella che viene detta One-Time-Pad: Claude Shannon ha dimostrato che l'algoritmo è inattaccabile se e solo se testo in chiaro e testo cifrato sono due variabili INDIPENDENTI, e quindi:

•la chiave, GENERATA CASUALMENTE, deve essere lunga ALMENO QUANDTO il messaggio che deve essere cifrato
•la chiave deve essere utilizzata una sola volta.

Hola! spero di essere stato esauriente e ogni correzione per (spero eventuali) errori è ben accetta!
Ultima modifica effettuata da eddiewrc 19/03/08 11:05
aaa
19/03/08 16:37
Maury91
a quanto pare non e cosi invincibile :)
comunque anche io ho usato un'algoritmo simile, ma non conosco nessuno che sia riuscito a forzarlo
aaa
19/03/08 19:14
eddiewrc
la difficoltà pratica è diversa da quella teorica. teoricamente un cifrario simile non garantisce sicurezza sia statisticamente che tramite un bruteforcing. praticamente, non è difficle fare un programma che tramite bruteforcing prova tutte le chiavi possibili, ma il difficile è fare in modo che questo programma si ACCORGA del momento in cui trova quella giusta! mi spiego: se il testo cifrato contiene la frase "forza inter", per noi ha un significato e leggendola ci accorgeremmo di aver portato a buon fine l'attacco, ma per il programma è una stringa qualsiasi...

la scelta è allora di fare in modo che il programma di bruteforcing salvi una copia di tutti i testi in chiaro in modo che un essere umano li controlli separando quelli senza senso da quello di senso compiuto, cioè quello ottenuto dall'aver indovinato la chiave giusta. ovviamente dato che lo spazio delle chiavi è dell'ordine di 256^k tutto ciò p estremamente lungo e gravoso. la cosa è fattibile se dalla decifrazione di questa chiave dipende qualcosa di importante, come quantità di soldi o informazioni segrete! altrimenti è difficile trovare uno che lo faccia x hobby. io ho fatto un programma simile x scommessa una volta e ho dovuto leggere più di 5000 possibili testi in chiaro prima di trovare quello corretto.

x effettuare l'analisi statistica serve invece un testo cifrato molto lungo da analizzare, xche più è lungo più è accurata. per es, nella frase "forza inter" solo la r è ripetuta, mentre le altre lettere compaiono solo una volta. è chiaro che con frasi così corte non è assolutamente possibile una analisi delle frequenze.

cmq sta sicuro che quando ci sono in ballo cose importanti, i governi non ci metono molto a affittare supercomputer o a far lavorare in parallelo decine di migliaia di pc per giungere ad una soluzione in tempi brevi. basta pensare al DES.. la chiave di 56 bit è diventata obsoleta in pochissimo tempo e al giorno d'oggi è decifrabile in meno di tre ore da parte, ovviamente, di qualsiasi agenzia abbastanza "potente" da potersi permettere le spese.

scusa per la lunghezza del post. spero di essere stato chiaro, ciao!
aaa
25/03/08 22:16
P4p3r0g4
pensiamo alla frase di prima.
con un dizionario potremme fare un bruteforce e automaticamente escludere i casi non presenti nell'alfabeto italiano.
a meno che la chiave non sia uguale al testo ( che ci darebbe infinite soluzioni) non sarebbe impossibile decifrarlo no?
voglio dire i casi risulterebbero ridotti e l'analsi incrociata di chiavi piu o meno logiche (assunto che il nostro lorelapo non abbia cifrato il testo con lettere a caso) e risultati prodotti ci darebbero facilmente la soluzione.

Edit: e anche la password di lorelapo che per esperienza si sa che se ne usano poche..
Ultima modifica effettuata da P4p3r0g4 25/03/08 22:18
aaa
26/03/08 0:06
eddiewrc
si può usare un dizionario per cercare di indovinare la chiave o per cercare di capire quali dei milioni di possibili testi in chiaro è corretto tra quelli che un attacco bruteforcing esaustivo genererebbe?

se è la seconda è sicuramente un'idea valida!
aaa
26/03/08 14:19
P4p3r0g4
intendevo la seconda...
aaa
26/03/08 15:28
P4p3r0g4
a mio parere la password e` di 7 caratteri.
analizzando si puo notare nel grafico un certo andamento del 7 carattere del 14 del 21 e del 28 con un dislivello molto marcato con il 6 il 13 il 20 e il 27.

Edit 8 lettere l'algoritmo ne trancia una.
Ultima modifica effettuata da P4p3r0g4 26/03/08 18:55
aaa
26/03/08 19:31
eddiewrc
secondo me l'algoritmo di cui parliamo non è così geniale... basta dire che è suscettibile all'analisi delle frequenze! e c'è anche (come ho scritto più in su) una operazione che secondo me dovrebbe essere effettuata in modulo 255 altrimenti restituisce risultati non deterministici.
se proprio bisogna cercare di forzarlo seriamente direi di farci dare un testo cifrato di dimensioni accettabili... con quei pochi caratteri non si va da nessuna parte. dopodichè analisi delle frequenze e un po' di fortuna dovrebbero funzionare. altrimenti bruteforcing... che in questo caso è la soluzione più lunga! rimane solo da valutare se ne vale la pena: non c'è una gran soddisfazione se non solo forzarlo è teoricamente possibile, ma anche teoricamente molto facile!
aaa