Bitcoin Forum

Local => Crittografia e decentralizzazione => Topic started by: alex9919 on June 19, 2017, 12:22:59 PM



Title: Algoritmo di cifratura simmetrica "fai da te"
Post by: alex9919 on June 19, 2017, 12:22:59 PM
Salve, diversi mesi fa, interessato all'argomento iniziai a scrivere del codice in C che applicasse una cifratura simmetrica a un determinato messaggio inserito dalla console (in seguito non mi sono dedicato più per diversi motivi).
Questa è la funzione per cifrare:
Code:
void cifra(char messaggio[], char pass[]){
    int i=0;
    for(; i<strlen(messaggio); i++){
        messaggio[i]^=pass[i%strlen(pass)];
    }
}
E questa è la funzione per ottenere il messaggio in chiaro:
Code:
void decifra(char messaggio[], char pass[]){
    int i=0;
    for(; i<strlen(messaggio); i++){
        messaggio[i]^=pass[i%strlen(pass)];
    }
}
Come si può vedere è un metodo abbastanza semplice per cifrare, che usa l'operatore xor tra un carattere del messaggio (in ordine crescente) e un carattere della chiave determinato dell'espressione: i%strlen(pass).
Vorrei chiedere a chi è più esperto, cosa ne pensa e quali sarebbero le falle di tale metodo.


Title: Re: Algoritmo di cifratura simmetrica "fai da te"
Post by: reee on June 21, 2017, 05:38:21 PM
In pratica è un cifrario di Vernam.
E' sicuro se si ha modo di generare la chiave usando numeri davvero "casuali" (e qui non hai postato il codice per generare la chiave, diciamo che se la chiave è generata correttamente allora il tuo algoritmo è sicuro).

Gli svantaggi sono:
1) tutti i tipici svantaggi della crittografia simmetrica (serve un canale sicuro per comunicare la chiave)
2) la chiave deve essere della stessa lunghezza del messaggio.


Title: Re: Algoritmo di cifratura simmetrica "fai da te"
Post by: alex9919 on June 21, 2017, 07:27:01 PM
In realtà per ora non ho ancora pensato a un modo per generare la chiave (andrebbe inserita da input).


Title: Re: Algoritmo di cifratura simmetrica "fai da te"
Post by: picchio on June 21, 2017, 08:40:56 PM
Se come chiave si usasse una immagine (o altro documento) compresso? Credete possa essere sicuro? Alla fine i file compressi (ovviamente senza perdita di informazioni) non dovrebbero avere ridondanza e, a naso, direi che dovrebbero assomigliare a sequenza pseudocasuali.


Title: Re: Algoritmo di cifratura simmetrica "fai da te"
Post by: reee on June 21, 2017, 09:37:55 PM
Se come chiave si usasse una immagine (o altro documento) compresso? Credete possa essere sicuro? Alla fine i file compressi (ovviamente senza perdita di informazioni) non dovrebbero avere ridondanza e, a naso, direi che dovrebbero assomigliare a sequenza pseudocasuali.
non è un metodo granchè sicuro, le immagini hanno degli header prefefiniti che potrebbero portare a decifrare parti di codice. Vanno generati per forza dei dati casuali per fare una cosa "seria".

Ah, tra gli "svantaggi" mi ero dimenticato il fatto che la chiave può essere usata solo una volta.


Title: Re: Algoritmo di cifratura simmetrica "fai da te"
Post by: picchio on June 21, 2017, 09:58:19 PM
Se come chiave si usasse una immagine (o altro documento) compresso? Credete possa essere sicuro? Alla fine i file compressi (ovviamente senza perdita di informazioni) non dovrebbero avere ridondanza e, a naso, direi che dovrebbero assomigliare a sequenza pseudocasuali.
non è un metodo granchè sicuro, le immagini hanno degli header prefefiniti che potrebbero portare a decifrare parti di codice. Vanno generati per forza dei dati casuali per fare una cosa "seria".

Ah, tra gli "svantaggi" mi ero dimenticato il fatto che la chiave può essere usata solo una volta.
Per pura didattica,
Usi il file zippato per chiave, non il file immagine. Immagino che il problema sia ... Aldo ha il messaggio crittato e non deve poterlo leggere, come arriva a capire che la chiave è proprio quella senza altre informazioni (tipo sa che è uno zip - da risolvere il problema degli header o metadati degli zip) ...
Se ci pensi potrebbe essere un metodo abbastanza semplice per scambiarsi la chiave senza dare nell'occhio ... anche se sono consapevole che non è sicuro ma ...


Title: Re: Algoritmo di cifratura simmetrica "fai da te"
Post by: jack0m on June 26, 2017, 09:29:17 AM
Se la password è più corta di metà del messaggio, a occhio e croce si cracca più o meno facilmente con un po' di criptoanalisi


Title: Re: Algoritmo di cifratura simmetrica "fai da te"
Post by: alex9919 on July 05, 2017, 02:53:57 PM
Se la password è più corta di metà del messaggio, a occhio e croce si cracca più o meno facilmente con un po' di criptoanalisi
Non esiste un implementazione in C/Java di un metodo di cifratura più robusto?


Title: Re: Algoritmo di cifratura simmetrica "fai da te"
Post by: joosh on July 08, 2017, 02:46:30 PM
Se la password è più corta di metà del messaggio, a occhio e croce si cracca più o meno facilmente con un po' di criptoanalisi
Non esiste un implementazione in C/Java di un metodo di cifratura più robusto?
Per Java puoi usare BouncyCastle, in rete trovi tutti gli esempi che vuoi.


Title: Re: Algoritmo di cifratura simmetrica "fai da te"
Post by: jack0m on July 08, 2017, 07:52:39 PM
Se la password è più corta di metà del messaggio, a occhio e croce si cracca più o meno facilmente con un po' di criptoanalisi
Non esiste un implementazione in C/Java di un metodo di cifratura più robusto?

non è una questione di implementazione, è proprio l'algoritmo che è debole, perché riusi ciclicamente la stessa password. In pratica usi una modalità ECB senza initialization vector (IV), che è la più insicura.
Qui trovi una spiegazione con diverse modalità a confronto:

https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation (https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation)