Introduzione alla crittografia
Da Hacknowledge.
Cosa si intende quando si parla di sicurezza in Internet? Il lettore potrà sorridere a questa domanda, ma vi assicuro che la risposta e tutt'altro che scontanta. Quando si parla di sicurezza in Internet si intendono le operazioni necessarie a garantire (almeno) i seguenti obiettivi:
- Privacy, segretezza, confidenzialità: la garanzia che il traffico dedicato a me non sia accessibile ad altri.
- Autenticazione: la garanzia che il traffico in entrata sia inviato da utenti legittimi.
- Integrità: la garanzia che il traffico ricevuto non sia stato alterato durante la trasmissione.
- Controllo dell'accesso: la garanzia che non vi siano usi non autorizzati di una data risorsa.
Questi sono i quattro motivi principali che hanno spinto l'uomo, soprattutto con l'avvento del computer, ad avventurarsi nel mondo della crittografia. Tuttavia prima di lanciarsi in questa avventura bisogna sapere che:
Un sistema puo' essere reso sicuro dal punto di vista della potenza di calcolo (i cosiddetti attacchi di forza bruta). Si tratta di funzioni che rendono presso che impraticabili i tentativi di penetrazione e di violazione del sistema protetto, anche con computer velocissimi, per lo meno in un ragionevole arco di tempo. Inoltre un sistema puo' essere protetto da più di un'operazione di sicurezza, per esempio una funzione per l'autenticazione e un'altra per proteggere la segretezza del traffico. Tuttavia Il grado di sicurezza di un sistema nonostante sia proporzionale alle misure di sicurezza prese per renderlo sicuro, non potrà mai raggiungere il 100%, si veda il libro di Kevin D. Mitnick per averne le prove.
Indice |
[modifica] Terminologia
Quando si comincia a parlare di crittografia spesso è richiesto al lettore di conoscere la terminologia corretta, per questo motivo vedremo i termini fondamentali per parlare di crittografia.
- Crittografia: Si tratta del cambiamento della sintassi di un messaggio in chiaro per renderlo illeggibile al lettore comune, a cui appare come un linguaggio totalmente incomprensibile (testo cifrato).
- Decifrazione: L'opposto della crittografia, in quanto comporta il ritorno del testo cifrato al suo linguaggio di partenza, il testo in chiaro, comprensibile a tutti.
La crittografia e la decifrazione vengono svolte con due sistemi, o spesso con una combinazione dei due.
- Per il primo sistema si ricorre a tre definizioni: privato, simmetrico o convenzionale. Questo sistema ricorre alla stessa chiave per la crittografia e la decifrazione. Si tratta di una chiave segreta, condivisa dal mittente e dal destinatario di un messaggio (chiave segreta condivisa). Il mittente usa la chiave per convertire il testo in chiaro in un linguaggio cifrato, mentre il destinatario la utilizza per decodificare il testo cifrato.
- Per il secondo sistema si usano due termini: crittografia a chiave pubblica o crittografia a chiave asimmetrica. Questo sistema ricorre a due chiavi diverse (in realtà due set diversi di chiavi), la prima utilizzata per la crittografia e la seconda per la decifrazione. Una chiave viene chiamata chiave pubblica, l'altra chiave privata.
A questi termini si aggiungono poi tutta una serie di termini più specifici.
- Firma digitale: si riferisce alle procedure di autenticazione per comprovare l'identità del mittente di un messaggio.
- Fuzione Hash: detta anche codice hash o digest del messaggio (MD , Message Digest) si riferisce ad una funzione che trasforma un messaggio di qualsiasi lunghezza in un valore di lunghezza fissa. Se protetta da crittografia, la funzione hash viene utilizzata per autenticare il mittente di un messaggio. La funzione hash fornisce lo strumento per supportare due diversi aspetti della sicurezza: l'autenticazione e l'integrità.
[modifica] Sistemi di base
La crittografia e la decifrazione vengono effettuate trasformando il testo in chiaro mediante un algoritmo, in un testo cifrato. Per cominciare a intuire di cosa si parla, vedremo due metodi usati nel passato: la sostituzione e la trasposizione.
[modifica] Sostituzione
La sostituzione, anche conosciuta come sostituzione crittografia, è molto semplice da capire in quanto: un valore specifico viene sostituito da un altro valore.
Questo script mostra un esempio di codifica in cui gli input sono due: testo e chiave. Perche' il tutto possa essere usato, l'algoritmo di codifica deve essere segreto e la chiave pure. In questo caso l'esempio è stato studiato semplice, in modo che possiate comprendere come conoscendo l'algoritmo e la chiave, sia facile tornare al messaggio originale (..come aprire la porta di casa se possiedo la chiave).
#!/usr/bin/perl -w # # easy v0.1 # by Gnix <gnixmail@gmail.com> # http://gnix.netsons.org # # USO # [user@localhost]$ perl easy.pl # ############################################################# # Dati iniziali $testo = "testo da codificare"; $chiave = 7; print "\n\t\tEasy v0.1\n\tby Gnix <gnixmail\@gmail.com>\n\n"; # Stampa dati iniziali print "\nDati iniziali : testo='$testo', chiave='$chiave'\n"; # Codifica e stampa testo codificato $testo_codificato = codifica($testo, $chiave); print "Testo codificato: $testo_codificato\n\n"; ############################################################# sub codifica { my $testo = $_[0]; my $chiave = $_[1]; my $testo_codificato; my $len; # Estrae lunghezza testo $len = length($testo); # Codifica: output i-esimo = carattere i-esimo + chiave for($i = 0; $i < $len; $i++) { $testo_codificato .= chr( ord(substr($testo, $i, 1)) + $chiave ); } return $testo_codificato; } #############################################################
[modifica] Trasposizione
Un altro metodo e' la trasposizione, che invece di sostituire le lettere del messaggio, le riarrangia in maniera che il messaggio diventi incomprensibile a chi lo legge. Un esempio molto semplice e' la trasposizione a binario, conosciuta anche come rail fence, dove le lettere del messaggio vengono scritte su due rige e quindi la riga inferiore viene fatta seguire la riga superiore.
#!/usr/bin/perl -w # # railfence v0.1 # by Gnix <gnixmail@gmail.com> # http://gnix.netsons.org # # Questo algoritmo di crittografia e' noto come la trasposizione # binario (rail fence). Il funzionamento e' il seguente: # # Testo da cifrare: 'crittografia' # # Trasposizione: citgai # rtorfa # # Testo cifrato: 'citgairtorfa' # # Funzionamento: Si dispongono le lettere del messaggio su due # righe e quindi si fa seguire la sequenza di # lettere inferiore a quella superiore. Se si # legge l'esempio in verticale, prima le prime due # lettere 'c' e 'r', quindi nella seconda colonna # 'i' e 't', nella terza 't' e 'o' e via dicendo # si ritrova 'crittografia'. # ############################################################# print "\n\t\tRail Fence\n\tby Gnix <gnixmail\@gmail.com>\n\n"; # Input $input = "crittografia"; print "input : $input\n"; # Linea sopra for($i = 0; $i < length($input); $i += 2) { $sopra .= substr($input, $i, 1); } print "sopra : $sopra\n"; # Linea sotto for($i = 1; $i < length($input); $i += 2) { $sotto .= substr($input, $i, 1); } print "sotto : $sotto\n"; $output = $sopra . $sotto; print "output: $output\n\n"; #############################################################

