Next Previous Contents

1. Parte1 Crittografia

In questa prima parte verrà data una definizione generale sulla crittografia e sulla crittoanalisi, verrà inoltre trattato il funzionamento dei principali algoritmi crittografici.

1.1 Introduzione generale della crittografia

INTRODUZIONE ALLA CRITTOGRAFIA

La crittografia (scrittura nascosta) è una scienza antica che si occupa dei metodi di cifratura delle informazioni, al fine di rendere trasparente i messaggi tra un mittente e un destinatario ma praticamente illegibili a terze persone.Il mittente crittografa il messaggio tramite delle chiavi che sono in possesso anche del destinatario in modo che quest'ultimo possa decifrarlo. Nella crittografia la codifica viene costruita in modo che il processo di decodifica possa essere attuato solo se si è in possesso della chiave traduttrice. La crittografia è in realtà una branca di una scienza più ampia: la crittologia, che oltre a comprendere la crittografia stessa, comprende anche la crittoanalisi (analisi di cio che è nascosto) che si occupa di analizzare i dati di una trasmissione crittografata in modo da poterli intercettare e cercare di tradurli, la crittoanalisi verrà analizzata successivamente. Gli algoritmi di crittografia possono essere classificati sotto due principali categorie riguardanti il tipo di chiave utilizzata: simmetrici (chiave segreta), asimmetrici (chiave pubblica).

Negli algoritmi a chiave simmetrica, la chiave utilizzata nel processo di decodificazione e codificazione è la stessa; negli algoritmi a chiave asimmetrica invece ci sono due tipi di chiavi, una privata in mano solo al mittente dei messaggi, e una pubblica che resa a disposizione di tutti permette di decifrare i messaggi crittografati con la chiave privata, ma non permette di crearli, quindi mette in evidenza l'autenticità del mittente. Gli algoritmi simmetrici e asimmetrici possono coesistere insieme, per esempio con la chiave pubblica viene codificata una chiave di crittografia generata casualmente, e quest'ultima è utilizzata per crittografare il messaggio utlizzando un algoritmo simmetrico, questa è per esempio l'implementazione del PGP.

Metodi di crittazione

il metodo di crittazione dei messaggi, cioè il portare un messaggio da testo in chiaro a testo crittografato è basato su una chiave che rappresenta una funzione, e un buon algoritmo di crittazione. L'aspetto critico della chiave è rappresentato dalla lunghezza della stringa usata nella creazione della stessa, infatti più cifre vengono usate e maggiore è la sicurezza; con 2 cifre in base 10 avrei 100 possibili chiavi, con 3 cifre 1000 possibili chiavi e cosi via dicendo, si dice che più lunga è la chiave e maggiore è il tempo work factor. Il work factor è quel tempo necessario che serve ai crittoanalisti per individuare la chiave. Le tecniche usate per portare il testo, da testo in chiaro a testo crittografato sono molteplici, noi analizzeremo tre di esse che vanno sotto il nome di :

  1. Sostituzione
  2. Trasposizione
  3. One-time pads

Sostituzione

La tecnica è molto semplice e consiste nel sostituire ogni lettera o un gruppo di lettere da altre lettere contenute nell'alfabeto:


 alfabeto normale:      A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
 alfabeto cifrato:      D E F G H I J K L M N O P Q R S T U V W X Y Z A B C

 Testo in chiaro:      CIAO
 Testo crittografato:  FLDR

La chiave K in questo esempio è uguale K = 3. Questo esempio è molto semplice esistono comunque metodi di sostituzione più complicati, che vengono usati realmente.

Trasposizione

La trasposizione è un altra tecnica usata per crittografare un messaggio, analizziamo adesso la trasposizione per colonna che data una certa chiave, costruisce il testo cifrato in base al riordinamento del testo sulle colonne della chiave, facciamo un esempio per chiarire il concetto:

Prendiamo una chiave qualsiasi : chiave = BOOKS
Prendiamo un messaggio in chiaro msg = ciao domani ti porto quel carico.


    B   O   O   K   S 
    
    c   i   a   o   d
    o   m   a   n   i
    t   i   p   o   r
    t   o   q   u   e
    l   c   a   r   i
    c   o   

di questa tabella si prendono le colonne in ordine alfabetico basate sulle lettere delle chiavi, in questo caso prima la colonna B poi K poi le colonne con due O e infine la colonna con la lettera S.Infine avremo:


testo in chiaro     : ciao domani ti porto quel carico
testo crittografato : cottlc onour imioco aapqa direi

chiave : books

One-time pads

L'algoritmo di questa tecnica è il seguente:

  1. Si sceglie una stringa casuale di bit che rappresenta la mia chiave.
  2. Successivamente di trasforma il testo in chiaro in bit.
  3. Si effettua l'operazione logica di or esclusivo tra la chiave e il testo tradotto in bit e si ottiene cosi il testo crittografato.

Naturalmente questa tecnica presenta degli inconvenienti che vanno dalla presenza della chiave sia nella macchina del mittente e del destinatario, dalla quantità di dati che può essere trasmessa, dipendente dalla lunghezza della chiave visto che l'operazione dell'or esclusivo deve essere fatta tra testo e chiave e infine dalla sensibilità di perdita dei dati visto che si lavora con singoli bit. Le tecniche sia della sostituzione sia della trasposizione vengono riprodotte attraverso circuiti elettronici noti come P-box (P sta ad indicare permutazione) nel caso di trasposizione, e S-box nel caso di sostituzione, questi circuiti vengono in generale chiamati Product cipher, lo standard per la creazione di questi circuiti vanno sotto il nome DES.

Funzioni Hash

Le funzioni hash sono funzioni particolari che permettono di dare un impronta digitale che identifica univocamente il messaggio di partenza; sono quindi funzioni che creano una stringa associata al messaggio da spedire e per il quale una volta applicata la funzione non dovrebbe essere più possibile ritornare al testo originale. Per ogni funzione hash inoltre non si ha la certezza da quale messaggio proviene, anche se la funzione hash ideale dovrebbe essere unica cioè collision free. Un esempio di funzione hash che distribuisce in modo abbastanza uniforme le chiavi, è quella di prendere un grande numero primo M, e per ogni chiave k , la funzione H(k) = k mod M, questo tipo di funzione viene usata in molti ambienti programmativi. Un esempio sui sistemi Linux può essere dato dall'algoritmo md5 che dato un file come opzione, crea una chiave hash a 128 bit.Un esempio sulla mia Debian è:


bash-2.01$ md5sum source.gif
aa7229830893b7b30bb0cf23a9fa5abc source.gif

il risultato viene espresso con 16 cifre esadecimali. Riassumendo le due più importanti caratteristiche che legano le funzioni hash alla crittografia abbiamo, prima la verifica dell'integrità di un certo messaggio, confrontando l'impronta digitale di partenza con quella di arrivo; secondo la facilità con cui attraverso queste funzioni è possible porre una firma digitale anche su file di grosse dimensioni, senza occupare troppi cicli di C.P.U., le funzioni hash vengono anche usati come timestamp per la verifica dei pacchetti, per esempio se scaricate un file dal sito della Debian www.debian.org oltre al pacchetto viene fornito il valore hash in modo che dopo aver scaricato il pacchetto si esegue il controllo con il comando md5sum e si controlla poi il valore fornito se è uguale il pacchetto è originale e non è stato modificato.

Facciamo adesso una carellata sulle principali funzioni hash che sono presenti attualmente:

  1. MD2: produce un valore di hash di 128 bit e richiede come input multipli di 16 byte.La funzione inoltre usa il Pad, cioè aggiunge i bit mancanti dei messaggi d'ingresso che non hanno la lunghezza giusta. Questo algoritmo è già stato violato.

  2. MD4: anche questa funzione usa hash a 128 bit più veloce della funzione precedente, richiede pad a multipli di 512 bit. Il padding inoltre comprende sempre un valore di 64 bit che indica la lunghezza del messaggio che non ha subito pad. Questa funzione è piu sicura della precedente in quanto la difficoltà di produrre due messaggi che hanno la stessa lunghezza con modulo 2^64 è maggiore.

  3. MD5: è stato ideato perchè il MD4 è stato violato, la struttura della funzione è la seguente:
    1. il testo è diviso in blocchi 512 bit.
    2. viene generato un hash di 128 bit.
    3. è basto su XOR e operazioni logiche.
    unico svantaggio è che è un pò più lento del precedente.
L'approfondimento delle funzioni hash, può essere trovato su qualsiasi testo di algoritmi.
Next Previous Contents