Docsity
Docsity

Prepara i tuoi esami
Prepara i tuoi esami

Studia grazie alle numerose risorse presenti su Docsity


Ottieni i punti per scaricare
Ottieni i punti per scaricare

Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium


Guide e consigli
Guide e consigli


Crittografia: Cifrario Simmetrico, Affine, Monoalfabetico, AES, RSA, Sintesi del corso di Sicurezza Dei Sistemi Informativi

Un'introduzione completa alla crittografia, coprendo concetti chiave come il cifrario simmetrico, il cifrario affine, il cifrario monoalfabetico, aes, la distribuzione delle chiavi, i generatori di numeri pseudocasuali, i numeri primi e la crittografia a chiave pubblica rsa. I diversi tipi di cifratura, i loro vantaggi e svantaggi, e fornisce esempi pratici per illustrare i concetti chiave.

Tipologia: Sintesi del corso

2024/2025

Caricato il 13/03/2025

Asiimov
Asiimov 🇮🇹

1 documento

1 / 25

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
CRIPTOGRAFIA
Ad oggi non esiste un sistema sicura al 100%, ci sarà sempre quell’anello debole che rende vulnerabile ed
attaccabile il nostro sistema, quindi l’obiettivo è quello di renderlo il più sicuro possibile. Per sistema sicuro
si intende un sistema che si comporta nel modo prestabilito che impedisce usi non autorizzati. In passato
una delle vulnerabilità presenti nei sistemi erano le Blackdoor, cioè delle porte utilizzate per l’assistenza
tecnica da parte del produttore dell’applicativo o del sistema ma non vi era la sicurezza assoluta che questa
venisse usata solo per scopi “benevoli”.
La information security si occupa della prevenzione degli attacchi sui sistemi information-based o, non
riuscendovi, della loro rivelazione. I sistemi possono subire attacchi in due maniere diverse:
-Passivi: cercano di leggere o utilizzare le informazioni dal sistema ma non influenzano le risorse di
sistema, non hanno luogo alcuna modifica delle informazioni, non causare alcun danno e l'entità
non è a conoscenza dell'attacco, basta osservare la trasmissione.
-Attivi: tentano di modificare le risorse di sistema o influire sul loro funzionamento, danneggiano
sempre il sistema, minacciano l’integrità e la disponibilità e la trasmissione viene catturata
controllando fisicamente la porzione di un collegamento.
Uno dei meccanismi utili a ridurre gli attacchi passivi è l’uso della crittografia che però non può proteggerci
in modo completo poiché andando ad analizzare i dati, il traffico dei dati e la quantità di bit che vengono sia
inviati che ricevuti, sfruttando la criptoanalisi si può risalire al dato non crittografato.
La criptografia (dal greco nascosto e scrivere) è sempre stata usata fin dai romani e serve per la
trasmissione in ambiente ostile di messaggi di qualsiasi tipo. In realtà due parti complementari:
- Criptografia (propriamente detta);
- Criptoanalisi.
Affine alla criptografia è la steganografia (dal greco coperto e scrivere); sembrerebbero la stessa cosa, in
realtà sono cose diverse: la criptografia si riferisce al nascondimento del contenuto semantico dei messaggi,
la steganografia si riferisce al nascondimento del messaggio usando il messaggio stesso.
La criptografia si avvale dell’utilizzo di keyword che servono per crittografare il messaggio e questi vengono
usate dagli algoritmi che devono avere una buona longevità poiché con la tecnologia futura potrebbe
essere possibile decodificarli in modo più semplice, quindi è opportuno che un algoritmo sia più longevo
possibile. Per contrastare l’analisi dei dati si usa il “padding”, cioè tra un pacchetto e l’altro si aggiungono
dei bit facendo sì di complicare il lavoro e confondere il criptoanalista.
Modello Per Network Security
L’uso di questo modello richiede:
- Progettare un algoritmo adatto per la Security transformation;
- Generare le Secret information (chiavi) usate dall’algoritmo;
- Sviluppare dei metodi per distribuire e condividere le Secret information;
- Specificare un protocollo che permetta ai protagonisti di usare la trasformazione e le chiavi per
ottenere un servizio sicuro.
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19

Anteprima parziale del testo

Scarica Crittografia: Cifrario Simmetrico, Affine, Monoalfabetico, AES, RSA e più Sintesi del corso in PDF di Sicurezza Dei Sistemi Informativi solo su Docsity!

CRIPTOGRAFIA

Ad oggi non esiste un sistema sicura al 100%, ci sarà sempre quell’anello debole che rende vulnerabile ed attaccabile il nostro sistema, quindi l’obiettivo è quello di renderlo il più sicuro possibile. Per sistema sicuro si intende un sistema che si comporta nel modo prestabilito che impedisce usi non autorizzati. In passato una delle vulnerabilità presenti nei sistemi erano le Blackdoor, cioè delle porte utilizzate per l’assistenza tecnica da parte del produttore dell’applicativo o del sistema ma non vi era la sicurezza assoluta che questa venisse usata solo per scopi “benevoli”. La information security si occupa della prevenzione degli attacchi sui sistemi information-based o, non riuscendovi, della loro rivelazione. I sistemi possono subire attacchi in due maniere diverse:

  • Passivi : cercano di leggere o utilizzare le informazioni dal sistema ma non influenzano le risorse di sistema, non hanno luogo alcuna modifica delle informazioni, non causare alcun danno e l'entità non è a conoscenza dell'attacco, basta osservare la trasmissione.
  • Attivi : tentano di modificare le risorse di sistema o influire sul loro funzionamento, danneggiano sempre il sistema, minacciano l’integrità e la disponibilità e la trasmissione viene catturata controllando fisicamente la porzione di un collegamento. Uno dei meccanismi utili a ridurre gli attacchi passivi è l’uso della crittografia che però non può proteggerci in modo completo poiché andando ad analizzare i dati, il traffico dei dati e la quantità di bit che vengono sia inviati che ricevuti, sfruttando la criptoanalisi si può risalire al dato non crittografato. La criptografia (dal greco nascosto e scrivere) è sempre stata usata fin dai romani e serve per la trasmissione in ambiente ostile di messaggi di qualsiasi tipo. In realtà due parti complementari:
  • Criptografia (propriamente detta);
  • Criptoanalisi. Affine alla criptografia è la steganografia (dal greco coperto e scrivere); sembrerebbero la stessa cosa, in realtà sono cose diverse: la criptografia si riferisce al nascondimento del contenuto semantico dei messaggi, la steganografia si riferisce al nascondimento del messaggio usando il messaggio stesso. La criptografia si avvale dell’utilizzo di keyword che servono per crittografare il messaggio e questi vengono usate dagli algoritmi che devono avere una buona longevità poiché con la tecnologia futura potrebbe essere possibile decodificarli in modo più semplice, quindi è opportuno che un algoritmo sia più longevo possibile. Per contrastare l’analisi dei dati si usa il “padding”, cioè tra un pacchetto e l’altro si aggiungono dei bit facendo sì di complicare il lavoro e confondere il criptoanalista.

Modello Per Network Security

L’uso di questo modello richiede:

  • Progettare un algoritmo adatto per la Security transformation;
  • Generare le Secret information (chiavi) usate dall’algoritmo;
  • Sviluppare dei metodi per distribuire e condividere le Secret information;
  • Specificare un protocollo che permetta ai protagonisti di usare la trasformazione e le chiavi per ottenere un servizio sicuro.

Modello Network Access Security

I sistemi di computer trusted (fidati) possono essere utili nell’implementazione di questo modello. L’uso di questo modello richiede:

  • Selezionare delle funzioni di gatekeeper appropriate per l’identificazione degli utenti;
  • Implementare dei controlli di sicurezza per assicurare che soltanto gli utenti autorizzati possano accedere alle risorse e alle informazioni designate. I sistemi di computer trusted possono essere utili nell’implementazione di questo modello.

TECNICHE DI CIFRATURA CLASSICA

Cifratura simmetrica

Nota pure come cifratura convenzionale o a chiave privata o a chiave singola, sender e recipient condividono una chiave. Tutti gli algoritmi di cifratura classici sono simmetrici ed era l’unico tipo prima dell’invenzione del sistema a chiave pubblica negli anni ‘70. Questo tipo di cifratura utilizza un’unica chiave sia per crittografare sia per decifrare.

Terminologia di base

  • Plaintext - Messaggio originario;
  • Ciphertext - Messaggio codificato;
  • Cipher - Algoritmo per trasformare il plaintext in ciphertext;
  • Key - Informazione usata dal cipher e nota soltanto al sender/receiver;
  • Encypher (Encrypt) - Conversione del plaintext in ciphertext;
  • Decipher (Decrypt) - Conversione del ciphertext in plaintext;
  • Cryptography - Studio dei metodi e principi di encypherment;
  • Cryptanalysis (Codebreaking) - Studio dei metodi per decifrare il ciphertext ignorando la key;
  • Cryptology - Attività comprendente cryptography e cryptoanalysis. Qualsiasi sistema di crittografia si struttura in questa maniera: Plaintext -> Algoritmo di cifratura -> CypherText -> Algoritmo di decifratura -> PlainText. In questo caso la chiave deve essere condivisa. Esistono due tipi di chiavi:
  • Master : è utilizzata per creare la chiave di sessione e non è condivisa con nessuno;
  • Sessione : viene utilizzata per quella determinata comunicazione e buttata via una volta conclusa la comunicazione.

Prestazioni richieste

Per usare con sicurezza la criptazione simmetrica servono:

  • Un algoritmo di criptazione forte (strong encryption);
  • Una chiave segreta nota solo a sender / recipient. Matematicamente si ha: Y(ciphertext) = Ek(X); X(plaintext) = Dk(Y)

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

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

Processo effettuabile numericamente: 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 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 Cifrario di Cesare in termini matematici: C = Ek (P) = (p + k)mod 26 P = Dk (C) = (ck)mod 26 Interi compresi tra 0 e 25, si usa l’aritmetica modulare.

Criptanalisi del cifrario di Cesare

Esistono soltanto 26 possibili chiavi (reali 25), per esempio A può essere mappato in A, B, C,.. ., Z ed possibile fare consecutivamente tutti i tentativi possibili; in sostanza per fare un attacco a forza bruta bisogna sapere riconoscere il plaintext (Molto difficile se si è fatto uno scrambling o una compressione).

Cifrari standard diretti

Un cifrario a sostituzione in cui i due alfabeti plain e cipher sono sequenze shiftate dell’alfabeto normale è detto cifrario additivo o anche cifrario standard diretto c = ( p + k ) mod m m = lunghezza dell’alfabeto Se uno dei due alfabeti è scritto in ordine inverso il cifrario è detto cifrario standard inverso.

Cifrari standard diretti

Un cifrario a sostituzione in cui i due alfabeti plain e cipher sono sequenze shiftate dell’alfabeto normale è detto cifrario additivo o anche cifrario standard diretto ma se uno dei due alfabeti è scritto in ordine inverso il cifrario è detto cifrario standard inverso.

Cifrari affini

Cifrari a sostituzione un pò più complessi dei semplici cifrari additivi c = (ap +b) mod m m = lunghezza dell’alfabeto Ci si può chiedere se l’algoritmo fornisca sempre valori di c distinti, infatti con a = 3, b = 8, m = 27 A(0) (30+8) mod 27 = 8 J(9) (39+8) mod 27 = 8 S(18) (318+8) mod 27 = 8 Si creano dei problemi se ogni volta a ed m hanno fattori in comune; se m è un multiplo di a vi saranno alcuni valori di p per cui ap è multiplo di m quindi i corrispondenti valori di ( ap + b ) mod m saranno uguali. L’algoritmo funziona se e solo se a ed m sono coprimi. Per decifrare il messaggio si prosegue come segue: p = a 1( c b ) mod m con a -1 inverso moltiplicativo di a in Zm. Cifrari affini non sono sicuri perché soggetti alla analisi frequenziale e perché - essendo basati sui due valori a e b - possono essere decifrati conoscendo due coppie plaintext-ciphertext. La chiave per un cifrario affine è costituita dai due numeri a e b.

Cifrario monoalfabetico

Piuttosto che usare, per il ciphertext, un alfabeto un altro ricavato con uno shift o con un’operazione aritmetica lo si può ottenere con una permutazione arbitraria delle lettere. Anche in questo caso ogni lettera è mappata in una diversa e la chiave non è più uno o una coppia di numeri ma una sequenza di m lettere. La sicurezza dei cifrari monoalfabetici potrebbe dare l’idea di una grande sicurezza ma il problema nasce dalle caratteristiche dei linguaggi con un generico cifrario monoalfabetico si dispone di 26 chiavi diverse.

Frequenza e ridondanza

Tutte le lingue presentano delle ridondanze, per esempio in italiano dopo una q si presenta una u. In tutte le lingue le lettere hanno frequenze molto diverse. La frequenza in italiano della a è 11,4 seguita dalla e con lo 11,1 mentre la c ha frequenza 4,2 e la z ha frequenza 0,8. Quindi si dispone di frequenze delle lettere, dei digrammi e dei trigrammi per le varie lingue e quindi poter fare un attacco di criptoanalisi più facilmente.

Uso in criptoanalisi

Concetto di base: le sostituzioni monoalfabetiche non alterano le frequenze relative delle lettere e si calcolano le frequenze delle lettere nel ciphertext confrontando le frequenze/grafici con i valori noti. Per cifrario di Cesare si cercano i massimi ed i minimi e per i cifrari monoalfabetici si deve identificare ogni lettera aiutandosi anche dalle frequenze dei digrammi e trigrammi.

Omofoni

I cifrari monoalfabetici possono essere rotti con relativa facilità basandosi sulle frequenze dei caratteri, digrammi e trigrammi. Per ovviare il problema si potrebbe pensare di usare - per quanto riguarda i caratteri con frequenze più elevate - degli omofoni, ossia fornire più simboli cifrati per una stessa lettera. Si renderebbero le frequenze meno differenti ma anche così resterebbe il problema dei digrammi, trigrammi e così via.

Sistemi poligrafici

Un sistema di criptografia in cui un gruppo di n lettere di plaintext è sostituito da un gruppo di n lettere di ciphertext è detto poligrafico. Vista l’importanza della determinazione della frequenza delle singole lettere nella criptoanalisi dei cifrari a sostituzione, un modo per mascherare la frequenza delle lettere è quello di usare come elemento base non una lettera ma un gruppo. Se n = 2 si parla di sistema digrafico avendo diversi modi per stabilire una relazione tra digrammi

Cifrario Playfair

Cifrario Playfair è un esempio di cifrario poligrafico, in particolare digrafico inventato da C. Wheatstone ma diffuso da Playfair, non è però un cifrario digrafico generale, poiché si basa sull’uso di una matrice 5 x 5 basata su una parola o frase chiave (keyword o keyphrase). Si inizia a riempire la matrice con la keyword evitando la ripetizione delle lettere, si riempie il resto della matrice con le lettere dell’alfabeto ancora non usate, poste nell’ordine naturale. Per esempio usando la keyword GLOUCESTER la matrice è la seguente G L O U C E S T R A B D F H I/J K M N P Q V W X Y Z Il plaintext viene scritto come coppie di lettere ed il processo di cifratura si compone delle fasi:

    1. Se una coppia è una lettera ripetuta, inserire un filler come ‘x’;
    1. Se le lettere sono in numero dispari si aggiunge alla fine una lettera extra scelta da chi effettua la cifratura;
    1. Se le lettere di una coppia ricadono nella stessa riga della matrice, sostituire ciascuna con quella alla sua destra (con ritorno ciclico);

Il primo sistema a sostituzione polialfabetica fu proposto da L. B. Alberti nel XV secolo, che aumentano la sicurezza usando più alfabeti di cifratura rendendo la criptoanalisi più difficile con più alfabeti da indovinare e appiattiscono la distribuzione di frequenza; usano una chiave per selezionare l’alfabeto particolare usato per una lettera del messaggio e usano a rotazione tutti gli alfabeti. Dopo avere raggiunta la fine della chiave si riprende dal suo inizio.

Cifrario Vigenère

Il più semplice cifrario polialfabetico a sostituzione, è una sorta di moltiplicazione del cifrario di Cesare la cui chiave è una serie di n lettere (distinte) dove l’i-esima lettera specifica l’i-esimo alfabeto da usare. Tutti gli n alfabeti vengono utilizzati a turno e dopo n lettere di plaintext si riprende dall’inizio. Il processo di decriptazione è l’esatto opposto della cifratura. Quadrato di Vigenère: 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 Z 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 Y Z A B C D E F G H I J K L M N O P Q R S T U V W X X Y Z A B C D E F G H I J K L M N O P Q R S T U V W W X Y Z A B C D E F G H I J K L M N O P Q R S T U V V W X Y Z A B C D E F G H I J K L M N O P Q R S T U U V W X Y Z A B C D E F G H I J K L M N O P Q R S T T U V W X Y Z A B C D E F G H I J K L M N O P Q R S S T U V W X Y Z A B C D E F G H I J K L M N O P Q R R S T U V W X Y Z A B C D E F G H I J K L M N O P Q Q R S T U V W X Y Z A B C D E F G H I J K L M N O P P Q R S T U V W X Y Z A B C D E F G H I J K L M N O O P Q R S T U V W X Y Z A B C D E F G H I J K L M N N O P Q R S T U V W X Y Z A B C D E F G H I J K L M M N O P Q R S T U V W X Y Z A B C D E F G H I J K L L M N O P Q R S T U V W X Y Z A B C D E F G H I J K K L M N O P Q R S T U V W X Y Z A B C D E F G H I J J K L M N O P Q R S T U V W X Y Z A B C D E F G H I I J K L M N O P Q R S T U V W X Y Z A B C D E F G H H I J K L M N O P Q R S T U V W X Y Z A B C D E F G G H I J K L M N O P Q R S T U V W X Y Z A B C D E F F G H I J K L M N O P Q R S T U V W X Y Z A B C D E 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 D 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 C 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 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 A 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 . Per utilizzare Vigenère si deve scrivere il plaintext eliminando minuscole, spazi, etc, poi scrivere sopra il plaintext la keyword ripetuta e usare ciascuna lettera della keyword come una chiave del cifrario di Cesare e quindi cifrare le lettera corrispondente del plaintext, per esempio usando la keyword marcoantonio:

  • keyword: marcoantoniomarcoantoniomar
  • plaintext: SIAMOSCOPERTIMETTITIINSALVO
  • cyphertext: EIRPCSPHDRZHUMVVHIGBWNAOXVF

La sicurezza del cifrario di Vigenère sta nel fatto che per ciascun simbolo del plaintext se ne hanno diversi di cyphertext, la distribuzione di frequenza viene appiattita e per secoli è stato ritenuto le chiffre indéchiffrable. In realtà non del tutto, un’analisi delle frequenze consente di verificare se si è in presenza di un cifrario monoalfabetico, se no bisogna determinare la lunghezza della chiave che è legata al numero degli alfabeti. In altre parole, nota la lunghezza della chiave si possono raggruppare le lettere corrispondenti alla stessa posizione della chiave e considerare che sono state cifrate con un mono-alfabeto. Per determinare la keylength esistono due metodi:

  • Kasiski : due sequenze uguali di lettere vengono cifrate in modo diverso, se però la distanza tra sequenze uguali è un multiplo della lunghezza della keyword, le sequenze cifrate sono uguali. Se nel cyphertext vi sono due sequenze uguali si può sospettare che la distanza sia un multiplo della lunghezza della keyword. Regola: Più lunghe sono le sequenze maggiore è la probabilità.
  • Friedman.

Criptoanalisi del messaggio

Una volta determinato il valore della keylength, si spezza il messaggio in tante parti tutte con lunghezza keylength e si riuniscono tra loro tutte le lettere aventi la stessa posizione nella parte lunga keylength. Queste lettere è come se fossero state cifrate con lo stesso cypher monoafabetico e quindi si possono risolvere con i metodi dei cypher monoalfabetici.

Roughness

Una distribuzione monoalfabetica presenta una variazione tra le frequenze delle singole lettere, maggiore rispetto a quella corrispondente ad un messaggio polialfabetico. Se tutte le lettere avessero la stessa frequenza la loro probabilità di occorrenza sarebbe 1/26 0,038 però in un testo reale le frequenze sono diverse e quindi la misura della roughness sarà R = 0, in pratica sarà compresa tra 0 e un valore massimo la cui variazione è sufficiente per distinguere tra monoalfabeti e polialfabeti. Dalle frequenze delle lettere degli alfabeti si ha:

  • R(English) = 0.0660.038 = 0.028;
  • R(Italiano) = 0.0660.031 = 0.035. Da questi studi risulta più semplice individuare l’alfabeto che è stato utilizzato ma in questo caso si conosce solamente la probabilità del cyphertext. Per ovviare a questo problema Friedman introdusse l’ indice di conicidenza (index of coincidence). Il test di Friedman viene usato per comparare tra loro più di due campioni dipendenti, in termini di popolazione. Il confronto che viene fatto si basa sulla mediana della popolazione. La probabilità di avere un’uguaglianza tra due lettere casuali è dato dal rapporto tra casi favorevoli e il numero dei casi. Con la distribuzione di frequenza della lingua inglese si ottiene che I (Indice di coincidenza) = 0,0656 , per keyword di lunghezza prossima a 1 ma per keyword lunghissime I = 0,0385. Friedman ha mostrato che è possibile quantificare la relazione tra lunghezza della keyword e I decresce con lunghezza della keyword usando un cifrario polialfabetico.

Cifrario autokey

I N O O R E S E

I T R E N T A Z

Cyphertext: IIFEESOETAATNEOREIOZOTEZRIRNOTNT AREIINIIIZCIMOSALIODABETGNURDARN

Chiave

Per facilitare l’uso della chiave, invece di usare una sequenza numerica, si può usare una keyword. Per esempio: SORCERER C è alfabeticamente la prima lettera ed è presa come 1 E ed E sono numerate 2 e 3 da sinistra a destra O è numerata 4 R, R ed R sono numerate 5, 6 e 7 da sinistra a destra S è numerata 8 La chiave numerica corrispondente è: S O R C E R E R 8 4 5 1 2 6 3 7

Route transcription

Il plaintext è scritto riga per riga in una matrice l x k e viene letto in un ordine prestabilito 71 32 21 41 3 69 15 57 26 70 30 2 11 48 67 55 56 38 60 22 43 23 46 8 19 54 25 50 12 51 45 49 9 64 27 34 40 52 1 6 66 68 17 59 39 20 72 62 53 33 44 24 28 37 63 10 47 4 5 65 14 16 35 42 31 61 13 7 18 58 29 36 Il cyphertext viene letto seguendo l’ordine dei box numerati.

Trasposizione a griglia

Cifrari noti pure come Trellis ciphers: serve un insieme di griglie opportunamente predisposte, che vengono usate in un ordine convenuto. La griglia ruotante (turning grille) può avere 2 o 4 posizioni.

Griglia ruotante

Una griglia ruotante è un aiuto meccanico per la generazione di una trasposizione complessa. Un quadrante di un gruppo di 4 scacchiere quadrate con 2v, righe e colonne è marcato con numeri che vanno da 1 a v2. Si ruota questo quadrante per riempire i tre quadranti rimanenti, quindi si seleziona per ogni numero una posizione della griglia ruotata e si taglia la finestra corrispondente. Ora si possono scrivere i primi caratteri del plaintext nelle finestre tagliate, quindi si ruota la griglia di 90° e si scrivono altri caratteri ripetendo la rotazione altre

due volte. È possibile costruire delle griglie ruotanti secondo una un key pattern che elenca una sequenza di posizioni di griglia. Cifrario usato a livello tattico nella IWW.

Cifrari a trasposizione

A ogni gruppo si applica la stessa permutazione la cui chiave è rappresentata come una permutazione dei primi d interi, il messaggio è diviso in blocchi di lunghezza d. Ad esempio, per d = 6 si può avere la trasposizione 3 5 1 6 4 2. Allora: m1 m2 m3 m4 m5 m6 m7 m8 m9 m10 m11 m m3 m5 m1 m6 m4 m2 m9 m11 m7 m12 m10 m

Cifrari a prodotto

Cifrari che usano sostituzioni o trasposizioni non sicuri a causa delle caratteristiche del linguaggio. Si considera quindi l’uso consecutivo di più cifrari per ottenere maggiore sicurezza, ma 2 sostituzioni equivalgono ad una sostituzione più complessa mentre 2 trasposizioni equivalgono ad una trasposizione più complessa. Una sostituzione seguita da una trasposizione dà luogo ad un cifrario molto più forte. Questo fu il punto di svolta fondamentale tra criptografia antica e moderna.

Macchine a rotore

Schemi criptografici complessi richiedono tempo di criptazione, quindi in passato si è pensato di poterli implementare usando macchine rotanti. In questo caso è possibile realizzare una data sostituzione con P contatti elettrici, ed è possibile usare uno switchboard che rende possibile collegare gli N morsetti d’ingresso per i caratteri del plaintext agli N morsetti d’uscita per i caratteri del ciphertext. Possibile ottenere una famiglia di alfabeti cambiando meccanicamente le connessioni tramite un rotore con contatti elettrici azionato da un motore elettrico a passo angolare costante. Usando due rotori, se un giro completo del primo di essi provoca lo spostamento di un passo angolare del successivo, si realizza un cifrario polialfabetico con 26 x 26 = 676 alfabeti. Dopo l’ingresso di un carattere, il rotore ruota di un passo cambiando l’alfabeto, e dopo un numero fissato di caratteri, tipicamente 26, il rotore ritorna nella posizione iniziale, usando quindi 26 alfabeti diversi. In sostanza un sistema con un grande numero di alfabeti. La violazione delle macchine a rotore avvenne utilizzando Colossus che indicava come ruotare i rotori e di conseguenza indicare il metodo per decifrare i messaggi. Il punto debole di questo sistema è utilizzare, nel messaggio dove venivano specificate le posizioni dei vari rotori, sempre la stessa chiave più volte per più giorni.

CIFRARI A BLOCCHI

Il cifrario a blocchi sono degli algoritmi crittografici usati molto più largamente e sono degli algoritmi spesso usati fornire servizi di confidenzialità e autenticazione. Questi cifrari non sono basati su algoritmi a sostituzione o permutazione ma si basano su due teorie:

  • Teoria di Shannon ;
  • Struttura di Feistel.

Queste operazioni sono strutturate in questo modo per poter garantire i concetti di confusione e diffusione.

Substitution Box S-Box (DES)

Nel caso del DES sono 8 box formate da sei ingressi e otto uscite e si avrà una tabella diversa per ognuna delle otto S- Box. Il primo e l’ultimo bit sono usati per scegliere la riga e i quattro bit interni per selezionare i valori di output. Per esempio con un input 0 1100 1 la coppia 01 indica la seconda riga e il gruppo 1100 (12D) seleziona il dodicesimo elemento, cioè 9.

Generazione della sottochiave (DES)

Questo processo permette di generare una sottochiave a 48 bit in alcuni passaggi:

    1. Si estrae, utilizzando la cosiddetta Permuted Choice 1 (PC1), una chiave a 48 bit a partire da quella a 56 bit formando due blocchi (C 0 e D 0 ) da 28 bit;
    1. Per ogni iterazione J i due blocchi C e D vengono shiftati a sinistra un numero fisso di volte (Il numero dei Left Shifts, secondo lo standard, dipende dalla iterazione J ed è definito da una tabella) ottenendo una nuova coppia di blocchi C e D;
    1. Tutte le subkey sono ottenute applicando alla coppia di blocchi Cj e Dj la cosidetta Permuted Choice 2, che è definita dalla seguente tabella: Nella tabella non sono presenti gli 8 numeri 9, 18, 22, 25, 35, 38, 43 e 54, dato che la PC2 con un input di 56 bit da luogo ad un output di 48 bit. Il primo bit di Kj è il 14-mo bit di Cj e Dj, il secondo bit il 17-mo, e così via fino al 48-mo bit di K che è il 32-mo di Cj e Dj.

Effetto valanga

È un effetto che dato un cambiamento di un singolo bit della chiave in input, cambia circa la metà dei bit in output; in questo caso i tentativi di decriptazione risultano pressoché impossibili. Il DES presenta un fortissimo effetto valanca.

Forza del DES

Le chiavi del DES sono chiavi a 56 bit e hanno 2^56 = 7.2 x 10^16 valori, quindi gli attacchi a forza bruta sono abbastanza difficili ma non impossibili infatti si cerca di trovare metodi alternativi più forti per rafforzare il DES. Oggi esistono diversi attacchi analitici che possono essere fatti al DES infatti utilizzando la struttura profonda del DES si possono acquisire informazioni circa le encryption, si possono ricavare alcuni o tutti i bit della subkey e se serve può anche essere fatta una ricerca esaustiva per ricavare il resto. Generalmente questi sono attacchi statici e sono del tipo:

  • Criptoanalisi differenziale : è un metodo molto potente per un attacco ai block cipher abbastanza efficace contro i cifrari Feistel. Questo tipo di criptoanalisi confronta due copie di encription in relazione tra loro e cerca una differenza nota nell’input e una differenza nota nell’output infatti alcune differenze di input danno luogo, con probabilità P , ad alcune differenze di output, così facendo è possibile inferire sulla subkey usata in un round e poco dopo bisogna iterare il processo su molti round con probabilità decrescente.

In altre parole questo sviluppa un attacco criptando ripetutamente delle coppie di plaintext con XOR di input noto fino ad ottenere lo XOR in uscita desiderato, quando viene trovato:  Se i round intermedi si adattano allo XOR richiesto si una coppia buona;  Altrimenti sia una coppia sbagliata, il rapporto relativo è l’S/N (parte corretta/parte errata) per l’attacco. Possibile dedurre allora i valori delle chiavi per i round:  Le coppie buone suggeriscono gli stessi bit di chiave;  Le coppie sbagliate danno valori casuali.

  • Criptoanalisi lineare : si basa sulla determinazione su approssimazione lineare ed è possibile attaccare il DES con 2^43 plaintext noti; è più semplice della criptoanalisi differenziale ma praticamente impossibile da realizzare. Questo tipo di criptoanalisi trova delle approssimazioni lineari con probabilità di circa ½ tra il plaintext e il ciphertext al fine di fornire delle equazioni lineari per i bit della chiave. Si ottengono dei bit della chiave usando degli algoritmi di massima verosimiglianza;
  • Attacchi alla chiave ( attacchi di timing ): sono attacchi verso la reale cifratura infatti la chiave ha effetto sia sul tempo di cifratura sia su quello di decifratura ed è possibile solo quando si possono controllare questi tempi; ad ogni modo questo rappresenta solo un primo passo per un possibile attacco.

AES

L’AES è un cifrario simmetrico a blocchi con chiave privata, il blocco dati è da 128 bit e le chiavi possono essere da 128, 192, 256 bit ed è più veloce e robusto del Triplo DES. Una delle caratteristiche dell’AES è che può essere implementato sia via software sia via hardware e con questo tipo di crittografia si abbandona l’approccio di Feistel introducendo l’approccio di Rijndael. L’AES elabora i dati con blocchi, chiamati State (Blocchi), di 4 word da 4 byte l’una ed in ogni stadio si opera sull’intero blocco dei dati. L’obiettivo è quello di avere un sistema resistente a tutti gli attacchi conosciuti finora, di riuscire ad avere velocità e compattezza di codice in modo da avere un basso impatto computazionale sulle CPU più diffuse ed essere semplice concettualmente.

Metodo di funzionamento

L’algoritmo si sviluppa in dieci round in cui vengono eseguite le stesse operazioni. Prima di iniziare il primo round si applica l’operazione di add round key per poi passare al primo round in cui si applicano quattro operazioni:

  • Substitute bytes : è uno state formato da 16 bytes in cui si crea una matrice 16x16 contenente 256 possibili valori di un byte; i quattro bit più significativi del byte vengono utilizzati come indici di riga mentre i quattro meno significativi come indici di colonna e questi selezionano una cella che contiene il valore da sostituire. Per quanto riguarda l’ Inverse Substitute byte ciascun byte nel box viene sostituito con il suo inverso moltiplicativo nel campo di Galois (2^8 );
  • Shift rows : ciascuna riga dello State è shiftata ciclicamente di numero definito di volte:  1 a^ riga non è cambiata;  2 a^ riga è shiftata circolarmente di 1 byte a sinistra;  3 a^ riga è shiftata circolarmente di 2 byte a sinistra;  4 a^ riga è shiftata circolarmente di 3 byte a sinistra. La inverse transformation opera gli stessi shift, ma verso destra. Questa operazione serve a distribuire i quattro bytes di una colonna sopra le quattro colonne differenti.

DES il cui punto debole era la chiave da 56 bit. Si pensò che applicare due volte il DES portasse ad avere una chiave da 112 bit e a prima vista poteva essere un’ottima soluzione ma in realtà il DES avendo 2^56 possibili chiavi, il 2-DES aveva (2^64 )!>1010^20^ e quindi poteva sembrare un algoritmo più robusto. Per il Meet-in-the-Middle Attack , un attacco a forza bruta, il 2-DES era violabile. Questo attacco riduce il tempo necessario per rompere il cipher mirando a trovare le due chiavi. Il suo funzionamento è abbastanza semplice: si suppone di conoscere almeno una coppia di plaintext e ciphertext e, sapendo che il 2-DES è un DES applicato due volte in cascata, per violarlo si potrebbe utilizzare lo stesso metodo che si usa per violare il DES: da sinistra a destra si usano le chiavi per cifrare il blocco del plaintext e da destra a sinistra si usano le chiavi per decifrare il ciphertxt al fine di trovare il match tra la coppia di chiavi. Quando si trova il match è probabile che la coppia delle due chiavi è quella corretta. In altre parole con poco sforzo in più di quello richiesto per rompere il DES si può rompere anche il 2-DES.

Triple-DES

Il Triple-DES nasce per aumentare la resistenza al Meet-in-the-Middle usando tre stadi di cifratura con tre chiavi infatti per violarlo servivano 2^118 tentativi e ciò lo rendeva più robusto rispetto al 2-DES ma il suo utilizzo rendeva il processo di cifratura abbastanza scomodo e pesante. Per rendere più leggero il processo di cifratura si pensò di utilizzare soltanto due chiavi abbandonando il 3-DES a tre chiavi; in questo modo il 3- DES non era più vulnerabile all’attacco Meet-in-the-middle e le operazioni di cifratura e decifratura rimanevano equivalenti del punto di vista della sicurezza. Ad oggi questo sistema è robusto tanto quanto l’AES e non vi sono attacchi noti ed efficaci per poterlo violare; purtroppo però questo sistema non è implementabile via hardware (come l’AES) per via delle sue operazioni più complesse e lente ma c’è anche da dire che nelle infrastrutture dove era presente il DES era abbastanza facile migrare verso il 3-DES.

Modi di funzionamento

I cifrari a blocchi criptano blocchi di lunghezza fissa illimitata (DES 56 bit) ma ovviamente non tutto il testo da cifrare/decifrare era sempre di lunghezza fissa quindi sorgeva il problema di cifrare/decifrare quantità arbitrarie di dati. Il NIST ha sviluppato cinque modi di funzionamento:

  • Electronic CodeBook (ECB) : il messaggio viene spezzato in blocchi indipendenti con un eventuale padding finale; i blocchi vengono criptati con la stessa chiave e di solito viene usato per la trasmissione di piccole quantità di dati ma non viene utilizzato per crittografare immagini poiché non dà un adeguato livello di sicurezza. Un punto debole è la ripetizione dei messaggi soprattutto se hanno periodicità uguale o multipla rispetto alla chiave e lo stesso vale per i messaggi che hanno piccole variazioni, però i blocchi una volta divisi vengono lavorati come se fossero in parallelo senza attendere la cifratura/decifratura del blocco precedente;
  • Cipher Block Chaining (CBC) : utilizzando questa tecnica ogni blocco di plaintext prima di essere criptato viene xorato con il ciphertext del blocco precedente, considerando che il primo blocco viene xorato con Initial Vector (IV), entrambi della stessa grandezza. Ovviamente usando questa tecnica c’è una totale sequenzialità e la chiave viene trasmessa tramite ECB. Il CBC è suscettibile agli errori, pertanto utilizzando questa tecnica si possono propagare e non è più possibile decifrare i messaggi però il CBC è detto self-synchronizing nel senso che l’errore su un bit, e nel peggiore dei casi su tutti i bit del blocco, si ripercuoterà soltanto su quel blocco e non sul successivo; ovviamente c’è da precisare che il self-synchronizing non si presenta nel caso di perdita di uno o più bit, che è il cosiddetto framing integrity errors.

Nel caso in cui l’ultimo blocco non sia completo si aggiunge un possibile padding con valori non- data (ad esempio null ) noti oppure un possibile padding dell’ultimo blocco con un contatore che conta quanti sono i bit del padding stesso;

  • Cipher FeedBack (CFB) : viene usato nei cifrari di flusso dove la velocità di cifratura è maggiore; in questo caso non è necessario tutto il blocco da cifrare ma ne basta una parte di esso per iniziare la cifratura. Usando questa tecnica la cifratura inizia con l’utilizzo dell’Initial Vector xorandolo con il plaintext; nel passo successivo lo xor avviene tra il plaintext e il ciphertext del blocco precedente. Il CFB viene usato principalmente con unità di trasmissione di 8 bit, cioè un carattere per volta ma una sua pecca è l’utilizzo del DES per più volte. Il blocco del ciphertext è di lunghezza 64 bit mentre l’Initial Vector viene diviso in b-r bit (b indica la lunghezza del blocco; r indica l’unità di trasmissione) e r bit, subisce r bit shift ed il tutto viene cifrato con la chiave. Quando il blocco viene cifrato si scarta b-r e si prende solo r e si xora con il plaintext, purtroppo però anche utilizzando questa tecnica si possono avere propagazione degli errori;
  • Output FeedBack (OFB) : è simile al CFB eccetto che il riporto sul blocco successivo non dipende dal plaintext e l’output del cipher viene aggiunto al blocco del messaggio e questo viene pure riportato al blocco successivo. Questa tecnica viene utilizzata nei canali rumorosi per attutirne il rumore;
  • Counter (CTR) : un modo simile all’OFB e all’ECB ma piuttosto che criptare valori di feedback lo fa con i valori di un counter. Si usa nelle reti ad alta velocità per sfruttare al meglio il parallelismo. È una tecnica molto efficiente ed è possibile effettuare cifrature sia via hardware che via software, è possibile anche elaborare i countere si può anche accedere in maniera casuale ai blocchi cifrati. Ovviamente non c’è un modo di funzionamento migliore dell’altro, cambiano a seconda del contesto in cui viene utilizzato il sistema di crittografia.

Stream ciphers

Viene cifrato un bit o un byte alla volta e per questo tipo di cipher serve una keystream random abbastanza lunga. Gli stream cipher al contrario dei block cipher sono molto più semplici e veloci e vengono spesso utilizzati per l’invio di dati nel web ma, d’altro lato, non sono sicura tanto quanto i cifrari a blocchi poiché usati molto spesso in ambiti realtime o quando si necessita di mantenere un’alta velocità di trasmissione. Il loro funzionamento è pressoché semplice, utilizzano un keystream generator che genera una chiave casuale la quale viene xorata con il flusso del messaggio. Esistono due tipi i keystream generator:

  • Synchronous KG : genera un keystream in modo indipendente dal plaintext e dal ciphertext ma necessita di sincronizzazione infatti in caso di perdita o aggiunta di un nuovo bit serve risincronizzare;
  • Self-synchronising KG : genera una keystream dipendente dal plaintext e del ciphertext, in questo caso si sincronizza in modo automatico. Questi cipher sono suscettibili agli attacchi attivi, infatti se un attacker può cambiare un bit nel ciphertext, può cambiare in modo prevedibile il bit corrispondente del plaintext ma una sua caratteristica è che non finisce mai di produrre dati così non permette a chi vuole attaccare il sistema di individuare l’inizio o la fine del testo oppure la fine di un messaggio e l’inizio del successivo, ovviamente la parte di messaggi che non contengono testo non devono essere composti da soli zeri o da sequenze corte ripetute. I Synchronous Stream Cipher sono estremamente semplici al contrario di quelli autosincronizzanti che sono più robusti e difficili da attaccare e hanno una limitata propagazione degli errori. Il keystream del Self- Synchronizing Stream Cipher è una funzione della chiave e di un definito numero di bit precedenti del ciphertext e sono basati sui cifrari a blocchi operanti con feedback di un bit.

Per poter attaccare questo sistema si possono utilizzare diversi metodi, cioè spionaggio da altre workstation, un uso di linee commutate verso LAN o server per spiare ciò che avviene in quella infrastruttura, un uso di link e router esterni per entrare nei sistemi oppure effettuare un monitoraggio e/o una modifica del traffico sui link esterni. Questo tipo di cifratura può avvenire in due modi diversi:

  • Link encryption: è un tipo di criptazione indipendente su ciascun link ed implica la necessità di decriptare il traffico tra i vari link ed è particolarmente adatta quando la linea di trasmissione è il punto con maggiore vulnerabilità facendo credere agli utenti di trovarsi in una rete privata (VPN). Nella crittografia di collegamento i dati sono crittografati appena prima che il sistema li ponga sul collegamento di comunicazione fisico, la crittografia protegge il messaggio ma quest’ultimo è memorizzato in chiaro all’interno dell’host mittente, intermedio e destinatario. Questo metodo è invisibile all’utente e al sistema operativo e può essere implementato sia via software che via hardware funzionando in maniera veloce e affidabile;
  • End-To-End encryption: garantisce la sicurezza da un capo della trasmissione all’altro. La crittografia può essere eseguita da un dispositivo hardware presente tra utente e host oppure da un software in esecuzione sull’host. La crittografia precede la fase di trasmissione e instradamento e supera potenziali difetti negli strati inferiori. Quando si utilizza la crittografia end-to-end i messaggi inviati attraverso diversi host sono protetti, i dati contenuti nel messaggio sono cifrati e allo stesso modo lo è anche il messaggio durante il transito, di conseguenza anche quando un messaggio deve passare attraverso nodi potenzialmente insicuri, esso è comunque protetto dalla divulgazione durante il suo transito. Usando l’encryption end-to-end è necessario lasciare gli header in chiaro facendo sì che la rete possa instradare l’informazione correttamente. Anche se i contenuti sono protetti, gli andamenti dei flussi di traffico non lo sono, infatti idealmente si vorrebbe avere contemporaneamente la protezione end-to-end che protegge i dati lungo l’intero percorso e fornisce l’autenticazione e la protezione a livello link per impedire il monitoraggio dei flussi di traffico. È possibile posizionare la funzione di encryption in diversi layer del modello OSI e in diversi dispositivi, per quanto riguarda la Link encryption si effettua nei layer 1 o 2 nei link, nei router e nei gateway, mentre per la End-to end encryption si effettua nei layer 3, 4, 6 o 7, e come nella link encryption, nei link, nei router e nei gateway. Man mano che ci si sposta verso l’alto, viene criptata sempre meno informazione, ma in modo più sicuro. Con l’encryption end-to-end un opponent può ottenere alcune informazioni utili monitorando il flusso di traffico che è utile negli ambienti militari e commerciali ed è usabile pure per creare un canale coperto. Questo problema viene minimizzato dalla link encryption che oscura i dettagli degli header anche se, comunque, i volumi del traffico globale rimangono visibili. Una soluzione è fornita dal traffic padding che consiste nell’interrompere sporadicamente il plaintext in input generando dati random in maniera continua, criptando anche questi e facendo sì che in output il ciphertext sembri un traffico continuo di dati in modo tale da nascondere l’interruzione dell’invio del plaintext.

Distribuzione delle chiavi

La crittografia simmetrica richiede che entrambe le parti condividano una chiave segreta ma il problema si presenta nella distribuzione della chiave poiché questa deve essere inoltrata in tutta sicurezza infatti bisogna stare attenti ai frequenti crash di sistemi sicuri dovuti a un break nello schema di distribuzione delle chiavi.

I due host (ad esempio A e B) possono scegliere tra varie alternative inerenti la distribuzione della chiave, per esempio:

  • A sceglie una chiave e la consegna fisicamente a B;
  • Un terzo host C può scegliere e consegnare la chiave ad A e B;
  • Se A e B hanno comunicato in precedenza, possono utilizzare la chiave precedente per criptare una nuova chiave;
  • Se A e B hanno comunicazioni sicure con una terza parte C, questo può fare da relay della chiave tra A e B. Per reti con molti utenti sono richieste delle gerarchie di KDC (Key Distribution Centre) che devono darsi fiducia reciprocamente, inoltre per mantenere un alto livello di sicurezza i tempi di vita delle chiavi di sessione devono essere limitati. Nel caso di protocolli orientati alla connessione il valore tipico del tempo di vita di una chiave è quello di una sessione, mentre nel caso di protocolli non orientati alla connessione il valore tipico del tempo di vita di una chiave è scelto in modo fisso. In grandi organizzazione l’uso di un singolo KDC impone grandi dimensioni e pesanti vincoli di sicurezza infatti è preferibile l’utilizzo di un key distribution decentralizzato che richiede la capacità di ogni host di comunicare in modo sicuro con tutti gli altri host facenti parte dello stesso gruppo. La decentralizzazione dello scambio delle chiavi evita il ricorso a terze parti fidate che hanno conoscenza delle chiavi di cifratura e sono potenzialmente violabili. Il sistema distribuito può essere utilizzato se si considera un numero limitato di entità ed in questo caso devono essere scambiate inizialmente o con bassa frequenza N(N-1)/2 chiavi master, in cui N indica il numero di entità facenti parte di quella rete.

Controllo dell’uso delle chiavi

Le chiavi vengono usate per diversi scopi, è però pericoloso usarle in modo misto e bisogna distinguere i diversi tipi di chiave. Una tecnica diffusa per distinguere le chiavi fa uso di un’ etichetta detta tag degli ultimi 8 bit della chiave DES dove: un bit è usato per distinguere la session key dalla master key, un bit indica che la chiave può essere usata per cifrare qualcosa e un bit indica che la chiave può essere usata per decifrare qualcosa.

Numeri casuali

I numeri casuali sono frequentemente usati in crittografia ed è importante che questi siano statisticamente casuali (indipendenti con distribuzione uniforme) e non prevedibili in modo tale che nessuno possa inferire i valori futuri in base a quelli precedenti. La migliore fonte è la casualità naturale nel mondo reale, infatti si sceglie e si monitora un vero processo casuale ma per far ciò serve un hardware specializzato. Un grosso problema è quello derivante da bias , cioè la distribuzione non uniforme dei segnali per l'appunto bisogna compensare il bias in sede di campionamento (dalla fonte casuale scelta) e uso. La soluzione migliore è quella di usare pochi bit rumorosi per ciascun campione.

Pseudorandom Number Generators

È una tecnica algoritmica per creare “numeri casuali” ma in realtà non sono numeri realmente casuali ma per essere considerati tali devono superare molti test di “randomicità”. Lehmer propose un algoritmo di tipo iterativo per creare dei numeri pseudocasuali che fa uso dei seguenti parametri: