Sei sulla pagina 1di 1482

Sicurezza Informatica

Introduzione
Luca Grilli
Che cosa significa sicuro?
La parola sicurezza e laggettivo sicuro vengono
sempre associati a beni che si desidera proteggere da
possibili danni, danneggiamenti, perdita, etc.
un bene al sicuro se ben protetto
la messa in sicurezza non deve impedirne il suo utilizzo

La sicurezza di un sistema pu definirsi come il grado
di protezione contro una qualunque minaccia
[Wiki-en] Security is the degree of protection against
danger, damage, loss, and criminal activity
[ISECOM] Security is a form of protection where a
separation is created between the assets and the threat
Sicurezza e conoscenza
La parola sicurezza deriva dal latino sine cura:
senza preoccupazione
[Wiki-it] La sicurezza di un sistema pu essere
definita come la conoscenza che levoluzione del
sistema NON produrr stati indesiderati

Le cause che possono minare la sicurezza sono
molteplici e spesso non prevedibili
non si pu parlare di sicurezza in senso assoluto!
non si pu garantire con certezza la sicurezza totale di
un bene; esiste sempre una percentuale di rischio
Trasversalit della sicurezza
Problematiche di sicurezza interessano molteplici
campi:
attivit lavorative, vita domestica, hobby, giochi, sport, etc.
ogni settore della vita moderna ha delle implicazioni
relative alla sicurezza:
l'informatica, le comunicazioni, i trasporti, la finanza, etc.

Il livello di sicurezza di unorganizzazione dipende dai
livelli di sicurezza di tutti i suoi comparti/settori
NON pu essere superiore al livello di sicurezza del suo
comparto pi debole (insicuro)
SICUREZZA IN INFORMATICA
Sicurezza Informatica Introduzione
Sicurezza di un sistema informativo
Per sistema informativo (information system) di
unorganizzazione si intende linsieme
delle informazioni prodotte ed elaborate, e
delle risorse, sia umane che tecnologiche, coinvolte nel
processo di elaborazione

Non va confuso con il sistema informatico (Information
and Communication Technology system)
insieme delle tecnologie coinvolte nel sistema informativo

In altri termini, il sistema informatico linsieme degli
apparati hardware e software per la gestione e per
lelaborazione dellinformazione
Sicurezza di un sistema informativo
Questo corso verter sulla sicurezza dei
sistemi informativi
si approfondiranno maggiormente questioni
inerenti la sicurezza dei sistemi informatici

Per sicurezza di un sistema informativo si
intende il grado di protezione contro una
qualsiasi minaccia.
Principi della sicurezza informatica
La gestione della sicurezza di un sistema informativo
deve tener presente i seguenti principi
(P1) Principio della penetrazione pi semplice

(P2) Principio della temporalit

(P3) Principio di efficacia

(P4) Principio dellanello pi debole


Penetrazione pi semplice (P1)
Un avversario utilizzer qualsiasi mezzo di
penetrazione disponibile
non necessariamente i mezzi pi ovvi (prevedibili)
non necessariamente i mezzi per i quali sono state
installate le difese pi solide
Lapplicazione di P1 presenta le seguenti
difficolt:
saper anticipare lavversario, cio riuscire a prevederlo
gestire in modo equilibrato la sicurezza delle diverse
parti di un sistema
rafforzare le difese di una parte pu indurre gli avversari ad
attaccare unaltra parte (pi debole) del sistema


Principio di temporalit (P2)
Gli elementi di un sistema informativo
devono essere protetti solo fino a quando
possiedono un valore, e
devono essere protetti in modo proporzionale al
loro valore
Generalmente P2 si riferisce ai dati
il loro valore pi subire brusche variazioni
temporali
es.: dati sullandamento dei mercati prima di essere resi
pubblici
Principio di efficacia (P3)
Ogni misura di protezione per essere efficace
deve essere
utilizzata in modo appropriato,
efficiente,
adeguata, e
facile da applicare
Principio dellanello pi debole (P4)
La sicurezza di un sistema NON pu essere pi
forte del suo anello pi debole

la gestione della sicurezza deve tener conto
del sistema nel suo insieme
laddove c una scomposizione in parti (sottosistemi)
di un sistema complesso
un elevato grado di sicurezza delle singole parti non implica
un elevato grado di sicurezza globale, ma
necessario prevedere anche una strategia di
coordinamento della varie parti priva di debolezze
Risorse da proteggere
Un sistema informatico presenta tre componenti
preziose ma separate: hardware, software e dati
nel definire un piano di sicurezza, si esaminano le
cause/situazioni per la quali tali componenti possono
subire un danno o una perdita
ad esempio, possibile identificare i dati il cui
contenuto deve essere protetto in qualche modo. Il
sistema di protezione deve assicurare che
nessun dato sia accessibile a parti non autorizzate, o
modificabile in modo illegittimo, e
gli utenti legittimi abbiano acceso ai dati
lesame di questi aspetti pu evidenziare le debolezze
nel sistema

Vulnerabilit
Una vulnerabilit (o falla o breccia) una
debolezza intrinseca di un sistema, che potrebbe
essere sfruttata per provocare perdite o danni
scaturisce spesso da errate procedure di sicurezza e/o
da errori di progettazione/implementazione
in alcuni casi intimamente legata alla natura del
sistema
un calcolatore vulnerabile allacqua
ad esempio
un sistema potrebbe essere vulnerabile alla manipolazione
non autorizzata dei dati causa un bug nella procedura di
autenticazione dellutente
Minacce
Una minaccia a un sistema informatico un
insieme di circostanze potenzialmente in
grado di causare perdite e danni
cio un evento potenziale, accidentale o
deliberato, che, nel caso accadesse, produrrebbe
perdite e danni
il realizzarsi di una minaccia generalmente avviene
sfruttando una o pi vulnerabilit del sistema

Differenza tra minaccia e vulnerabilit
Lacqua a sinistra del muro una
minaccia per luomo alla destra
potrebbe salire di livello e
sommergerlo oppure far crollare il
muro

La crepa nel muro una
vulnerabilit che minaccia la
sicurezza delluomo
se lacqua sale fino al livello della
crepa, sfrutter la vulnerabilit e
procurer un danno alluomo
Attacco
Chi sfrutta deliberatamente una vulnerabilit
perpetra un attacco al sistema
un attacco pu essere lanciato anche da un altro
sistema
si considerino ad esempio gli attacchi di tipo negazione
del servizio (denial of service) ove un sistema invia un
insieme interminabile di messaggi a un altro,
sovraccaricando questultimo e impedendolo di
funzionare
Controllo
Un controllo una misura di protezione tesa a
rimuovere o ridurre una vulnerabilit
pu trattarsi di unazione, un dispositivo, una
procedura o una tecnica
facendo riferimento alla figura precedente,
luomo chiude la crepa con il proprio dito, in questo
modo controlla la minaccia della fuoriuscita di acqua, in
attesa di individuare una soluzione permanente
Minacce, vulnerabilit e controlli
La relazione tra minacce, vulnerabilit e
controlli pu sintetizzarsi come segue
Una minaccia viene bloccata
dal controllo di una vulnerabilit

chi si occupa di sicurezza informatica deve
conoscere i vari tipi di controlli e come questi
possono migliorare la protezione di un sistema
per tale motivo fondamentale conoscere e classificare
le varie minacce
Tipologie di minacce
Esistono quattro tipi
principali di minacce:
intercettazione,
interruzione,
modifica, e
falsificazione

intercettazione interruzione
modifica falsificazione

Interruzione
In uninterruzione, una risorsa del sistema va
persa, diventa non disponibile o diventa
inutilizzabile
un esempio
la distruzione maliziosa di un dispositivo hardware,
la cancellazione di un file di programma o di dato, o
il malfunzionamento del file manager di un sistema
operativo che non consente di accedere ai vari file
Modifica
Si ha una modifica quando unentit non
autorizzata, oltre ad accedere a una risorsa,
interferisce con essa modificandola
per esempio, qualcuno o qualcosa potrebbe
cambiare i valori di un database o modificare un programma
in modo che esegua dei calcoli diversi,
modificare i dati trasmessi elettronicamente, oppure
modificare lhardware
alcuni casi di modifica possono essere facilmente
rilevati, mentre altre modifiche, pi sottili, possono
essere estremamente difficili da individuare

Falsificazione
La falsificazione consiste nella creazione di
oggetti (dati/informazioni) contraffatti da parte
(chiaramente) di unentit non autorizzata
un intruso potrebbe inserire transazioni illegittime in
un sistema di comunicazione di rete, o
aggiungere record a un database esistente

A volte le falsificazioni sono facilmente rilevabili,
ma se attuate con abilit potrebbero essere del
tutto indistinguibili da normali operazioni reali
legittime
Mezzi, Occasione e Movente (MOM)
Per perpetrare un attacco un aggressore deve
disporre di tre elementi
mezzi: le capacit, le conoscenze, gli strumenti e altre
cose necessarie a sferrare lattacco
occasione: il tempo e laccesso per compiere lattacco
movente: un motivo per eseguire lattacco
In assenza di uno di questi tre elementi lattacco
non potr avvenire
tuttavia nessuno di essi facile da negare
allaggressore
Sui mezzi di un aggressore
La conoscenza dei sistemi molto diffusa
i sistemi operativi general-purpose sono ampiamente
disponibili, cos come le applicazioni e i DBMS pi
comuni
spesso i produttori rilasciano guide dettagliate sulla
progettazione dei sistemi e sul loro funzionamento
come le guide per gli utenti e/o per gli integratori che
vogliono implementare sistemi software complementari
anche senza la documentazione gli aggressori possono
acquistare e sperimentare molti sistemi
lunico limite il tempo
Sulloccasione di un aggressore
Molti sistemi sono ampiamente disponibili
i sistemi a disposizione del pubblico sono, per
definizione, accessibili
si considerino tutte le applicazioni di rete pubbliche
nel caso dellhardware la disponibilit dei pezzi di
ricambio ritenuto un requisito indispensabile
in caso di guasto ad un componente il proprietario deve
poter ottenere in tempo brevi un ricambio
Sul movente di un aggressore
difficile determinare il movente per un attacco
alcuni sistemi rappresentano dei bersagli attraenti,
tra gli obiettivi pi comuni vi sono i computer di
organizzazioni militari,
forse proprio perch dovrebbero trattarsi di sistemi molto
ben protetti risultano pi appetibili agli aggressori che
vogliono vantarsi della propria bravura
altri sistemi vengono attaccati perch sono bersagli
facili (universit, enti statali, etc.)
altri sistemi vengono attaccati semplicemente perch
esistono: si tratta di vittime casuali, modeste
in fine, alcuni attacchi vengono perpetrati per
appropriarsi illegittimamente di beni
SIGNIFICATO DI SICUREZZA
INFORMATICA
Sicurezza Informatica Introduzione
Significato di sicurezza informatica
Abbiamo visto che qualsiasi sistema informatico
presenta delle debolezze sia teoriche sia reali
La scopo della sicurezza informatica escogitare
modi per impedire che le debolezze vengano
sfruttate
Per scegliere adeguatamente il tipo di misura
preventiva necessario chiarire cosa significa che
un sistema informatico (o in generale
informativo) sicuro
Sicurezza informatica
Per sicurezza informatica
si intende la protezione di
tre aspetti di un sistema
informativo:
confidenzialit
integrit
disponibilit


INTEGRIT
CONFIDENZIALIT
DISPONIBILIT
SICURO
Confidenzialit (Confidentiality)
La confidenzialit (confidentiality) assicura che alle
risorse informatiche accedano solo le parti autorizzate
laccesso consentito solo a chi ha i diritti
per accesso non si intende solo la lettura, ma anche la
visualizzazione, la stampa o la semplice consapevolezza
dellesistenza di una data risorsa
a volte definita segretezza, riservatezza o privacy

Def. Confidentiality: the property that information is
not made available or disclosed to unauthorized
individuals, entities, or processes [ISO/IEC 13335-
1:2004]
Confidenzialit (Confidentiality)
Si ha un attacco alla confidenzialit quando una
entit (persona, processo o risorsa) accede in
maniera non autorizzata a informazioni protette
mentre queste sono memorizzate, oppure durante
lelaborazione, oppure ancora durante una
comunicazione
La confidenzialit un concetto chiaro,
immediato e di facile comprensione
solo le persone o i sistemi autorizzati possono
accedere ai dati protetti

Confidenzialit (Confidentiality)
Assicurare la confidenzialit pu essere difficile
chi assicura quali sistemi e/o persone sono autorizzati
allaccesso di una risorsa?
i dati possono essere complessi e pu essere difficile
stabilire una politica di accesso
si pensi ad un database in cui dati sensibili possono risiedere
in alcune relazioni o peggio in alcuni record
le persone autorizzate possono divulgare i dati?

La confidenzialit pu ottenersi mediante un
rigoroso controllo di chi o cosa pu accedere a
quali risorse e in quale modo

Integrit (Integrity)
Per integrit (integrity) si intende che le risorse
possono essere modificate solo dalle parti autorizzate e
solo nei modi autorizzati
le modifiche comprendono la scrittura, la variazione, il
cambiamento dello stato, leliminazione e la creazione

Def. Integrity: safeguarding the accuracy and
completeness of information and processing methods
[BS ISO/IEC 17799:2000]

Def. Integrity: the property of safeguarding the
accuracy and completeness of assets [ISO/IEC 13335-
1:2004]
Integrit (Integrity)
Si ha un attacco allintegrit quando una
entit (persona, processo o risorsa), in
maniera non autorizzata,
accede al sistema e ne altera le risorse, oppure
inserisce oggetti nel sistema, oppure
essendo un utente autorizzato del sistema ne
esegue una modifica non autorizzata
Lintegrit molto pi difficile da inquadrare
il concetto di modifica o alterazione non
autorizzata dei dati pu avere sfumature diverse in
contesti differenti

Integrit (Integrity)
due aspetti chiave dellintegrit sono lintegrit:
del contenuto dei dati (data o content integrity)
i dati vanno protetti da alterazioni non autorizzate che
possono avvenire durante la memorizzazione,
elaborazione o trasmissione
della sorgente dati, (source authentication o origin
integrity)
un sistema deve eseguire le funzioni per le quali
preposto, esente da alterazioni non autorizzate

Lintegrit pu ottenersi in modo del tutto simile alla
confidenzialit
stabilendo una politica di accesso alle risorse, e
attuando dei controlli di accesso rigorosi
Disponibilit (Availability)
Per disponibilit (availability) si intende che le risorse
siano accessibili (nei tempi e nei modi prestabiliti) alle
parti autorizzate ogni volta che le richiedono
se una persona o un sistema dispone dei diritti di accesso
ad una risorsa, laccesso non deve essergli impedito
spesso la disponibilit viene citata tramite il suo opposto:
la negazione di servizio

Def. Availability: ensuring that authorized users have
access to information and associated assets when
required [BS ISO/IEC 17799:2000]

Disponibilit (Availability)
La disponibilit si riferisce sia ai dati che ai servizi
erogati e pu essere difficile da inquadrare
si possono attribuire significati/sfumature diverse al
concetto di disponibilit
in generale un dato/servizio/sistema disponibile se
si ottiene una risposta tempestiva ad una richiesta,
le risorse sono allocate equamente; non vi sono richiedenti favoriti
rispetto ad altri,
prevista una ragionevole tolleranza degli errori; ad un errore
hardware/software non corrisponde una cessazione brusca del
servizio o tantomeno un crash,
il servizio/sistema di facile utilizzo (usabilit)
la concorrenza controllata; cio laccesso simultaneo, la gestione
dei blocchi critici e laccesso esclusivo sono supportati
Disponibilit (Availability)
Vista la sua ampiezza il requisito di disponibilit
il pi difficile da garantire
lavvento delle reti ha di fatto introdotto tale requisito,
storicamente i meccanismi di protezione sono stati
applicati per garantire confidenzialit e integrit
un controllo centralizzato degli accessi pu garantire
confidenzialit e integrit, ma
un singolo punto di controllo in genere non garantisce
la disponibilit
per la disponibilit spesso necessario applicare delle
politiche di sicurezza distribuite sui vari sistemi coinvolti in
un servizio
Confidenzialit, integrit e disponibilit
Confidenzialit, integrit e disponibilit
possono riguardarsi come i tre obiettivi della
sicurezza informatica
spesso tali obiettivi sono in conflitto tra loro ed
necessario trovare il mix ottimale
per esempio, facile garantire la confidenzialit di un
oggetto impedendo a chiunque di leggerlo, ma
tale soluzione non pu considerarsi sicura in quanto
pu limitare severamente la disponibilit
in un sistema sicuro esiste un equilibrio tra
confidenzialit e disponibilit

SICUREZZA DI UN SISTEMA
INFORMATIVO
Sicurezza Informatica Introduzione
Realizzare un sistema sicuro
La realizzazione (progettazione, implementazione
e test) di un sistema sicuro in genere prevede due
fasi distinte
prima si cerca di immaginare quali possono essere le
possibili minacce/vulnerabilit,
poi si stabiliscono i meccanismi di sicurezza che
garantiscono i tre requisiti di protezione

Per aumentare il livello di sicurezza necessario
instaurare un ciclo virtuoso di queste due fasi
Analisi delle minacce/vulnerabilit
Lattuazione della prima fase pi agevole
se si suddividono le minacce/vulnerabilit in base alle
categorie di risorse di sistema (hardware, software e
dati),
anzich iniziare con i singoli obiettivi di protezione
Indipendentemente dal tipo di risorsa spesso
utile distinguere tra
minacce/vulnerabilit accidentali
minacce/vulnerabilit intenzionali (o deliberate)
nelle prossime slide si analizzeranno sommariamente le
minacce/vulnerabilit tipiche di ogni risorsa, e in generale
gli aspetti da considerare nel pianificare la sicurezza
Sicurezza dellhardware
Lhardware, avendo una sua
struttura fisica facilmente
danneggiabile da qualunque
persona
non sono richieste competenze
specifiche per distruggere un
calcolatore
Esempi di vulnerabilit sono il
furto, lincendio, la rottura,
lumidit, la polvere, laggiunta
e/o sostituzione di apparati

Tuttavia, non difficile
proteggere lhardware
basta custodirlo in luoghi e
condizioni sicure,
installando sistemi di protezione
fisica per difendere le macchine

HARDWARE
interruzione
(negazione del servizio)
intercettazione
(furto)
modifica
falsificazione
(sostituzione)
Vulnerabilit del software
Le vulnerabilit del
software vanno ricercate
nei bug inevitabilmente
introdotti dal
programmatore
Principalmente tali bug
riguardano problemi di
buffer overflow
mediazione incompleta
gestione errata dei
controlli

SOFTWARE
interruzione
(eliminazione)
intercettazione
modifica
falsificazione
Sicurezza del software
Nella gestione della sicurezza del software vanno
considerati i seguenti aspetti
non sempre facile rilevare che un software stato
maliziosamente alterato
apparentemente potrebbe sembrare funzionare correttamente,
ma in realt
la modifica potrebbe riguardare poche linee di codice o pochi bit
il software facilmente eliminabile e modificabile (non
ingombrante)
quante volte capita di eliminare/modificare un file
accidentalmente
il software pu essere contaminato da virus e pu
contaminare a sua volta altro software e/o arrecare danni
ai dati
il software proprietario pu essere copiato e distribuito
senza licenza
Modifiche malevole del software
esistono vari tipi di modifiche malevole ecco le pi note
bombe logiche: programmi che funzionano
correttamente fino al verificarsi di una certa
data/condizione
cavalli di Troia: programmi che apertamente svolgono
unoperazione, ma in segreto ne svolgono unaltra
virus: tipi specifici di cavalli di troia che hanno la
capacit di diffondere linfezione
worm: tipi particolari di virus che si diffondono
tramite Internet (rete)
trapdoor: programmi con punto di accesso segreto
Protezione del software
La protezione del software si basa principalmente
sullattuazione misure preventive e controlli a
posteriori
miglioramento del processo di produzione del
software; riduzione di bug/difetti
controllo (monitoraggio) dei programmi installati
verificare che non vi siano modifiche non autorizzate
controllo dei dati/programmi trasferiti dalla rete
in particolare controllo dei programmi eseguibili
aggiornamento e installazione delle patch di tutti i
programmi installati
in particolare del software antivirus e del sistema operativo
Vulnerabilit dei dati
I dati sono entit astratte
ha poco senso parlare di
vulnerabilit
In altri termini, i dati sono
vulnerabili se lo sono
gli apparati
hardware/software, e
il (in generale) sistema
informativo
in cui sono mantenuti ed
elaborati

DATI
interruzione
(perdita)
intercettazione
falsificazione
modifica
Sicurezza dei dati
Nella gestione della sicurezza vanno
considerati i seguenti aspetti, i dati
spesso rappresentano il bene pi prezioso di
unorganizzazione
ricavarli/produrli potrebbe essere stato molto costoso
segreti industriali, segreti militari
hanno un valore pubblico superiore rispetto
allhardware e al software
i programmi (codice sorgente) possono essere
interpretati solo da esperti
Sicurezza dei dati
frammenti isolati di dati possono non avere alcun
valore se non inseriti in un contesto
possono essere riferiti a persone (dati sensibili) e
non possono essere divulgati
il loro valore (che pu essere ingente) difficile da
stimare/prevedere e pu variare notevolmente
nel tempo
dati sullandamento delleconomia da rendere pubblici
vedi considerazioni fatte sul principio della temporalit

Sicurezza dei dati
I tre obiettivi della sicurezza si applicano
perfettamente ai dati
difficile parlare di confidenzialit dellhardware!
confidenzialit: impedire la divulgazione non
autorizzata di un dato
integrit: impedire le modifiche non autorizzate
disponibilit: impedire la negazione degli accessi
autorizzati

Confidenzialit dei dati
I dati possono essere
ottenuti in vari modi
intercettandoli quando
vengono trasmessi
sfruttando i cavi,
monitorando le radiazioni
elettromagnetiche,
inserendo delle cimici,
etc.
accedendo o rubando i
supporti in cui sono
mantenuti


DATI
CONFIDENZIALIT
Integrit dei dati
La modifica o la
falsificazione dei dati
richiedono un elevato grado
di conoscenza della
tecnologia con cui sono
trasmessi e/o memorizzati i
dati
Piccole e sapienti modifiche
potrebbero essere difficile
da individuare
salami attack
La falsificazione un
processo pi complicato

DATI
INTEGRIT
Disponibilit dei dati
La disponibilit dei dati
strettamente legata
alla disponibilit delle
tecnologie hardware e
software

DATI
DISPONIBILIT
Altre risorse da proteggere
Le reti sono insiemi specializzati di hardware, software
e dati che meritano una attenzione particolare
interagiscono con risorse esterne la cui sicurezza non pu
essere controllata,
unerrata politica di gestione della sicurezza di rete espone
un sistema informatico ad attacchi dallesterno
un accesso non autorizzato pu comportare
il furto del tempo macchina
la distruzione/alterazione di software o dati
la negazione di servizio agli utenti legittimi
Le persone chiave
i dipendenti potrebbero sabotare il sistema informatico,
necessario scegliere persone di cui potersi fidare
CRIMINALI INFORMATICI
Sicurezza Informatica Introduzione
Criminali informatici
Un crimine informatico un qualsiasi crimine che
coinvolge un computer o che favorito dallimpiego di
un computer
Non esiste lo stereotipo del criminale informatico
non esiste il tipico criminale informatico
Una stima delle perdite economiche derivanti da
crimini informatici difficile
esistono pochi dati e spesso i crimini informatici non
vengono separati dagli altri crimini
chi subisce un crimine preferisce spesso non denunciarlo
per salvare la propria reputazione; spesso si preferisce
venire a patti con i criminali
negli USA le stime variano dai 300 ai 500 milioni di dollari
lanno
Criminali informatici
La strategia di difesa contro i crimini informatici
consiste nel
cercare di prevenirli, o almeno di
attenuarne gli effetti
In ogni caso, importante comprendere chi commette
questi crimini e perch
cio conoscere le varie tipologie di criminali
Una prima classificazione dei criminali la seguente:
dilettanti
cracker (o hacker malevoli)
criminali professionisti
terroristi

Dilettanti
Moltissimi crimini informatici sono commessi da
dilettanti
I dilettanti sono persone normali prive di particolari
competenze informatiche, ma che in talune situazioni
possono commettere dei crimini
causalmente rilevano una debolezza e la sfruttano per i
propri interessi
non venendo controllate al lavoro perch ritenute oneste,
decidono di sabotare il sistema informativo per motivi
personali (vendetta)
Un crimine anche luso del computer al lavoro per i
propri fini
un dipendente usa il computer e la rete per i propri scopi e
non per le mansioni lavorative
Cracker (o hacker malevoli)
La comunit della sicurezza distingue tra
hacker: una persona dotata di grandi capacit
tecniche, che padroneggia la programmazione e
conosce profondamente le tecnologie IT
cracker: un malfattore che tenta di violare i
sistemi informatici
Attualmente, allesterno della comunit della
sicurezza il termine hacker indica
sia gli utenti in buona fede,
sia gli utenti maliziosi
Cracker (o hacker malevoli)
I cracker dei sistemi, spesso sono studenti,
tentano di accedere alle infrastrutture
informatiche senza esserne autorizzati
le ragioni che li muovono sono svariate
curiosit, guadagno, senso della sfida, etc.
generalmente rubano solo un po di tempo-
macchina o oltre risorse (banda, memoria)
in alcuni casi possono arrecare perdite o danni
Criminali professionisti
I criminali informatici professionisti sono persone
che compiono dei crimini informatici per profitto
sono pienamente consapevoli di quello che fanno e
del motivo per cui lo fanno
cio ricavare un profitto nel tempo
a differenza dei cracker non sono spinti da curiosit e
non lo fanno per vantarsi puntano invece ad ottenere
stabilmente delle risorse; questa diversit di obiettivi
comporta approcci differenti:
il cracker compie dei blitz,
laggressore professionista attua un metodo di attacco pulito,
robusto e difficile da rilevare

Criminali professionisti
Alcune aziende sono reticenti a perseguire i
criminali informatici
dopo la scoperta di un crimine si accontentano di
essere lasciate in pace
spesso si limitano a chiudere un sistema attaccato
e non raccolgono le prove per lidentificazione del
criminale
spesso il criminale libero di proseguire le sue
attivit illegali con unaltra azienda
Terroristi
I terroristi usano i computer nei seguenti modi:
come bersagli di un attacco
gli attacchi DoS (Denial of Service o negazione di servizio) o
di defacciamento di siti Web (web site defacements)
danno popolarit alle organizzazioni terroristiche e umiliano
il bersaglio dellattacco
come mezzi di propaganda
siti Web e le varie tecnologie di rete sono un mezzo veloce e
a basso costo per veicolare dei messaggi
come strumenti di attacco
per lanciare unoffensiva (ad esempio di tipo DoS) occorrono
dei computer
METODI DI DIFESA
Sicurezza Informatica Introduzione
Metodi di difesa
In un sistema informativo avviene un danno
quando si realizza una minaccia attraverso una
(o pi) vulnerabilit
Per proteggersi dai danni si pu
neutralizzare la minaccia e/o
eliminare la/le vulnerabilit (prevenzione)
Il rischio la possibilit che si verifichi un
danno

Metodi di difesa
In particolare si pu affrontare un danno
cercando di:
prevenirlo, bloccando lattacco o tappando la
vulnerabilit
scoraggiarlo, rendendo pi difficile, ma non
impossibile un attacco
deviarlo, rendendo pi attraente un altro
obiettivo (o meno attraente quello attuale)
rilevarlo, quando si verifica o dopo poco tempo
che si verificato
ripristinare il sistema dai suoi effetti

Metodi di difesa
Un meccanismo di sicurezza un qualsiasi
metodo, strumento, o procedura per rilevare,
prevenire o porre rimedio agli effetti di un
attacco alla sicurezza
la strategia di difesa, qualunque essa sia, combina
in modo opportuno uno o pi meccanismi di
sicurezza
molti meccanismi di sicurezza consistono in
controlli hardware/software
Controlli
La scelta del mix di controlli dipende da
ci che si sta proteggendo
rapporto costo-protezione/rischio-perdita
sforzo dei potenziali intrusi per eludere le protezioni

Meccanismi di sicurezza
Un elenco dei principali meccanismi di
sicurezza il seguente
crittografia
controlli software
controlli hardware
controlli fisici
politiche e procedure
Crittografia
La cifratura (o crittazione) consente di
offuscare i dati rendendoli non intellegibili ad
un intruso
si tratta del meccanismo di sicurezza pi
importante
i dati nella forma originale, testo in chiaro,
vengono rimescolati in modo da essere
incomprensibili ad un osservatore esterno
il risultato della cifratura viene detto testo cifrato
Crittografia
La cifratura viene utilizzata
per garantire la confidenzialit dei dati
per assicurare lintegrit di dati e programmi
generalmente, se i dati non possono essere letti non
possono neanche essere modificati con facilit
tecniche di cifratura sono impiegate per effettuare
controlli di integrit di dati e programmi
nellambito di molti protocolli di rete,
nellambito di molte attivit di sistema
Controlli software
Controlli interni al programma: le parti di un
programma che assicurano le restrizioni di protezione
come i limiti di accesso in un DBMS
Controlli del sistema operativo e del sistema di rete: le
limitazioni imposte dal sistema operativo o dalla rete
per proteggere ogni utente da tutti gli altri
Programmi di controllo indipendenti: i programmi
applicativi come
gli strumenti di controllo delle password,
le utilit di rilevamento delle intrusioni, o
gli anti-virus, che proteggono da specifici tipi di
vulnerabilit
Controlli software
Controlli di sviluppo: gli standard di qualit
con cui un programma viene progettato,
implementato, testato e manutenuto per
evitare che malfunzionamenti si traducano in
vulnerabilit

I controlli software influenzano (riducono)
notevolmente lusabilit di un sistema
vanno pertanto progettati con cura
Controlli hardware
Alcuni dei principali controlli hardware sono
implementazioni della crittografia per hardware o
smart card
serrature o cavi che limitano laccesso o fungono
da deterrenti per il furto
dispositivi per verificare lidentit dellutente
sistemi di rilevamento delle intrusioni
schede circuitali che controllano laccesso ai
supporti di memorizzazione
Controlli fisici
Alcuni dei principali controlli fisici sono
le serrature alle porte
le guardie agli ingressi
le copie di backup di software e dati importanti
una pianificazione del luogo fisico che riduca il
rischio di disastri naturali
Politiche e procedure
La sicurezza richiede anche ladozione di
procedure e politiche convenute tra gli utenti
ogni politica di sicurezza richiede una fase di
addestramento e di informazione del personale
coinvolto
si pensi ad esempio alle regole di comportamento per
un utilizzo sicuro della rete
evitare di aprire i messaggi (allegati) di posta elettronica
sospetti
non rispondere ai messaggi di posta elettronica che
richiedono la comunicazione di informazioni riservate o
personali

Efficacia dei controlli
Alcuni aspetti che possono migliorare
lefficacia dei controlli sono
la consapevolezza del problema: le persone che
utilizzano i controlli devono essere convinte della
necessit del controllo
chi ritiene superflue le misure di sicurezza non le
applicher o le applicher in modo superficiale
chi ha sempre eseguito unoperazione in modo poco
sicuro restio a cambiare
Efficacia dei controlli
lefficienza: i controlli per poter essere utilizzati
devono essere efficienti in termini di tempo, spazio di
memoria, attivit umana o altre risorse utilizzate
lapplicazione del controllo non deve influenzare
(appesantire) lattivit da proteggere
la selettivit: i controlli devono filtrare gli intrusi, ma
consentire gli accessi legittimi
luso di controlli sovrapposti o a strati: uso di pi
controlli per una singola vulnerabilit
tenendo presente il principio dellanello pi debole
revisioni periodiche: pochi controlli garantiscono la
loro efficacia nel tempo
c uno sforzo continuo per migliorare le strategie di attacco

Bibliografia
[PFL08] C. P. Pfleeger, S. L. Pfleeger. Sicurezza
in Informatica. Pearson, Prentice Hall.
[STA07] W. Stallings. Sicurezza delle reti.
Pearson, Prentice Hall.
[Wiki-it] http://it.wikipedia.org/wiki/
[Wiki-en] http://en.wikipedia.org/wiki/
[ISECOM] Institute for Security and Open
Methodologies
Introduzione alla Crittografia
Luca Grilli
CHE COS LA CRITTOGRAFIA
Introduzione alla Crittografia
Che cos la crittografia?
La parola crittografia deriva dalle parole greche
(kripts): nascosto o segreto, e
(grapha): scrivere
Quindi, la crittografia larte e la scienza dello
scrivere in modo segreto
larte di offuscare delle informazioni in modo
apparentemente del tutto incomprensibile,
prevedendo una tecnica segreta per ricostruirle in
modo esatto

Applicazioni della crittografia
Unapplicazione immediata (servizio base) la
trasmissione di messaggi tra soggetti che desiderano
comunicare,
rendendo il contenuto incomprensibile ad un
ascoltatore non autorizzato

Le moderne tecniche crittografiche
nella quali linformazione viene rappresentata in
forma binaria (o numerica)
forniscono ulteriori servizi
Controllo di Integrit
Autenticazione
Applicazioni della crittografia
Controllo di Integrit (Integrity Checking)
assicura il destinatario (recipient) di un messaggio
che il messaggio non stato alterato dal momento
in cui stato generato da una fonte attendibile

Autenticazione (Authentication)
verifica dellidentit di qualcuno (o qualcosa)
Terminologia e definizioni preliminari
Testo in chiaro (plaintext o cleartext): messaggio nella
sua forma originale
Testo cifrato (ciphertext): messaggio cifrato
Cifratura o crittazione o criptazione (encryption):
processo che produce il testo cifrato a partire dal testo
in chiaro
Decifratura o decrittazione o decriptazione
(decryption): processo inverso della cifratura
ENCRYPTION DECRYPTION
PLAINTEXT PLAINTEXT CIPHERTEXT
Terminologia e definizioni preliminari
Crittografo (cryptographer): esperto di
crittografia
Crittoanalisi o crittanalisi (cryptanalysis):
larte o la scienza di violare testi cifrati
ricostruire il testo in chiaro senza conoscere
linformazione segreta utilizzata in fase di
decifratura
Crittoanalista o crittanalista (cryptanalyst):
esperto di crittoanalisi
Terminologia e definizioni preliminari
[Wiki-it] Crittologia (cryptology): larte o la
scienza delle scritture nascoste, nel suo
duplice significato:
da un lato comprende l'ideazione di metodi
sempre pi sicuri per occultare il reale significato
di determinati segni (crittografia),
dall'altro riguarda la decifrazione di testi occultati
senza conoscerne a priori il metodo usato
(crittanalisi).
Crittografi vs Crittoanalisti
Crittografi e crittoanalisti sono in continua sfida
i primi sviluppano codici segreti sempre pi raffinati
i secondi tentano costantemente di migliorare le
tecniche di crittoanalisi

Il vantaggio/successo dei crittografi si fonda sul
seguente principio
Principio fondamentale della crittografia: If lots of
smart people have failed to solve a problem, then it
probably won't be solved (soon)

Sistemi crittografici
I sistemi crittografici generalmente prevedono lutilizzo
combinato di
un algoritmo, e
un valore segreto detto chiave

La chiave segreta stata introdotta essenzialmente
perch
difficile concepire ogni volta nuovi algoritmi di cifratura,
difficile spiegare rapidamente il funzionamento di un
nuovo algoritmo ad un soggetto con il quale si desidera
comunicare in modo sicuro
Complessit computazionale
Uno schema di crittografia
non impossibile da violare se non si conosce la
chiave
un avversario pu seguire un approccio esaustivo (brute
force) che esamina tutte le possibili chiavi finch non trova
quella corretta
tanto pi sicuro quanto maggiore il costo
computazionale necessario a violarlo
deve permettere di cifrare e decifrare messaggi in
modo efficiente quando si conosce la chiave
le fasi di cifratura e decifratura devono richiedere un tempo
ragionevolmente ridotto quando si conosce la chiave

Lunghezza della chiave
Alcuni schemi di crittografia prevedono una
chiave avente lunghezza variabile
aumentando la lunghezza della chiave si aumenta il
livello di sicurezza, ma
diminuisce lefficienza: aumenta il tempo di
cifratura/decifratura del messaggio (per chi conosce la
chiave)

Altri schemi non consentono la modifica della
lunghezza della chiave
in tal caso necessario sviluppare algoritmi simili che
utilizzano chiavi di lunghezza diversa

Algoritmo pubblico o segreto?
Qualcuno sostiene che mantenere segreto un
algoritmo di crittografia aumenti la sua sicurezza
un crittoanalista deve prima individuare lalgoritmo e
poi tentare di forzarlo
Altri sostengono invece che pubblicando
lalgoritmo, rendendolo noto a tutti, la sicurezza
aumenti
scoprire un algoritmo segreto potrebbe non essere
cos difficile, e
se lalgoritmo segreto ha delle debolezze queste
potrebbero essere individuate da un crittoanalista


Algoritmo pubblico o segreto?
se lalgoritmo invece pubblico eventuali debolezze
possono essere segnalate dalla comunit scientifica
se molti esperti confermano la bont dellalgoritmo
molto probabile che sia realmente sicuro

difficile mantenere segreto un algoritmo molto
diffuso
tecniche di reverse engineering possono permettere
di risalire al codice,
essendo molto diffuso pu venirne in possesso un
crittoanalista abile


Algoritmo pubblico o segreto?
In passato, la segretezza era richiesta perch
gli algoritmi sicuri erano estremamente
costosi
gli algoritmi a basso costo erano insicuri!
gli attuali algoritmi non richiedo questa extra
protezione essendo di per se molto sicuri
La tendenza attuale che
gli algoritmi commerciali/civili sono pubblici,
mentre
gli algoritmi militari sono tenuti segreti

Algoritmo pubblico o segreto?
Lesigenza della segretezza pu dipendere da
altre cause (e non dallaumento di sicurezza)
lautore dellalgoritmo potrebbe tenerlo segreto
per ragioni commerciali (segreto industriale)
nel caso militare, possibile che si ricorra alla
segretezza per evitare che il nemico usi uno
schema di crittografia ritenuto sicuro
costringendolo ad utilizzare tecniche note o a
svilupparne di proprie


Codici segreti (cifrari)
Con il termine codice segreto o cifrario si
intende un qualunque metodo di cifratura
il pi antico cifrario attribuito a Giulio Cesare
consiste nella sostituzione di ogni lettera di un
messaggio con la lettera che la segue di 3 posizioni
nellalfabeto
si considera lordinamento circolare dellalfabeto (la A
segue la Z)
ad esempio: INFORMATICA diventa LQIRUPDWLFD
unovvia variante del cifrario di Cesare consiste nel
considerare un numero segreto n compreso tra 1
e 25, invece di usare sempre il 3

Codici segreti (cifrari)
Ovviamente, decifrare dei messaggi risulta molto
semplice
se si certi che usato questo cifrario, e
se si in grado di riconoscere il testo decifrato
basta fare pochi tentativi (al pi 25) per
individuare il numero segreto n ed ottenere il
messaggio originale
successivamente fu introdotto il cifrario
monoalfabetico che consiste nellapplicare un
mapping arbitrario di una lettera in unaltra
si basa sulla scelta di una biiezione segreta sullinsieme
delle lettere alfabetiche


Codici segreti (cifrari)
Teoricamente, per decifrare un messaggio sono
necessari, nel caso peggiore, 26! 4 10
26

tentativi
Assumendo 1 S per tentativo sono necessari 10 trilioni
di anni (10
13
anni)
Tuttavia, applicando tecniche statistiche di analisi
dei linguaggi (alcune lettere e combinazioni di
lettere sono pi probabili di altre) risulta
abbastanza facile decifrare i messaggi cifrati
Codici segreti (cifrari)
Con lavvento dei computer, lintroduzione di
schemi di cifratura pi sofisticati
da un lato stata resa necessaria
un computer permette di automatizzare gli approcci
brute force dei crittoanalisti
dallaltro stata resa possibile
un computer pu eseguire un algoritmo di cifratura
complesso in tempi veloci e senza errori
VIOLARE UNO SCHEMA DI
CRITTOGRAFIA
Introduzione alla Crittografia
Tipologie di attacchi
Si possono distinguere tre tipi di attacchi base
per violare uno schema di crittografia
solo testo cifrato (ciphertext only)
testo in chiaro conosciuto (known plaintext)
testo in chiaro selezionato (chosen plaintext)

Altri due tipi di attacco meno frequenti sono
testo cifrato selezionato (chosen ciphertext)
testo selezionato (chosen text)

Solo testo cifrato (ciphertext only)
Scenario
Fred, il cattivo ragazzo, ha ottenuto il testo cifrato di
un messaggio che Alice ha inviato a Bob nellambito di
una comunicazione cifrata con una chiave segreta
Fred pu analizzare con comodo il testo cifrato
in genere, non difficile ottenere il testo cifrato
se fosse impossibile non si avrebbe la necessit di cifrare i
messaggi!
Domanda
come pu Fred risalire al testo in chiaro se dispone
soltanto del testo cifrato?
Solo testo cifrato (ciphertext only)
Risposta 1
Fred pu seguire un approccio di tipo brute force:
considera tutte le chiavi,
per ogni chiave decripta il testo cifrato, e
verifica se il testo decifrato un messaggio verosimile

tale approccio pu funzionare solo se Fred in grado
di riconoscere il testo in chiaro originale,
cio una volta decriptato il testo cifrato deve poter dire, con
elevata probabilit, se quanto ottenuto il messaggio di
Alice
tale attacco anche noto come testo in chiaro riconoscibile
(recognizable plaintext)
Solo testo cifrato (ciphertext only)
Riguardo la riconoscibilit del testo in chiaro
valgono le seguenti osservazioni
molto improbabile che una chiave di decifratura
errata permetta di ottenere un messaggio
verosimile
essenziale avere abbastanza testo cifrato
si consideri ad esempio il cifrario monoalfabetico, se
lunico testo cifrato di cui si dispone XYZ non c
abbastanza informazione,
il testo in chiaro corrispondente potrebbe essere THE,
CAT, HAT, etc.
Solo testo cifrato (ciphertext only)
Risposta 2
in alcuni casi, si potrebbe tentare un approccio a
forza bruta computazionalmente meno costoso
se la chiave viene generata con tecniche note a partire
da un input segreto, conviene applicare un approccio
esaustivo su tale input
non di rado la chiave di cifratura viene generata a
partire dalla password dutente applicando un
algoritmo noto; cos avviene nello schema di
autenticazione Kerberos che usa una cifratura DES
Solo testo cifrato (ciphertext only)
se la password viene scelta in modo avventato (una parola
del dizionario) anzich scandire uno spazio di 2
56
chiavi
sufficiente scandire uno spazio di circa 10000 parole

Un algoritmo di crittografia deve SEMPRE essere
sicuro contro attacchi di tipo ciphertext only
il testo cifrato sempre facilmente intercettabile e
ottenibile
in molti casi i crittoanalisti possono disporre di informazioni
aggiuntive e sferrare degli attacchi pi forti, come illustrato
nelle prossime slide
Testo in chiaro conosciuto (known plaintext)
Scenario
Fred ha in qualche modo ottenuto alcune coppie
plaintext, ciphertext relative ad una o pi
comunicazioni cifrata tra Alice e Bob (con stesso
schema e chiave)
dati segreti non rimangono segreti in eterno (se un
messaggio conteneva la prossima citt da attaccare una volta
avvenuto lattacco )
nel caso di cifrario monoalfabetico, una piccola
quantit di testo in chiaro conosciuto vale una fortuna
si dedurrebbe in modo immediato il mapping segreto di
tutte le lettere del testo in chiaro

Testo in chiaro conosciuto (known plaintext)
Alcuni schemi di crittografia potrebbero
essere
molto resistenti ad attacchi di tipo ciphertext only,
ma rivelarsi vulnerabili ad attacchi di tipo known
plaintext
un sistema che impiega un algoritmo di crittografia
vulnerabile ad attacchi di tipo known plaintext,
deve essere progettato in modo tale da prevenire il pi
possibile lottenimento di coppie plaintext, ciphertext

Testo in chiaro selezionato (chosen plaintext)
Scenario
Fred pu scegliere a piacimento il testo in chiaro
ed ottenere il corrispondente testo cifrato
con lo stesso schema e chiave usati nella
comunicazione cifrata tra Alice e Bob
Come possibile ottenere coppie plaintext,
ciphertext con testo in chiaro scelto dal
crittoanalista?
un servizio di comunicazione potrebbe sbadatamente
usare la stessa chiave per ogni messaggio inviato (per
ogni coppia mittente destinatario)
Testo in chiaro selezionato (chosen plaintext)
se Alice usa tale servizio, pure Fred potrebbe usarlo
decidendo di inviare un messaggio (cifrato) a se stesso
se il servizio usa un cifrario monoalfabetico, Fred potrebbe
inviarsi il seguente messaggio:
The quick brown fox jumps over the lazy dog
ottenendo la biiezione segreta in modo immediato
se il servizio di comunicazione usa uno schema di crittografia
pi evoluto, potrebbe essere ancora vulnerabile se Fred ha
unelevata conoscenza a priori del contenuto del messaggio
di Alice, ad esempio Fred potrebbe aspettarsi o il messaggio
Surrender o il messaggio Fight on,
pu quindi inviarsi entrambi i messaggi e confrontare le loro
versioni cifrate con quelle del messaggio cifrato di Alice
Testo in chiaro selezionato (chosen plaintext)
possibile che un sistema crittografico sia sicuro
contro attacchi di tipo ciphertext only e known
plaintext, ma sia vulnerabile ad attacchi di tipo
chosen plaintext
un sistema crittografico dovrebbe resistere a tutti
e tre i tipi di attacco
in questo caso si avrebbe la massima protezione,
non sempre cos, solitamente un algoritmo di
cifratura progettato per resistere ad attacchi di tipo
ciphertext only
Tipologie di attacchi (tabella riassuntiva)
Tipologia di attacco Informazioni in possesso del crittoanalista
Solo testo cifrato Algoritmo di cifratura
Testo cifrato da decifrare

Testo in chiaro conosciuto
Algoritmo di cifratura
Testo cifrato da decifrare
Uno o pi testi in chiaro e corrispondenti testi cifrati

Testo in chiaro selezionato
Algoritmo di cifratura
Testo cifrato da decifrare
Testo in chiaro scelto dal crittoanalista e corrispondente testo cifrato

Testo cifrato selezionato
Algoritmo di cifratura
Testo cifrato da decifrare
Testo cifrato, con significato, scelto dal crittoanalista e
corrispondente testo in chiaro


Testo selezionato
Algoritmo di cifratura
Testo cifrato da decifrare
Testo in chiaro scelto dal crittoanalista e corrispondente testo cifrato
Testo cifrato, con significato, scelto dal crittoanalista e
corrispondente testo in chiaro
Sistema computazionalmente sicuro
Un sistema di cifratura computazionalmente
sicuro se il testo cifrato generato soddisfa uno dei
seguenti requisiti:
il costo per rendere inefficace il cifrario supera il
valore dellinformazione cifrata;
il tempo richiesto per rendere inefficace il cifrario
supera larco temporale in cui linformazione ha una
qualche utilit
Si noti che
stimare lo sforzo computazionale richiesto per
effettuare con successo la crittoanalisi del testo cifrato
molto difficile
Sistema computazionalmente sicuro
il tempo richiesto per un approccio a forza bruta
fornisce soltanto un limite superiore, ed
realistico solo se lalgoritmo non presenta delle
debolezze intrinseche di tipo matematico; in questo
caso si possono effettuare stime ragionevoli su tempi e
costi
in un approccio a forza bruta mediamente si
devono provare met di tutte le possibili chiavi
si consulti la tabella della slide successiva


Tempo medio per una ricerca esaustiva
Key Size (bits) Number of
Alternative Keys
Time required at 1
decryption/s
Time required at 10
6

decryptions/s
32 2
32
= 4.3 10
9
2
31
s = 35.8 minutes 2.15 milliseconds
56 2
56
= 7.2 10
16
2
55
s = 1142 years 10.01 hours
128 2
128
= 3.4 10
38
2
127
s = 5.4 10
24
years 5.4 10
18
years
168 2
168
= 3.7 10
50
2
167
s = 5.9 10
36
years 5.9 10
30
years
26 characters
(permutation)
26! = 4 10
26
2 10
26
s = 6.4 10
12
years 6.4 10
6
years
TIPI DI FUNZIONI CRITTOGRAFICHE
Introduzione alla Crittografia
Tipi di funzioni crittografiche
Ci sono tre tipi di funzioni crittografiche
funzioni a chiave pubblica (public key functions)
richiedono luso di due chiavi
funzioni a chiave segreta (secret key functions)
richiedono luso di una sola chiave
funzioni hash (hash functions)
non usano alcuna chiave
a cosa pu servire un algoritmo di cifratura noto a tutti
e che non usa chiavi?


CRITTOGRAFIA A CHIAVE SEGRETA
(SECRET KEY CRYPTOGARPHY)
Introduzione alla Crittografia
Crittografia a chiave segreta
La crittografia a chiave segreta richiede luso
di una sola chiave
dato un messaggio (il testo in chiaro) e la chiave,
la cifratura produce dati non intellegibili (il testo
cifrato)
il testo cifrato ha circa la stessa lunghezza di quello
in chiaro
la decifratura linverso della cifratura, ed usa la
stessa chiave

Crittografia a chiave segreta
La crittografia a chiave segreta talvolta
chiamata crittografia convenzionale o crittografia
simmetrica
il cifrario monoalfabetico un esempio di algoritmo a
chiave simmetrica, sebbene sia facile da violare
ENCRYPTION DECRYPTION
PLAINTEXT PLAINTEXT CIPHERTEXT
KEY
Crittografia a chiave segreta Impieghi
Gli impieghi della crittografia a chiave segreta
sono
comunicazioni su un canale insicuro (uso classico)
memorizzazione sicura su un supporto insicuro
autenticazione
controllo di integrit
Comunicazioni su un canale insicuro
Spesso impossibile evitare che due entit
comunicanti possano essere ascoltate da una
terza parte,
la crittografia a chiave segreta permette a due
entit che condividono un segreto (la chiave),
di comunicare su un mezzo insicuro
non garantita lassenza di intercettazioni/ascoltatori
senza preoccuparsi di eventuali ascoltatori
Memorizzazione sicura
Si supponga di disporre di un supporto di
memorizzazione non protetto
se si desidera salvare dei dati in forma sicura
che non consente ad una terza parte di ottenerli
si pu inventare una chiave segreta e salvare i dati
in forma crittata
chiaramente, se si dimentica la chiave i dati sono
irrevocabilmente persi
Autenticazione

Nei film di spionaggio, quando due agenti che non
si conoscono devono incontrarsi, usano una parola
o frase segreta per riconoscersi
ci ha il seguente svantaggio: se qualcuno ascolta la
loro conversazione o tenta di iniziarne una falsa, pu
ottenere informazioni utili per impersonare
successivamente uno degli agenti
Autenticazione forte
Il termine autenticazione forte (strong
authentication) significa che si in grado di
provare la conoscenza di un segreto senza
rivelarlo
lautenticazione forte possibile con la crittografia
particolarmente utile quando due computer devono
comunicare su una rete insicura
Si supponga che Alice e Bob condividano una
chiave segreta K
AB
e che vogliano autenticarsi
cio ciascuno vuole accertarsi dellidentit dellaltro

Autenticazione
Bob e Alice scelgono ciascuno un numero random,
noto come sfida (challenge),
Alice sceglie il numero random r
A

Bob sceglie il numero random r
B
il valore x cifrato con la chiave K
AB
noto come la
risposta alla sfida x; cio E(K
AB
, x) la risposta ad x
la slide seguente mostra come Alice e Bob usano
sfide e risposte per autenticarsi

Possibile schema di autenticazione
Alice Bob
r
A
E(K
AB
, r
A
)
r
B
E(K
AB
, r
B
)
Possibile schema di autenticazione
Assunzione
Alice e Bob sono le uniche persone (o macchine) che
condividono la chiave segreta K
AB

Procedura di autenticazione
Alice genera un numero random r
A
(la sfida) e la invia al
presunto Bob
il presunto Bob critta la sfida con la sua chiave segreta K
?
e
restituisce ad Alice la risposta E(K
?
, r
A
)
Alice riceve la risposta del presunto Bob e la decritta con la
chiave K
AB
cio calcola D(K
AB
, E(K
?
, r
A
))

se ottiene r
A
, cio se D(K
AB
, E(K
?
, r
A
)) = r
A
, allora il presunto Bob
realmente Bob poich K
?
= K
AB
altrimenti il presunto Bob un impostore

Possibile schema di autenticazione
In modo analogo Bob verifica lidentit di Alice
Bob genera un numero random r
B
(la sfida) e lo invia
alla presunta Alice
la presunta Alice critta la sfida con la sua chiave
segreta K
?
e restituisce a Bob la risposta E(K
?
, r
B
)
Bob riceve la risposta della presunta Alice e la decritta
con la chiave K
AB
cio calcola D(K
AB
, E(K
?
, r
B
))

se ottiene r
B
, cio se D(K
AB
, E(K
?
, r
B
)) = r
B
, allora la presunta
Alice realmente Alice poich K
?
= K
AB
altrimenti la presunta Alice un impostore

Test di sicurezza
Proviamo a testare la sicurezza dello schema di
autenticazione appena proposto

In particolare, un impostore, diciamo Fred,
potrebbe seguire una strategia a due fasi:
1. impersonando Alice potrebbe ottenere alcune
informazioni nellautenticarsi con Bob
2. impersonando Bob e utilizzando le informazioni di
cui sopra, potrebbe riuscire ad autenticarsi con Alice

Test di sicurezza
Pi precisamente, se Fred stesse impersonando Alice,
potrebbe ottenere dal presunto Bob la risposta E(K
?
,
r
A*
) ad una sua sfida r
A*
,
Fred non pu essere certo che il presunto Bob sia realmente
Bob, se cos fosse allora K
?
= K
AB
ma conoscere E(K
?
, r
A*
) non aiuterebbe Fred ad
impersonare Bob nellautenticazione con Alice reale
anche se fosse K
?
= K
AB
,
la conoscenza di E(K
AB
, r
A*
) non sufficiente; la sfida r
A
che
genera Alice con elevata probabilit diversa da r
A*
Osservazioni
Possiamo concludere che
se Alice e Bob completano con successo lo
scambio di informazioni,
ciascuno ha provato allaltro la conoscenza della
chiave segreta K
AB
senza rivelarla ad un impostore e/o ascoltatore
Osservazioni
Tuttavia, risulta anche che
possibile per Fred ottenere delle coppie
chosen plaintext, ciphertext
Fred pu affermare di essere Bob (Alice) e chiedere ad
Alice (Bob) di cifrare una sfida
quindi essenziale che le sfide siano scelte da uno
spazio sufficientemente grande, ad esempio 2
64

valori
in questo modo risulta estremamente improbabile che
venga generata la stessa sfida

Domanda
Il precedente test di sicurezza completo?
esiste un metodo computazionalmente semplice
per violare lo schema di autenticazione?
Controllo di integrit
La crittografia a chiave segreta pu servire a generare
codici (somme) di controllo cifrati a lunghezza fissa
fixed-length cryptographic checksum
uso poco intuitivo della tecnologia a chiave segreta!
Un checksum ordinario (non cifrato) serve a
proteggere i messaggi da eventuali corruzioni; cio a
verificarne lintegrit
la parola checksum deriva dal procedimento seguito per
ottenere il codice di controllo
1. scomposizione di un messaggio in blocchi di lunghezza fissa (ad
esempio parole da 32 bit)
2. somma bit a bit dei blocchi (OR oppure XOR )

Confronto di checksum
La sorgente del messaggio m
s
rende
pubblico/invia il corrispondente checksum
c(m
s
)

Chi riceve il messaggio m
r
calcola il checksum
e confronta se vale luguaglianza c(m
s
) = c(m
r
)
se c(m
s
) = c(m
r
) conclude che m
s
= m
r

anche se potrebbero esserci degli errori che si
compensano,
cio potrebbe darsi che m
s
m
r
e che risulti comunque
c(m
s
) = c(m
r
)
Checksum non segreti
I codici di controllo servono per proteggere
lhardware da difetti e da inevitabili errori/guasti
esistono dei codici di controllo molto pi sofisticati
(codici CRC Controllo a Ridondanza Ciclica) tali che
se m
s
m
r
allora quasi certo che c(m
s
) c(m
r
), cio
estremamente improbabile che sia c(m
s
) = c(m
r
)
ma non sono utilizzabili per la protezione contro
attacchi intelligenti
essendo pubblici un avversario che vuole cambiare un
messaggio potrebbe modificare anche il codice di controllo
Checksum segreto
Per la protezione contro modifiche maliziose ad
un messaggio, richiesto un codice di controllo
(checksum) segreto
se lalgoritmo non noto nessuno pu calcolare il
checksum corretto per il messaggio modificato
chiaramente, come nel caso degli algoritmi di
cifratura, anzich un algoritmo segreto conviene avere
un algoritmo per il calcolo del checksum noto a tutti, che
sfrutta una chiave segreta per calcolare il checksum di un
messaggio
in ci consiste appunto un checksum cifrato
MIC Message Integrity Code
Data una chiave K e un messaggio m,
lalgoritmo produce un codice di autenticazione di
lunghezza fissa c(K, m)
fixed-length MAC Message Authentication Code, o
fixed-length MIC Message Integrity Code
il codice MIC c(K, m) viene trasmesso insieme al
messaggio m stesso

MIC Message Integrity Code
Se un avversario volesse modificare il
messaggio m in m
dovrebbe anche calcolare il codice MIC c(K, m)
generalmente un codice MIC ha una lunghezza di
almeno 48 bit
la possibilit di ottenere il MIC corretto una su 280
trilioni (1 trilione = 10
12
)
CRITTOGRAFIA A CHIAVE PUBBLICA
(PUBLIC KEY CRYPTOGARPHY)
Introduzione alla Crittografia
Crittografia a chiave pubblica
La crittografia a chiave pubblica (public key
cryptogarphy); talvolta detta anche crittografia
asimmetrica (asymmetric cryptography)
fu pubblicamente introdotta nel 1975
alcune voci sostengono che lNSA gi la utilizzasse
diversamente dalla crittografia a chiave segreta NON
PREVEDE la condivisione delle chiavi, ma
ogni individuo ha due chiavi
una chiave privata da NON RIVELARE a nessuno
una chiave pubblica da rivelare preferibilmente a tutto il
mondo
Terminologia e notazione
Per convenzione non si user il termine
chiave segreta in luogo di chiave privata
in base allaggettivo della chiave sar immediato
risalire allo schema di crittografia usato
chiave segreta denota linformazione segreta
condivisa in uno schema di crittografia a chiave segreta
chiave privata denota la chiave che non deve essere
resa pubblica in uno schema di crittografia a chiave
pubblica
chiave pubblica denota la chiave da divulgare in uno
schema di crittografia a chiave pubblica
Terminologia e notazione
Si user la seguente notazione
PU rappresenta la chiave PUbblica
ad esempio PU
B
indica la chiave pubblica di Bob
PR rappresenta la chiave PRivata
ad esempio PR
B
indica la chiave privata di Bob

ENCRYPTION DECRYPTION
PLAINTEXT PLAINTEXT CIPHERTEXT
PU
PUBLIC KEY
PR
PRIVATE KEY
Schema di cifratura a chiave pubblica
La figura sotto mostra uno schema di cifratura a
chiave pubblica
cifratura e decifratura sono due funzioni matematiche
che sono luna linverso dellaltra
m = D(PR, E(PU, m))
ENCRYPTION DECRYPTION
PLAINTEXT PLAINTEXT CIPHERTEXT
PU
PUBLIC KEY
PR
PRIVATE KEY
E(PU, m) m
D(PR, E(PU, m))
Firma digitale (a chiave pubblica)
La tecnologia a chiave pubblica consente anche di
generare una firma digitale su un messaggio
basta invertire il ruolo delle chiavi
m = D(PU, E(PR, m))
ENCRYPTION DECRYPTION
PLAINTEXT PLAINTEXT SIGNED MESSAGE
PR
PRIVATE KEY
PU
PUBLIC KEY
SIGNING VERIFICATION
S(PR, m)
E(PR, m) m
V(PU, E(PR, m))
D(PU, E(PR, m))
Firma digitale (a chiave pubblica)
Una firma digitale (digital signature) un
numero associato ad un messaggio
una sorta di checksum o MAC, ma diversamente
da un checksum, che pu essere generato da tutti,
una firma digitale pu essere generata soltanto da
chi conosce la chiave privata PR
una firma a chiave pubblica differisce da un MAC a
chiave segreta
la verifica di un MAC richiede la conoscenza dello stesso
segreto (chiave segreta) usato per crearlo
quindi chi pu verificare un MAC pu anche generarlo e
sostituirsi alla sorgente iniziale
Firma digitale (a chiave pubblica)
invece, nel caso della firma a chiave pubblica,
la verifica della firma richiede soltanto la conoscenza
della chiave pubblica PU
Alice pu firmare un messaggio generando una firma che
solo lei pu generare, in quanto usa la sua chiave privata PR
A
chiunque altro pu verificare se quella generata realmente
la firma di Alice (basta usare la chiave pubblica di Alice PU
A
),
ma non pu falsificarla
si parla di firma digitale perch condivide con la
tradizionale firma manuale la propriet di poter
essere riconosciuta autentica senza poter essere
falsificata

Uso della crittografia a chiave pubblica
La crittografia a chiave pubblica
pu fare tutto ci che la crittografia a chiave segreta
pu fare
comunicazioni su un canale insicuro (uso classico)
memorizzazione sicura su un supporto insicuro
autenticazione
controllo di integrit
ma gli attuali algoritmi crittografici a chiave pubblica
sono di alcuni ordini di grandezza pi lenti dei
migliori algoritmi a chiave segreta,
viene pertanto utilizzata in congiunzione alla
crittografia a chiave privata
Uso della crittografia a chiave pubblica
agevola la configurazione/gestione della sicurezza
di una rete
potrebbe usarsi allinizio di una comunicazione in fase
di autenticazione, e
per stabilire una chiave segreta temporanea,
che a sua volta (per motivi di efficienza) pu essere
usata per cifrare il resto della comunicazione
ad esempio, si supponga che Alice voglia parlare con
Bob, Alice pu usare la chiave pubblica di Bob PU
B
per
cifrare una chiave segreta (che genera) K
AB

poi pu usare la chiave segreta K
AB
per cifrare
qualunque messaggio voglia inviare a lui



Uso della crittografia a chiave pubblica
dato che la chiave segreta K
AB
molto pi corta di un
generico messaggio, la sua cifratura a chiave pubblica
non impatta sulle prestazioni
la chiave K
AB
generata da Alice pu essere decifrata
soltanto da Bob, che pu continuare la comunicazione
utilizzando questultima (in uno schema di cifratura a
chiave segreta) con chiunque abbia inviato il messaggio
si osservi che usando questo protocollo Bob non pu
essere certo che sia stata Alice ad inviare il messaggio
una soluzione potrebbe essere che Alice invia la chiave
segreta K
AB
crittata con la chiave pubblica di Bob PU
B

dopo averla firmata digitalmente con la sua chiave
privata PR
A

Uso della crittografia a chiave pubblica
Alice Bob
E(PU
B
, K
AB
)
gen. K
AB
K
AB
= D(PR
B
, E(PU
B
, K
AB
))
E(K
AB
, m
A
)
m
A
m
A
= D(K
AB
, E(K
AB
, m
A
))
m
A
E(K
AB
, m
A
)
K
AB
Bob non pu essere certo di
comunicare con Alice
Uso della crittografia a chiave pubblica
Alice Bob
E(PU
B
, K
AB
)
gen. K
AB
V(PU
A
, S(PR
A
, E(PU
B
, K
AB
))) =
= D(PU
A
, D(PR
B
, E(PU
B
, K
AB
))) = E(PU
B
, K
AB
)

E(K
AB
, m
A
)
m
A
m
A
= D(K
AB
, E(K
AB
, m
A
))
m
A
E(K
AB
, m
A
)
K
AB
Bob pu essere certo di
comunicare con Alice
Firma digitale S(PR
A
, E(PU
B
, K
AB
)) = E(PR
A
, E(PU
B
, K
AB
))
D(PR
B
, E(PU
B
, K
AB
)) = K
AB

Comunicazioni su un canale insicuro
Si supponga che
PU
A
, PR
A
sia la coppia public key, private key di Alice

PU
B
, PR
B
sia la coppia public key, private key di Bob

Alice conosce la chiave pubblica di Bob PU
B

Bob conosce la chiave pubblica di Alice PU
A
si osservi che procurarsi le chiavi pubbliche di altre persone una
delle principali sfide poste dalla crittografia a chiave pubblica
per il momento non ce ne preoccupiamo

la slide che segue illustra come avviene la comunicazione
su un canale insicuro

Comunicazioni su un canale insicuro
Alice Bob
E(PU
B
, m
A
)
E(PU
B
, m
A
)
D(PR
B
, E(PU
B
, m
A
)) = m
A

E(PU
A
, m
B
)
E(PU
A
, m
B
)
m
B
= D(PR
A
, E(PU
A
, m
B
))
Memorizzazione sicura
Esattamente come avviene nel caso di crittografia
a chiave segreta
si possono crittare i dati con la chiave pubblica PU
X
nessuno pu decrittare i dati tranne chi conosce la
chiave privata PR
X

tuttavia, per ragioni di efficienza, non conviene cifrare i dati
direttamente con la chiave pubblica,
ma piuttosto conviene generare randomicamente una chiave
segreta K
X
, e
crittare i dati con la chiave segreta K
X
, e
crittare la chiave segreta con la chiave pubblica E(PU
X
, K
X
)

Memorizzazione sicura
Come nel caso di tecnologia a chiave segreta
perdere la chiave privata implica perdere
irrimediabilmente i dati
per evitare questo rischio, si pu crittare una copia della
chiave di cifratura segreta K
X
con la chiave pubblica di una
persona fidata PU
Fidata
o memorizzare copie della chiave privata PR
X
presso una
persona fidata
Si noti che la tecnologia a chiave pubblica offre un
chiaro vantaggio rispetto quella a chiave segreta
Alice pu cifrare un messaggio per Bob senza conoscere la
sua chiave di decifratura

Autenticazione
La tecnologia a chiave segreta presenta i seguenti
svantaggi:
Alice e Bob per poter autenticarsi devono condividere
un segreto
se Bob deve provare la sua identit a molte entit,
allora deve mantenere molte chiavi segrete
una chiave segreta per ogni entit alla quale deve provare la
sua identit
potrebbe anche usare la stessa chiave segreta con Alice e
Carol, ma ci comporterebbe che Alice e Carol potrebbero
impersonare Bob in una comunicazione tra loro due
Autenticazione
La tecnologia a chiave pubblica semplifica
notevolmente la gestione dei segreti
Bob deve soltanto ricordare un singolo segreto: la
sua chiave privata
chiaramente, deve anche mantenere/ottenere
tutte le chiavi pubbliche delle entit di cui
desidera verificare lidentit
potrebbero essere anche migliaia di chiavi pubbliche
la gestione delle chiavi pubbliche sar discussa in
seguito

Schema di autenticazione
Assunzione
Alice conosce la chiave pubblica di Bob PU
B
la chiave privata di Bob PR
B
conosciuta soltanto da Bob
Bob conosce la chiave pubblica di Alice PU
A
la chiave privata di Alice PR
A
conosciuta soltanto da Alice


Procedura di autenticazione
Alice verifica lidentit di Bob
Bob verifica lidentit di Alice

Alice verifica lidentit di Bob
Alice Bob
r
A
gen. r
A
E(PU
B
, r
A
)
D(PR
B
, E(PU
B
, r
A
)) = r
A

Alice verifica lidentit di Bob
Usando la tecnologia a chiave pubblica Alice pu
verificare lidentit di Bob come segue:
Alice estrae un numero random r
A
(la sfida)
Alice critta r
A
con la chiave pubblica di Bob e invia il
risultato E(PU
B
, r
A
) a Bob
Bob dimostra la sua identit mostrando che conosce
la sua chiave privata PR
B
, ovvero decritta E(PU
B
, r
A
)
riottenendo r
A
= D(PR
B
, E(PU
B
, r
A
))
Bob rispedisce indietro ad Alice la sfida r
A
Alice ha la prova che il suo interlocutore realmente
Bob

Altro vantaggio
Un altro vantaggio dellautenticazione a chiave
pubblica che Alice non deve mantenere alcuna
informazione segreta per verificare Bob
Alice potrebbe essere un computer i cui backup sono in
chiaro e incustoditi
nellautenticazione a chiave segreta se Carol ruba un
backup e legge una chiave segreta condivisa tra Alice e Bob
pu fingersi Alice in una comunicazione con Bob
o viceversa
Invece, nel caso di autenticazione a chiave pubblica
i backup di Alice contengono soltanto chiavi pubbliche
(quella privata va custodita in modo diverso) non
possono consentire di impersonare Bob
Firma digitale
Spesso utile provare che un messaggio
stato generato da un particolare individuo
ci semplice con la tecnologia a chiave pubblica
la firma di Bob per un messaggio m pu essere
generata soltanto da chi conosce la chiave privata
di Bob PR
B
, e

la firma dipende anche dal contenuto di m
se il messaggio viene modificato in qualche modo,
la corrispondenza con la firma viene persa
Firma digitale
Pertanto, le firme digitali hanno una duplice funzione
provano CHI ha generato linformazione,
provano che linformazione non stata modificata in alcun
modo dal momento in cui il messaggio e la corrispondente
firma furono generati

Inoltre, le firme digitali offrono un vantaggio
importante rispetto ai checksum crittografici a chiave
segreta (cio i MAC/MIC):
garantiscono il requisito del non-ripudio (non-repudiation)

Non-ripudio
Obiettivo del non-ripudio impedire che il
mittente o il destinatario neghino che sia stato
trasmesso un messaggio
il destinatario pu provare che il messaggio stato
inviato dal presunto mittente (non ripudio della
sorgente o del mittente)
il mittente pu provare che il messaggio stato
effettivamente ricevuto dal presunto destinatario
(non ripudio del destinatario)
Non ripudio esempio
Si supponga che Bob venda articoli che Alice
solitamente compra
la procedura di vendita prevede che Alice deve prima
inviare a Bob, via servizio postale, un ordine di acquisto da
lei firmato
per snellire la procedura Alice e Bob decidono di usare
lemail per la spedizione degli ordini di acquisto
per evitare falsificazioni Alice include in ogni email un MIC
(Message Integrity Code)
per evitare che qualcuno ordini degli articoli dichiarandosi Alice
il MIC potrebbe essere
o un MAC che sfrutta una chiave segreta MIC = c(K
AB
, ordine)
o una firma digitale a chiave pubblica MIC = S(PR
A
, ordine)
Non ripudio esempio
si supponga che Alice richieda un articolo di
grande valore, ma subito dopo cambi idea
per un qualunque motivo
visto che la cancellazione dellordine prevede una
penale considerevole, Alice anzich cancellare
lordine preferisce negare di averlo piazzato
Bob le fa causa
se il MIC era stato ottenuto con una chiave segreta K
AB

Bob certo che Alice sta truffando (oltre a lui solo lei
conosce K
AB
), ma non pu provarlo in tribunale
Alice potrebbe sostenere che stato lui stesso ad
ordinarsi larticolo di valore!

Non ripudio esempio
invece, se il MIC era stato ottenuto con una tecnologia
a chiave pubblica MIC = S(PR
A
, ordine)
Bob pu mostrare lordine firmato al giudice e il giudice
pu verificare che la firma quella di Alice
Alice potrebbe sostenere che qualcuno ha rubato la sua
chiave privata
tuttavia il contratto stipulato tra Alice e Bob potrebbe
prevedere che eventuali danni che Bob subisce causa lo
smarrimento della chiave privata PR
A
siano a carico di
Alice
il vantaggio della tecnologia a chiave pubblica
che Alice pu cifrare un messaggio per Bob senza
conoscere la sua chiave di decifratura
ALGORITMI DI HASH
(CRITTOGRAFICI)
Introduzione alla Crittografia
Algoritmi di hash (crittografici)
Noti anche come algoritmi di digest o one-way
transformation
Una funzione di hash crittografica una
trasformazione matematica che
prende in input un messaggio m di lunghezza arbitraria
(codificato in una stringa di bit), e
calcola un numero h(m), loutput, avente una lunghezza
fissa prestabilita
h(m) dipende dal messaggio
la lunghezza (numero di bit) del numero h(m) fissa
h : {0, 1}* {0, 1}
b
b: numero di bit delloutput


Funzioni di hash crittografiche Propriet
1) Per ogni messaggio m, relativamente facile calcolare h(m)
non si tratta di unoperazione computazionalmente dispendiosa

2) Noto h(m), non c modo di calcolare un messaggio il cui
hash sia h(m)
lunico approccio noto quella di tipo brute force

3) Sebbene sia ovvio che molti valori distinti di m ammettano
lo stesso hash h(m)
poich lo spazio {0, 1}* molto pi grande di {0, 1}
b

computazionalmente impraticabile trovare due valori
aventi il medesimo hash
Idea base per una funzione hash
Un possibile approccio per il calcolo di una
funzione hash il seguente
dato un messaggio m, interpretare la codifica
binaria di m come un numero intero,
sommare ad m alcune grandi costanti intere,
elevare al quadrato il tutto,
lhash h(m) il numero ottenuto considerando le
n cifre centrali
Idea base per una funzione hash
Si osservi che
h(m) calcolabile efficientemente a partire da m
non chiaro come sia possibile
trovare un messaggio avente uno specifico hash
trovare due messaggi aventi lo stesso hash
tuttavia si pu dimostrare che quello appena
descritto non un buon algoritmo di digest
lidea base di una buona funzione di digest comunque
la stessa: linput strapazzato cos tanto da rendere
proibitiva linversione

Funzioni hash e password
Spesso un sistema deve verificare le password dei
suoi utenti
se tutte le password sono memorizzate in chiaro,
tutti coloro che hanno accesso al sistema
(amministratori, tecnici, etc.) possono rubare le
password
fortunatamente, non necessario conoscere una
password per verificarla!
A proper password is like pornography. You can't tell what it
is, but you know it when you see it.
invece delle password in chiaro un sistema potrebbe
memorizzare lhash delle password
Funzioni hash e password
per verificare una password dutente p, il sistema
calcola prima lhash della password h(p)
e verifica se h(p) coincide con lhash memorizzato per
quellutente,
se coincidono la password considerata corretta
se un avversario ottiene il file (relazione db) con
lelenco delle password dutente,
non pu usarlo in modo immediato perch la
funzione di hash non invertibile
addirittura in passato lelenco contenente lhash delle
password stato in alcuni casi reso pubblico; era un
modo per ostentare sicurezza da NON IMITARE

Funzioni hash e password
infatti, anche se la funzione di hash non presenta difetti
crittografici intrinseci che possono essere sfruttati,
sempre possibile scegliere delle password a caso,
calcolarne lhash e verificare la corrispondenza,
se un utente U sceglie superficialmente la propria
password p
U
(situazione frequente), ad esempio una
parola di un dizionario, una ricerca esaustiva su una
repository di password probabili consentirebbe di
risalire a p
U
per tale ragione molti sistemi nascondono lelenco
contenete lhash delle password
Funzioni hash Integrit di messaggi
Le funzioni di hash vengono spesso impiegate per
verificare lintegrit di un messaggio
permettono cio di generare dei MAC/MIC

Come possibile generare MAC/MIC?
data una coppia m, h(m), se il messaggio viene
accidentalmente corrotto, diciamo diventa m, risulta
h(m) h(m)
tuttavia, se un avversario modifica deliberatamente il
messaggio pu calcolare anche il suo nuovo hash
gli algoritmi di hash sono pubblici
di per s le funzioni di hash non sono utilizzabili per
verificare lintegrit dei messaggi contro attacchi maliziosi
Funzioni hash Integrit di messaggi
Tuttavia, se Alice e Bob condividono un segreto K
AB
e
Alice vuole inviare un messaggio m a Bob

Alice pu concatenare il messaggio m con il segreto K
AB
ottenendo un nuovo messaggio m = (m||K
AB
)
calcolare lhash del nuovo messaggio h(m) = h(m||K
AB
)
lhash h(m||K
AB
) detto keyed hash e pu considerarsi un MAC
(anche se presenta delle sottili debolezze)
ed inviare la coppia m, h(m||K
AB
) a Bob

Bob concatena il messaggio ricevuto con il segreto e
calcola lhash
se lhash ottenuto coincide con lhash ricevuto
allora Bob pu, con un elevato grado di confidenza, ritenere che il
messaggio stato inviato da qualcuno che conosceva il segreto
Funzioni hash Integrit di messaggi
m
II
CONCATENATION
K
AB
mIIK
AB
h()
HASH
II
CONCATENATION
h()
HASH
K
AB
=?

Alice Bob
Impronta digitale di dati
Si supponga di disporre di un grande repository di dati
di sola lettura e di voler periodicamente verificare che
non vi siano modifiche
si potrebbe mantenere una copia di backup del repository
in un luogo a prova di manomissione, e
periodicamente confrontarla con la repository attiva
usando una funzione di hash si ha un notevole
risparmio di memoria e tempo
basta salvare lhash del repository in un luogo protetto, e
confrontare lhash del repository con lhash
precedentemente salvato
Impronta digitale di dati
nota: il programma che calcola lhash va protetto in
modo indipendente dallhash stesso
altrimenti, un avversario pu modificare il repository, e
modificare il programma per il calcolo dellhash in modo
tale che lhash finale sia quello salvato

Lhash del repository funge pertanto da impronta
digitale utilizzabile nei test di integrit
garantendo un notevole risparmio di memoria, e
di tempo necessario al confronto
Downline load security
Spesso molti dispositivi di rete (router, stampanti, etc.)
anzich memorizzare in una memoria non-volatile i
programmi che generalmente eseguono
perch non hanno una memoria non-volatile o ne hanno una di
ridotte dimensioni
li richiedono in fase di bootstrap via rete ad un server
preposto a svolgere tale servizio
tale schema viene detto downline load
in questi casi lhash viene usato per verificare che il
programma scaricato sia quello corretto cio non vi
siano state modifiche accidentali o intenzionali
basta memorizzare soltanto lhash del programma corretto
e, ad ogni download, calcolare lhash del programma
scaricato verificando che coincida con quello in memoria
Firma digitale efficiente
I migliori algoritmi di cifratura a chiave pubblica
(conosciuti) sono computazionalmente
dispendiosi, conviene pertanto
(anzich firmare lintero messaggio)
calcolare prima un digest del messaggio con una
funzione di hash, e
firmare il digest ottenuto,
Si osservi che
gli algoritmi per il calcolo del digest sono
computazionalmente molto pi efficienti, e
il digest molto pi corto dellintero messaggio


Bibliografia
[KPS02] C. Kaufman, R. Perlman, M. Speciner. Network
Security Private Communication in a Public World.
Prentice Hall.
[PFL08] C. P. Pfleeger, S. L. Pfleeger. Sicurezza in
Informatica. Pearson, Prentice Hall.
[STA07] W. Stallings. Sicurezza delle reti. Pearson,
Prentice Hall.
[Wiki-it] http://it.wikipedia.org/wiki/
[Wiki-en] http://en.wikipedia.org/wiki/
[ISECOM] Institute for Security and Open
Methodologies
Crittografia a Chiave Segreta
(Secret Key Cryptography)
Luca Grilli
INTRODUZIONE
Crittografia a Chiave Segreta
Introduzione
Si descriver il funzionamento degli algoritmi di
crittografia a chiave segreta
si vedranno in dettaglio gli algoritmi DES e IDEA
tali algoritmi non si applicano direttamente ad un
messaggio di lunghezza qualsiasi, ma ricevono in input
un blocco del messaggio di lunghezza fissa (64 bit nel caso di
DES e IDEA)
una chiave di lunghezza fissa (56 bit per DES e 128 bit per
IDEA)
loutput un blocco cifrato (della stessa lunghezza del
blocco di input)
per tale ragione si parla di algoritmi di cifratura a blocchi

Introduzione
la cifratura di un messaggio di lunghezza qualsiasi
viene ricondotta alla cifratura dei singoli blocchi
il messaggio m viene scomposto in blocchi di lunghezza
fissa
la cifratura del messaggio m viene ottenuta
combinando opportunamente le cifrature dei suoi
blocchi
In altri termini, possibile ottenere un algoritmo
di cifratura simmetrica per messaggi di lunghezza
qualsiasi utilizzando come modulo base un
algoritmo di cifratura simmetrica a blocchi

CIFRATURA A BLOCCHI SCHEMA
GENERALE
Crittografia a Chiave Segreta
Cifratura a blocchi introduzione
Lalgoritmo di cifratura converte un blocco di
testo in chiaro in un blocco di testo cifrato
la chiave K non deve essere troppo corta
es. se K ha lunghezza 4 bit, sono sufficienti 2
4
= 64
tentativi per individuarla!
analogamente, la lunghezza (fissata) di un blocco
non deve essere troppo piccola
es. se un blocco ha lunghezza 8 bit, ottenendo delle
coppie (plaintext, ciphertext) si potrebbe costruire una
tabella di 2
8
= 256 coppie utilizzabile per la decifratura

Cifratura a blocchi introduzione
daltra parte, avere blocchi esageratamente lunghi
oltre a non essere necessario dal punto di vista della
sicurezza,
comporta una gestione pi complicata, e
pu degradare le prestazioni
64 bit una lunghezza ragionevole per un blocco
improbabile ottenere ordine di 2
64
coppie (plaintext,
ciphertext) per costruire una tabella di decifratura, e
anche se fosse possibile, la sua memorizzazione
richiederebbe una spazio enorme 2
64
record da 64 bit,
come pure lordinamento per consentire ricerche
efficienti
Cifratura a blocchi concetti generali
Il modo pi generale per cifrare un blocco da 64
bit definire una biiezione : {0, 1}
64
{0, 1}
64
memorizzare la definizione della biiezione in una
struttura dati impraticabile
sono richiesti 64 2
64
bit, cio 2
70
bit
ad essere precisi ce ne vogliono un po di meno, trattandosi
di un biiezione, comunque almeno 2
69
bit sono richiesti
inoltre, cos facendo la chiave incorporata nella
biiezione
per rendere parametrica la biiezione rispetto la chiave
necessario memorizzare una biiezione per ogni possibile
chiave!
Cifratura a blocchi concetti generali
I sistemi di crittografia a chiave segreta sono
concepiti per
usare una chiave ragionevolmente lunga
ad esempio 64 bit
generare una biiezione che appare, a chi non conosce
la chiave, completamente random
cio, la biiezione sembra essere definita utilizzando un
generatore di numeri casuali
loutput (i) di un input i si ottiene lanciando un dado a 64
facce o facendo 64 lanci di monete
avendo laccortezza di ripetere la procedura se il valore
ottenuto per loutput (i) coincide con qualche (j) con j < i
(cio se (i) era gi stato assegnato ad un precedente input)

Cifratura a blocchi concetti generali
Se la biiezione fosse realmente random
un input i ottenuto cambiando un qualunque bit di un
input i
sarebbe mappato in un output (i) tale che (i) e (i)
risultano statisticamente indipendenti
ad esempio, non pu succedere che il terzo bit delloutput
cambia sempre quando il dodicesimo bit dellinput cambia
Gli algoritmi crittografici sono pensati per
diffondere/spargere in tutti i bit delloutput il
valore di ogni bit dellinput
ogni bit delloutput deve dipendere da tutti i bit
dellinput e allo stesso modo
Sostituzione
Sostituzioni e permutazioni sono due
trasformazioni base applicabili ad un blocco di dati
Si assuma di dover cifrare un blocco di k bit
Una sostituzione specifica, per ciascuno dei 2
k

possibili valori dellinput, i k bit delloutput
per specificare una sostituzione completamente
random sono necessari circa k2
k
bit

impraticabile implementare una sostituzione per
blocchi di 64 bit,
ma fattibile per blocchi di lunghezza di 8 bit
Permutazione
Una permutazione specifica, per ciascuna
delle k posizioni dei bit in input, la posizione
del corrispondente bit nelloutput
ad esempio, il bit in posizione 1 diventa il bit in
posizione 13 nelloutput,
il bit in posizione 2 diventa il bit in posizione 61
nelloutput, e cos via
per specificare una permutazione
completamente random per un blocco di
lunghezza k bit sono necessari klog
2
k bit

Permutazione
per ciascuno dei k bit va specificata la sua
posizione nelloutput; ogni posizione richiede
log
2
k bit
ad esempio, essendo 2
6
= 64, sono necessari 6 = log
2
64
bit per specificare la nuova posizione che li-esimo bit in
input avr in output

Permutazione vs Sostituzione
Una permutazione un caso particolare di
sostituzione in cui ogni bit delloutput ottiene
il suo valore da esattamente un bit dellinput
per blocchi di 64 bit possibile specificare e
realizzare un permutatore
un modulo che riceve in input un blocco di 64 bit e
produce in output una data permutazione dei bit in
input
Cifrario a blocchi schema generale
Un algoritmo di cifratura a chiave segreta pu
funzionare come segue
scompone il blocco in input in pezzi pi piccoli (blocchi da
8 bit)
applica una sostituzione a ciascun pezzo da 8 bit
la sostituzione dipender dal valore della chiave
gli output delle sostituzioni vengono riuniti in un unico
blocco (64 bit),
tale blocco viene permutato in un permutatore a 64 bit
che ha il compito di diffondere le modifiche eseguite nelle
sostituzioni
il processo viene ripetuto un certo numero di volte
riportando loutput in ingresso

Esempio di cifrario a blocchi
Esempio di cifrario a blocchi
Ogni attraversamento del cifrario viene detto
round
con un solo round, un bit b
x
di input pu influenzare
soltanto 8 bit b
x1
, b
x2
, , b
x8
delloutput
poich b
x
ha attraversato soltanto un blocco di sostituzione
in generale i bit b
x1
, b
x2
, , b
x8
non sono consecutivi essendo
stati mescolati nel permutatore
alla fine del secondo round, assumendo che i bit b
x1
,
b
x2
, , b
x8
siano smistati in un diverso blocco di
sostituzione
il bit b
x
iniziale influenza tutti i bit in output
ALGORITMO DES
DATA ENCRYPTION STANDARD

Crittografia a Chiave Segreta
Data Encryption Standard (DES)
DES fu pubblicato nel 1977 dal National Bureau of
Standards
ora rinominato National Institute of Standards and
Technology (NIST)
per usi commerciali e altre applicazioni del governo
statunitense
progettato da IBM, si basa sul precedente cifrario
Lucifer ed frutto della collaborazione con consulenti
della NSA
DES usa una chiave di 56 bit, e mappa un blocco di
input da 64 bit in un blocco di output da 64 bit
Data Encryption Standard (DES)
la chiave in realt costituita da una sequenza di
64 bit, ma un bit in ogni ottetto (il blocco da 64 bit
formato da 8 sequenze di 8 bit dette ottetti)
usato come odd parity su ciascun ottetto
di fatto, soltanto 7 bit in ogni ottetto sono
veramente significativi come chiave
DES efficiente se realizzato in hardware, ma
relativamente lento se implementato in software
sebbene lessere difficilmente implementabile come
software non era un requisito specificato nel progetto,
molti sostengono che in realt era un fatto voluto,

Data Encryption Standard (DES)
forse per limitarne luso ad organizzazioni in grado di
realizzare sistemi hardware, o
forse perch rese pi facile controllare laccesso alla
tecnologia
ad ogni modo, laumento delle capacit di calcolo delle CPU
rese possibile realizzare una versione software di DES
una 500-MIPS (Million Instruction Per Second) CPU pu cifrare ad
un tasso di circa 30 KB/s,
e forse pi, dipende dai dettagli architetturali della CPU e dalla
intelligenza dellimplementazione
un processore Intel Core i7 Extreme Edition i980EE ha una
capacit di calcolo di circa 150 MIPS pu cifrare ad un tasso di
circa 9 KB/s per cifrare 1 MB impiega circa 110 secondi
limplementazione software pertanto adeguata a molte
applicazioni
Perch chiavi da 56 bit?
La scelta di una chiave da 56 bit caus molte
controversie
prima che DES fu adottato, le persone al di fuori
della intelligence community lamentavano che 56
bit non offrivano una sicurezza adeguata
perch solo 56 dei 64 bit di una chiave DES sono
effettivamente usati nellalgoritmo?
lo svantaggio di usare 8 bit della chiave per un controllo
di parit che ci rende DES molto meno sicuro (256
volte meno sicuro contro una ricerca esaustiva)

Perch chiavi da 56 bit?
Qual il vantaggio di usare 8 bit per un
controllo di parit?
una possibile risposta : per verificare che la
chiave non sia corrotta!
ma questa spiegazione non regge!
se si considerassero 64 bit a caso invece della chiave,
c una probabilit su 256 che il controllo di parit dia
esito positivo la probabilit che la chiave sia
comunque errata troppo alta!
inoltre avere una chiave corrotta non comporta un
problema di sicurezza, semplicemente la
cifratura/decifratura non viene eseguita correttamente


Perch chiavi da 56 bit?
chiaramente anche ridicolo sostenere che la
scelta di 56 bit stata fatta per risparmiare
memoria

La risposta ormai condivisa che il governo
statunitense abbia deliberatamente indebolito
la sicurezza di DES di una quantit appena
sufficiente da consentire alla NSA di violarlo


Sulla violabilit di DES
Gli avanzamenti tecnologici dellindustria dei
semiconduttori hanno reso ancora pi critico il
problema della lunghezza della chiave di DES
la velocit dei chip e un po di furbizia permettono di
violare (individuare) le chiavi DES con approcci a forza
bruta in tempi ragionevoli
forse una chiave a 64 bit sarebbe stata sicura per
pochi anni in pi rispetto ad una chiave a 56 bit
il rapporto prestazioni/prezzo dellhardware cresce del
40% per anno la lunghezza delle chiavi dovrebbe
aumentare di 1 bit ogni 2 anni

Sulla violabilit di DES
assumendo che 56 bit erano appena sufficienti nel
1979 (quando DES fu standardizzato)
64 bit erano adeguati nel 1995, e
128 bit dovrebbero essere sufficienti fino al 2123

Quanto sicuro DES?
Se si dispone di un singolo blocco (plaintext,
ciphertext) quanto difficile trovare la chiave?
un approccio a forza bruta dovrebbe provare ordine di
2
56
10
17
chiavi
se ogni tentativo richiede una singola istruzione sono
necessarie ordine di 1000 MIPS-year istruzioni
1 MIPS = 1 Milione di Istruzioni Per Secondo
1 MIPS-year = numero di istruzioni eseguite in un anno ad un
tasso pari a 1 MIPS
1 MIPS-year = 1 MIPS (365 86400) secondi in un anno =
3,1536 10
13
istruzioni
2
56
10
17
10
3
MIPS-year

Quanto sicuro DES?
Anche nellipotesi pi scomoda per lavversario di
disporre solo di testo cifrato
una ragionevole quantit di testo cifrato
un attacco a forza bruta pu essere ancora possibile
se ad esempio lavversario sa soltanto che il testo in chiaro
ASCII a 7 bit
ogni volta che prova una chiave deve verificare se sono
nulli tutti i bit nelle posizioni 8, 16, 24, , n8,
per ogni blocco di 64 bit, vanno esaminati solo 8 bit; i bit in
posizione 8, 16, 24, 32, 40, 48, 56, 64
se almeno uno di questi bit vale 1 la chiave sicuramente errata
in caso contrario nulla si pu dire; la probabilit di errore
pertanto 1 su 256 ossia la probabilit che tutti questi bit valgano 0
Quanto sicuro DES?
se lavversario esamina diversi blocchi, ad esempio 10,
e verifica che si tratta sempre di ASCII a 7 bit la
probabilit che la chiave scelta sia errata si riduce a 1
su 2560
si noti che gli attuali chip commerciali che
implementano DES non si prestano a ricerche
esaustive della chiave, sono pensati per cifrare molti
dati con una stessa chiave
il caricamento di una chiave unoperazione lenta se
confrontata con la velocit con la quale viene eseguita la
cifratura dei dati
tuttavia sempre possibile costruire un chip ottimizzato ad
eseguire ricerche esaustive della chiave

Quanto sicuro DES?
Ovviamente possibile cifrare pi volte e con
diverse chiavi lo stesso blocco di dati
si parla di cifratura multipla (multiple encryption)

Si ritiene che una cifratura con un triplo DES
2
56
volte pi difficile da violare
pu considerarsi sicura per il prossimo futuro
DES Struttura base
DES Struttura base
In estrema sintesi la cifratura di DES come segue
Linput di 64 bit sottoposto ad una permutazione
iniziale; un semplice mescolamento dei bit
La chiave da 56 bit viene usata per generare 16 per-
round chiavi da 48 bit; una chiave per ciascuno dei 16
round
prendendo 48 differenti sottoinsiemi dei 56 bit della chiave
Ogni round riceve in input
loutput di 64 bit del round precedente
la chiave da 48 bit di quel round
e produce un output di 64 bit
DES Struttura base
Dopo il 16-esimo round, le due met delloutput
di 64 bit vengono scambiate e il risultato viene
sottoposto ad unaltra permutazione
la permutazione finale, che linverso di quella iniziale
La decifratura consiste esattamente nelleseguire
la cifratura DES allindietro
Per decifrare un blocco necessario:
applicare la permutazione iniziale; ci annulla leffetto
della permutazione finale
generare le 16 chiavi di round, che andranno usate in
ordine inverso (prima K
16
lultima chiave generata)
DES Struttura base
eseguire 16 round esattamente come nella cifratura
il motivo per cui funziona sar illustrato quando si spiegher
cosa succede durante un round
dopo 16 round di decifratura, le due met delloutput
di 64 bit vengono scambiate e il risultato viene
sottoposto ad unaltra permutazione
che annulla la permutazione iniziale
Per descrivere in dettaglio DES necessario illustrare
le permutazioni iniziale e finale,
come le chiavi di round sono generate, e
cosa succede durante un round
Permutazioni dei dati
DES effettua una permutazione iniziale e una
permutazione finale dei dati che
NON migliorano la sua sicurezza!
forse sono state introdotte per rendere meno
efficienti le implementazioni software
Permutazioni dei dati
Le permutazioni specificate in DES sono
rappresentate nelle due tabelle
58 50 42 34 26 18 10 2
60 52 44 36 28 20 12 4
62 54 46 38 30 22 14 6
64 56 48 40 32 24 16 8
57 49 41 33 25 17 9 1
59 51 43 35 27 19 11 3
61 53 45 37 29 21 13 5
63 55 47 39 31 23 15 7
40 8 48 16 56 24 64 32
39 7 47 15 55 23 63 31
38 6 46 14 54 22 62 30
37 5 45 13 53 21 61 29
36 4 44 12 52 20 60 28
35 3 43 11 51 19 59 27
34 2 42 10 50 18 58 26
33 1 41 9 49 17 57 25
Initial Permutation (IP)
Final Permutation (IP
-1
)
Permutazioni dei dati
Le tabelle vanno interpretate nel seguente
modo
i numeri, da 1 a 64, riportati in tabella
rappresentano le posizioni dei bit in input alla
permutazione
lordine (per righe da sx verso dx) dei numeri nella
tabella rappresenta la corrispondente posizione
dei bit in output
ad esempio, la permutazione iniziale sposta il 58-esimo
bit in input nel primo bit in output, e
il 50-esimo bit in input nel secondo bit in output
Permutazione iniziale input e output
Non si tratta di una permutazione generata in modo
random
nel senso che presenta delle regolarit evidenti
b
1
b
2
b
3
b
4
b
5
b
6
b
7
b
8

b
9
b
10
b
11
b
12
b
13
b
14
b
15
b
16

b
17
b
18
b
19
b
20
b
21
b
22
b
23
b
24

b
25
b
26
b
27
b
28
b
29
b
30
b
31
b
32

b
33
b
34
b
35
b
36
b
37
b
38
b
39
b
40

b
41
b
42
b
43
b
44
b
45
b
46
b
47
b
48

b
49
b
50
b
51
b
52
b
53
b
54
b
55
b
56

b
57
b
58
b
59
b
60
b
61
b
62
b
63
b
64

b
58
b
50
b
42
b
34
b
26
b
18
b
10
b
2

b
60
b
52
b
44
b
36
b
28
b
20
b
12
b
4

b
62
b
54
b
46
b
38
b
30
b
22
b
14
b
6

b
64
b
56
b
48
b
40
b
32
b
24
b
16
b
8

b
57
b
49
b
41
b
33
b
25
b
17
b
9
b
1

b
59
b
51
b
43
b
35
b
27
b
19
b
11
b
3

b
61
b
53
b
45
b
37
b
29
b
21
b
13
b
5

b
63
b
55
b
47
b
39
b
31
b
23
b
15
b
7

input
output
Permutazione iniziale input e output
linput costituito da 8 ottetti
un ottetto un gruppo di 8 bit corrispondenti ad una
riga della tabella
loutput costituito da 8 ottetti
i bit nel primo ottetto (prima riga) in input vengono
diffusi nellottavo bit di ogni ottetto (di ogni riga)
i bit nel secondo ottetto (seconda riga) in input
vengono diffusi nel settimo bit di ogni ottetto (di ogni
riga)
i bit nelli-esimo ottetto vengono diffusi nel (9-i)-esimo
bit di ogni ottetto; i bit in posizione pari vanno nei primi
quattro ottetti delloutput, mentre quelli in posizioni
dispari negli ultimi quattro

Perch permutare?
Le permutazioni iniziale e finale di DES non
contribuiscono alla sicurezza
si supponga per assurdo che siano fondamentali
allora chiamando EDS lalgoritmo ottenuto da DES
togliendo tali permutazioni
EDS deve essere pi facile da violare di DES
supponiamo allora che nota una coppia (plaintext,
ciphertext) EDS sia pi facilmente violabile; cio sia pi
facile calcolare la chiave K
EDS
mostriamo allora che DES risulta violabile con la stessa
facilit

Perch permutare?
infatti, sia (m, c) una coppia (plaintext, ciphertext) di
DES
si consideri allora la coppia (m, c) ove m e c sono
ottenuti applicando la permutazione iniziale ad m e c
allora, la chiave K
EDS
che si ottiene violando EDS per la
coppia (m, c) coincide con la chiave K
DES
di DES per la
coppia (m, c)
EDS IP IP
-1
DES
m m c c
K
EDS
(= K
DES
)

Generazione delle chiavi di round
DES genera
sedici chiavi di round da 48 bit a partire dalla chiave
principale K di 64 bit nominali, di cui solo 56 effettivi
i bit di parit di K non vengono considerati
denoteremo con K
1
, K
2
, , K
16
le chiavi di round
il procedimento il seguente
viene prima effettuata una permutazione iniziale sui
56 bit effettivi di K
i 56 bit in output vengono divisi in due met C
0
e D
0
la permutazione illustrata nelle slide seguenti
Gen. chiavi Permutazione iniziale
il valore numerico di un elemento della tabella
rappresenta la posizione del bit in input,
mentre lordine nella tabella rappresenta la posizione
del bit in output
ad esempio, il bit pi a sx nelloutput ottenuto estraendo il
57-esimo bit della chiave K
i numeri 8, 16, 24, 32, 40, 48, 56, 64 non sono presenti
perch corrispondono ai bit di parit della chiave
57 49 41 33 25 17 9
1 58 50 42 34 26 18
10 2 59 51 43 35 27
19 11 3 60 52 44 36
63 55 47 39 31 23 15
7 62 54 46 38 30 22
14 6 61 53 45 37 29
21 13 5 28 20 12 4
C
0
D
0
Gen. chiavi Permutazione iniziale
b
1
b
2
b
3
b
4
b
5
b
6
b
7

b
9
b
10
b
11
b
12
b
13
b
14
b
15

b
17
b
18
b
19
b
20
b
21
b
22
b
23

b
25
b
26
b
27
b
28
b
29
b
30
b
31

b
33
b
34
b
35
b
36
b
37
b
38
b
39

b
41
b
42
b
43
b
44
b
45
b
46
b
47

b
49
b
50
b
51
b
52
b
53
b
54
b
55

b
57
b
58
b
59
b
60
b
61
b
62
b
63

b
57
b
49
b
41
b
33
b
25
b
17
b
9

b
1
b
58
b
50
b
42
b
34
b
26
b
18

b
10
b
2
b
59
b
51
b
43
b
35
b
27

b
19
b
11
b
3
b
60
b
52
b
44
b
36

b
63
b
55
b
47
b
39
b
31
b
23
b
15

b
7
b
62
b
54
b
46
b
38
b
30
b
22

b
14
b
6
b
61
b
53
b
45
b
37
b
29

b
21
b
13
b
5
b
28
b
20
b
12
b
4

input
output
Gen. chiavi Permutazione iniziale
La permutazione non random
nel senso che presenta delle regolarit evidenti
come nel caso delle permutazioni dei dati anche le
permutazioni iniziale e finale dei bit della chiave K
NON contribuiscono alla sicurezza!
Generazione chiavi: i-esimo round
Le sedici chiavi vengono generate in sedici round
nelli-esimo round viene generata la chiave di round K
i

generazione di K
i
: round i

Generazione chiavi: i-esimo round
i bit delle due met C
i-1
D
i-1
della (i-1)-esima chiave K
i-1

vengono ruotati (traslazione ciclica) a sx
lentit della traslazione a sx dipende dal round
nei round 1, 2, 9 e 16 si ha una rotazione a sx di un solo bit; il
primo bit diventa lultimo bit a dx
negli altri round si ha una rotazione a sx di due bit
la permutazione di C
i
che produce la met sx di K
i

illustrata sotto
si noti che i bit in posizione 9, 18, 22, e 25 sono scartati
14 17 11 24 1 5
3 28 15 6 21 10
23 19 12 4 26 8
16 7 27 20 13 2
permutazione per ottenere
la met sx di K
i
Generazione chiavi: i-esimo round
la permutazione di D
i-1
ruotato, cio di D
i
, che
produce la met dx di K
i
illustrata sotto
si noti che i bit in posizione 35, 38, 43, e 54 sono
scartati; rimangono cos 24 bit anzich 28
ciascuna delle met di K
i
di 24 bit
complessivamente K
i
ha una lunghezza di 48 bit
14 17 11 24 1 5
3 28 15 6 21 10
23 19 12 4 26 8
16 7 27 20 13 2
permutazione per ottenere
la met dx di K
i
Un round di DES
ENCRYPTION DECRYPTION
n-esimo round di DES
CIFRATURA (ENCRYPTION)
i 64 bit in input sono divisi in due met da 32 bit
L
n
: met sx dopo l(n-1)-esimo round
R
n
: met dx dopo l(n-1)-esimo round
loutput di 64 bit del round si ottiene
concatenando le due met
L
n+1
: met sx dopo ln-esimo round
R
n+1
: met dx dopo ln-esimo round
L
n+1
semplicemente R
n


n-esimo round di DES
R
n+1
ottenuto come segue
R
n
e K
n
sono posti in input alla mangler function; la
mangler function viene anche detta funzione di Feistel
loutput della mangler function, mangler(R
n
, K
n
), una
quantit di 32 bit; si noti che R
n
e K
n
sono composti da
32 e 48 bit rispettivamente
loutput mangler(R
n
, K
n
) viene poi sommato (XOR )
con L
n
il risultato ottenuto R
n+1
= mangler(R
n
, K
n
) L
n


n-esimo round di DES
si noti che ogni round di DES facilmente
invertibile
noti L
n+1
, R
n+1
e K
n
facile ottenere L
n
e R
n

infatti, R
n
= L
n+1
, ed essendo
R
n+1
= mangler(R
n
, K
n
) L
n
risulta che
R
n+1
mangler(R
n
, K
n
) = L
n
(si noti che x y y = x)
cio L
n
= R
n+1
mangler(L
n+1
, K
n
)
la mangler function non mai usata in senso
inverso
DES elegantemente progettato da essere invertibile
senza richiedere linvertibilit della mangler function
n-esimo round di DES
DECIFRATURA (DECRYPTION)
esaminando attentamente la figura,
si evince che la decifratura di fatto identica alla
cifratura,
tranne il fatto che le due met da 32 bit sono
invertite
in altre parole, fornendo R
n+1
|L
n+1
in input al round n si
ottiene R
n
|L
n
in uscita
Mangler Function o funzione di Feistel
R
n

n,7

n,8
K
n
K
n,1
K
n,2
K
n,7
K
n,8
+
SB
2
SB
1
SB
7
SB
8
+
+
+

n+1
R
n+1

n,1

n,2

n+1,1

n+1,2

n+1,7

n+1,8
Mangler Function o funzione di Feistel
La mangler function prende in input
i 32 bit di R
n
, o R per semplificare
i 48 bit della chiave K
n
, o K per semplificare
e produce un output da 32 bit
che sommato ( XOR) con L
n
permette di ottenere R
n+1
(il
prossimo R)

la prima operazione lespansione di R, da 32 bit a 48
bit
R scomposto in otto pezzi da 4 bit R = {r
1
, r
2
, , r
8
}
li-esimo pezzo r
i
viene espanso a 6 bit aggiungendo in
testa e in coda rispettivamente lultimo bit di r
i-1
e il primo
bit di r
i+1

r
1
e r
8
sono considerati adiacenti, cio r
0
= r
8
e r
9
= r
1
Espansione di R (R
n
) a 48 bit
R a 32 bit
a 48 bit
chunk 1
di R
espanso
chunk 2
di R
espanso
chunk 3
di R
espanso
chunk 4
di R
espanso
chunk 5
di R
espanso
chunk 6
di R
espanso
chunk 7
di R
espanso
chunk 8
di R
espanso
Mangler Function S-box
la chiave K (K
n
) viene scomposta in otto chunk (pezzi)
da 6 bit
li-esimo chunk di R (R
n
) espanso viene sommato (
XOR) alli-esimo chunk di K
loutput a 6 bit ottenuto viene sottoposto ad una
sostituzione S-box che produce un output di 4 bit
ci sono in tutto otto S-box distinte; li-esima S-box elabora la
somma delli-esimo chunk di K e di R
ogni S-box ha 64 possibili input e 16 possibili output
input diversi possono essere mappati nello stesso output
le S-box sono definite in modo tale che esattamente quattro
input distinti sono mappati in ciascun output possibile
Mangler Function S-box
ogni S-box pu riguardarsi come quattro S-box separate
aventi 4 bit sia in input che in output
i quattro bit in input corrispondono ai bit interni (dal
secondo al quinto) dellinput globale, e
i due bit esterni (primo e sesto) dellinput globale
servono a selezionare quale dei quattro output ottenuti
rappresenta loutput globale

Nelle slide seguenti sono illustrate la tabelle che
definiscono le otto S-box
Mangler function Funzione di Fiestel
Tabella di output di S-box 1
Loutput (a 4 bit) di S-box 1, specifica i primi
quattro bit delloutput della mangler function
loutpout y
1
y
2
y
3
y
4
espresso dai quattro bit riportati
nelle varie celle della tabella

linput x
1
x
2
x
3
x
4
x
5
x
6
espresso
dai quattro bit interni x
2
x
3
x
4
x
5
riportati nelle intestazioni
delle colonne, e
dai due bit esterni x
1
x
6
riportati nelle intestazioni di righe

Tabelle di S-box 2, S-box 3 e S-box 4
Tabelle di S-box 5, S-box 6 e S-box 7
Tabella di S-box 8
Permutazione delloutput dellS-box
Gli otto output, da 4 bit, delle otto S-box sono
riuniti in un unico output a 32 bit che viene
sottoposto ad una permutazione
tale permutazione aumenta il livello di sicurezza
perch le sostituzioni fatte in ciascuna S-box in un
round di DES vengono diffuse negli input di pi S-box
nel round seguente
senza tale permutazione, un bit nella parte sx dellinput
influenzerebbe principalmente alcuni bit della parte sx
delloutput
la permutazione illustrata sotto; il primo bit in output si
ottiene da 16-esimo bit in input, e cos via
Chiavi deboli e semi-deboli
Ci sono sedici chiavi DES il cui utilizzo
sconsigliato
hanno delle propriet strane
tuttavia la probabilit di generarne una
randomicamente 16/2
56

anche sconsigliato usare chiavi DES aventi un
valore (interpretate come intero) pari a qualche
migliaia
un avversario potrebbe tentare una ricerca esaustiva a
partire da 0 incrementando ogni volta di 1

Chiavi deboli e semi-deboli
Le sedici chiavi sospette si ottengono combinando le
quattro configurazioni base di C
0
e D
0
a) tutti 1 b) tutti 0 c) 1 e 0 alternati d) 0 e 1 alternati
quattro di queste corrispondono alle chiavi deboli
quelle che combinano le configurazioni a) e b)
le rimanenti dodici corrispondono alle chiavi semi-deboli

1111 1111 1111 1111
0000 0000 0000 0000
1010 1010 1010 1010
0101 0101 0101 0101
C
0
D
0
4 combinazioni

4 chiavi deboli
16 combinazioni

16 chiavi sospette

Chiavi deboli e semi-deboli
Due chiave sono inverse se cifrare con una
equivale a decifrare con laltra
E(K
1
, m) = D(K
1
-1
, m)
E(K
1
-1
, m) = D(K
1
, m)

Ogni chiave debole coincide con la propria
inversa

Linversa di una chiave semi-debole unaltra
chiave semi-debole
Cosa c di speciale in DES?
DES un algoritmo semplice
ci induce a pensare che ognuno pu sviluppare
un algoritmo di cifratura a chiave segreta!
basta prendere i bit, fare qualche sostituzione, qualche
mescolamento, ripetere pi volte ed ecco lalgoritmo!
in realt ci sono molti misteri da comprendere
come si giunti alle definizioni delle S-box?
stato provato che invertendo la S-box 3 con la S-box 7
DES un ordine di grandezza pi insicuro per alcuni
attacchi specifici
Segretezza del processo di progettazione
Il processo di progettazione di DES non fu reso pubblico
non si sa se alcuni dettagli
progettuali/implementativi
sono stati voluti per aumentare la sicurezza, o
sono puramente casuali, o
sono stati apportati per renderlo vulnerabile a particolari
attacchi noti solo ai progettisti
Si dice che il processo di progettazione di DES fu
mantenuto segreto perch si basava su una attenta
analisi di molti tipi di attacchi crittografici
DES fu progettato per resistere a molti tipi di attacchi
crittografici
rendere pubblico il processo di progettazione implicava
divulgare anche le varie tipologie di attacchi
ALGORITMO IDEA
INTERNATIONAL DATA ENCRYPTION
ALGORITHM
Crittografia a Chiave Segreta
International Data Encryption Algorithm (IDEA)
IDEA, originariamente chiamato IPES (Improved
Proposed Encryption Standard), fu pubblicato nel 1991
Fu progettato per consentire una implementazione
software computazionalmente efficiente
IDEA prende in input blocchi di testo in chiaro da 64 bit
e produce in output blocchi di testo cifrato da 64 bit
La chiave ha una lunghezza di 128 bit
IDEA per molti aspetti somiglia a DES
opera in pi round
entrambi hanno una complicata mangler function che non
sottoposta al vincolo di invertibilit generalmente
richiesto per permettere la decifratura
International Data Encryption Algorithm (IDEA)
la mangler function viene sempre eseguita nella
stessa direzione sia in cifratura che in decifratura
DES e IDEA hanno entrambi la propriet che la cifratura
e la decifratura sono identiche tranne che per
lespansione della chiave
in DES, le stesse chiavi sono usate in ordine inverso
in IDEA, il legame tra le chiavi di cifratura e di
decifratura pi complesso
Struttura base di IDEA
Operazioni primitive
Ogni operazione primitiva in IDEA mappa
due quantit di 16 bit in input
in una quantit di 16 bit in output
mentre ogni S-box di DES mappa una quantit di 6 bit in
input in una di 4 bit in output
IDEA usa tre operazioni, tutte facilmente
calcolabili in software, per creare la biiezione che
specifica la cifratura
tutte e tre le operazioni sono invertibili, cosa
importante per eseguire IDEA allindietro (decifratura)
Operazioni primitive
Le tre operazioni primitive sono
or-esclusivo (XOR ) bit a bit
unaddizione (+) leggermente modificata (mod 2
16
)
una moltiplicazione () leggermente modificata
(mod (2
16
+ 1))
X = x
1
x
2
x
16
Y = y
1
y
2
y
16
Z = z
1
z
2
z
16
X = x
1
x
2
x
16
Y = y
1
y
2
y
16
Z = z
1
z
2
z
16
X = x
1
x
2
x
16
Y = y
1
y
2
y
16
Z = z
1
z
2
z
16
Operazioni primitive
la ragione che non consente di utilizzare laddizione e la
moltiplicazione tradizionale che il risultato a 16 bit e
possono esserci situazioni di overflow dato che anche
gli input sono a 16 bit
laddizione in IDEA consista semplicemente in una
somma binaria in cui si trascura il riporto finale; ci
equivale a dire che si tratta di unaddizione mod 2
16
la moltiplicazione in IDEA si ottiene calcolando prima il
risultato a 32 bit, e prendendo poi il resto della
divisione per 2
16
+ 1; con un po di furbizia ci
fattibile in modo efficiente

Operazioni primitive
la moltiplicazione mod (2
16
+ 1) invertibile, nel senso
che ogni numero x tra 1 e 2
16
ha un inverso y (cio un
numero tra 1 e 2
16
tale che la moltiplicazione per y
annulla leffetto della moltiplicazione per x: a
risulta a x y = a), poich 2
16
+ 1 un numero primo
tuttavia c una piccola furbata, il numero 0, che pu
essere espresso con 16 bit, non avrebbe un inverso,
mentre il numero 2
16
, presente nellinsieme delle classi
di resto modulo 2
16
+ 1, non esprimibile con 16 bit,
entrambi i problemi sono risolti considerando 0
come la codifica di 2
16


Invertibilit delle operazioni primitive
Come possibile invertire le tre operazioni
primitive?
chiaramente non si tratta di uninversione che
permette di risalire ai due operandi a partire dal
solo risultato finale!
se X Y = Z, non possibile risalire ad X e ad Y a partire
dal solo Z,
tuttavia, nellesecuzione allindietro di IDEA saranno
noti un operando e il risultato, diciamo Y e Z, e da
questi sar possibile ottenere X
Invertibilit delle operazioni primitive
Si consideri loperazione generica X op Y = Z e si
supponga di conoscere Y e Z,
allora per ciascuna delle tre operazioni primitive,
X ottenibile come segue

Inversione or-esclusivo (XOR ) bit a bit
se X Y = Z X Y Y = Z Y X = Z Y
rispetto alloperazione ogni numero linverso di se
stesso; Y Y = 0
Invertibilit delle operazioni primitive
Inversione addizione (mod 2
16
)

(+)
se X + Y (mod 2
16
) = Z
X + Y + (-Y)(mod 2
16
) = Z + (-Y) (mod 2
16
)
X = Z + (-Y) (mod 2
16
)
rispetto alloperazione + linverso di un numero Y il numero
-Y (mod 2
16
)
Inversione moltiplicazione (mod 2
16
+ 1)

()
se X Y (mod (2
16
+ 1)) = Z
X Y Y
-1
(mod (2
16
+ 1)) = Z Y
-1
(mod (2
16
+ 1))
X = Z Y
-1
(mod (2
16
+ 1))
Y
-1
(mod (2
16
+ 1)) ottenibile con il lalgoritmo di Euclide

Invertibilit delle operazioni primitive
Lunica parte di IDEA che non
necessariamente invertibile la mangler
function

La gestione del progetto di IDEA stata molto
ingegnosa per evitare la necessit di invertire
la mangler function
Espansione delle chiavi
La chiave di 128 bit espansa in 52 chiavi da
16 bit, K
1
, K
2
, , K
52

lespansione per la cifratura diversa da quella
per la decifratura
cifratura e decifratura coinciderebbero se non
fosse per le chiavi che differiscono
sia per lordine,
sia per il valore delle chiavi usate nei round dispari
Espansione della chiave (cifratura)
La chiave di 128 bit espansa in 52 chiavi da
16 bit, K
1
, K
2
, , K
52

la procedura come segue
le prime otto chiavi K
1
, K
2
, , K
8
sono ottenute
spezzando la chiave da 128 bit in corrispondenza dei bit
in posizione 161, 162, , 167
le successive otto chiavi K
9
, K
10
, , K
16
sono generate
allo stesso modo, ma partendo dal bit in posizione 25 e
tornando allinizio quando si arriva alla fine (scansione
ciclica)
le successive otto chiavi sono generate considerando 25
bit di offset in pi e cos via finch non si ottengono 52
chiavi

Espansione della chiave (cifratura)
si noti che in 6 fasi vengono generate 48 chiavi e in 7
fasi 52 nellultima fase, la settima, sono generate
solo 4 chiavi
lultima fase inizia dal bit in posizione 23 e si estende
fino al bit in posizione 86 i bit in posizione da 1 a 22
e da 87 a 128 sono usati una volta in meno rispetto
quelli in posizione da 83 a 128
Espansione della chiave (cifratura)
generazione delle chiavi K
1
, K
2
, , K
8

generazione delle chiavi K
9
, K
10
, , K
16

Espansione della chiave (cifratura)
la generazione delle 52 chiavi di decifratura sar
illustrata nel seguito

WARNING!
nello standard IDEA c una piccola stranezza: le chiavi
K
50
e K
51
sono invertite!
probabilmente c stata una svista nella definizione
dello standard!
se si desidera implementare IDEA necessario, dopo
aver generato le 52 chiavi di cifratura, provvedere ad
invertire K
50
e K
51

IDEA un round
IDEA esegue 17 round
i round dispari sono diversi da quelli pari
in alcuni casi si parla di 8 round; due round vengono
considerati come un singolo round
linput di ogni round una quantit X a 64 bit separata
in quattro quantit X
a
, X
b
, X
c
, X
d
da 16 bit
cio X = X
a
| X
b
| X
c
| X
d
ad ogni round linput X
a
| X
b
| X
c
| X
d
viene combinato
con alcune delle 52 chiavi per ottenere in output una
versione aggiornata di X
a
| X
b
| X
c
| X
d
i round dispari usano quattro delle 52 chiavi K
i
: K
a
, K
b
, K
c
, K
d
i round pari usano due delle 52 chiavi K
i
: K
e
, K
f

IDEA un round
Ad esempio
nel round 1, K
a
, K
b
, K
c
, K
d
= K
1
, K
2
, K
3
, K
4
nel round 2, K
e
, K
f
= K
5
, K
6
nel round 3, K
a
, K
b
, K
c
, K
d
= K
7
, K
8
, K
9
, K
10
nel round 4, K
e
, K
f
= K
11
, K
12

in un round dispari gli input sono
X
a
, X
b
, X
c
, X
d
K
a
, K
b
, K
c
, K
d

in un round pari gli input sono
X
a
, X
b
, X
c
, X
d
K
e
, K
f

Round dispari
Il round dispari semplice
X
a
X
a
K
a
X
d
X
d
K
d
X
c
X
b
+ K
b
X
b
X
c
+ K
c
Round dispari
Si osservi che un round dispari facilmente invertibile
il vecchio X
a
si ottiene moltiplicando () il nuovo X
a
per
linverso moltiplicativo mod (2
16
+ 1) di K
a
analogamente si procede con X
d
il vecchio X
b
si ottiene sommando al nuovo X
c
linverso
additivo di K
b
, cio sottraendo K
b
analogamente si procede con X
c

in fase di decifratura
il round dispari analogo alla cifratura, tranne il fatto di
dover considerare per ogni chiave il suo inverso
matematico (rispetto le relative operazioni)
ci annulla le operazioni fatte nella fase di cifratura

Round pari
Il round pari pi complicato
gli input sono X
a
, X
b
, X
c
, X
d
e K
e
, K
f


prima vengono calcolate due quantit (a 16 bit)
Y
in
e Z
in
poi viene applicata una funzione, la mangler
function, che
prende in input Y
in
, Z
in
, K
e
e K
f
, e
produce in output due quantit (a 16 bit) Y
out
e Z
out
in fine, vengono calcolati
i nuovi valori di X
a
, X
b
, X
c
, X
d
combinando
i loro vecchi valori con Y
out
e Z
out

Round pari
In particolare, si hanno le seguenti relazioni
Y
in
= X
a
X
b

Z
in
= X
c
X
d
Y
out
= ((K
e
Y
in
) + Z
in
) K
f

Z
out
= (K
e
Y
in
) + Y
out

i nuovi valori di X
a
, X
b
, X
c
, X
d
sono
X
a
X
a
Y
out
X
b
X
b
Y
out
X
c
X
c
Z
out
X
d
X
d
Z
out

Round pari
Inversione del round pari
linversione del round pari veramente ingegnosa
il round pari coincide con il suo inverso
la decifratura di un round pari usa le stesse chiavi
e non il loro inverso matematico
nella decifratura dei round dispari si considerava un set
di chiavi ottenuto facendo linverso matematico delle
chiavi di cifratura
il round pari prende in input
X
a
, X
b
, X
c
, X
d
e
K
e
, K
f

e produce in output
X
a
, X
b
, X
c
, X
d
cio i nuovi valori di X
a
, X
b
, X
c
, X
d
Inversione del round pari
risulta che (sar mostrato dopo)
se gli input del round pari sono X
a
, X
b
, X
c
, X
d
, e
le chiavi rimangono le stesse,
loutput X
a
, X
b
, X
c
, X
d

X
a
X
b
X
c
X
d
X
a
X
b
X
c
X
d
K
e
K
f
round 2n
ENCRYPTION
X
a
X
b
X
c
X
d
X
a
X
b
X
c
X
d
round 2n
DECRYPTION
Inversione del round pari prova
Mostreremo che
inserendo in input al round pari X
a
, X
b
, X
c
, X
d
, e
considerando le stesse chiavi K
e
, K
f

si ottengono in output X
a
, X
b
, X
c
, X
d
tali che
X
a
= X
a
X
b
= X
b
X
c
= X
c
X
d
= X
d

Prova

da X
a
= X
a
Y
out
e da X
b
= X
b
Y
out

Y
in
= X
a
X
b
= (X
a
Y
out
) (X
b
Y
out
) = X
a
X
b
= Y
in
da X
c
= X
c
Z
out
e da X
d
= X
d
Z
out


Z
in
= X
c
X
d
= (X
c
Z
out
) (X
d
Z
out
) = X
c
X
d
= Z
in

Inversione del round pari prova
gli input della mangler function sono gli stessi
Y
out
= Y
out
e Z
out
= Z
out
X
a
= X
a
Y
out
= (X
a
Y
out
) Y
out
=
= X
a
Y
out
Y
out
= X
a
X
b
= X
b
Y
out
= (X
b
Y
out
) Y
out
=
= X
b
Y
out
Y
out
= X
b
X
c
= X
c
Z
out
= (X
c
Z
out
) Z
out
=
= X
c
Z
out
Z
out
= X
c
X
d
= X
d
Z
out
= (X
d
Z
out
) Z
out
=
= X
d
Z
out
Z
out
= X
d

Calcolo chiavi di decifratura
IDEA stato progettato in modo tale che lo stesso
codice (o hardware) pu effettuare sia la cifratura
che la decifratura
scegliendo in modo opportuno (diversamente) le 52
chiavi espanse per la cifratura e per la decifratura
si possono scegliere la chiavi inverse (di decifratura) in
modo tale che la procedura di cifratura, cos come ,
esegue anche la decifratura
lidea base di prendere le inverse (dal punto di vista
matematico) delle chiavi di cifratura e usarle in ordine
opposto
Calcolo chiavi di decifratura
Si considerino le 52 chiavi usate in cifratura K
1
, K
2
, ,
K
52
nei round dispari sono state usate quattro chiavi mentre
nei round pari solo due
round 1 K
1
, K
2
, K
3
, K
4
round 3 K
7
, K
8
, K
9
, K
10


round 17 K
49
, K
50
, K
51
, K
52
quindi le prime quattro chiavi da usare nel primo round di
decifratura devono essere
K
1
: inverso matematico di K
49
; trattandosi di una moltiplicazione
() K
1
deve essere linverso moltiplicativo di K
49
mod (2
16
+ 1)
K
2
: inverso additivo di K
50
; cio -K
50
K
3
: inverso additivo di K
51
; cio -K
51
K
4
: inverso moltiplicativo di K
52

Calcolo chiavi di decifratura
considerando la seguente notazione
im(K
i
): inverso moltiplicativo di K
i
mod (2
16
+ 1)
ia(K
i
): inverso additivo di K
i
mod 2
16

le 52 chiavi di decifratura K
i
sono
round 1: K
1
, K
2
, K
3
, K
4
= im(K
49
), ia(K
50
), ia(K
51
), im(K
52
)
round 2: K
5
, K
6
= K
47
, K
48
round 3: K
7
, K
8
, K
9
, K
10
= im(K
43
), ia(K
44
), ia(K
45
), im(K
46
)
round 4: K
11
, K
12
= K
41
, K
42

round 17: K
49
, K
50
, K
51
, K
52
= im(K
1
), ia(K
2
), ia(K
3
), im(K
4
)


Architettura hardware/software
Da quanto detto, una possibile architettura di
un sistema hardware/software per IDEA la
seguente
52 16 bit

input
plaintext or ciphertext
output
ciphertext or plaintext
ENCRYPTION
KEY EXP
K

E/D

K*

128 bit

64 bit

64 bit

E/D true K* = K
1
, K
2
, , K
52
E/D false K* = K
1
, K
2
, , K
52
Funziona IDEA?
Si mostrato che nota la chiave di cifratura la
decifratura consente di risalire al testo in chiaro

Riguardo il livello di sicurezza offerto da IDEA
non esistono prove formali che stabiliscono in modo
chiaro quanto IDEA sia sicuro
si assume che sia sicuro semplicemente perch ancora
nessuno ha reso pubblico un modo per violarlo
chiaramente, tentare di violare IDEA con un approccio
esaustivo richiede attualmente una quantit smisurata
di risorse di calcolo/tempo
ALGORITMO AES
ADVANCED ENCRYPTION STANDARD
Crittografia a Chiave Segreta
Advanced Encryption Standard (AES)
AES fu introdotto perch
DES aveva una chiave troppo corta
3DES (triplo DES) era troppo lento
IDEA era protetto da un brevetto, era in parte
sospetto e lento
Il NIST si impegn a sviluppare un nuovo standard
non si trattava di un problema solo tecnico, ma
anche di un problema politico
alcuni rami del governo avevano ostacolato il pi possibile la
diffusione e lesportazione della crittografia sicura
il fatto che il governo appoggiasse NIST era visto con
scetticismo; molti non si fidavano
Un po di storia
Il NIST voleva realmente creare un nuovo
standard di sicurezza eccellente
cio efficiente, flessibile, sicuro e free (non protetto),
ma quale poteva essere il modo migliore per farlo?
da un lato NIST doveva essere parte integrante del processo
di progettazione
poich si trattava di uno sforzo ingente e sembrava che
nessun altro avesse le competenze tecniche e lenergia per
compierlo
dallaltro proporre un cifrario sviluppato, segretamente, dalla
NSA non avrebbe funzionato; nessuno si sarebbe fidato, ci
potevano essere delle trapdoor
Un po di storia
Nel 1997 il NIST annunci una gara per la
selezione di un nuovo standard di cifratura
destinato a proteggere informazioni governative
sensibili
la gara era aperta ad ogni persona/gruppo in qualsiasi
parte del mondo
furono specificati i requisiti del cifrario incluso una
documentazione che spiegasse le ragioni delle scelte
progettuali
per molti anni si tennero delle conferenze per la
presentazione di proposte,
che venivano sottoposte a cicli di revisione eseguiti da
crittografi esperti e motivati
Un po di storia
Dopo molti anni di studio e discussioni, il NIST
scelse lalgoritmo Rijndael
proposto da due crittografi belgi Joan Daemen e
Vincet Rijmen
Rijndael prevede diverse lunghezze per i blocchi e
per la chiave
128, 160, 192, 224, e 256 bit
la lunghezza di un blocco e quella della chiave possono
differire
Il 26 Novembre 2001, viene emanato AES
una standardizzazione di Rijndael
Un po di storia
Lo standard AES
fissa la lunghezza dei blocchi a 128 bit
la chiave pu essere di 128, di 192 o di 256 bit
si parla di AES-128, AES-192 e AES-256
Nel seguito si descriver Rijndael
specificando di volta in volta i parametri di AES
Rijndael somiglia a DES e a IDEA
ci sono pi round che strapazzano un blocco di testo
in chiaro per ottenere il corrispondente cifrato, e
c un algoritmo per lespansione della chiave; a partire
dalla chiave segreta genera le chiavi da usare nei vari
round
Rijndael/AES parametri
Rijndael ha una struttura flessibile grazie alluso
di due parametri indipendenti, e di un terzo
parametro derivato dai primi due
N
b
dimensione di un blocco: numero di parole (word)
da 32 bit (colonne da 4 ottetti) in un blocco da cifrare
in AES N
b
= 4, un blocco ha lunghezza 128 bit 4 parole da
32 bit; 4 colonne da 4 ottetti
ottetto
N
b
Rijndael/AES parametri
N
k
dimensione della chiave: numero di parole
(word) da 32 bit (colonne da 4 ottetti) in una
chiave di cifratura
in AES-128 N
k
= 4
in AES-192 N
k
= 6
in AES-256 N
k
= 8
in Rijndael N
k
pu essere un qualsiasi intero tra 4 e 8

ottetto
N
K
Rijndael/AES parametri
N
r
numero di round: questo parametro dipende
da N
b
e da N
k
pi lunga la chiave pi round sono necessari per
rendere la violazione della cifratura difficile quanto un
attacco a forza bruta sulla chiave
il numero di round deve aumentare allaumentare della
lunghezza di un blocco (e della chiave); ogni bit del
testo in chiaro (e della chiave) deve influenzare (in
modo complesso) ciascun bit del testo cifrato
Rijndael specifica che N
r
= 6 + max(N
b
, N
k
)
in AES-128 N
r
= 10
in AES-192 N
r
= 12
in AES-256 N
r
= 14
Array di stato
Rijndael mantiene un array di stato
rettangolare
ogni elemento dellarray un ottetto
complessivamente ci sono N
b
colonne da 4 ottetti
lo stato iniziale ottenuto popolando larray, colonna
per colonna, mediante le N
b
colonne da 4 ottetti che
costituiscono il blocco di input
durante gli N
r
round lo stato viene modificato
il blocco di output dellalgoritmo si ottiene leggendo
colonna per colonna lo stato finale
Array di stato
Prima del round 1, tra i vari round, e dopo il
round N
r
viene eseguito
lor-esclusivo ( XOR) del contenuto dellarray di
stato, con
i prossimi 4N
b
ottetti della chiave espansa
gli ottetti della chiave espansa vengono letti per
colonna in modo da formare un matrice di N
b
colonne
da 4 ottetti ciascuna
i primi N
r
1 round comprendono una sequenza di
operazioni identiche, mentre il round N
r
ne
omette una
Struttura base di Rijndael
Espansione della chiave
La chiave segreta di Rijndael un blocco
formato da 4N
k
ottetti
Lalgoritmo di espansione della chiave
scandisce la chiave in modo da ottenere N
k

colonne da 4 ottetti,
poi espande la matrice ottenuta introducendo
delle colonne (da 4 ottetti) aggiuntive,
lespansione si arresta quando si hanno
complessivamente (N
r
+ 1)N
b
colonne
lesatta quantit di chiavi espanse
Espansione della chiave
la procedura di espansione usa lo stesso tipo di
operazioni primitive usate durante i round
Numerazioni
righe, colonne, e chiavi di round sono numerate a
partire 0
i round sono invece numerati a partire da 1

Operazioni primitive
Rijndael utilizza quattro operazioni primitive
1. or-esclusivo (XOR )
in cui sono coinvolte le chiavi espanse
2. sostituzione di byte, chiamata S-box
si tratta di una sostituzione ottetto-per-ottetto (byte-per-
byte) definita da una specifica tabella
per ciascuno dei possibili 256 byte in input viene specificato
il corrispondente byte in output tra i 256 possibili
per la rappresentazione della tabella fa comodo usare la
notazione esadecimale; ad esempio FC rappresenta il 252-
esimo byte
la tabella pu essere visualizzata come una matrice 1616

Rijndael Sbox
Esempio
il 97-esimo byte il numero
61
HEX
in esadecimale,

quindi mappato nel byte
nella riga 6 e colonna 1
che EF
HEX
che corrisponde
al 239-esimo byte

in binario si ha che
(1100001)
2
= (97)
10
mappato in
(11101111)
2
= (239)
10
Operazioni primitive
3. scorrimento circolare di ottetti (byte) di una riga o di
una colonna pari a un qualche numero di celle
4. mescolamento colonne, MixColumn: sostituzione di
una colonna di 4 ottetti con unaltra colonna di 4
ottetti
MixColumn pu essere implementata con una singola tabella
contenente 256 colonne di 4 ottetti
ciascuno dei 4 ottetti in una colonna di input usato come
un indice per recuperare una colonna dalla tabella
ogni colonna recuperata dalla tabella ruotata (scorrimento
verticale circolare dallalto in basso) verticalmente in modo
tale che il suo ottetto in cima sia posto nella stessa riga
dellottetto di input;
e le quattro colonne ruotate sono sommate XOR () per
produrre la colonna di output

MixColumn mediante tabella di lookup
4 ottetti di una
colonna di input
scorrimento della colonna per
allinearla allottetto di input ad
da cui stata derivata
4 ottetti di una
colonna di output
MixColumn tabella di lookup
Esempio
Allottetto 2b corrisponde la colonna
di 4 ottetti che si trova allincrocio della
riga 2 e della colonna b, cio la
colonna
56
2b
28
7d


Invertibilit delle operazioni primitive
Lor-esclusivo (XOR ) chiaramente invertibile
coincide con il suo inverso: X Y Y = X
Linversa della S-box si ottiene considerando
semplicemente una tabella diversa
cio la tabella inversa
Linversa dello scorrimento circolare di una riga o
colonna si ottiene semplicemente eseguendo lo
stesso scorrimento, ma in direzione opposta
Linversa di MixColumn, detta InvMixColumn,
esattamente come MixColumn, ma con una
tabella di lookup diversa
Rijndael S-box inversa
InvMixColumn tabella di lookup
Decifratura di Rijndael
Il cifrario inverso di Rijndael pu pertanto
implementarsi applicando
le inverse delle operazioni primitive,
eseguite in sequenza opposta rispetto quella di cifratura
Tuttavia, si pu mostrare che,
grazie alle propriet matematiche di cui gode Rijndael,
il cifrario inverso ha una struttura molto simile al cifrario
diretto, ma con operazioni invertite, e con le chiavi di
round non soltanto in ordine inverso, ma
con InvMixColumn applicato a tutte tranne la prima e
lultima colonna
Espansione della chiave
Lespansione delle chiavi
inizia con la chiave segreta organizzata come N
k

colonne di 4 ottetti, e
iterativamente genera le prossime N
k
colonne della
chiave espansa
Espansione della chiave
Per generare li-esimo insieme di N
k
colonne
i inizia da 1; lo 0-esimo insieme la chiave segreta
serve soltanto l(i-1)-esimo insieme di colonne
la prima colonna (colonna 0) del nuovo insieme si
ottiene mediante
uno scorrimento circolare verticale di una cella
dellultima colonna dell(i-1)-esimo insieme, e
applicando la S-box ad ogni ottetto, e
sommando in XOR () una costante C
i
con lottetto 0
(che sta in cima)

Espansione della chiave (N
k
6)
le rimanenti colonne sono generate a turno
sommando in XOR la precedente colonna con,
la corrispondente colonna del precedente (i-1)-esimo
insieme
Valori delle costanti C
i
1 2 4 8 10 20 40 80 1b 36
6c d8 ab 4d 9a 2f 5e bc 63 c6
97 35 6a d4 B3 7d fa ef c5 (91)
i = 1 to 10
i = 11 to 20
i = 21 to 30
Espansione della chiave (N
k
> 6)
c uneccezione nel procedimento di espansione
della chiave,
se N
k
> 6, allora necessario uno step aggiuntivo
per generare la colonna 4
necessario applicare la S-box ad ogni ottetto

lespansione della chiave termina non appena (N
r

+ 1)N
b
colonne di chiavi espanse sono generate
Espansione della chiave N
k
> 6
Rijndael round
Ogni round di Rijndael una sequenza identica di tre
operazioni:
1. Ogni ottetto della matrice di stato viene sottoposto
alla S-box
2. Scorrimenti circolari
La riga 1 dello stato viene fatta scorrere a sx di una colonna
La riga 2 dello stato viene fatta scorrere a sx di 2 + N
b
/8
colonne (2 se N
b
< 8, 3 altrimenti)
La riga 3 dello stato viene fatta scorrere a sx di 3 + N
b
/7
colonne (3 se N
b
< 7, 4 altrimenti)
(in AES si semplifica in scorrimento a sx di i colonne della riga i)
3. Ogni colonna dello stato viene sottoposta alla
MixColumn; il round N
r
omette questa operazione
Rijndael round invertito
Essendo ogni operazione invertibile
la decifratura pu effettuarsi applicando in ordine
inverso linversa (in senso matematico) di ogni
operazione, e
usando le chiavi di round in ordine inverso
Tuttavia la decifratura pu avere la stessa
struttura della cifratura
necessario usare le chiavi di round in ordine
opposto, e
applicare InvMixColumn ad ogni colonna delle chiavi
espanse tranne quelle del round iniziale e finale

Rijndael round invertito
Ogni round invertito di Rijndael una sequenza
identica di tre operazioni:
1. Ogni ottetto della matrice di stato viene sottoposto
alla S-box
2. Scorrimenti circolari
La riga 1 dello stato viene fatta scorrere a dx di una
colonna
La riga 2 dello stato viene fatta scorrere a dx di 2 + N
b
/8
colonne (2 se N
b
< 8, 3 altrimenti)
La riga 3 dello stato viene fatta scorrere a dx di 3 + N
b
/7
colonne (3 se N
b
< 7, 4 altrimenti)
(in AES si semplifica in scorrimento a dx di i colonne della riga i)
3. Ogni colonna dello stato viene sottoposta alla
InvMixColumn; il round N
r
omette questa operazione

CIFRARI A FLUSSO E RC4
Crittografia a Chiave Segreta
Cifrari a blocchi vs cifrari a flusso
Un cifrario a blocchi elabora un blocco di
elementi in ingresso per volta
produce un blocco di uscita per ciascun blocco di
ingresso
il testo in chiaro deve essere preliminarmente suddiviso
in blocchi
il testo cifrato si ottiene combinando i vari blocchi cifrati
DES, IDEA e AES sono esempi di cifrari a blocchi simmetrici
Un cifrario a flusso elabora continuamente gli
elementi in ingresso
produce in uscita un flusso di elementi cifrati
gli elementi cifrati vengono prodotti singolarmente, uno alla
volta, man mano che la cifratura procede
Cifrari a blocchi vs cifrari a flusso
Sebbene i cifrari a blocchi siano molto pi
comuni, in alcune applicazioni i cifrari a flusso
sono pi adatti
applicazioni che richiedono la cifratura/decifratura di
un flusso di dati
ad esempio le trasmissioni di stream audio/video
di seguito sar esaminato il cifrario a flusso pi
popolare: RC4
preliminarmente sar discussa la struttura generale di
un cifrario a flusso
Struttura di un cifrario a flusso
Un tipico cifrario a flusso cifra il testo in chiaro un
byte per volta
sebbene possa essere progettato per agire su unit
pi grandi di un byte
pseudo-random
stream gener.
pseudo-random
stream gener.
K
K
plaintext
stream
plaintext
stream
ciphertext
stream
ENCRYPTION DECRYPTION
keystream keystream
Struttura di un cifrario a flusso
La chiave segreta K (di lunghezza finita)
lingresso di un generatore pseudo-casuale di
bit
che produce un flusso (di lunghezza arbitraria) di
byte apparentemente casuale, chiamato chiave di
flusso (keystream)
la chiave di flusso un flusso
impredicibile se non si conosce la chiave, ma
viene generato in modo deterministico a partire
dalla chiave
non presenta regolarit statistiche

Cifratura
Il keystream combinato un byte alla volta
con il flusso del testo in chiaro mediante un
or-esclusivo (XOR ) bit a bit
il risultato di questo processo il flusso cifrato
ad esempio, se
p
i
= 11001100 li-esimo byte del flusso del testo in
chiaro, e
k
i
= 01101100 li-esimo byte del keystream, allora
c
i
= p
i
k
i
= 10100000 li-esimo byte del flusso del
testo cifrato
Decifratura
La decifratura richiede luso della stessa
sequenza pseudo-casuale (keystream)
combinata un byte alla volta con il testo cifrato
mediante or-esclusivo (EX-OR ) bit a bit
ad esempio, se
c
i
= p
i
k
i
= 10100000 li-esimo byte del flusso del
testo cifrato, e
k
i
= 01101100 li-esimo byte del keystream, allora
p
i
= c
i
k
i
= (p
i
k
i
) k
i
= p
i
(k
i
k
i
) = p
i
= 11001100
li-esimo byte del flusso del testo in chiaro
Osservazioni
Pi casuale laspetto del keystream, pi
randomizzato il testo cifrato
rendendo la crittoanalisi pi difficile
Pertanto il keystream
dovrebbe avere un periodo grande
la funzione deterministica che genera il keystream, a partire
dalla chiave segreta, per forza di cose periodica
dovrebbe approssimare il pi possibile un flusso
casuale
ad esempio, 0 e 1 dovrebbero essere equamente presenti
riguardando il keystream come una sequenza di byte, tutti i
256 possibili byte dovrebbero apparire disordinatamente e
con una frequenza uniforme
Osservazioni
Come nei cifrari a blocchi, necessario che la
chiave sia sufficientemente lunga per
proteggersi dagli attacchi a forza bruta
preferibile una lunghezza della chiave di almeno
128 bit
Cifrari a flusso vs cifrari a blocchi
Se un cifrario a flusso correttamente progettato
pu essere sicuro tanto quanto un cifrario a blocchi
a parit di lunghezza della chiave segreta

Il vantaggio principale di un cifrario a flusso che
quasi sempre pi veloce, vedi tabella, ed
facilmente implementabile
spesso bastano poche linee di codice, vedi descrizione RC4
Cifrari a flusso vs cifrari a blocchi
Confronto delle velocit di cifrari simmetrici su
un Pentium II
Cifrario Lunghezza della chiave Velocit variabile (Mbps)
DES 56 9
3DES 168 3
RC2 variabile 0,9
RC4 variabile 45
Cifrari a flusso vs cifrari a blocchi
Il vantaggio di un cifrario a blocchi che la chiave
segreta riutilizzabile per pi comunicazioni
se due testi in chiaro sono cifrati con la stessa chiave
segreta, usando un cifrario a flusso, la crittoanalisi
spesso molto semplice
se i due flussi di testo cifrato sono sommati in XOR ()
il flusso risultante lo XOR dei flussi di testo in
chiaro
se i testi in chiaro sono stringhe testuali, numeri di carta di
credito o altri flussi di byte con propriet note la
crittoanalisi pu aver successo
Algoritmo RC4
RC4 un cifrario a flusso
con dimensione della chiave variabile,
con funzionamento orientato al byte
fu progettato nel 1987 da Ron Rivest RSA Security
Si basa sulluso di una permutazione casuale
dagli studi sembra che il periodo del cifrario sia
superire a 10
100

viene usato
negli standard SSL/TLS (Secure Socket Layer/Transport Layer
Security)
nel protocollo WEP (Wired Equivalent Privacy)
nel protocollo WPA (WiFi Protected Access)
Algoritmo RC4
Lalgoritmo RC4 molto semplice da spiegare;
basta spiegare come viene generato il
keystream
lalgoritmo mantiene un array di stato
monodimensionale S contenente 256 byte
S[0], S[1], , S[255] sono i 256 byte
ogni elemento/byte S[i] rappresenta un numero da 1
a 255
una chiave di lunghezza variabile da 1 a 256 byte
(da 8 a 2048 bit) viene usata per inizializzare il
contenuto dellarray di stato
Algoritmo RC4
S contiene in ogni momento una delle 256!
permutazioni dei numeri da 0 a 255
per la cifratura/decifratura viene generato un byte
k selezionando da S uno dei 255 elementi in
maniera sistematica
subito dopo la generazione del byte k, gli elementi
di S vengono permutati
lalgoritmo prosegue alternando le ultime due fasi
(generazione di k e permutazione) finch il flusso
in input non termina

RC4 inizializzazione
gli elementi di S vengono impostati uguali ai valori da
0 a 255 in ordine crescente
S[0] = 0, S[1] = 1, , S[255] = 255
un vettore temporaneo T, della stessa lunghezza di S,
viene usato per memorizzare temporaneamente la
chiave K
se la lunghezza di K 256 byte K viene trasferita in T
altrimenti, K viene copiata pi volte in T fino a riempirlo
/* Inizializzazione */
for i = 0 to 255 do {
S[i] = i;
T[i] = K[i mod keylen]; // keylen: lunghezza di S
}
RC4 permutazione iniziale
successivamente si user T per produrre la
permutazione iniziale
si scandisce S e per ciascun S[i], si scambia S[i] con un
altro elemento di S scelto in modo sistematico in base,
tra laltro, al contenuto di T[i]
poich la sola operazione su S lo scambio, il solo
effetto una permutazione
S contiene ancora tutti i numeri da 0 a 255
/* Permutazione iniziale di S */
j = 0;
for i = 0 to 255 do {
j = (j + S[i] + T[i]) mod 256;
scambia(S[i], S[j]);
}
RC4 generazione del flusso
Una volta che S inizializzato, la chiave
segreta K (quindi anche larray T) non viene
pi utilizzata
il keystream viene generato facendo una
scansione ciclica di S
ciascun elemento S[i] viene scambiato con un altro byte
di S a secondo di uno schema che dipende dalla
configurazione corrente di S
dopodich, viene generato un singolo byte k del
keystream sempre in base alla configurazione corrente
di S
RC4 generazione del flusso
/* Generazione del flusso */
i, j = 0;
while (true) {
i = (i + 1) mod 256;
j = (j + S[i]) mod 256;
scambia(S[i], S[j]);
t = (S[i] + S[j]) mod 256;
k = S[t];
}
Bibliografia
[KPS02] C. Kaufman, R. Perlman, M. Speciner. Network
Security Private Communication in a Public World.
Prentice Hall.
[PFL08] C. P. Pfleeger, S. L. Pfleeger. Sicurezza in
Informatica. Pearson, Prentice Hall.
[STA07] W. Stallings. Sicurezza delle reti. Pearson,
Prentice Hall.
[Wiki-it] http://it.wikipedia.org/wiki/
[Wiki-en] http://en.wikipedia.org/wiki/
[ISECOM] Institute for Security and Open
Methodologies
Modalit Operative dei
Cifrari a Blocchi
(Modes of Operation)

Luca Grilli
INTRODUZIONE
Modalit Operative dei Cifrari a Blocchi
Introduzione
Si illustrer come usare gli algoritmi di crittografia
a chiave segreta, DES, IDEA e AES, in applicazioni
reali
stato visto soltanto come usare tali algoritmi per
cifrare blocchi di lunghezza prefissata
64 bit per DES e IDEA
128 bit per AES
come si procede se necessario cifrare dei messaggi
di lunghezza arbitraria/diversa?
Si vedr inoltre come si generano dei MAC
(Message Authentication Code)
sfruttando la crittografia a chiave segreta
CIFRARE MESSAGGI DI GRANDI
DIMENSIONI
Modalit Operative dei Cifrari a Blocchi
Cifrare messaggi di grandi dimensioni
Come possibile cifrare messaggi di dimensioni
superiori a 64 bit?
Sono state proposte diverse modalit operative dei
cifrari a blocchi
cio come utilizzare i cifrari a blocchi nel caso di messaggi di
lunghezza maggiore di quella di un singolo blocco
le modalit pi conosciute e che verranno
descritte di seguito sono
Electronic Code Book (ECB)
Cipher Block Chaining (CBC)
k-Bit Cipher FeedBack Mode (CFB)
k-Bit Output FeedBack Mode (OFB)
Cifrare messaggi di grandi dimensioni
una modalit operativa pi recente, che potrebbe
essere importante in futuro, il
CounTeR Mode (CTR)

nelle prossime slide, si far riferimento a cifrari a
blocchi con blocchi di 64 bit
tutte le considerazioni valgono anche nel casi di cifrari
con blocchi di dimensione diversa da 64 bit

Electronic Code Book (ECB)
questa modalit consiste nel fare la cosa pi ovvia;
corrisponde, in genere, alla soluzione peggiore
il messaggio viene decomposto in blocchi da 64 bit
inserendo eventualmente dei bit di padding nellultimo
blocco al fine di riempirlo
ciascun blocco da 64 bit viene cifrato con la chiave
segreta
la decifratura, consiste nel decifrare ciascun blocco
cifrato, e
nel ricomporre il messaggio in chiaro a partire dai
singoli blocchi decifrati
Electronic Code Book (ECB)
ELECTRONIC CODE BOOK ENCRYPTION
ELECTRONIC CODE BOOK DECRYPTION
Problemi di sicurezza in ECB
La modalit operativa ECB introduce una serie
di problemi non presenti nel cifrario a blocchi
se il messaggio contiene due blocchi di 64 bit
identici anche i corrispondenti blocchi cifrati
saranno identici
ci fornisce delle informazioni aggiuntive sul testo in
chiaro che un ascoltatore pu sfruttare
ad esempio, supponiamo che l'ascoltatore sappia che il
testo in chiaro contiene l'elenco, ordinato
alfabeticamente, degli impiegati e dei relativi salari
inviato dall'amministrazione all'ufficio paghe
File con i salari
Cognome Nome Posizione Salario ()
Bianchi Walter Impiegato 18.000,00
Neri Marcello Top Manager 70.000,00
Rossi Carlo Project Manager 40.000,00
Verdi Dario Tecnico 25.000,00
Viola Saverio Presidente 120.000,00
suddivisione in blocchi
Problemi di sicurezza in ECB
supponiamo inoltre che ogni riga del file sia lunga
esattamente 64 byte (8 blocchi da 8 byte), e
che i vari blocchi risultino suddivisi in modo tale che
alcuni contengono la codifica della cifra decimale pi
significativa del campo salario; migliaia di dollari/euro
comparando i testi cifrati, lascoltatore oltre a dedurre
quanti dipendenti hanno lo stesso salario, pu anche
dedurre quanti dipendenti hanno uno stipendio nello
stesso range (ordine di 10 dollari)
se ci sono complessivamente pochi range salariali,
lascoltatore pu dedurre a quale categoria di
dipendente corrisponda un dato blocco cifrato
Problemi di sicurezza in ECB
inoltre, se lascoltatore un impiegato, pu sostituire il
blocco cifrato di un altro dipendente (un manager) al
suo blocco cifrato (dedotto in base allordine e alla
numerosit della sua classe salariale)

ECB ha due serie debolezze
qualcuno analizzando diversi blocchi cifrati potrebbe
dedurre (inferire) informazioni sfruttando le ripetizioni
di alcuni blocchi cifrati, e/o
potrebbe riarrangiare/modificare i blocchi cifrati a
proprio vantaggio
per tali ragioni ECB raramente usato
Cipher Block Chaining (CBC)
CBC non presenta i problemi di ECB
a due blocchi in chiaro identici non corrispondono
due blocchi cifrati identici
per comprendere CBC conviene prima considerare
il seguente esempio che ne condivide lidea base

RANDOMIZED ELECTRONIC CODE BOOK ENCRYPTION
CBC Idea base
per ogni blocco di testo in chiaro m
i
viene
generato un numero random a 64 bit r
i
m
i
e r
i
vengono sommati ( XOR)
il risultato viene cifrato con la chiave segreta
i blocchi cifrati c
i
e i numeri random, in chiaro, r
i

vengono trasmessi
per riottenere il testo in chiaro, vengono prima
decifrati i blocchi c
i
con la chiave segreta
poi i blocchi risultanti vengono sommati ( XOR)
con i numeri random r
i
CBC Idea base
lesempio appena visto molto inefficiente
linformazione da trasmettere duplicata; per ogni
blocco va trasmesso il corrispondente numero random
un altro problema che un avversario pu
riarrangiare i blocchi in modo da ottenere un
effetto predittivo sul testo in chiaro
ad esempio, se la coppia r
2
|c
2
fosse rimossa il
corrispondente blocco in chiaro m
2
scomparirebbe, o
se la coppia r
2
|c
2
fosse scambiata con la coppia r
7
|c
7

m
2
e m
7
risulterebbero scambiati

CBC Idea base
ancora peggio, se lavversario conosce ciascun m
i
, pu
modificare m
i
in modo predittivo cambiando il
corrispondente numero random r
i



Modalit operativa CBC
CBC genera i suoi propri numeri random
usa c
i
come numero random r
i+1
cio, usa il precedente blocco cifrato come numero random
da sommare (XOR ) al blocco di testo in chiaro successivo
per evitare che due testi in chiaro inizialmente identici
diano luogo a dei blocchi cifrati inizialmente identici
CBC genera un singolo numero random, detto vettore
di inizializzazione (Initialization Vector IV), che viene
sommato (XOR ) con il primo blocco di testo in
chiaro
il risultato viene trasmesso dopo la cifratura a chiave segreta
Modalit operativa CBC
CIPHER BLOCK CHAINING ENCRYPTION
CIPHER BLOCK CHAINING DECRYPTION
Modalit operativa CBC in formule
CIFRATURA
c
1
= E(K, (IV m
1
))
c
i
= E(K, (c
i-1
m
i
)) per i > 1

DECIFRATURA
m
1
= D(K, c
1
) IV
m
i
= D(K, c
i
) c
i-1
per i > 1

Modalit operativa CBC
la decifratura semplice essendo lor-esclusivo
unoperazione che coincide con la propria inversa

essendo il costo della somma (XOR ) trascurabile
rispetto al costo della cifratura a chiave segreta
la cifratura con CBC ha le stesse prestazioni della
cifratura con ECB
eccetto il costo delle generazione e trasmissione di IV
in molti casi la sicurezza di CBC non dipende dalla
scelta del vettore di inizializzazione IV
cio si possono porre tutte le cifre di IV pari a 0
Utilit del vettore di inizializzazione
tuttavia, in alcuni casi, lassenza di IV riduce la
sicurezza
ad esempio, si supponga che il file cifrato contenente i
salari dei dipendenti sia trasmesso settimanalmente
in assenza di IV, un ascoltatore potrebbe verificare se il
testo cifrato differisce da quelle della precedente
settimana, e
potrebbe determinare la prima persona il cui salario
cambiato
un altro esempio quello di un generale che invia
giornalmente delle informazioni segrete dicendo
continue holding your position
Utilit del vettore di inizializzazione
il testo cifrato sarebbe ogni giorno lo stesso, finch il
generale decide di cambiare ordine, inviando il
messaggio start bombing
il testo cifrato cambierebbe immediatamente,
allertando il nemico
Utilit del vettore di inizializzazione
Un vettore di inizializzazione scelto
randomicamente garantisce che
anche se lo stesso messaggio inviato
ripetutamente il corrispondente testo cifrato
risulta ogni volta differente, e
previene attacchi allalgoritmo di cifratura di
tipo testo in chiaro selezionato
anche quando un avversario pu fornire del testo in
chiaro al CBC
CBC minaccia 1 Modifica dei blocchi cifrati
Luso di CBC non elimina il problema che qualcuno
possa modificare il messaggio in transito
cambia la natura della minaccia
un avversario non pu pi vedere ripetizioni di blocchi
cifrati, e
non pu pi copiare/spostare blocchi cifrati; ad
esempio per scambiare il salario di due dipendenti
un avversario pu ancora modificare il testo
cifrato in modo predittivo
cosa potrebbe succedere se modificasse un blocco di
testo cifrato, ad esempio c
n
?

CBC minaccia 1 Modifica dei blocchi cifrati
da m
n+1
= D(K, c
n+1
) c
n
si evince che una modifica di
c
n
pu avere un effetto prevedibile su m
n+1

ad esempio, cambiando il terzo bit di c
n
cambia il
terzo bit di m
n+1
chiaramente essendo anche m
n
= D(K, c
n
) c
n-1

lavversario non pu prevedere quale possa essere il
nuovo valore di m
n
,
molto probabilmente la modifica di c
n
corrompe
completamente il blocco in chiaro m
n
CBC minaccia 1 Modifica dei blocchi cifrati
ad esempio, supponiamo che un avversario (Trudy)
sappia che una data sequenza di blocchi cifrati, del file
dei salari, corrispondano alla riga contenente i suoi dati
personali
se Trudy vuole aumentare il suo salario di 10K, e
se sa che lultimo byte di m
7
corrisponde alle decine di
migliaia nella codifica decimale 00000010,
per darsi 10K in pi deve semplicemente cambiare il
bit meno significativo di c
6
; da m
7
= D(K, c
7
) c
6
Tacker Trudy Project Manager 24.122,00
m
1
m
2
m
3
m
4
m
5
m
6
m
7
m
8
CBC minaccia 1 Modifica dei blocchi cifrati
tuttavia, Trudy non sar pi in grado di predire cosa
apparir nella voce Posizione,
infatti, da m
6
= D(K, c
6
) c
5
, impraticabile
prevedere leffetto della modifica di c
6
su m
6
se il file decifrato fosse letto da una persona umana,
questa potrebbe insospettirsi della presenza di simboli
strani nel campo Posizione,
se invece il file decifrato viene elaborato da un
programma lattacco potrebbe non essere rilevato


Tacker Trudy Project Mana?#j$h* 34.122,00
m
1
m
2
m
3
m
4
m
5
m
6
m
7
m
8
CBC minaccia 1 Modifica dei blocchi cifrati
Ricapitolando
Trudy stato in grado di modificare un blocco in
modo predittivo
con leffetto collaterale di modificare il blocco
precedente senza poter prevedere il risultato
finale

CBC minaccia 2 Riarrangiamento blocchi cifrati
Si supponga che Trudy conosca
il testo in chiaro e, il corrispondente testo cifrato
di qualche messaggio, cio
m
1
, m
2
, ..., m
n
e

IV, c
1
, c
2
, ..., c
n
conosce anche il blocco decifrato di ciascun c
i
, da
D(K, c
i
) = c
i-1
m
i
CBC minaccia 2 Riarrangiamento blocchi cifrati
da queste informazioni, Trudy
pu considerare ciascun c
i
come un "building block" e
costruire un flusso cifrato usando ogni combinazione di c
i
ed
essere in grado di calcolare quale sar il corrispondente
testo in chiaro

a cosa potrebbe servirgli tale flusso cifrato?
facciamo una piccola digressione
uno dei modi di combattere la minaccia 1 includere un CRC
(Cyclic Redundancy Check) al testo in chiaro prima di cifrarlo
con un CBC
se Trudy modifica qualche blocco cifrato, il CRC consentir
ad un computer di rilevare prontamente lalterazione del
messaggio
CBC minaccia 2 Riarrangiamento blocchi cifrati
supponiamo che sia stato scelto un CRC a 32 bit
c' 1 possibilit su 2
32
che il CRC coincida con quello
corretto
supponiamo che a Trudy non interessi quale possa
essere il nuovo messaggio di testo in chiaro (che
potrebbe essere completamente indecifrabile),
ma interessi solamente che il nuovo messaggio
manomesso sia accettato dal computer ricevente
sapendo che viene eseguito un controllo di tipo CRC
Trudy pu provare a costruire molti flussi cifrati
combinando in modi diversi i blocchi c
1
, c
2
, ..., c
n
e
pu calcolare il risultante testo in chiaro per ciascuno di
essi, e
CBC minaccia 2 Riarrangiamento blocchi cifrati
pu poi testare se il testo in chiaro risultante ha un CRC
corretto
mediamente serviranno 2
31
tentativi

Che male potrebbe fare Trudy modificando un
messaggio, senza controllarne il contenuto, in modo
tale che sia accettato dal computer ricevente?
a) forse Trudy soltanto malizioso, e vuole distruggere
alcuni dati che vengono caricati attraverso la rete
b) in realt, c' un modo sottile di controllare, seppur
in misura ridotta, il contenuto del messaggio
modificato
CBC minaccia 2 Riarrangiamento blocchi cifrati
supponiamo che Trudy sposti blocchi contigui; ad
esempio, c
n
e c
n+1
vengono spostati in qualche altro
posto
il blocco originale m
n+1
apparir in unaltra posizione
se m
n+1
contiene il salario del presidente, Trudy
potrebbe scambiare i blocchi in modo da cambiarlo con
il suo,
ma poi dovr modificare molto probabilmente gran
parte del messaggio restante per garantire che il CRC
risulti invariato
CBC minaccia 2 Riarrangiamento blocchi cifrati
Per prevenire attacchi di questo tipo,
basati sul riarrangiamento dei blocchi cifrati,
tale da preservare il CRC originario
potrebbe essere usato un CRC a 64 bit
ci sicuramente sufficiente se lattacco al CRC,
nellambito di un CBC, di tipo a forza bruta
CBC minaccia 2 Riarrangiamento blocchi cifrati
Per chi progetta protocolli crittografici sicuri,
una modalit di cifratura
ad un singolo step e che protegge
sia la confidenzialit
che l'autenticit di un messaggio
stata per molti anni una sorta di Santo
Graal da ricercare!
Output FeedBack Mode (OFB)
LOFB un cifrario a flusso
la cifratura consiste nel sommare (XOR ) il
messaggio con il keystream (o one-time pad)
generato da OFB stesso
supponiamo che il keystream sia ottenuto
generando singoli blocchi di 64 bit alla volta; un
possibile modo per generarlo il seguente
viene prima generato un numero random IV
(Initialization Vector) di 64 bit
il primo blocco del keystream coincide con IV: b
0
= IV
il secondo blocco b
1
si ottiene cifrando b
0
con la chiave
segreta; in formule b
1
= E(K, b
0
), e cos via
OFB Cifratura
in generale si ha: b
i
= E(K, b
i-1
)
il one-time pad (keystream) risultante dato dalla
sequenza
OTP = OTP(K, IV) = b
0
|b
1
|b
2
| |b
i
|b
i+1
|
la cifratura con OFB consiste nel sommare (XOR ) il
messaggio m con OTP
se m ha lunghezza l
m
bit si considereranno soltanto l
m
bit di
OTP
K IV
OTP gen
OTP = b
0
|b
1
|b
2
|
m c = OTP m
OFB Decifratura
il risultato della cifratura c = OTP m viene trasmesso
insieme a IV; la lunghezza l
c
di c coincide con l
m
la decifratura come segue
il destinatario riceve IV e conoscendo K calcola lo stesso one-
time pad OTP = OTP(K, IV)
il messaggio m si ottiene sommando (XOR ) il flusso cifrato
c con l
c
bit di OTP
K IV
OTP gen
OTP = b
0
|b
1
|b
2
|
c m = OTP c
OFB Vantaggi
Il one-time pad OTP pu essere generato in
anticipo
prima che sia noto il messaggio m da cifrare; una volta
ottenuto m necessario soltanto effettuare la somma
(XOR ) con il one-time pad
eseguibile in modo estremamente veloce
se qualche bit del testo cifrato dovesse corrompersi,
soltanto i corrispondenti bit del testo in chiaro
sarebbero corrotti
diversamente dalla modalit CBC dove se c
n
fosse corrotto
m
n
sarebbe completamente corrotto e m
n+1
sarebbe
corrotto in corrispondenza dei medesimi bit di c
n
OFB Vantaggi
un messaggio m pu arrivare a pezzi di lunghezza
arbitraria, e
ogni volta che arriva un pezzo, il corrispondente testo
cifrato pu essere immediatamente trasmesso
in CBC invece, se il messaggio arriva un byte alla volta,
per la cifratura comunque necessario attendere che
un blocco di 64 bit (o un multiplo intero di 8 byte) sia
completo
ci pu comportare lattesa di altri 7 byte o
di aggiungere dei bit di riempimento, cosa che aumenta
la quantit di dati da trasmettere

OFB Svantaggi
se un avversario conoscesse il testo in chiaro m e
quello cifrato c potrebbe modificare il testo in
chiaro a piacimento semplicemente
sommando il testo cifrato con il testo in chiaro noto, e
sommando il risultato con un qualsiasi messaggio m
che desidera sostituire ad m
cio, lavversario dovrebbe modificare il testo cifrato
nel seguente modo c = c m m

verificare che decifrando c anzich c si ottiene m
anzich m


k-bit OFB
In generale la modalit OFB consente di generare
flussi di pezzi da k bit
quanto visto prima corrisponde al caso in cui k = 64 bit
k-bit OFB
k-bit OFB
La modalit k-bit OFB funziona nel seguente
modo (si descriver la versione data in [DES81]):
linput I
0
al modulo di cifratura DES inizializzato a IV;
cio I
0
= IV
se IV ha meno di 64 bit, vengono inseriti degli 0 di
riempimento a sinistra (cifre pi significative)
il primo pezzo b
0
di OTP si ottiene selezionando k bit
dalloutput O
0
= E(K, I
0
) di DES (una quantit a 64 bit)
da un punto di vista crittografico non ha importanza come
siano scelti tali bit da O
0
; [DES81] specifica che devono
essere i k bit pi significativi
k-bit OFB
li-esimo pezzo b
i
si ottiene selezionando i k bit pi
significativi delloutput O
i
= E(K, I
i
) di DES
ove linput I
i
stato ottenuto da I
i-1
eseguendo
due operazioni:
una traslazione a sinistra di k bit, e
un inserimento di b
i-1
nei k bit meno significativi di I
1
(k
bit pi a destra)
Cipher FeedBack Mode (CFB)
La modalit CFB molto simile a OFB
viene prodotto un one-time pad
generando, uno alla volta, singoli pezzi di k bit
che viene sommato (XOR ) con pezzi di k bit del
messaggio
k-bit CFB
Cipher FeedBack Mode (CFB)
in OFB i k bit meno significativi dellinput I
i
del
modulo di cifratura DES sono i k bit di b
i-1

sono parte delloutput O
i-1
della cifratura DES del blocco
precedente
invece, in CFB i k bit di I
i
sono i k bit di testo cifrato
del blocco precedente, cio i k bit di c
i-1
in CFB il one-time pad non pu essere generato
prima che il messaggio noto (a differenza di OFB)
nella modalit a k-bit ragionevole assegnare a k
un valore diverso da 64 bit
una scelta sensata k = 8 bit
CFB Vantaggi
Con OFB o CBC
se si ha una perdita di caratteri in trasmissione
(testo cifrato)
ad esempio, se nel flusso cifrato c
1
, c
2
, c
3
, , c
n
, si
perde il carattere c
k
a destinazione si ottiene la
sequenza c
1
, c
2
, c
k-1
, c
k
, , c
n-1
ove c
k
= c
k+1
, c
k+1
= c
k+2
,
c
k+i
= c
k+i+1
o se extra caratteri sono aggiunti al flusso cifrato
ad esempio, se nel flusso cifrato c
1
, c
2
, c
3
, , c
n
, si
aggiunge il carattere c* dopo di c
k-1
a destinazione si
ottiene la sequenza c
1
, c
2
, c
k-1
, c
k
, , c
n+1
ove c
k
= c*,
c
k+1
= c
k
, c
k+i
= c
k+i-1

CFB Vantaggi
lintera parte restante della trasmissione risulta
indecifrabile
poich m
i
= c
i
b
i

e b
i
= b
i
(K, IV) cio b
i
non dipende dalla sequenza cifrata

invece, con 8-bit CFB, si ha un effetto
risincronizzante
se un byte c
i
perso in trasmissione il
corrispondente testo in chiaro m
i
perso, e i successivi
8 byte m
i+1
, , m
i+8
risulteranno indecifrabili, ma dal
byte m
i+9
in poi il testo in chiaro sar corretto
CFB Vantaggi
ci perch b
i
= b
i
(K, c
i-1
) cio b
i
derivato dalla
sequenza di caratteri cifrati
discorsi analoghi valgono nel caso dellaggiunta di un
byte al flusso cifrato
i messaggi cifrati con CFB offrono pi protezione
di CBC e di OFB rispetto ad eventuali
manomissioni
nel caso di 8-bit CFB un avversario pu modificare ogni
singolo byte in modo predittivo, ma con leffetto
collaterale di non poter prevedere/controllare i
successivi 8 byte
discorsi simili valgono per 64-bit CFB
CFB Vantaggi
a differenza di CBC, non sono possibili attacchi
basati sul riarrangiamento di blocchi
tuttavia, intere sezioni del messaggio possono essere
riarrangiate rendendo indecifrabili le parti
corrispondenti ai punti di giuntura

CFB Svantaggi
8-bit CFB ha lo svantaggio che ogni byte di input
richiede unoperazione DES
inizialmente CFB fu concepito per essere utilizzato
con un numero arbitrario k di bit per pezzo
con k < dimensione di un blocco completo (64 bit per
DES)
nella pratica k pari a 1 byte oppure coincide con la
dimensione piena (full-block) dei blocchi del modulo di
cifratura
quando utilizzato in modalit full-block le
prestazioni di CFB sono comparabili a quelle di
ECB, CBC, e OFB


CFB Svantaggi
come OFB consente di cifrare ed inviare ciascun
byte del messaggio non appena noto
tuttavia, a differenza di OFB non in grado di
anticipare il calcolo del one-time pad
in fine, in grado di rilevare delle alterazioni
meglio di OFB, ma non bene quanto CBC

CounTeR Mode (CTR)
CTR simile a OFM: un one-time pad viene generato e
sommato (XOR ) con i dati
Differisce da OFM perch
non concatena ciascun blocco di one-time-pad con il
precedente, ma
incrementa IV e poi cifra quanto ottenuto per ottenere il
prossimo blocco di one-time pad

CounTerR Mode
(CTR)
CTR Vantaggi
Il vantaggio principale che, come OFB,
il one-time pad pu essere pre-calcolato, e
la cifratura consiste in un semplice XOR
inoltre, come in CBC,
la decifratura di un messaggio pu iniziare da un
qualunque blocco
non obbligata ad iniziare dal primo blocco
CRT lideale in applicazioni che richiedono la
cifratura di file/memorie ad accesso casuale
(sottoinsiemi di dati prelevati ed ordine non prevedibili)
CTR Svantaggio
Come in OFB (e in tutti i cifrari a flusso), nella
modalit CTR si ha una perdita di sicurezza se
messaggi diversi sono cifrati con la stessa
coppia K, IV
un avversario potrebbe ottenere la somma (XOR
) dei testi in chiaro se somma (XOR ) due testi
cifrati ottenuti con la stessa coppia K, IV
GENERARE MESSAGE
AUTHENTICATION CODE (MAC)
Modalit Operative dei Cifrari a Blocchi
Generare MAC Introduzione
Un sistema di cifratura a chiave segreta pu
essere usato per generare un MAC cio una
checksum cifrato
MAC sta per Message Authentication Code
un sinonimo di MAC MIC (Message Integrity Code)
il termine MAC pi popolare; nella PEM (Privacy
Enhanced Mail) viene usato il termine MIC

Generare MAC Introduzione
Le modalit operative CBC, CFB, OFB, e CTR
offrono una buona protezione della confidenzialit
un messaggio intercettato difficilmente decifrabile
ma non offrono una buona protezione
dellintegrit/autenticit di un messaggio
cio non proteggono da ascoltatori che lo
modificano in modo non rilevabile

nel seguito useremo i termini integrit e autenticit in
modo intercambiale; se il messaggio integro non
stato modificato dal momento in cui stato generato
il messaggio autentico

Residuo CBC
Un modo standard per assicurare lautenticit di
un messaggio m
(cio per proteggersi da modifiche di m non rilevabili)
calcolare il CBC di m, ma
inviare soltanto lultimo blocco cifrato (64 bit) e il
messaggio m in chiaro
lultimo blocco cifrato detto residuo CBC
Residuo CBC
il calcolo del residuo CBC richiede la conoscenza della
chiave segreta K
se un avversario modifica m in m res
CBC
(m) sar
diverso da res
CBC
(m)
c solo 1 possibilit su 2
64
che siano uguali
lavversario non in grado di calcolare res
CBC
(m) senza
conoscere la chiave segreta K
il destinatario del messaggio
calcola il residuo del messaggio in chiaro ricevuto, e
verifica che sia uguale al residuo ricevuto
se i residui coincidono deduce che (con elevata probabilit) il
residuo ricevuto stato calcolato da qualcuno che conosce
la chiave segreta il mittente autentico
Residuo CBC
In molte applicazioni non necessario proteggere
la confidenzialit, ma solo lautenticit
in questi casi si pu trasmettere il testo in chiaro pi il
residuo
Tuttavia, assai frequente la necessit di
proteggere contemporaneamente confidenzialit
e autenticit
se il messaggio m un singolo blocco, ci pu
ottenersi con una semplice cifratura a chiave segreta
nel caso di un messaggio multi blocco qual la
trasformazione equivalente?
Assicurare confidenzialit e autenticit
Ricapitolando, dato un messaggio m
per assicurare la confidenzialit di m basta cifrarlo in
modalit CBC
per assicurare lautenticit di m basta inviare res
CBC
(m)
pi m in chiaro
a prima vista la soluzione riportata sotto sembrerebbe
assicurare confidenzialit e autenticit

Assicurare confidenzialit e autenticit
In realt tale soluzione chiaramente errata!
consiste nellinviare
il messaggio cifrato nella modalit CBC: E
CBC
(K, IV, m)
ripetendo soltanto lultimo blocco cifrato: res
CBC
(m)
chiunque voglia alterare il messaggio deve solo
modificare uno o pi blocchi cifrati con CBC e
inviare il nuovo messaggio ripetendo due volte lultimo
blocco cifrato
inviare il residuo CBC in aggiunta al messaggio
cifrato con CBC non aumenta la sicurezza
Sorge un dubbio!

possibile assicurare confidenzialit e
autenticit inviando semplicemente il
messaggio cifrato con CBC?

per autenticit (integrit) intendiamo che un
calcolatore in grado di rilevare automaticamente se il
messaggio stato alterato
Via il dubbio!
Usando CBC da solo, non possibile rilevare in
modo automatico eventuali modifiche di un
messaggio
ogni stringa di bit, comunque venga generata, viene
decifrata in qualcosa, e
gli ultimi 64 bit di quella stringa sono il suo residuo
CBC corretto
chiunque intercetta il testo cifrato pu modificarlo, e
un computer a destinazione decifrer il risultato,
che potrebbe essere assolutamente privo di senso,
senza essere consapevole che quanto ottenuto di
fatto spazzatura
Via il dubbio!
un utente umano si renderebbe conto se il testo
cifrato stato alterato
a meno che la modifica non sia stata eseguita da un
avversario in modo pulito
ma un computer non in grado di farlo se non si
aggiunge un controllo di integrit
Un altro tentativo
Unalternativa potrebbe essere:
calcolare il residuo CBC del messaggio res
CBC
(m),
allegarlo al testo in chiaro m, e
cifrare con CBC la concatenazione m|res
CBC
(m)
Domanda: questa soluzione funziona?
Un altro tentativo
Risposta: neanche questa soluzione funziona!
c
7
= res
CBC
(m) = E(K, c
6
c
6
) = E(K, 000 0)
cio il residuo CBC una stringa ottenuta cifrando
con la chiave segreta una stringa di 64 bit a 0
il residuo CBC non dipende da m
non pu offrire alcune protezione di integrit
Ultimo tentativo
Supponiamo di
calcolare un checksum non crittografico CRC(m)
(ad esempio, un CRC) del messaggio m e
di appenderlo alla fine di m, e
di cifrare con CBC il tutto: m| CRC(m)
Domanda: questaltra soluzione funziona?
Ultimo tentativo
Risposta: questa soluzione quasi funziona!
vulnerabile ad attacchi molto sottili se il CRC
corto
daltro canto checksum non crittografici pi lunghi
sono sospetti
Qual la soluzione sicura?
Viene considerata una soluzione sicura
proteggere
la confidenzialit di un messaggio m cifrandolo
con CBC, e
lintegrit di m con un residuo CBC
a patto che vengano usate due chiavi distinte
protezione confidenzialit: E
CBC
(K, IV, m)
protezione integrit: res
CBC
(K, IV, m) con K K
chiaramente ci comporta una notevole perdita di
efficienza
Qual la soluzione sicura?
il costo computazionale duplicato rispetto al
costo della sola cifratura CBC
sono state proposte tecniche pi rapide, ma
generalmente presentano sempre dei sottili difetti
crittografici
se tali difetti siano seri o meno dipende dal tipo di
applicazione e dallintelligenza dellavversario
alcune di queste tecniche sono
CBC con un Checksum Crittografico Debole
Cifratura CBC e Residuo CBC con Chiavi Correlate
CBC con Hash Crittografico
Offset Codebook Mode (OCB)

CBC con un Checksum Crittografico Debole
Visto che
luso di checksum non crittografici in CBC risulta poco
sicuro, e
checksum crittografici di qualit sono
computazionalmente dispendiosi
stato proposto di usare checksum crittografici
deboli
complessivamente dovrebbe essere una soluzione
sicura
lo sforzo computazionale per violare il checksum debole va
moltiplicato per le limitazioni derivanti dal fatto che usato
in una cifratura CBC

CBC con un Checksum Crittografico Debole
Sebbene non ci sono ragioni per sostenere che
tale schema sia insicuro,
CBC con checksum crittografici deboli non ha
riscosso successo

si consideri che Kerberos IV usa un checksum
crittografico debole per la protezione dintegrit fuori
da uno schema di cifratura e sembra che non sia mai
stato violato!
Cifratura CBC e Residuo CBC con Chiavi Correlate
anzich usare due chiavi completamente
indipendenti per la cifratura CBC e per il calcolo
del residuo
un trucco usato in Kerberos V impiegare una
versione modificata della chiave in una delle due
operazioni
cambiare un singolo bit dovrebbe essere sufficiente, ma
Kerberos invece somma (XOR ) la chiave con la
costante a 64 bit F0F0F0F0F0F0F0F0
16
tale soluzione preserva la parit della chiave e
mai trasforma una chiave non-debole in una chiave
debole
Cifratura CBC e Residuo CBC con Chiavi Correlate
il fatto di avere una chiave matematicamente
correlata allaltra
in alternativa alla scelta di due numeri random come chiavi
non introduce particolari debolezze, ma non introduce
neanche particolari vantaggi
in generale, distribuire una coppia di chiavi non pi difficile
di distribuirne solo una, e
il fatto che due chiavi siano matematicamente correlate non
riduce il carico computazionale,
lunico vantaggio nel derivare una chiave dallaltra lo si ha
quando si dispone di un sistema/servizio per la distribuzioni
di chiavi singole che non estendibile al caso di coppie di
chiavi

CBC con Hash Crittografico
Un altro approccio
concatenare un messaggio m con il suo un hash
crittografico h(m), tipicamente 128 bit, e
cifrare con CBC il tutto: m|h(m)
Tale soluzione
probabilmente sicura
sebbene non sia stata adeguatamente studiata, visto che gli
schemi moderni usano hash cifrati con chiavi
richiede due fasi crittografiche (come nel caso della
cifratura CBC pi il residuo CBC con chiavi distinte),
ma pi efficiente se la funzione di hash pi veloce
dellalgoritmo di cifratura
Offset CodeBook Mode (OCB)
OCB uno dei molti modi che permette di
ottenere cifratura e protezione di integrit
effettuando soltanto una singola fase di
cifratura
OCB e altre tecniche simili sono molto recenti per
avere un supporto di studi e test,
spesso sono gravate da license/patenti,
ma sembra molto probabile che una o pi di
queste tecniche diventi alla fine il modo standard
per ottenere protezione di integrit e di
confidenzialit
CIFRATURA MULTIPLA DES
Modalit Operative dei Cifrari a Blocchi
Cifratura multipla EDE o 3DES
In generale, ogni schema di cifratura pu essere reso pi
sicuro ricorrendo alla cifratura multipla.
Nel caso di DES, universalmente ritenuta sicura la
cifratura multipla nota come
EDE: Encrypt-Decrypt-Encrypt (o 3DES, triplo DES)
c = E(K
1
, D(K
2
, E(K
1
, m))) = (E
1
D
2
E
1
)(m)
m = E(K
1
, D(K
2
, E(K
1
, c))) = (E
1
D
2
E
1
)(c)

la cifratura multipla EDE
di fatto un meccanismo per incrementare la lunghezza della chiave
DES
sebbene sia stata introdotta per arrivare ad uno standard sicuro
basato su DES, in linea di principio applicabile anche ad altri schemi
di cifratura, ed esempio ad IDEA
pi importante nel caso di DES; la chiave DES notoriamente
considerata troppo corta


Cifratura multipla EDE o 3DES
Si visto che uno schema di crittografia presenta
sempre due funzioni
note come cifratura e decifratura
Tali funzioni sono luna linversa dellaltra
in pratica, ciascuna
prende in input un blocco di dati m, e
restituisce il corrispondente blocco offuscato c tale che,
applicando a c laltra funzione si ottiene m
ha senso applicare
la funzione di decifratura D(K, m) al testo in chiaro m per
cifrarlo e
poi applicare la funzione di cifratura E(K, D(K, m)) per
decifrare quanto ottenuto riottenendo il testo in chiaro m

Cifratura multipla EDE o 3DES
in definitiva ha poco senso chiamare
E(K, m) funzione di cifratura, e
D(K, m) funzione di decifratura
i ruoli di tali funzioni sono interscambiabili!
conviene chiamarle semplicemente funzione E( ) e
funzione D( )
tuttavia, spesso si continuer a chiamarle funzione di
cifratura e funzione di decifratura!



Cifratura multipla EDE o 3DES
Realizzare una cifratura multipla non banale
specie se si desidera anche ottenere un cifrario a
flusso a partire da un cifrario a blocchi
Il metodo standard per usare EDE il seguente
vengono usate due chiavi (e non tre): K
1
e K
2
ogni blocco di testo in chiaro m
i
sottoposto
prima ad E
1
( ) cio viene eseguito E(K
1
, m)
poi a D
2
( ) cio viene eseguito D(K
2
, E(K
1
, m))
e in fine ancora ad E
1
( ) cio viene eseguito E(K
1
, D(K
2
,
E(K
1
, m)))
Cifratura multipla EDE o 3DES
Quanto ottenuto di fatto un nuovo schema di
cifratura a chiave segreta
un blocco di 64 bit in input mappato in un altro
blocco di 64 bit in output
il processo invertibile se si conoscono le chiavi,
altrimenti di fatto impraticabile risalire dalloutput
allinput
E( ) E( ) D( ) m c
K
1
K
2
K
1
Decifratura EDE
La decifratura EDE semplicemente il
processo inverso
D( ) D( ) E( ) c m
K
1
K
2
K
1
EDE con CBC outside
Per ottenere un cifrario a flusso a partire dal cifrario a
blocchi EDE, viene usata la modalit operativa CBC outside
cio le tre funzioni E
1
( )-D
2
( )-E
1
( ) vengono applicate a ciascun
blocco,
ma il concatenamento CBC viene eseguito soltanto una volta
Alcune domande
Per quale motivo 3DES e il corrispondente cifrario
a flusso sono stati definiti come appena
specificato? Si potevano prendere delle decisioni
diverse:
1. si optato per tre cifrature, ma potevano essere due
o pi; perch proprio tre?
2. perch le tre funzioni sono E( )-D( )-E( ) e non ad
esempio E( )-E( )-E( ) o E( )-E( )-D( )?
3. perch il concatenamento CBC viene fatto
esternamente (outside) e non internamente (inside)?


EDE con CBC inside
Cifrario a flusso ottenibile con un concatenamento CBC
interno
cio si considerano una cascata di due concatenamenti CBC
prima, utilizzando la funzione E
1
( ), poi utilizzando D
2
( ) e in fine
utilizzando ancora E
1
( )
Quante cifrature?
Ovviamente, pi volte un blocco cifrato pi
elevata la sua sicurezza
ma ogni cifratura computazionalmente costosa
fondamentale che una schema di cifratura sia
efficiente oltre che efficace
lobiettivo garantire un livello di sicurezza elevato con il
minimo sforzo computazionale
proviamo a valutare il rapporto sicurezza / costo
computazionale nei seguenti casi
cifratura doppia con la stessa chiave
cifratura doppia con due chiavi diverse
cifratura tripla con due chiavi diverse
cifrare tripla con tre chiavi diverse

Cifratura doppia con una stessa chiave
Supponiamo di non volere il disagio di leggere in
due chiavi
DOMANDA: Cifrare due volte consecutive con la
stessa chiave aumenta la sicurezza?
E( ) E( ) plaintext ciphertext
K

K

Cifratura doppia con una stessa chiave
RISPOSTA
cifrare due volte con la stessa chiave K risulta non
essere molto pi sicuro di eseguire una singola
cifratura con K
una ricerca esaustiva nello spazio della chiave richiede
ancora, nel caso peggiore, 2
56
tentativi
ogni tentativo ha un costo computazionale duplicato
lavversario deve eseguire una decifratura doppia
tuttavia, raddoppiare lo sforzo computazionale non considerato
in generale un aumento significativo della sicurezza
soprattutto tenendo conto che anche lefficienza risulta essere
dimezzata
Cifratura doppia con una stessa chiave
DOMANDA: e riguardo agli schemi riportati sotto?
si tratta sempre di una cifratura doppia con la stessa chiave
E( ) D( ) plaintext ciphertext
K

K

D( ) E( ) plaintext ciphertext
K

K

D( ) D( ) plaintext ciphertext
K

K

Cifratura doppia con due chiavi
Se cifrare due volte consecutive, con due chiavi diverse
K
1
e K
2
, avesse leffetto di raddoppiare la chiave (da 56
a 112 bit)
allora la cifratura doppia sarebbe sufficiente, ma
non cos!
Supponiamo di eseguire una cifratura doppia, con due
chiavi K
1
e K
2
, su un singolo blocco da 64 bit
trascuriamo ogni schema di concatenamento e
concentriamoci sui cifrari a blocchi
E( ) E( ) plaintext ciphertext
K
1
K
2
Cifratura doppia con due chiavi
in apparenza, sembra che luso di due chiavi diverse
equivalga a raddoppiare la lunghezza della chiave
un attacco brute force deve indovinare sia K
1
che K
2
per
ottenere il testo in chiaro da quello cifrato
tuttavia, esiste un attacco pi sofisticato che richiede
approssimativamente soltanto un raddoppio del costo
computazionale necessario a violare DES (singolo)
si tratta di un attacco difficilmente praticabile, ma il fatto che
esista spinge a ricercare schemi di cifratura pi sicuri
di fatto la cifratura DES con due chiavi non considerata
sicura
Attacco a DES doppio
1. Si assuma che un avversario disponga di qualche
coppia plaintext, ciphertext
m
1
, c
1
, m
2
, c
2
, m
3
, c
3
dove c
i
= E(K
2
, E(K
1
, m
i
))
ottenuto eseguendo una cifratura doppia di m
i
con K
1
e K
2
si desidera trovare le chiavi K
1
e K
2
2. Costruire prima una tabella A con 2
56
entry
ogni entry una coppia K
i
, r = E(K
i
, m
1
)
ordinare la tabella in base al valore numerico di r
3. Costruire poi una seconda tabella B con 2
56
entry
ogni entry una coppia K
i
, r = D(K
i
, c
1
)
ordinare la tabella in base al valore numerico di r

Attacco a DES doppio
4. Ricercare nelle due tabelle (ordinate) le entry
corrispondenti, cio con lo stesso valore di r
ad es. K
A
, r della tabella A e K
B
, r della tabella B
ogni corrispondenza fornisce K
A
come candidato di K
1
e K
B

come candidato di K
2
poich r = E(K
A
, m
1
) e r = D(K
B
, c
1
) c
1
= E(K
B
, E(K
A
, m
1
))
5. In generale, si otterranno pi di una coppia
candidata
per ogni coppia candidata va eseguito il test rispetto
m
2
, c
2
, se ci sono ancora pi coppie candidate va eseguito
il test rispetto m
3
, c
3
e cos via

la coppia corretta quella che passa tutti i test, mentre
quelle errate dovranno fallire qualche test
Attacco a DES doppio
Lattacco a DES doppio appena descritto
difficilmente praticabile
dover costruire una tabella di 2
56
entry sicuramente
scoraggiante
Tuttavia, lesistenza di un attacco una ragione
sufficiente per decidere di usare DES triplo
DES doppio potrebbe essere sufficiente,
ma DES triplo pi sicuro e non molto pi
complesso da realizzare si usa DES triplo
Attacco a DES doppio Stima dei tentativi
Quante coppie candidate ci saranno mediamente
dopo la prima ricerca nelle due tabelle?
#cc
1
: numero di coppie candidate ottenute dopo la
prima ricerca
2
64
possibili blocchi da 64 bit
2
56
entry in ciascuna tabella
P
bt
: probabilit che un blocco sia in una tabella
P
bt
= 2
56
/ 2
64
= 1 / 2
8

P
c
: probabilit che un blocco sia entrambe le tabelle (e
che quindi identifichi una coppia candidata)
P
c
= 1/(2
8
2
8
)= 1 / 2
16
#cc
1
P
c
numero blocchi = 2
64
/ 2
16
= 2
48



Attacco a DES doppio Stima dei tentativi
ci sono circa 2
48
coppie candidate errate
P
c2
:

probabilit che una coppia candidata soddisfi
anche il secondo test
P
c2
1/2
64
P
e2
: probabilit di trovare un coppia candidata errata
dopo il secondo test
P
e2
2
48
/2
64
pertanto, P
e3
2
48
/2
128
= 1 / 2
80
la probabilit di trovare un falso positivo dopo tre test
di fatto nulla
dopo tre test si ottiene ununica coppia candidata che
quella corretta


Cifratura tripla con solo due chiavi
3DES effettua una cifratura tripla
Perch 3DES usa solo due chiavi?
molto probabilmente non si ha una maggiore sicurezza
rispetto a DES doppio
K
1
usata due volte
ormai opinione comune che usare K
1
due volte
sufficientemente sicuro
non necessario generare, trasmettere e memorizzare una terza
chiave
112 bit di chiave mettono al riparo da attacchi di tipo brute force,
e nessun attacco diverso da quello a forza bruta noto per EDE
alcuni sistemi implementano 3DES con tre chiavi
indipendenti, ma questo non lo standard
Cifratura tripla con solo due chiavi
Una ragione esoterica per luso di due sole
chiavi la seguente
in molte applicazioni (es. UNIX Password Hash) una
propriet importante di un sistema crittografico che
data una coppia plaintext, ciphertext
deve essere impraticabile trovare qualche chiave che mappa
il testo in chiaro in quello cifrato
(con blocchi di 64 bit e chiavi di 112 bit ci saranno molte di
queste chiavi)
usando EDE con tre chiavi diverse, semplice trovare una
tripla di chiavi che mappa un dato testo in chiaro in un dato
testo cifrato
per, nel caso in cui K
1
= K
3
il problema diventa impraticabile
(provarlo)
Cifratura tripla con solo due chiavi
Perch la chiave K
2
usata in modalit di
decifratura, cio nella funzione di decifratura
D( ) di EDE?
tale scelta non serve ad aumentare il livello di
sicurezza; si poteva usare K
2
in modalit di
cifratura ottenendo uno schema di tipo EEE
una possibile ragione che se K
1
= K
2
EDE
equivale ad un semplice DES
quindi possibile interoperare con un sistema DES
semplice

CBC Outside vs Inside
Il 3DES comunemente usato nelle applicazioni
esegue un concatenamento CBC esterno
ad ogni blocco viene applicata la cifratura tripla,
e il concatenamento CBC viene fatto una sola volta
sui blocchi cifrati
lalternativa sarebbe
cifrare completamente il messaggio con K
1
e CBC,
poi decifrare il risultato con K
2
e CBC,
e in fine cifrare di nuovo quanto ottenuto con K
1
Quali sono le implicazioni di queste scelte?

CBC Outside vs Inside
Si visto che con CBC possibile
fare una modifica predittiva sul testo in chiaro m
n
ad esempio invertire il bit x
invertendo il bit x nel blocco cifrato c
n-1
ci comporta per leffetto collaterale di modificare
in modo imprevedibile il blocco m
n-1
la possibilit di sfruttare questa debolezza dipende dal tipo
di applicazione
Con CBC esterno, un avversario pu ancora
sferrare questo tipo di attacco
il fatto che la cifratura fatta con un triplo DES del
tutto ininfluente
CBC Outside vs Inside
un avversario che inverte il bit x di un blocco
cifrato c
n-1
modificher completamente e in modo
imprevedibile il blocco di testo in chiaro m
n-1
il blocco di testo in chiaro m
n
avr il bit x invertito
e tutti i blocchi di testo in chiaro diversi da m
n-1
e
m
n
saranno invariati

CBC Outside vs Inside
Con CBC interno
una modifica ad un blocco cifrato c
n
altera in
modo imprevedibile tutti i blocchi di testo in
chiaro dal blocco m
n
fino alla fine del messaggio
CBC interno pi sicuro di CBC esterno, e forse
dovrebbe essere la scelta migliore
tuttavia, in alcuni casi preferibile che la modifica
di un blocco cifrato non si propaghi
completamente nel resto del messaggio
CBC Outside vs Inside
sarebbe preferibile che lo schema di cifratura sia auto-
sincronizzante
dopo un piccolo numero di blocchi corrotti, il testo in chiaro
inizier ad essere nuovamente decifrato correttamente
CBC interno presenta delle sottili vulnerabilit se un
avversario pu esaminare loutput e fornire del testo
in chiaro scelto e IV
un altro vantaggio di CBC interno riguarda lefficienza
triplicando luso di hardware e pipeline per le cifrature si pu
ottenere complessivamente una velocit pari a quella di una
singola cifratura
con CBC esterno ci non possibile
CBC Outside vs Inside
Una ragione per la quale CBC esterno pi
usato nonostante i suoi svantaggi che
la cifratura EDE pu considerarsi a tutti gli effetti
un nuovo schema di cifratura (a chiave segreta) a
blocchi che usa una chiave di 112 bit
pu essere utilizzata con ciascun metodo di
concatenamento (OFB, ECB, CFB, CTR e CBC)
Bibliografia
[DES81] DES Modes of Operation, FIPS PUB 81, National
Bureau of Standards, U.S. Department of Commerce, 1981.
[KPS02] C. Kaufman, R. Perlman, M. Speciner. Network
Security Private Communication in a Public World.
Prentice Hall.
[PFL08] C. P. Pfleeger, S. L. Pfleeger. Sicurezza in
Informatica. Pearson, Prentice Hall.
[STA07] W. Stallings. Sicurezza delle reti. Pearson, Prentice
Hall.
[Wiki-it] http://it.wikipedia.org/wiki/
[Wiki-en] http://en.wikipedia.org/wiki/
[ISECOM] Institute for Security and Open Methodologies
Funzioni Crittografiche di Hash

Luca Grilli
INTRODUZIONE
Funzioni Crittografiche di Hash
Funzioni di Hash
Una funzione di hash (o semplicemente hash o
message digest) una funzione unidirezionale (o
one-way)
una funzione perch prende in input un messaggio e
produce un output che dipende dal messaggio
h: {0, 1}* {0, 1}
b
{0, 1}*: spazio delle stringhe binarie di lunghezza qualsiasi
{0, 1}
b
: spazio delle stringhe binarie di lunghezza b bit

considerata unidirezionale (one-way) perch
impraticabile capire quale input corrisponda ad un
dato output
Funzioni di Hash sicure
sia h() una funzione di hash
h() considerata sicura se presenta le seguenti
propriet
1. resistenza alla preimmagine: fissato un hash
computazionalmente impraticabile trovare un messaggio
m tale che h(m) =
2. resistenza alle collisioni: computazionalmente
impraticabile trovare due messaggi m
1
e m
2
aventi lo
stesso digest h(m
1
) = h(m
2
)
le propriet 1. e 2. implicano la seguente
3. resistenza alla seconda preimmagine: dato un messaggio
m, computazionalmente impraticabile trovare un
messaggio m avente lo stesso digest h(m) = h(m)

Terminologia
Si useranno i termini hash e message digest in modo
intercambiabile
la funzione di hash del NIST chiamata SHA-1: Secure
Hash Algorithm
mentre lacronimo MD degli algoritmi MD2, MD4 e MD5
sta per Message Digest

Tutti gli algoritmi di digest/hash basicalmente fanno la
stessa cosa
prendono in input un messaggio di lunghezza variabile, e
restituiscono in output una quantit avente lunghezza
prefissata
Sulla casualit (randomicit)
Dato un messaggio m, il digest h(m) viene calcolato in
modo deterministico

Tuttavia, loutput della funzione di hash dovrebbe
apparire il pi possibile casuale
dovrebbe essere impossibile, senza applicare la funzione di
hash, predire ogni porzione delloutput
per ogni sottoinsieme (di posizioni) di bit nel digest h(m)
soltanto procedendo in modo esaustivo dovrebbe essere
possibile ottenere due messaggi m
1
e m
2
tali che h(m
1
) e
h(m
2
) presentno gli stessi bit in quelle posizioni
Sulla casualit (randomicit)
una funzione di hash sicura con n bit dovrebbe
essere derivabile da una funzione di hash con pi di n
bit
prendendo un arbitrario sottoinsieme di n bit dal digest pi
grande
chiaramente, ci sono molti messaggi distinti che sono
mappati in uno stesso digest h(m)
m ha lunghezza arbitraria, mentre il digest h(m) ha una
lunghezza prefissata, ad esempio 128 bit
se m ha una lunghezza di 1000 bit e h(m) di 128 bit
ci sono in media 2
872
messaggi che sono mappati in uno
stesso digest
dopo molti tentativi, due messaggi aventi lo stesso digest
si trovano sicuramente
Sulla casualit (randomicit)
tuttavia, per molti tentativi si intende un numero
talmente grande che di fatto impossibile
considerando una buona funzione di digest a 128 bit,
necessario provare approssimativamente
2
128
possibili messaggi prima di ottenere un messaggio
avente un particolare digest, o
2
64
messaggi prima di trovarne due aventi lo stesso
digest (vedi prossime slide); trovare cio due messaggi
che collidono
Esempi di applicazioni
Unapplicazione delle funzioni di hash
crittografiche il calcolo dellimpronta digitale di
un programma o di un documento di cui si
desiderano monitorare eventuali modifiche
se il message digest h(p) del programma p noto
e se h(p) memorizzato in modo sicuro (cio non pu essere
modificato da utenti non autorizzati)
allora nessun utente non autorizzato pu modificare p
senza essere scoperto
perch non sar in grado di trovare un diverso
programma p tale che h(p) = h(p)
Probabilit di collisione
sia h:{0, 1}* {0, 1}
b
una funzione di hash
siano m
1
, m
2
, , m
N
N messaggi arbitrariamente
scelti in {0, 1}*

DOMANDA: quanto deve valere N per avere una
probabilit del 50% che due messaggi m
i
, m
j

abbiano lo stesso hash?
Probabilit di collisione 1
a
Stima
una prima stima di N, per difetto, la seguente
k = 2
b
: numero totale di possibili hash
1/k: probabilit che una coppia di messaggi collida

HP: gli eventi considerati sono mutuamente esclusivi
Prob{h(m
i
) = h(m
j
) OR h(m
p
) = h(m
q
)} =
Prob{h(m
i
) = h(m
j
)} + Prob{h(m
p
) = h(m
q
)}
a rigore tale ipotesi non soddisfatta, molti eventi hanno
intersezione non nulla la stima ottenuta della probabilit
per eccesso ci si traduce in una stima per difetto di N
(Prob{E
1
OR E
2
} = Prob{E
1
} + Prob{E
2
} Prob{E
1
E
2
})


Probabilit di collisione 1
a
Stima
si ha una probabilit del 50% se si considerano k/2
coppie

N(N 1)/2 = k/2

ipotizzando N >> 1 si ha
N = k
1/2
= 2
b/2
Probabilit di collisione 2
a
Stima
una stima pi accurata di N la seguente
P: probabilit che almeno una coppia di messaggi
collida
P
*
: probabilit che tutte le coppie di messaggi abbiano
digest diversi, quindi P = 1 - P
*


HP: gli eventi considerati sono indipendenti
Prob{h(m
i
) h(m
j
) AND h(m
p
) h(m
q
)} =
Prob{h(m
i
) h(m
j
)} Prob{h(m
p
) h(m
q
)}
a rigore tale ipotesi non soddisfatta, gli eventi non sono del
tutto indipendenti la stima ottenuta della probabilit P
per difetto ci si traduce in una stima per eccesso di N
(Prob{E
1
AND E
2
} = Prob{E
1
} Prob{E
2
|E
1
})
Probabilit di collisione 2
a
Stima
nellHP di eventi indipendenti si ha

P = 1 P
*
= 1 (1 1/k)
N(N 1)/2
ipotizzando k >> 1 risulta
P ~ 1 e
N(N 1)/2k


ponendo pertanto P 1/2 si ottiene
e
N(N 1)/2k
1/2 = e
ln2

Probabilit di collisione 2
a
Stima
da cui si ottiene
N(N 1)/2 (ln2)k

ipotizzando N >> 1 si ha
N (2ln2)
1/2
k
1/2
= (2ln2)
1/2
2
b/2

Probabilit di collisione 3
a
Stima
il valore esatto di N si pu ottenere facendo ricorso al paradosso del
compleanno
P: probabilit che almeno una coppia di messaggi collida
P
*
: probabilit che tutte le coppie di messaggi abbiano digest
diversi, quindi P = 1 - P
*
k = 2
b
: numero totale di possibili hash

si considerino inoltre le seguenti probabilit
P
2*
: probabilit che h(m
2
) sia diverso da h(m
1
)
P
3*
: probabilit che h(m
3
) sia diverso da h(m
2
) e da h(m
1
)

P
i*
: probabilit che h(m
i
) sia diverso da h(m
j
) 1 j i 1

P
N*
: probabilit che h(m
N
) sia diverso da h(m
j
) 1 j N 1

Probabilit di collisione 3
a
Stima
risulta che
P
*
= P
2*
P
3*
P
i*
P
N*
=
= (k 1)/k (k 2)/k (k N + 1)/k =
= k!/(k
N
(k N)!)



|
|
.
|

\
|
=

=
N
k
k
N
N k k
k
P
N N
!
)! (
!
*
stima esatta di P
*
Probabilit di collisione 3
a
Stima
si osservi che il precedente valore di P
*
pu
approssimarsi come
P
*
~ e
N(N 1)/2k
si ottiene pertanto quanto ottenuto nella 2
a
stima

P ~ 1 e
N(N 1)/2k





Il problema del compleanno
Considerando un gruppo di N persone, qual la
probabilit che ci siano due persone con lo stesso
compleanno (stesso mese e giorno di nascita)?

basta utilizzare la relazione precedente ove
N: numero delle persone nel gruppo
K = 365: numero di giorni in un anno


|
|
.
|

\
|
=
N
k
k
N
P
N
!
1
Il problema del compleanno
al variare di N si ottengono le seguenti probabilit
N P
2 0.0027
3 0.0082
4 0.0163
21 0.4437
22 0.4757
23 0.5073
40 0.8912
41 0.9031
Lunghezza di un message digest


DOMANDA
Quanti bit deve avere loutput di una funzione di
hash in modo tale che nessuno sia in grado di
trovare due messaggi aventi lo stesso digest?

Lunghezza di un message digest
Se il digest ha b bit, per trovare due messaggi
aventi lo stesso digest, necessario
considerare circa 2
b/2
messaggi
64 bit digest ricerca esaustiva in uno spazio di
circa 2
32
elementi pu essere fattibile
per tale motivo, loutput di una funzione di hash
di almeno 128 bit
si ritiene che una ricerca in uno spazio di 2
64
elementi
sia impraticabile dato lattuale stato dellarte
Importanza resist. alle collisioni
Per quale ragione importante che una funzione
crittografica di hash sia resistente alle collisioni?
che debba essere resistente alla preimmagine
scontato,
ma la resistenza alle collisioni veramente
necessaria?

Risposta
in alcune circostanze riuscire a trovare due messaggi
con lo stesso digest pu comportare dei seri problemi
di sicurezza

Resistenza Collisioni Esempio
Alice genera uninformazione x
A
e
incarica Bob di calcolare un messaggio m
A

il cui contenuto deve dipendere da x
A
secondo dei criteri
prestabiliti

Bob elabora x
A
, ottiene m
A
e lo sottopone ad Alice
Alice verifica la correttezza di m
A
, calcola limpronta h(m
A
),
la firma con la sua chiave privata e invia a Trudy il
messaggio in chiaro m
A
e la sua firma (cio la firma della
sua impronta)
Trudy legge il messaggio m
A
e sia accerta che proviene da
Alice verificando la firma
usando la chiave pubblica di Alice verifica la firma, cio decifra con
la chiave pubblica la firma e
verifica che quanto ottenuto coincida con h(m
A
)

Resistenza Collisioni Esempio
Alice Bob Trudy
info x
A
m
A
= f(x
A
)
legge m
A

impronta h(m
A
)
firma h(m
A
)
s
A
= E(PR
A
, h(m
A
)) m
A
, s
A
impronta h(m
A
)
verifica firma
D(PU
A
, s
A
) =?= h(m
A
)
m
A

Resistenza Collisioni Scenario
Se la funzione di hash non resistente alle
collisioni, Bob potrebbe realizzare questo attacco:
calcola due messaggi m
A
e m
A
aventi lo stesso hash,
tali che
m
A
il messaggio che si aspetta Alice
m
A
il messaggio con contenuto falsato deciso da Bob
sottopone ad Alice m
A
,
ma quando viene inviato a Trudy lo intercetta e lo
sostituisce con m
A
Trudy verifica la firma e non pu rendersi conto
dellinganno

Resistenza Collisioni Esempio
Alice Bob Trudy
info x
A
calcola m
A
e m
A
tali che
h(m
A
) = h(m
A
)
m
A

legge m
A

impronta h(m
A
)
firma h(m
A
)
s
A
= E(PR
A
, h(m
A
))
m
A
, s
A
sostituisce m
A
con m
A

m
A
, s
A
impronta h(m
A
)
verifica firma
D(PU
A
, s
A
) =?= h(m
A
)
la verifica della firma da esito
positivo poich h(m
A
) = h(m
A
)
1
a
strategia di attacco (inefficiente)
per calcolare due messaggi con lo stesso hash,
Bob pu seguire il seguente approccio a forza
bruta:
1. dato x
A
, calcola prima il messaggio m
A
come
desidarato da Alice;
2. genera un messaggio falsato m
A

3. esegue il test h(m
A
) =?= h(m
A
)
4. in caso negativo ritorna al punto 2.

ma in questo modo sono necessari circa 2
b

tentativi e non 2
b/2

2
a
strategia di attacco (efficiente)
supponiamo invece che Bob sia in grado di
generare molte coppie (m
A
, m
A
) tali che:
m
A
: un messaggio che Alice approva
m
A
: un messaggio falsato secondo le intenzioni di Bob
cio Bob applica il seguente approccio a forza
bruta:
1. dato x
A
, genera una coppia (m
A
, m
A
)
2. esegue il test h(m
A
) =?= h(m
A
)
3. in caso negativo ritorna al punto 1.

per individuare una coppia di messaggi collidenti
sono necessari 2
b/2
tentativi

Generare coppie (m
A
, m
A
)

DOMANDA: Come pu Bob generare 2
b/2

coppie (m
A
, m
A
) tali che
m
A
possa essere letta e approvata da Alice, e
m
B
possa essere letta da Trudy e non destare
sospetti?
Generare coppie (m
A
, m
A
)
SOLUZIONE: basta creare due lettere, una per
Alice e una per Trudy, in cui
molte parole (sostantivi, verbi) non sono fissate,
ma possono essere scelte da un insieme di 2 o pi
elementi
senza alterare il significato della lettera e senza
introdurre errori grammaticali
con un banale programma semplice generare
tutte le possibili varianti delle due lettere
Esempio
Si supponga che
x
A
sia un messaggio che Alice invia a Bob in cui gli
chiede di redigere una lettera per richiedere il
licenziamento di Fred; la lettera dovr poi essere
inviata a Trudy (capo del personale)
Bob, amico di Fred, vuole invece inviare a Trudy
una lettera in cui si richiede una promozione di
Fred!
Schema per generare m
A
I am writing {this memo| } to {demand | request |
inform you} that {Fred | Mr. Fred Jones} {must | } be
{fired | terminated} {at once | immediately}. As the {July
11 | 11 July} {memo | memorandum} {from | issued by}
{personnel | human resources} states, to meet {our | the
corporate} {quarterly | third quarter} budget {targets |
goals}, {we must eliminate all discretionary spending | all
discretionary spending must be eliminated}.
{Despite | Ignoring} that {memo | memorandum |
order}, Fred {ordered | purchased} {PostIts | nonessential
supplies} in a flagrant disregard for the company's
{budgetary crisis | current financial difficulties}.

Schema per generare m
A
I am writing {this letter | this memo | this
memorandum | } to {officially | } commend Fred {Jones
| } for his {courage and independent thinking |
independent thinking and courage}. {He | Fred} {clearly
| } understands {the need | how} to get {the | his} job
{done | accomplished} {at all costs | by whatever
means necessary}, and {knows | can see} when to
ignore bureaucratic {nonsense | impediments}. I {am
hereby recommending | hereby recommend} {him |
Fred} for {promotion | immediate advancement} and
{further | } recommend a {hefty | large} {salary |
compensation} increase.
Due lettere (m
A
, m
A
)
I am writing to demand that Mr. Fred Jones must be
terminated at once. As the July 11 memorandum from
human resources states, to meet the corporate quarterly
budget targets, all discretionary spending must be
eliminated.
Despite that order, Fred ordered nonessential supplies
in a flagrant disregard for the company's budgetary crisis.

I am writing this memorandum to officially commend Fred
Jones for his independent thinking and courage. He
understands the need to get his job done by whatever
means necessary, and knows when to ignore bureaucratic
nonsense. I hereby recommend him for promotion and
further recommend a hefty compensation increase.
IMPIEGHI
Funzioni Crittografiche di Hash
Impieghi degli Algortmi di Hash
Disponendo di un segreto condiviso

un algoritmo di hash pu sostituire un
algoritmo crittografico a chiave segreta in
tutte le sue applicazioni
Autenticazione a Chiave Segreta
Calcolo di MAC
Cifratura (e Decifratura)
Autenticazione a Chiave Segreta*
HP: K
AB
segreto condiviso tra Alice e Bob
Alice Bob
r
A
r
A
cifrato con K
AB
r
B
r
B
cifrato con K
AB
* N.B.: lo schema illustrato presenta delle debolezze
che possono essere rimosse con opportuni accorgimenti
Autenticazione con Message Digest*
HP: K
AB
segreto condiviso tra Alice e Bob
MD: generico algoritmo di digest
Alice Bob
r
A
MD(K
AB
|r
A
)

r
B
* N.B.: lo schema illustrato presenta delle debolezze
che possono essere rimosse con opportuni accorgimenti
MD(K
AB
|r
B
)

Generare un MAC usando (solo) Hash
Ovviamente necessario disporre di un
segreto condiviso K
AB
MD(m) calcolabile da tutti coloro che conoscono
m e lalgoritmo di digest MD
la soluzione pi immediata considerare
MD(K
AB
|m) quale MAC di m
tale soluzione teoricamente corretta
presenta una debolezza derivante da una comune
vulnerabilit dei principali algoritmi di digest quali
MD4, MD5, SHA-1
Sulla vulnerabilit di MD4, MD5, SHA-1
MD4, MD5 e SHA-1 seguono il seguente schema generale
dallinput m si ottiene un messaggio m
p
avente
lunghezza pari ad un multiplo intero di 512 bit
mediante un opportuno padding che include, tra laltro, la
lunghezza originaria di m
m
p
viene decomposto in chunk (pezzi) da 512 bit
il digest viene ottenuto mediante una procedura iterativa
il digest alln-esima iterazione dipende esclusivamente
dalln-esimo chunk e
dal digest ottenuto all(n 1)-esima iterazione
il digest risultante di m il digest ottenuto allultima
iterazione
Sulla vulnerabilit di MD4, MD5, SHA-1
si assuma che un attaccante, Trudy, intercetti la
coppia (m, MD(K
AB
|m)) inviata da Alice a Bob

Trudy, senza conoscere il segreto K
AB
, pu
calcolare il MAC MD(K
AB
|m*)
ove m* un qualsiasi messaggio ottenuto
concatenando m
p
con una qualsiasi stringa
binaria, cio
m* = m
p
|s per ogni se{0, 1}*
ovviamente Trudy deve conoscere lalgoritmo MD
Sulla vulnerabilit di MD4, MD5, SHA-1

DOMANDA: Come si pu procedere per evitare
tale debolezza?

Diverse soluzioni, prive di punti deboli, sono state
proposte
HMAC quella che ha riscosso maggior successo
nelle prossime slide si esamineranno tali soluzioni,
ordinate dalla pi semplice a quella pi complessa e
che offre maggiori garanzie
1
a
Soluzione Mettere K
AB
in coda
Una semplice soluzione consiste nel posizionare il
segreto K
AB
alla fine del messaggio m e non il viceversa
cio il MAC dato da MD(m|K
AB
)
e non da MD(K
AB
|m)

Tale soluzione considerata sicura
a patto che lalgoritmo di digest MD sia molto resistente
alle collisioni,
cio se fossero noti due messaggi m
1
e m
2
aventi lo stesso
digest MD(m
1
) = MD(m
2
)

per la vulnerabilit vista prima risulterebbe
MD(m
1
|K) = MD(m
2
|K) K
2
a
Soluzione Usare met bit di MD
Unaltra soluzione definire il MAC come un
opportuno sottoinsieme del digest MD
nel caso di digest a 128 bit
il MAC di m pu ottenersi considerando i 64 bit meno
significativi di MD(K
AB
|m)
un attaccante non pu considerare il MAC come il digest
ottenuto alliterazione corrispondente al chunk che
completa m
p
quindi non pu calcolare il MAC di un qualunque messaggio
m* del tipo m* = m
p
|s senza conoscere K
AB
precisamente lattaccante procedendo per tentativi ha 1
chance su 2
64
di ottenere laltra met di MD(K
AB
|m)

2
a
Soluzione Usare met bit di MD
si osservi inoltre che considerare solo 64 bit
anzich i 128 del digest non comporta in pratica
una perdita di sicurezza
se lattaccante non conosce K
AB
lunica cosa che
pu fare generare un MAC random a 64 bit e
sperare che sia quello corretto!
3
a
Soluzione K
AB
in testa e in coda
Altra possibilit porre il segreto K
AB
sia in
testa che in coda al messaggio m
cio il MAC dato da MD(K
AB
|m|K
AB
)
K
AB
in testa conferisce la resistenza alle collisioni
anche nel caso in cui fossero noti, per lalgoritmo di
digest MDdue messaggi con lo stesso digest
K
AB
in coda rende innocua la vulnerabilit, degli
algoritmi MD, esaminata in precedenza


4
a
Soluzione HMAC
HMAC (keyed-Hash Message Authentication
Code) segue approssimativamente questo
schema generale
nel seguito sar illustrato in dettaglio
concatena il segreto K
AB
in testa al messaggio
calcola il digest di tale combinazione
concatena il segreto K
AB
in testa a tale digest
calcola nuovamente il digest di questultima
combinazione
HMAC applica due volte lalgoritmo di digest

Efficienza di HMAC
HMAC meno efficiente delle precedenti
soluzioni
deve effettuare due volte il calcolo del digest
Tuttavia, il secondo digest pu essere calcolato
rapidamente
linput ha lunghezza contenuta: un segreto
concatenato ad un digest
Cifratura/Decifratura tramite MD

DOMANDA
Come possibile ottenere un algoritmo di
cifratura/decifratura utilizzando un algoritmo di
digest?
un digest ha lunghezza fissa e non invertibile!
la decifratura deve essere linverso della cifratura!

Cifratura/Decifratura tramite MD

RISPOSTA
Si pu realizzare un cifrario a flusso, utilizzando un
algoritmo MD per generare un keystream (flusso
di bit pseudorandom dipendente dalla chiave)
In altri termini, si pu procedere in modo simile a
quanto visto per la modalit operativa OFB
(Output Feedback Mode)
Generazione del flusso OTP
Il one-time pad (keystream) dato dalla sequenza
OTP = OTP(K, IV) = b
0
|b
1
|b
2
| |b
i
|b
i+1
|
dove
b
0
= MD(K, IV)
b
1
= MD(K, b
0
)

b
i
= MD(K, b
i-1
)
K IV
OTP gen
OTP = b
0
|b
1
|b
2
|
m c = OTP m
Generaz. del flusso OTP Osservazioni
Valgono tutte le osservazioni viste per OFB
OTP generabile in anticipo rispetto
non richiesta la conoscenza del messaggio
se un avversario in grado di indovinare il testo in
chiaro (o una sua parte) potrebbe
sommarlo ( XOR) al testo cifrato e
aggiungere ( XOR) un qualsiasi messaggio ingannando il
destinatario
tale attacco allintegrit pu essere rilevato
applicando un controllo di integrit sicuro (MAC),
tuttavia pu anche essere evitato utilizzando una soluzione
simile alla modalit operativa CFB (Cipher Feedback Mode)
OTP dipendente dal messaggio
m = m
0
m
1
m
i
m
i+1
blocchi di testo in chiaro
c = c
0
c
1
c
i
c
i+1
blocchi di testo cifrato

il one-time pad (keystream) dato dalla sequenza
OTP = OTP(K, IV) = b
0
|b
1
|b
2
| |b
i
|b
i+1
|
dove
Testo in chiaro One-Time-Pad Testo cifrato
m
0
b
0
= MD(K, IV)
c
0
= m
0
b
0
m
1
b
1
= MD(K, c
0
)
c
1
= m
1
b
1




m
i
b
i
= MD(K, c
i-1
)
c
i
= m
i
b
i
Hash mediante cifratura

Si visto che, in linea di principio, un algoritmo di
digest pu sostituire un algoritmo di
cifratura/decifratura a chiave segreta in tutte le
sua applicazioni

Naturalmente, vale anche il viceversa, cio
disponendo di un algoritmo di cifratura a chiave
segreta possibile ottenere un algoritmo di digest
Esempio UNIX Password Hash
UNIX usa un algoritmo di cifratura a chiave segreta per
calcolare lhash di una password dutente
non memorizza le password in chiaro!
in fase di autenticazione, riapplica tale algoritmo alla
password inserita e verifica la corrispondenza con quella
memorizzata

Fase 1 pwd K
pwd

a partire dalla password pwd viene calcolata una
chiave segreta K
pwd

Fase 2
modified
DES
0
64-bit
K
pwd
c = E(K
pwd
, 0
64-bit
)

UNIX Password Hash Fase 1
K
pwd
si ottiene da pwd
considerando i primi 8 caratteri di pwd
i caratteri rimanenti sono ignorati
la stringa di 56 bit ottenuta viene espansa a 64 bit
inserendo i bit di parit per ogni gruppo di 7 bit
la codifica dei caratteri ASCII a 7 bit



UNIX Password Hash Fase 2
sia s il salt, numero di 12 bit generato in modo
random, associato allutente in esame la cui password
pwd
h(pwd) si ottiene come segue
si considera una versione modificata di DES che
dipende dal valore del salt s
il valore di s determina quali bit devono essere replicati nella
fase di espansione di R da 32 a 48 bit
lalgoritmo DES modificato usato, con la chiave
segreta K
pwd
, per cifrare la costante 0 (a 64 bit)
UNIX memorizza per ciascun utente la stringa s|h(pwd) nel
file passwd


UNIX Password Hash Algoritmo
Ogni volta che una password pwd dutente
viene impostata
un numero random di 12 bit, il salt, viene
generato
pwd viene convertita in una chiave segreta K
pwd
a
64 bit

lalgoritmo DES modificato, in base al valore di s,
viene usato con la chiave K
pwd
per cifrare la
costante 0 (a 64 bit)
il risultato e il salt vengono memorizzati nel file
passwd
Hash di grandi messaggi
UNIX password hash un metodo per
calcolare lhash di messaggi corti (56 bit)

Come possibile calcolare lhash di un
messaggio di lunghezza arbitraria utilizzando
un algoritmo di cifratura a chiave segreta?
Hash di grandi messaggi Idea base
m = m
1
m
2
m
3

m
i
usato come chiave segreta
nelli-esimo blocco di cifratura
linput della cascata una
costante nota
lhash h(m) loutput della
cascata

encrypt
encrypt
constant
key
key
m
1
m
2
h(m)

Hash di grandi messaggi Idea base
PROBLEMI
1. Se si desidera individuare un
messaggio m avente un dato
digest possibile applicare un
attacco simile a quello visto per
DES doppio con chiavi distinte
2. h(m) pu risultare troppo corto
in genere la lunghezza di un blocco
di 64 bit 2
32
tentativi sono
sufficienti per trovare due messaggi
collidenti

encrypt
encrypt
constant
key
key
m
1
m
2
h(m)

Algoritmo di Hash migliorato
encrypt
encrypt
constant
key
key
m
1
m
2
h(m)

Il problema 1. risolvibile
sommando ( XOR) linput e
loutput di ciascun round

Riguardo al problema 2.,
un hash di lunghezza doppia
ottenibile calcolando
un altro hash h(m) con la stessa
tecnica,
ma partendo da una costante
diversa


Bibliografia
[DES81] DES Modes of Operation, FIPS PUB 81, National
Bureau of Standards, U.S. Department of Commerce, 1981.
[KPS02] C. Kaufman, R. Perlman, M. Speciner. Network
Security Private Communication in a Public World.
Prentice Hall.
[PFL08] C. P. Pfleeger, S. L. Pfleeger. Sicurezza in
Informatica. Pearson, Prentice Hall.
[STA07] W. Stallings. Sicurezza delle reti. Pearson, Prentice
Hall.
[Wiki-it] http://it.wikipedia.org/wiki/
[Wiki-en] http://en.wikipedia.org/wiki/
[ISECOM] Institute for Security and Open Methodologies
Rainbow Tables
Luca Grilli,
Fabrizio Montecchiani
Funzioni di Hash sicure
Una funzione hash h()
riceve in input un messaggio m di lunghezza arbitraria, e
ritorna un output h
m
= h(m) di lunghezza prefissata (128 bit)

Propriet importanti di una funzione di hash (crittografica)
sicura
1. noto m facile calcolare h
m
= h(m)
2. dato h, difficile calcolare m tale che h = h(m) (one-way o
resistenza alla pre-immagine)
3. dato m, difficile trovare m m tale che h(m) = h(m')
(resistenza alla seconda pre-immagine)
4. difficile trovare m, m tali che h(m) = h(m') (resistenza alle
collisioni)
le propriet 3 implica la 2, ma non il contrario
la propriet 4 implica la 3, ma non il contrario


Attacco Brute-Force
Sia h:{0, 1}* {0, 1}
b
una funzione crittografica di hash
K = 2
b
: cardinalit dello spazio dei possibili valori di hash
Supponiamo che l'output distribuito in modo casuale
in questo spazio

Considerando un insieme di n stringhe
Quanto deve valere n al fine di avere una probabilit >
0.5 che una stringa abbia un valore di hash dato?
n = ln 2 / (ln K ln(K 1))
per K grande circa n = (ln 2)K


Attacco Brute-Force
Per una funzione hash a 128 bit, necessario
testare (ln 2)2
128
possibili input (circa 10
38
)
per ottenere una probabilit di 0.5 di ottenere
un valore hash specificato

10
38
microsecondi equivalgono a circa 10
24

anni!
Compromesso Tempo-Memoria
Si pu pensare di ridurre il tempo di calcolo
aumentando loccupazione di memoria (o
viceversa)
sembrerebbe pi efficace effettuare un attacco brute-
force una prima volta,
memorizzare il risultato in un hash database,
quindi utilizzare questo database per accelerare il
cracking su qualsiasi macchina
Questo approccio richiederebbe memorie con
capacit dellordine delle centinaia di Terabyte
limite ancora troppo elevato


Rainbow Tables
Una rainbow table una rappresentazione
compatta che mira a ridurre le dimensioni di
un hash database a una tabella molto pi
compatta, incrementando leggermente i
tempi di calcolo

Viene calcolato lhash di tutte le password ma
ne viene memorizzata solo una piccola parte
Rainbow Tables
Siano h() una funzione di hash e P un insieme finito di
password
Lobiettivo di precalcolare una struttura dati tale che,
dato un qualsiasi output h della funzione hash,
pu individuare la password p in P tale che h(p) = h,
oppure stabilire che non esiste una tale p in P
Il modo pi semplice per farlo calcolare h(p) per ogni
p in P
memorizzare la tabella richiede (|P|b) bit di spazio,
dove b le dimensioni di un output di h(),
proibitivo per grandi P
Funzione di Riduzione
L'idea di definire una funzione di riduzione r()
che mappa a ritroso i valori di hash in valori di P
esistono diverse possibili funzioni di riduzione pseudo-
random
una funzione di riduzione non linverso di una
funzione di hash!

Funzione di Riduzione
Alternando
la funzione di hash con
la funzione di riduzione,
possiamo formare catene alternate di password e
valori di hash
Generazione
Per generare una rainbow table:
scegliere un insieme iniziale casuale di password in P
calcolare per ognuna di esse le catene di lunghezza
fissa l
memorizzare in tabella soltanto
la prima (startpoint) password e
lultima (endpoint) password di ogni catena

Esempio
aaaaaa h() 281DAF40 r() sgfnyd h()
920ECF10 r() kiebgt


Lookup e Inversione
Per invertire un valore hash h* necessario
effettuare
una prima fase detta di lookup
una seconda fase detta di inversione
Lookup
1. Calcolare una catena a partire da h,
applicando r() e h() alternativamente

2. Se in qualsiasi punto si osserva un valore
corrisponde ad uno degli endpoint della
tabella, recuperare il corrispondente
startpoint

Inversione
1. Utilizzare lo startpoint trovato in fase di
lookup per ricreare la catena

2. Se la catena prodotta contiene il valore h*
allora il valore immediatamente precedente
nella catena la password p cercata
Esempio
Hash h* = 920ECF10

Lookup: calcoliamo la sua catena finch non troviamo un valore in
tabella (un endpoint):

920ECF10 r() kiebgt

kiebgt contenuto nella tabella con startpoint aaaaaa (vedi esempio
precedente)

Inversione: ricostruiamo la catena partendo da aaaaaa:

aaaaaa h() 281DAF40 r() sgfnyd h() 920ECF10

La password sgfnyd

Falso Allarme
La catena ricostruita non sempre contiene il valore
hash h*
Esempio: h* = FB107E70
FB107E70 r() bvtdll h() 0EE80890 r() kiebgt

FB107E70 non nella catena di aaaaaa (falso allarme)

In questo caso, il match viene ignorato e si continua ad
estendere la catena di h* in cerca di un altro match

Se la catena di h* raggiunge la lunghezza l senza match buoni,
la password non mai stata prodotta in una delle catene e
pertanto non pu essere invertita

Propriet
Il contenuto della tabella non dipende dal valore
hash da invertire
il contenuto viene creato una sola volta e riutilizzato in
ogni attacco senza alcuna modifica

Aumentando la lunghezza delle catene si
riducono le dimensioni della tabella
aumenta per il tempo richiesto per eseguire le
ricerche (compromesso tempo-memoria)
nel semplice caso di catene di un elemento, la ricerca
molto veloce, ma la tabella molto grande (hash
database)
Collisioni
Pu accadere che in un qualsiasi punto due catene
producano lo stesso valore (collision)

Le due catene si fondono (merge) nel punto di collisione
di conseguenza la tabella coprir un minor numero di
password
poich le catene precedenti non sono memorizzate
completamente,
una collisione impossibile da individuare in modo efficiente

La funzione di hash h() genera raramente collisioni
(collision-resistant) mentre la funzione di riduzione r() non
altrettanto robusta
Funzioni di Riduzione Multiple
Per risolvere il problema delle collisioni
possibile utilizzare,
anzich una sola funzione di riduzione r(),
un insieme di funzioni r
1
()r
k
()

utilizzate
alternativamente

In questo modo, perch due catene collidano e si
fondino, devono colpire lo stesso valore nella
stessa iterazione
ancora possibile avere delle collisioni,
ma che non comporteranno la fusione delle catene

Esempio
Lookup
Poich il valore hash di interesse pu essere trovato in
qualsiasi punto della catena, necessario generare k
catene diverse
La prima catena assume che il valore di hash sia nell ultima
posizione e applica soltanto r
k
()

la seconda catena assume che il valore di hash sia nella
penultima posizione e applica in sequenza r
k-1
(), h() e r
k
(),

l'ultima catena applica tutte le funzioni di riduzione alternate
con h()

Questo procedimento comporta che alcune catene
possano essere prodotte e valutate inutilmente (false
alarm)

Esempio
Debolezze
La generazione richiede molto tempo

Possono verificarsi molti false alarm

Inefficiente con meccanismi di salt
Lo spazio di ricerca cresce notevolmente
superando i limiti di memoria attuali

Approfondimenti
A Cryptanalitic Time-Memory Trade-Off,
Martin E. Hellman
www-ee.stanford.edu/~hellman/publications/36.pdf

Making a Faster Cryptanalytic Time-Memory
Trade-Off, Philippe Oechslin
lasecwww.epfl.ch/~oechslin/publications/crypto03.pdf
LanManager Hash
UPPERCASE
+
NULL PADDING / TRUNCATING
NT Lan Manager Hash
PWD MD4
HASH NT
(16B)
Rainbow Tables e LM Hash
L0pht Heavy Industries
L0pht Heavy Industries stato un collettivo di hacker attivo tra il 1992 e
il 2000 e situato a Boston

Durante la sua attivit ha rilasciato numerosi avvisi relativi alla sicurezza
informatica e prodotto strumenti software ampiamente utilizzati come
L0phtCrack, un password cracker per OS Windows

Il 19 maggio 1998, tutti i sette membri di L0pht (Brian Oblivion, Kingpin,
Mudge, Space Rogue, Stefan Von Neumann, John Tan, Weld Pond)
diedero una famosa testimonianza davanti al Congresso degli Stati Uniti,
asserendo che avrebbero potuto spegnere l'intera rete Internet in 30
minuti

Nel gennaio 2000, L0pht Heavy Industries si fusa con la startup @stake,
completando la lenta transizione da un'organizzazione underground a
una societ "whitehat" di sicurezza informatica. Symantec ha annunciato
l'acquisizione di @stake il 16 settembre 2004, e completato l'operazione
l'8 ottobre dello stesso anno

L0phtCrack
L0phtCrack unapplicazione per il recupero e il test di
password originariamente prodotto da Mudge (L0pht
Heavy Industries)

Utilizza attacchi con dizionario, brute-force, e con rainbow
tables

E uno degli strumenti preferiti dagli hacker, specialmente
le vecchie versioni (basso prezzo e alta disponibilit)

Nel gennaio 2009 L0phtCrack stato acquisito dagli autori
originali Zatko (Mudge), Wysopal e Rioux da Symantec
L0phtCrack 6 stato annunciato l11 marzo 2009 alla
conferenza SOURCE Boston Conference

L0phtCrack 6
Alcune features:
OS target
Windows XP, Vista Seven (32 e 64 bit)
reti con Windows NT, 2000, XP, Server 2003, Server 2008 (32 e 64
bit)
varianti principali di BSD e Linux con demone SSH

password scoring
punteggio basato su metrica per valutare rapidamente la qualit
delle password

metodi per Password Audit
dizionario
hash DB precalcolato
brute force
rainbow tables
www.l0phtcrack.com
www.l0phtcrack.com
L0phtCrack e LM Hash
La prima versione di l0phtCrack fu utilizzata per
crackare lalgoritmo LM Hash

LM Hash stato mantenuto da Microsoft fino a
Windows Vista per garantire la retrocompatibilit con
i vecchi sistemi
Windows mantiene per ogni password sia la versione
ottenuta con LM Hash sia quella ottenuta con NT Hash
se un attaccante riesce a crackare la versione LM Hash
della password (ad esempio tramite rainbow tables)
allora pu sfruttare questa informazione per crackare
anche la versione NTLM Hash


L0phtCrack e LM Hash
Il cracking della versione LM Hash fornisce i
primi 14 caratteri della password
per password di dimensioni maggiori i restanti
caratteri possono essere trovati per inferenza o con
attacco brute-force

Lalgoritmo NT Hash case-sensistive
una volta crackata la versione LM Hash della
password restano soltanto 2
x
possibili password, con
x pari alla lunghezza della password
x un numero minore o uguale a 14 (al pi 16384
tentativi)!


NTLM Protocol
NTLM Protocol: protocollo Microsoft per
lautenticazione su dominio di tipo challenge-
response introdotto con lalgoritmo NTLM Hash



NTLM Protocol
Ogni volta che un utente richiede lautenticazione
su dominio entrambe le versioni della password (LM
Hash e NTLM Hash) subiscono il seguente processo:
1. NULL padding fino a 21B
2. divisione dellhash in 3 parti da 7B
3. ognuna delle 3 parti viene convertita in una chiave DES di
8B aggiungendo 1B di parit
4. con ogni chiave viene criptato un challenge di 8B inviato
in chiaro in rete dal server di autenticazione
5. i 3 output ottenuti al passo precedente sono concatenati
per formare un output finale di 24B che viene inviato in
rete al server per verificare lautenticazione


L0phtCrack e LM Hash
Il meccanismo di challenge-response
dovrebbe rendere pi difficile il cracking

In realt louput contiene informazione
sfruttabile da un attaccante
solo 2B dellhash originale (16B) finiscono nella
terza componente da 7B, il resto sono caratteri
NULL noti
solo lottavo byte della prima met dellhash
originale finisce nella seconda componente da 7B


L0phtCrack e LM Hash
Esempio: password di dimensione pari al pi
a 7 caratteri (scelta molto frequente per
utenti non esperti)
nella versione LM Hash il secondo gruppo da 7B
composto da soli caratteri NULL
nella versione prodotta dallNTLM Protocol i
primi 8B corrispondono al challenge cifrato con
lLM Hash, non serve decriptare i restanti 16B!



Kerberos
Microsoft ha adottato Kerberos come protocollo di
autenticazione di defualt da Windows 2000 e per i domini
Active Directory


NTLMv2 ancora utilizzato in diverse seguenti situazioni,
tra cui:

il cliente si autentica a un server che non appartiene a un
dominio
non esiste un dominio Active Directory (modalit
workgroup"o "peer-to-peer")
nei casi in cui un firewall blocca le porte richieste da Kerberos



Ophcrack
Ophcrack unapplicazione open source per
il recupero delle password di sistemi
operativi Windows

Si avvale di rainbow tables per crackare gli
hash LM ed NTLM

Sviluppata da Cedric Tissieres e Philippe
Oechslin


Ophcrack
Xp Rainbow Tables
XP free small (380MB)
Success rate: 99.9%
Charset: 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ

XP free fast (703MB)
Success rate: 99.9%
Charset: 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ

XP special (7.5GB)
Success rate: 96%
Charset: 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~

XP german (7.4GB)
Success rate: 99%
Only for passwords that contains at least one german character ()
Charset: 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~




Vista Rainbow Tables
www.freerainbowtables.com
L'obiettivo di FreeRainbowTables.com quello
di dimostrare l'insicurezza delle funzioni hash
semplici

DistrRTgen (Distributed Rainbow Table
Generator): generazione distribuita di catene
possibile generare rainbow tables enormi che sono
in grado di rompere password anche molto lunghe
il client BOINC disponibile dalla pagina di download
del sito


Fonti
Beautiful Security Leading Security Experts Explain
How They Think, Andy Oram, John Viega , O'Reilly
Media, 2009

www.wikipedia.org

www.l0phtcrack.com

www.ophcrack.sourceforge.net

www.freerainbowtables.com



Crittografia a Chiave Pubblica
Parte I

Luca Grilli
INTRODUZIONE
Crittografia a Chiave Pubblica Parte I
Introduzione
La crittografia a chiave pubblica si basa su alcuni
risultati nellambito della teoria dei numeri
Gli algoritmi di crittografia a chiave pubblica sono
molto eterogenei e differiscono profondamente
non soltanto in come alcune funzioni vengono
eseguite, ma spesso in quali funzioni vengono
eseguite
tutti gli algoritmi di hash fanno la stessa cosa prendono
un messaggio ed eseguono una trasformazione irreversibile
tutti gli algoritmi a chiave segreta fanno la stessa cosa
prendono un blocco, lo cifrano in modo reversibile e
applicano dei metodi di concatenamento dei blocchi per
cifrare dei messaggi generici
Introduzione
Si esamineranno i seguenti schemi di cifratura a chiave
pubblica
RSA e ECC, usati per cifrare e per calcolare la firma digitale
ElGamal e DSS, usati per la firma digitale
Diffie-Hellman, permette di stabilire un segreto condiviso,
ma non fornisce alcun algoritmo che usa effettivamente
tale segreto
potrebbe essere usato in congiunzione ad uno schema di cifratura
a chiave segreta
Sistemi di dimostrazione a conoscenza zero (zero
knowledge proof systems), usati soltanto per
lautenticazione
Introduzione
Lunico aspetto comune a tutti gli algoritmi di
crittografia a chiave pubblica
la presenza di due quantit correlate
chiave segreta, chiave pubblica
associate a ciascuna entit che partecipa ad una
comunicazione cifrata
spesso si usa il termine principal per denotare una siffatta
entit, che pu essere un calcolatore o una persona
ARITMETICA MODULARE
Crittografia a Chiave Pubblica Parte I
Aritmetica modulare
La maggior parte degli algoritmi a chiave pubblica
si basano sullaritmetica modulare
Fissato un interno n > 1, laritmetica modulare
considera linsieme degli interi non negativi minori di
n: {0, 1, 2, , n 1}
effettua operazioni ordinarie come laddizione e la
moltiplicazione, e
sostituisce il risultato x con il resto r della divisione
intera di x per n
il risultato finale viene detto modulo n o mod n
x mod n significa dividi x per n e considera il resto
qualche volta mod n omesso se chiaro dal contesto

Addizione modulare mod 10
Consideriamo laddizione mod 10
siano a e b due numeri minori di 10
(a + b) mod 10 si ottiene
effettuando laddizione ordinaria, e
considerando come risultato finale la cifra meno significativa; cio
il resto della divisione per 10
+ 0 1 2 3 4 5 6 7 8 9
0 0 1 2 3 4 5 6 7 8 9
1 1 2 3 4 5 6 7 8 9 0
2 2 3 4 5 6 7 8 9 0 1
3 3 4 5 6 7 8 9 0 1 2
4 4 5 6 7 8 9 0 1 2 3
5 5 6 7 8 9 0 1 2 3 4
6 6 7 8 9 0 1 2 3 4 5
7 7 8 9 0 1 2 3 4 5 6
8 8 9 0 1 2 3 4 5 6 7
9 9 0 1 2 3 4 5 6 7 8
Addizione modulare mod 10
Sia m (< 10), un qualche messaggio
laddizione di una costante k mod 10 pu
riguardarsi come una cifratura a chiave segreta
ogni cifra decimale m viene mappata in una diversa
cifra decimale c = (m + k) mod 10 in modo reversibile
k la chiave segreta; chiaramente si tratta di un
pessimo cifrario ( il cifrario di Cesare)
la decifratura consiste nel sottrarre k mod 10; cio va
sottratto k e se il risultato minore di 0, va aggiunto 10
come nellaritmetica ordinaria, sottrarre k equivale a
sommare -k, cio linverso additivo di k

Addizione modulare mod 10
un inverso additivo di k un numero che sommato a k
d 0; formalmente (k + (-k)) = 0 mod 10
ad esempio, linverso additivo di 4 6 perch 4 + 6 = 0
nellaritmetica modulo 10

Moltiplicazione modulare mod 10
Si consideri la tabella della moltiplicazione mod 10
la moltiplicazione mod 10 per una costante k {1, 3, 7, 9}
pu riguardarsi come una cifratura a chiave segreta
produce una permutazione dellinput
la moltiplicazione per ogni altro numero invece non funziona

0 1 2 3 4 5 6 7 8 9
0 0 0 0 0 0 0 0 0 0 0
1 0 1 2 3 4 5 6 7 8 9
2 0 2 4 6 8 0 2 4 6 8
3 0 3 6 9 2 5 8 1 4 7
4 0 4 8 2 6 0 4 8 2 6
5 0 5 0 5 0 5 0 5 0 5
6 0 6 2 8 4 0 6 2 8 4
7 0 7 4 1 8 5 2 9 6 3
8 0 8 6 4 2 0 8 6 4 2
9 0 9 8 7 6 5 4 3 2 1
Ad esempio, se si prova a cifrare
moltiplicando per 5, met dei numeri
sarebbero cambiati in 0 e laltra met
in 5
ci comporta una perdita di
informazione; la trasformazione non
invertibile
impossibile decifrare
Moltiplicazione modulare mod 10
Pertanto, la moltiplicazione mod 10 pu essere
usata per cifrare
a condizione che il fattore k sia scelto in modo
opportuno
La decifratura pu essere eseguita, analogamente
al caso delladdizione, moltiplicando per linverso
moltiplicativo di k
nellaritmetica ordinaria linverso moltiplicativo di k
1/k in generale 1/k una quantit frazionaria
ma nellaritmetica modulare si considerano solo
numeri interi
Inverso moltiplicativo mod n
Linverso moltiplicativo di k, scritto k
-1
, quel
numero che moltiplicato per k d 1
(kk
-1
) mod 10 = 1 mod 10
in generale, (kk
-1
) mod n = 1 mod n
Si osservi che per un dato n, non tutti i numeri
hanno un inverso moltiplicativo mod n
solo i numeri {1, 3, 7, 9} hanno gli inversi moltiplicativi
mod 10
ad esempio, 7 un inverso moltiplicativo di 3 la cifratura
pu ottenersi moltiplicando per 3 e la decifratura pu
ottenersi moltiplicando per 7
9 un inverso di se stesso; 1 un inverso di se stesso

Inverso moltiplicativo mod n
Si osservi inoltre che
se k ammette un inverso moltiplicativo mod n
esiste un unico inverso moltiplicativo k
-1
< n
ad esempio, il numero 7 ammette i seguenti inversi
moltiplicativi mod 10 {3, 13, 23, 33, , 3 + i10, },
ma soltanto 3 linverso moltiplicativo strettamente minore
di 10
Ovviamente, la moltiplicazione mod n di per s
non costituisce un cifrario sicuro
ma funziona, nel senso che la moltiplicazione per k
produce un mescolamento dellinput; la decifratura
pu ottenersi moltiplicando per k
-1
Inverso moltiplicativo mod n
Trovare un inverso moltiplicativo k
-1
nella
aritmetica mod n, non affatto banale se n
molto grande
ad esempio, se n un intero a 100 cifre un approccio a
forza bruta sarebbe impraticabile
Esiste un modo efficiente per risolvere tale
problema, noto come algoritmo di Euclide
dati x ed n (x < n), lalgoritmo di Euclide trova il
numero y < n tale che (xy) mod n = 1
ammesso che un siffatto y esista
Numeri relativamente primi
DOMANDA
Per quale motivo soltanto i numeri {1, 3, 7, 9} ammettono un
inverso moltiplicativo mod 10?
Quali numeri ammettono un inverso moltiplicativo mod 10?
RISPOSTA: sono tutti e soli i numeri (minori di 10)
relativamente primi con 10
Due numeri sono relativamente primi se lunico fattore
comune 1
equivalentemente,
Due numeri interi a e b sono relativamente primi se
MCD(a, b) = 1
MCD Massimo Comun Divisore, o
GCD Greatest Common Divisor
Funzione totiente di Eulero
in generale, nellaritmetica mod n, tutti gli interi (positivi) x
relativamente primi con n ammettono un inverso
moltiplicativo x
-1

se n un numero primo tutti gli interi positivi x < n
ammettono un inverso moltiplicativo (mod n) x
-1

Dato un intero n > 1
Si definisce funzione di Eulero, o funzione totiente,
la funzione che associa ad n il numero (n) degli interi
positivi i n e relativamente primi con n
cio (n) = |{0 < i n: MCD(i, n) = 1}|
per convenzione (0) = 0
Security token
Funzione totiente di Eulero
Se n primo tutti gli interi {1, 2, , n 1} sono
relativamente primi con n (n) = n 1
DOMANDA: Se n = pq, ove p e q sono due numeri
primi maggiori di 1, quanto vale (n)?
RISPOSTA:
(n) = |N
<n
(M
p
M
q
)| =
= |N
<n
| |M
p
| |M
q
| + |M
p
M
q
|
dove
N
<n
= {1, 2, , n 1, n}
M
p
= {p1, p2, , p(q 1), pq} N
<n

M
q
= {1q, 2q, , (p 1)q, pq} N
<n
M
p
M
q
= {pq}
(n) = pq q p + 1 = p(q 1) q + 1 = (p 1)(q 1)

Esponenziazione modulare
Lesponenziazione modulare, o elevamento a potenza
modulare, simile a quella ordinaria
si esegue lesponenziazione ordinaria e si considera il resto
della divisione per n
ad esempio, 4
6
= 6 mod 10 perch 4
6
= 4096 e 4096 = 6 mod 10

x
y
0 1 2 3 4 5 6 7 8 9 10 11 12
0 0 0 0 0 0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1 1 1 1 1 1 1
2 1 2 4 8 6 2 4 8 6 2 4 8 6
3 1 3 9 7 1 3 9 7 1 3 9 7 1
4 1 4 6 4 6 4 6 4 6 4 6 4 6
5 1 5 5 5 5 5 5 5 5 5 5 5 5
6 1 6 6 6 6 6 6 6 6 6 6 6 6
7 1 7 9 3 1 7 9 3 1 7 9 3 1
8 1 8 4 2 6 8 4 2 6 8 4 2 6
9 1 9 1 9 1 9 1 9 1 9 1 9 1
si osservi che
nellesponenziazione modulare
x
y
mod n diverso da x
y+n
mod n
ad esempio, 3
1
= 3 mod 10, ma
3
11
= 7 mod 10 (3
11
= 177147)
Esponenziazione modulare mod 10
Dalla precedente tabella, che illustra
lesponenziazione mod 10, si osserva che
lesponenziazione per 3 (quarta colonna) pu
considerarsi una cifratura
determina un mescolamento dellinput
lesponenziazione per 2 invece no
alcuni input scompaiono non iniettiva
quando lesponenziazione iniettiva, la decifratura
pu ottenersi ricorrendo al logaritmo discreto
(inverso dellesponenziazione)
come nel caso della moltiplicazione, nellesponenziazione
modulare non tutti i numeri ammettono un logaritmo
discreto
Esponenziazione modulare
Esaminando la tabella di esponenziazione mod 10
si nota un periodicit
per ogni i > 0, le colonne i e i + 4 coincidono, cio
per ogni i > 0, x
i
mod 10 = x
i + 4
mod 10
In effetti, si pu dimostrare il seguente risultato
Sia n > 1 un intero privo di quadrati (square
free), allora per ogni y > 0,
x
y
mod n = x
(y + (n))
mod n
un intero privo di quadrati se non compaiono fattori
al quadrato nella sua scomposizione in fattori primi
Esponenziazione modulare
ad esempio, 10 privo di quadrati essendo 10 = 2
1
5
1
un numero primo sempre privo di quadrati

nel caso n = 10, i numeri relativamente primi a 10
sono {1, 3, 7, 9} (n) = 4
Dalla precedente relazione risulta che
se y = 1 mod (n)
x
y
mod n = x mod n
questultimo risultato sfruttato dallalgoritmo
RSA
RSA
Crittografia a Chiave Pubblica Parte I
RSA Introduzione
RSA un algoritmo di cifratura (a blocchi) a
chiave pubblica
il nome deriva degli inventori Rivest, Shamir e
Adleman
la lunghezza della chiave variabile
ci consente di ottenere il giusto compromesso
sicurezza/efficienza
solitamente si considerano chiavi di lunghezza 512 bit
anche la lunghezza dei blocchi variabile
un blocco di testo in chiaro deve avere una lunghezza
inferiore a quella della chiave
un blocco di testo cifrato lungo come la chiave
RSA Introduzione
RSA computazionalmente molto pi lento
degli algoritmi a chiave segreta pi popolari
come DES e IDEA
difficilmente viene usato per cifrare messaggi
lunghi
generalmente viene usato per cifrare una
chiave segreta K, il messaggio viene poi cifrato con
K usando un algoritmo a chiave segreta
Algoritmo RSA
Lalgoritmo RSA pu essere impiegato
sia per cifrare/decifrare messaggi
sia per la firma digitale di messaggi
In entrambi i casi necessario disporre della
coppia
chiave pubblica, chiave privata = PU, PR
tale coppia deve essere generata in modo opportuno
Nelle prossime slide si esaminer la
1. generazione di una coppia PU, PR
2. cifratura/decifratura RSA
3. firma digitale RSA

Generazione di PU, PR
1. Scegliere due numeri primi grandi p e q (circa
256 bit ciascuno); porre n = p q
fondamentale che p e q rimangano segreti
si noti che fattorizzare n impraticabile
2. Scegliere un numero e che sia relativamente
primo rispetto a (n) = (p 1)(q 1)
3. La chiave pubblica PU = e, n
4. Calcolare linverso moltiplicativo d di e mod (n)
cio d tale che (de) mod (n) = 1
5. La chiave privata PR = d, n

Cifratura/decifratura RSA
Sia PU = e, n la chiave pubblica del destinatario del
messaggio cifrato e sia PR = d, n la sua chiave privata
Sia m (< n) un messaggio da cifrare
CIFRATURA: il mittente, chiunque sia, usando la
chiave pubblica PU del destinatario calcola il testo
cifrato
c = m
e
mod n
DECIFRATURA: il destinatario usando la propria
chiave privata PR decifra c nel seguente modo
m = c
d
mod n

Firma digitale RSA
Sia PR = d, n la chiave privata del firmatario del
messaggio e sia PU = e, n la sua chiave pubblica
Sia m (< n) un messaggio o un piccolo blocco di dati
che funzione del messaggio
FIRMA: il firmatario usando la propria chiave
privata PR calcola la firma digitale s
s = m
d
mod n
VERIFICA: chiunque desidera verificare
lautenticit della firma, usando la chiave pubblica
PU del firmatario verifica che
m = s
e
mod n

Alcune domande
Di seguito si risponder alle seguenti domande
Perch RSA funziona?
Decifrando un messaggio cifrato si ottiene il messaggio
in chiaro?
Perch RSA sicuro?
Dati e ed n, perch non possibile risalire a d?
Le operazioni di cifratura, decifratura, firma, e
verifica della firma sono tutte sufficientemente
efficienti da essere realizzabili nella pratica?
Come possibile ottenere numeri primi grandi?

Perch RSA funziona
Mostriamo che
se c = E(PU, m) m = D(PR, c) = D(PR, E(PU, m))
si sfrutteranno le seguenti propriet
se m < n m mod n = m
(x
a
mod n)
b
mod n = (x
a
)
b
mod n = x
ab
mod n
(e d) mod (n) = 1
PROVA
c = E(PU, m) = m
e
mod n
m = D(PR, c) = c
d
mod n = (m
e
mod n)
d
mod n = (m
e
)
d
mod n
= m
ed
mod n = m
(1 mod (n))
mod n = m mod n = m
la prova di correttezza della verifica della firma
analoga
Perch RSA sicuro?
Non esistono prove formali di sicurezza
ci si affida al Fundamental Tenet of Cryptogtaphy
molte persone intelligenti hanno tentato di violarlo, ma
hanno fallito
la sicurezza di RSA risiede nel fatto che fattorizzare
interi molto grandi impraticabile
se esistesse un metodo veloce per fattorizzare interi molto
grandi, allora nota la chiave pubblica PU = e, n si potrebbe
ottenere la chiave privata PR = d, n
infatti, identificando i numeri primi p e q tali che n = p q
si ottiene facilmente (n) = (p 1)(q 1) e quindi si pu
calcolare d come linverso moltiplicativo di e modulo (n)

Perch RSA sicuro?
tuttavia non si possono escludere altri metodi di
violazione di RSA che non richiedono la fattorizzazione
sebbene RSA ritenuto sicuro, per chiavi di almeno
256 bit, possibile utilizzarlo in modo improprio!
si supponga che Carol spedisca un messaggio ad Alice
contenente il nome del suo fidanzato segreto
Bob geloso, sa del messaggio di Carol ad Alice e sa che il
fidanzato uno dei 15 ragazzi del corso di Sicurezza
Informatica
Bob non pu decifrare il messaggio,
ma pu cifrare il nome di ogni ragazzo del corso di Sicurezza
Informatica con la chiave pubblica di Alice e
verificare quale di questi coincide con il messaggio inviato da
Carol
Perch RSA sicuro?


DOMANDA: assumendo che Bob intercetti il
messaggio di Carol, possibile impedirgli di
ottenere informazioni?
Perch RSA sicuro?
Nel seguito si discuter come usare RSA in
modo appropriato
per il momento una possibile risposta alla
precedente domanda la seguente
RISPOSTA
Carol pu concatenare il nome del suo fidanzato
con un numero random molto grande, diciamo a
64 bit
Bob anzich 15 tentativi deve fare 15 2
64

tentativi!
Efficienza delle operazioni di RSA
In base al tipo di impiego, RSA svolge le seguenti
operazioni molto frequentemente (ad ogni sessione di
lavoro)
cifratura,
decifratura,
generazione di una firma digitale e
verifica di una firma digitale
necessario pertanto che tali operazioni siano svolte
nel modo pi efficiente possibile
Invece, loperazione di generazione delle chiavi viene
eseguita meno frequentemente
si pu tollerare una minore efficienza
Esponenziazione di grandi numeri
Le operazioni di cifratura, decifratura, firma e verifica
della firma richiedono tutte di dover
considerare un intero molto grande,
elevarlo ad un esponente (intero) molto grande, e
trovare il resto della divisione intera per un numero molto
grande

Considerando la dimensione dei numeri interi per i
quali RSA ritenuto sicuro tali operazioni
risulterebbero proibitive se eseguite nel modo pi
ovvio
le prossime slide illustrano come possibile aumentare la
velocit dei calcoli
Esempio calcolo di 123
54
mod 678
assumendo di disporre di un software per la gestione
dellaritmetica a precisione multipla
La soluzione pi ovvia
moltiplicare 54 volte 123 per se stesso
ottenendo un prodotto enorme (circa 100 cifre decimali)
e poi dividere per 678 per ottenere il resto
un computer potrebbe farlo con facilit
Tuttavia, per essere sicuro RSA richiede che i numeri siano
di 150 cifre!
elevare un numero di 150 cifre ad un esponente anchesso di
150 cifre computazionalmente impraticabile
un calcolo di questo tipo esaurirebbe le capacit di tutti i computer
esistenti per un tempo superiore al tempo di vita previsto
delluniverso
Per fortuna esiste un metodo molto pi efficiente
Esempio calcolo di 123
54
mod 678
Per evitare di ottenere numeri enormi
conviene effettuare una riduzione modulare di ogni
prodotto intermedio; si noti che valgono le seguenti
(a b) mod n = ((a mod n ) (b mod n )) mod n
(a b) mod n = (a (b mod n )) mod n
si pu procedere nel seguente modo
123
2
= 123 123 = 15129 = 213 mod 678
123
3
= 123 213 = 26199 = 435 mod 678
123
4
= 123 435 = 53505 = 621 mod 678

123
53
= 123 567 = 69741 = 585 mod 678
123
54
= 123 585 = 71955 = 87 mod 678
Esempio calcolo di 123
54
mod 678
necessario effettuare 54 moltiplicazioni e 54
divisioni di piccoli (< 678) numeri interi
ancora una soluzione impraticabile
considerata la dimensione degli esponenti usati in RSA
tuttavia, esiste un metodo per migliorare
ulteriormente lefficienza
si supponga per semplicit che lesponente sia una
potenza di 2, ad esempio 32 = 2
5
la potenza a
32
pu essere ottenuta calcolando 5
potenze al quadrato in cascata
a
32
= ((((a
2
mod n)
2
mod n)
2
mod n)
2
mod n)
2
mod n


Esempio calcolo di 123
54
mod 678
nel caso generale in cui lesponente non una
potenza di 2, ad esempio 54, si pu tener conto
delle seguenti osservazioni
noto a
x
a
2x
ottenibile da a
x
come segue
a
2x
= (a
x
)
2
mod n = (a
x
mod n)
2
mod n
mentre a
2x+1
ottenibile da a
2x
come segue
a
2x+1
= ((a
2x
) a) mod n = ((a
2x
mod n) a) mod n
inoltre, la rappresentazione binaria di 54
(110110)
2
fornisce
la corretta sequenza di potenze al quadrato e di
moltiplicazioni (per la base 123)
da effettuare in cascata per ottenere 123
54

123
54
cascata di pot. e molt.
1 ( )
2
b

( )
2
( )
2
( )
2
b

b

( )
2
0
87 mod 678
1

1

0

1

1

0

codifica binaria di 54
( )
2
b

LEGENDA
eleva al quadrato la base ed effettua la riduzione modulare
moltiplica per la base 123 ed effettua la riduzione modulare
INPUT OUTPUT
2

+1

2

2

2

+1

+1

2

2

+1

( )
2
b

54
123
54
cascata di pot. e molt.
in definitiva, per effettuare lesponenziazione di
una base ad un esponente
si parte da un valore iniziale tmp = 1, e
si scandisce lesponente, bit a bit, dal bit pi
significativo a quello meno significativo
per ciascun bit considerato si eleva al quadrato il valore
corrente di tmp
se il bit 1 si moltiplica anche per la base
chiaramente, dopo ogni operazione si esegue la
riduzione modulare
123
54
cascata di pot. e molt.
con la tecnica appena illustrata il calcolo di 123
54

richiede di fatto 8 moltiplicazioni e 8 divisioni, ma
soprattutto
il numero di moltiplicazioni e divisioni cresce
linearmente con il numero di bit dellesponente e
non con il suo valore
e = 2
Nb
1 ove N
b
= numero bit dellesponente

con questa tecnica RSA sufficientemente
efficiente da poter essere usato
Generazione delle chiavi RSA
La generazione delle chiavi RSA unoperazione poco
frequente
in gran parte delle applicazioni della tecnologia a chiave
pubblica deve essere eseguita soltanto una volta
ad esempio quando un impiegato viene assunto
non richiesta la stessa efficienza delle altre operazioni
RSA; deve comunque essere garantita unefficienza
ragionevole
Per generare una coppia di chiavi PU, PR necessario
trovare due numeri primi p e q molto grandi, e
trovare due interi d ed e con le propriet precedentemente
descritte
Trovare due numeri primi grandi p e q
esistono infiniti numeri primi; tali numeri tendono
per a diradarsi sempre pi al crescere di n
estraendo n a caso Pr{n primo} 1 / ln n
Pr{n primo} 1 / N
b
ove N
b
denota il numero di bit
di n

la densit dei numeri primi inversamente
proporzionale alla loro lunghezza in bit (o in cifre
decimali)
per un numero n a dieci cifre decimali (dimensione
usata in RSA) c una possibilit su 230 di essere primo


Trovare due numeri primi grandi p e q
Pertanto p e q sono generati con la seguente strategia
1. estrai un numero dispari molto grande
2. verifica se primo, in caso negativo ritenta
mediamente sono necessari 230 tentativi per trovare un
numero primo
tale strategia praticabile solo se si dispone di un
test di primalit efficiente
Come possibile testare se un intero n primo?
un metodo banale consiste nel dividere n per tutti gli
interi n
1/2
e verificare che non ci sono divisori > 1, ma
ci richiederebbe diverse vite delluniverso!

Trovare due numeri primi grandi p e q
prima del 2002 non esisteva un test di primalit polinomiale
nel 2002 stato pubblicato il test di primalit deterministico
AKS
RSA usa un test di primalit probabilistico
non si pu affermare con certezza che lesito del test
corretto
tuttavia, la probabilit di errore pu essere resa
arbitrariamente piccola aumentando il tempo di test
il test si basa sul teorema di Fermat che fornisce una
condizione necessaria affinch un intero n sia primo
se n primo per ogni intero a risulta a
n

1
= 1 mod n
non vale per il viceversa, esistono degli interi a per i quali
luguaglianza verificata anche se n non primo
Test di primalit probabilistico
Dato un intero n, un possibile test di primalit il
seguente
1) scegliere un intero a < n
2) calcolare a
n-1
mod n
3a) se il risultato diverso da 1 n certamente
non primo
3b) se il risultato 1 n potrebbe essere primo, ma
potrebbe anche non esserlo
stato dimostrato che se n un intero random di circa
cento cifre decimali la probabilit di un falso positivo di
circa 10
-13
Test di primalit probabilistico
si osservi che un errore nel test di primalit pu
rendere
impossibile la decifratura RSA di un messaggio
pi facile lidentificazione della chiave privata
se una probabilit di errore pari a 10
-13
non ritenuta
sufficiente si possono effettuare pi test con diversi
valori di a
Pr{falso positivo dopo k test} = (10
-13
)
k
la probabilit di errore pu essere resa arbitrariamente
piccola, ma non sempre la vita cos semplice!
ci possono essere dei casi veramente sfortunati non rilevabili
dal test, ci accade se n un numero di Carmichael
Test di primalit probabilistico
un numero n un numero di Carmichael se non
primo e se per ogni a < n risulta a
n-1
= 1 mod n
i numeri di Carmichael sono sufficientemente rari che
estremamente improbabile estrarli a caso
tuttavia, a fronte di un piccolo costo computazionale
aggiuntivo
possibile migliorare il test di primalit precedente
introducendo altri controlli che permettono di rilevare
con maggior probabilit se n non primo
un test molto efficace il test di primalit di Miller e
Rabin
Test di primalit di Miller e Rabin
Sfrutta un ulteriore CN di primalit:
se n primo le uniche radici quadrate modulo
n di 1 sono 1 e -1 (si noti che -1 = n 1 mod n)
cio, se a un intero tale che a
2
mod n = 1
deve essere a = 1 oppure a = -1
in caso contrario si desume che n non primo
tali controlli sulle radici quadrate vengono eseguiti
nei risultati intermedi necessari al calcolo di a
n-1

mod n per il test precedente
a tale scopo viene sempre espresso n 1 come 2
b
c ove
c un numero dispari
il test precedente diventa a^(2
b
c) mod n = 1
Test di primalit di Miller e Rabin
il test sulle radici quadrate mod n di 1 permette di
aumentare notevolmente la capacit di
individuare dei falsi positivi
se n non primo (anche se un numero di Carmichael)
almeno di tutti i possibili valori di a permettono di
rilevarlo
lesecuzione del test con diversi valori di a permette
di ridurre a piacere la probabilit di errore; anche nel
caso in cui n un numero di Carmichael
Test di primalit di Miller e Rabin
1. Sia n un numero dispari.
2. Testare se n divisibile per qualche numero primo piccolo. In
caso affermativo tornare al punto 1. (tale step non strettamente
necessario, ma vale la pena eseguirlo perch pu rilevare un numero non
primo con buona probabilit)
3. Ripetere i seguenti step arrestandosi quando si prova che n
non primo oppure dopo un numero di volte ritenute sufficienti
a considerare n primo con elevata probabilit.
3.1 Scegliere randomicamente un numero a.
3.2 Calcolare a
c
mod n (dove c il numero dispari tale che n 1 =
2
b
c) eseguendo una sequenza di potenze al quadrato e/o
moltiplicazioni per la base a.
Test di primalit di Miller e Rabin
Ad ogni elevamento al quadrato controllare se il risultato 1.
Se s, controllare se il numero elevato al quadrato (cio la
radice quadrata mod n di 1) era pari a 1; in caso negativo, n
non primo.
3.3 Se a
c
mod n pari a 1, n supera il test di primalit per questo
valore di a.
3.4 Altrimenti, a
c
mod n 1, al pi b 1 volte, sostituisci il
risultato con il suo quadrato e verifica se si ottiene 1.
Se si ottiene 1, n non primo (perch il precedente risultato
una radice quadrata di 1 diversa da 1).
Se si ottiene -1, n supera il test di primalit per questo valore
di a.
Test di primalit di Miller e Rabin
Se sono state eseguite b 1 potenze al quadrato, n non
primo (perch a
(n 1)/2
diverso da 1)
Calcolo di d ed e
Gli interi d ed e sono definiti nel seguente
modo
e un qualunque numero relativamente primo
rispetto allintero (n) = (p 1)(q 1)

d lintero tale che (e d) mod (n) = 1

noto e, d si calcola con lalgoritmo di Euclide
Calcolo di d ed e
esistono due possibili strategie per il calcolo di e
1. Una volta ottenuti p e q
scegliere e randomicamente e
testare se e e (p 1)(q 1) sono relativamente primi
in caso negativo, selezionare un altro valore per e
2. Non selezionare prima p e q, invece
scegliere prima e
poi selezionare p e q in modo tale che (p 1) e (q 1)
sono relativamente primi rispetto ad e

nelle slide seguenti si illustrer per quale motivo la
strategia 2. conveniente e come possibile attuarla
Come scegliere e
La sicurezza di RSA non diminuisce (per quanto ad
oggi noto) se e sempre scelto allo stesso modo
si noti che d continua ad essere imprevedibile se p e q
non sono noti
d oltre a dipendere da e dipende anche da p e da q
se e un intero piccolo o facile da calcolare le
operazioni di cifratura e di verifica della firma
diventano pi efficienti
cio le operazioni che richiedono luso della chiave pubblica
PU = e, n sono pi veloci, mentre
risulta invariata lefficienza delle operazioni che richiedono la
chiave privata PR = d, n
Come scegliere e
chiaramente, diversamente da e, non si pu assegnare
a d un valore piccolo
sebbene ci renderebbe molto pi veloci le operazioni
che usano la chiave privata PR, la sicurezza di RSA
verrebbe meno; un avversario potrebbe identificare PR
con una semplice ricerca!
Generalmente si assegna ad e uno dei
seguenti valori
e = 3
e = 65537
Perch e = 3?
La scelta e = 3 quella che assegna ad e il pi
piccolo valore possibile
2 non va bene perch non relativamente primo con
(p 1)(q 1) che un numero pari
3 pu funzionare
il calcolo di m
3
mod n richiede soltanto due moltiplicazioni
un esponente pubblico pari a 3 massimizza le prestazioni
per quanto ad oggi noto, la sicurezza di RSA non indebolita
se vengono messi in essere degli opportuni accorgimenti
pratici
nelle prossime slide si esaminer quali rischi si corrono se e =
3 e come sia possibile far fronte a tali rischi

e = 3 vulnerabilit/patch
La scelta di e = 3 comporta le seguente
vulnerabilit
se il messaggio m da cifrare rappresenta un intero
piccolo, in particolare se m inferiore alla radice
cubica ordinaria di n: m < n
1/3
c = m
e
mod n = m
3
mod n = m
3
un avversario pu decifrare c senza conoscere la
chiave privata; semplicemente estraendo la radice
cubica ordinaria di c: m = c
1/3
tale vulnerabilit pu essere rimossa eseguendo un
padding random del messaggio tale che m
3
> n
ci garantisce che m
3
viene sempre ridotto mod n
e = 3 vulnerabilit/patch
Unaltra vulnerabilit si ha se
uno stesso messaggio m viene inviato cifrato
a tre o pi destinatari aventi un esponente pubblico e
= 3
il messaggio in chiaro m pu essere decifrato
conoscendo soltanto
i tre messaggi cifrati c
1
, c
2
e c
3
e
le tre chiavi pubbliche 3, n
1
, 3, n
2
e 3, n
3

PROVA
si supponga che un avversario intercetti tre cifrature
dello stesso messaggio m
c
1
= m
3
mod n
1
c
2
= m
3
mod n
2
c
3
= m
3
mod n
3
e = 3 vulnerabilit/patch
conoscendo anche le tre chiavi pubbliche dei
destinatari 3, n
1
, 3, n
2
e 3, n
3

e utilizzando il teorema cinese del resto, lavversario
pu calcolare m
3
mod n
1
n
2
n
3
essendo m < n
i
per i = 1, 2, 3 m
3
< n
1
n
2
n
3

m
3
mod n
1
n
2
n
3
= m
3
lavversario pu risalire ad m estraendo una radice
cubica ordinaria
anche questa vulnerabilit pu essere rimossa
mediante un padding random
in pratica si evita che uno stesso messaggio cifrato venga
inviato a pi destinatari
e = 3 vulnerabilit/patch
Si osservi che nelle applicazioni pratiche di RSA,
il messaggio m generalmente una chiave di un
algoritmo di cifratura a chiave segreta e
in ogni caso m molto pi piccolo di n
sempre possibile aggiungere dei bit di
riempimento (padding) in modo tale che il messaggio
risultante presenti delle caratteristiche desiderate
se per ogni destinatario il padding scelto random la
precedente vulnerabilit viene rimossa
la vulnerabilit pu essere rimossa anche usando
come padding gli identificatori univoci (ID) dei
destinatari

Come scegliere p e q se e = 3
Essendo e = 3,
come possibile selezionare p e q garantendo che
e e (n) siano relativamente primi?
necessario garantire che (p 1) e (q 1) siano
relativamente primi rispetto a 3
ci pu ottenersi
scegliendo p tale che p mod 3 = 2, e
scegliendo q tale che q mod 3 = 2
(p 1) mod 3 = 1 (p 1) non divisibile per 3
(q 1) mod 3 = 1 (q 1) non divisibile per 3
Come scegliere p e q se e = 3
essendo p e q due interi dispari
p = 2k
p
+ 1
q = 2k
q
+ 1
per imporre anche che risulti
p mod 3 = 2
q mod 3 = 2
si pu porre
p = (2k
p
+ 1)3 + 2 = 6k
p
+ 5
q = (2k
q
+ 1)3 + 2 = 6k
q
+ 5
dopodich pu essere effettuato il test di primalit


Perch e = 65537?
La scelta di e = 65537
(in opposizione ad altri interi della stessa dimensione)
deriva dal fatto che 65537 = 2
16
+ 1 ed primo
(65537)
2
= 10000000000000001
lesponenziazione richiede 17 moltiplicazioni
pi lenta del caso e = 3, ma
molto pi veloce del caso in cui e scelto in modo
randomico; mediamente sono richieste 768
moltiplicazioni nel caso di 512 bit
non presenta le vulnerabilit viste nel caso e = 3
e = 65537 introduce vulnerabilit?
La scelta di e = 65537 rimuove o riduce quasi
del tutto le vulnerabilit viste nel caso e = 3
la prima vulnerabilit con 3 si ha se m
3
< n
nel caso e = 65537
a meno che n non sia molto pi lungo di 512 bit
non ci sono molti valori di m tali che m
65537
< n
quindi lestrazione della 65537-esima radice
ordinaria di m non costituisce una vulnerabilit
seria

e = 65537 vantaggi/svantaggi
la seconda vulnerabilit con 3 si ha se uno stesso
messaggio m cifrato inviato a 3 destinatari
nel caso e = 65537 la stesso tipo di vulnerabilit si ha
quando m viene inviato a 65537 destinatari!
non si pu dire certo che si tratti i un messaggio segreto!
in fine, la scelta di fissare a priori e = 3 ha richiesto di
scegliere n in modo tale che (n) e 3 fossero
relativamente primi
nel caso e = 65537 conviene
generare p e q come se e non fosse prefissato, e
rigettare ogni valore di p o q che uguale a 1 mod 65537
tale evento si verifica con una probabilit molto piccola (2
-16
)

Vulnerabilit arcane di RSA
Nel caso della firma digitale risulta che
per ogni numero x < n
x la firma digitale del messaggio m
x
= x
e
mod n
infatti, m
x
d
mod n = (x
e
mod n)
d
mod n = x
ed
mod n =
= x
(1 mod (n))
mod n = x mod n = x
banale falsificare la firma di qualcuno se il
messaggio m da firmare non interessa
la difficolt sta nel falsificare la firma di uno
specifico messaggio
Vulnerabilit arcane di RSA
generalmente, ci che viene firmato (messaggio +
padding) ha una struttura sufficientemente vincolata
vengono inseriti dei bit di riempimento organizzati in pattern
regolari
la probabilit che un numero random costituisca un
messaggio (padding incluso) valido trascurabile; cio
estremamente improbabile che un numero random
contenga i pattern regolari di bit
tuttavia, visto che i numeri in RSA sono molto grandi un
avversario ha a disposizione molti tentativi
i pattern di riempimento vanno scelti in modo opportuno

Smooth Numbers
Intuitivamente, uno smooth number un numero
scomponibile nel prodotto di (molti) numeri primi
ragionevolmente piccoli
non conviene usare una definizione assoluta; un
numero piccolo o grande in base alle capacit di
calcolo dellavversario
esempio, il numero 6056820 pi smooth del
numero 6567587, poich
6056820 = 2
2
3
2
5 7 11 19 23
6567587 = 13 557 907
Vulnerabilit smooth number
Si tratta di una vulnerabilit di RSA
prevalentemente teorica
nella pratica difficilmente realizzabile
richiederebbe unimmensa capacit di calcolo, la raccolta di
un numero enorme di messaggi firmati e molta fortuna (per
lavversario)
IDEA BASE
dalle firme s
1
e s
2
dei messaggi m
1
ed m
2
,
possibile calcolare le firme dei messaggi m
1
m
2
, m
1
/ m
2
,
m
1
j
, m
2
k
, e m
1
j
m
2
k
ad esempio, conoscendo la firma s
1
= m
1
d
mod n possibile
ottenere la firma di m
1
2
senza conoscere d (chiave privata)
infatti, (m
1
2
)
d
mod n = (m
1
d
)
2
mod n = (m
1
d
mod n)
2
mod n
Vulnerabilit smooth number
la firma di m
1
2
pari a s
1
2
mod n
se un avversario riesce a collezionare molti
messaggi firmati, pu ottenere la firma di ogni
messaggio m esprimibile come prodotto e/o
divisione di messaggi della collezione
in particolare, se ottiene le firme di due messaggi m
1
e
m
2
tali che il rapporto m
1
/ m
2
= p dove p un numero
primo
pu calcolare la firma di p
se abbastanza fortunato da raccogliere molte
coppie di questo tipo
pu calcolare la firma di molti numeri primi
Vulnerabilit smooth number
pu falsificare la firma di ogni messaggio dato dal
prodotto di ogni sottoinsieme di tali numeri primi ciascuno
elevato ad una qualunque potenza
con abbastanza coppie, pu falsificare la firma di
ogni messaggio rappresentato da uno smooth number
generalmente, ci che si firma con RSA un digest
messaggio con padding m* = pad(h(m))
al digest del messaggio m vengono aggiunti, in modo
opportuno, dei bit di riempimento (padding) ottenendo m*

se i bit di riempimento sono degli zeri, anzich essere
random pi probabile che m* sia uno smooth number

Vulnerabilit smooth number
invece, estremamente improbabile che un numero
random mod n sia smooth
con un padding a sinistra di soli zeri
lintero da firmare m
p
= h(m) rimane piccolo
il padding non riduce la probabilit che m
p
sia
smooth
con un padding a destra di soli zeri
m
p
= h(m) 2
k
un intero molto pi grande, ma
divisibile per una potenza di due
di nuovo, il padding non riduce la probabilit che m
p

sia smooth


Vulnerabilit smooth number
con un padding a destra random
lintero da firmare m
p
estremamente improbabile
che sia smooth
tuttavia, si espone RSA alla minaccia nota come il
problema della radice cubica

Problema della radice cubica
Si assuma che si optato per padding a destra
random
per ridurre la probabilit che le firme prodotte
siano smooth

si ha in seguente inconveniente se lesponente
pubblico e = 3
un attaccante pu virtualmente falsificare la
firma di un qualsiasi messaggio

Problema della radice cubica
supponiamo che un attaccante, Carol, voglia
falsificare la firma di un qualche messaggio m
avente digest h
m
allora
Carol applica un padding a destra, di h
m
,
considerando bit a zero ottenendo p
m
= h
m
0000
poi calcola la radice cubica ordinaria e la
arrotonda allintero pi vicino r = round(p
m
1/3
)
r la firma falsificata di m

infatti, r
e
= r
3
= p
m
ossia h
m
con un padding a destra che
apparentemente casuale
PUBLIC-KEY CRYPTOGRAPHY
STANDARD (PKCS)
Crittografia a Chiave Pubblica Parte I
PKCS
PKCS sta per Public-Key Cryprography
Stanbdard
Standard di Crittografia a Chiave Pubblica
si visto che ogni applicazione di RSA, cifratura,
decifratura e firma, pu essere soggetta a diversi
tipi di attacchi
che possono essere sventati con opportune
contromisure,
basate sulla scelta di unopportuna codifica/formato
(quindi padding) del messaggio da cifrare/firmare


PKCS: impieghi
esistono 15 standard PKCS per le diverse situazioni in
cui la cifratura a chiave pubblica viene utilizzata
nelle prossime slides si esaminer solo PKCS #1
Tale standard stabilisce le codifiche per
la chiave pubblica RSA
la chiave privata RSA
la firma RSA
la cifratura RSA di messaggi corti (ossia chiavi segrete)
la firma RSA di messaggi corti (tipicamente digest)

PKCS #1: minacce considerate
Lo standard PKCS #1 stato concepito per
fronteggiare le seguenti minacce:
cifratura di messaggi prevedibili
smooth number per le firme
destinatari multipli di uno stesso messaggio
quando e = 3
cifratura di messaggi di lunghezza inferiore ad un
terzo della lunghezza di n quando e = 3
firma di messaggi dove linformazione posta nei
bit pi significativi ed e = 3

PKCS #1: Cifratura
PKCS #1 definisce uno standard, tra laltro, per la
formattazione di un messaggio da cifrare con RSA
in genere, RSA non viene usato per cifrare messaggi
ordinari,
ma per cifrare delle chiavi segrete
per questioni di efficienza conviene usare la cifratura a
chiave segreta per dati ordinari
lo standard prevede il seguente formato per linput m
0 2 0
almeno otto ottetti
random non nulli
data
PKCS #1: Cifratura
i dati effettivi da cifrare, generalmente una chiave
segreta, sono pi corti del modulo (cio di n, che
generalmente ha una lunghezza di 512 bit)
K
DES
ha una lunghezza di 64 bit
K
3DES
ha una lunghezza di 128 bit
il 1 ottetto 0 (cio otto bit nulli)
ci garantisce che m < n; se fosse m > n la decifratura
produrrebbe m mod n m
il 2 ottetto 2, definisce il tipo di formato
il valore 1 stabilisce che m viene firmato
il valore 2 stabilisce che m viene cifrato

0 2 0
almeno otto ottetti
random non nulli
data
PKCS #1: Cifratura
seguono poi almeno otto ottetti di padding non
nulli scelti in modo randomico e indipendente
luno dallaltro
lottetto 0 (nullo) va scartato perch viene usato come
separatore del padding dalla parte dati
0 2 0
almeno otto ottetti
random non nulli
data
PKCS #1: protezione minacce cifratura
vediamo come le scelte del formato standard per la
cifratura permettono di sventare le minacce
precedentemente esaminate
Cifratura di messaggi prevedibili
con almeno otto ottetti (64 bit) di padding random
anche se un attaccante in grado di prevedere i dati
effettivi da cifrare
ad esempio i dati potrebbero appartenere ad un insieme con
pochi elementi noti allattaccante
lattaccante potrebbe cifrare ciascun dato e verificare se
quanto ottenuto coincide con il testo cifrato
lattaccante dovrebbe anche indovinare il padding
cio una sequenza di almeno 64 bit random
PKCS #1: protezione minacce cifratura
Spedizione di uno stesso messaggio cifrato a
pi di tre destinatari
nellipotesi e = 3

anche se i dati dati da cifrare sono esattamente gli
stessi per tutti i destinatari,
la scelta del padding random garantisce che,
in input allalgoritmo di cifratura sono forniti, con
elevatissima probabilit, dei messaggi distinti
PKCS #1: protezione minacce cifratura
Cifratura di messaggi di lunghezza inferiore ad un
terzo della lunghezza di n
nellipotesi e = 3

essendo il secondo ottetto non nullo, ( pari a 2),

il messaggio ottenuto m ha sicuramente una
lunghezza superiore ad un terzo della lunghezza
del modulo n

PKCS #1: firma digitale
PKCS #1 definisce anche uno standard per la
formattazione di un messaggio da firmare con
RSA
in genere, i dati da firmare consistono in un digest di
un messaggio, tipicamente 128 bit
analogamente alla cifratura necessario applicare un
padding
lo standard prevede il seguente formato per linput m
0 1 0
almeno otto ottetti di ff
16
tipo-di-digest e digest
il tipo-di-digest viene specificato
con una notazione ASN.1
PKCS #1: protezione minacce firma
il 1 ottetto pari 0 m < n
il 2 ottetto 1, e specifica il tipo di formato PKCS
in questo caso, una quantit da firmare
il padding con almeno otto ottetti pari a ff
16
(otto
bit a 1) rende la quantit da firmare molto grande

altamente improbabile che sia uno smooth
number
PKCS #1: protezione minacce firma
Domanda: perch viene anche incluso il tipo
di algoritmo di digest utilizzato?
espresso nella notazione ASN.1

Risposta: il tipo di digest incluso per due
motivi
1. viene standardizzato come comunicare allaltra
parte lalgoritmo di digest utilizzato
2. serve a prevenire una minaccia oscura
PKCS #1: protezione minacce firma
la minaccia oscura la seguente
una funzione di hash, ad esempio MD4, potrebbe
essere debole
qualcuno potrebbe essere in grado di generare un
messaggio con un particolare digest MD4
si supponga, che nel firmare un messaggio m venga usato
MD5, ma non sia incluso lalgoritmo di digest usato
un avversario potrebbe allora generare un messaggio m tale
che MD4(m) = MD5(m)
ed usare la firma corrispondente ad m per m
includere il tipo di algoritmo di digest
il rischio di falsificazione che si corre dipende solo
dalla robustezza di tale algoritmo
APPENDICE
Crittografia a Chiave Pubblica
Teoremi di Eulero e di Fermat
Teorema di Eulero: per ogni intero a
relativamente primo ad n si ha
a
(n)
= 1 mod n

nel caso in cui n primo (n) = n 1 il teorema
assume una forma pi semplice e un altro nome
Teorema di Fermat: se p primo e 0 < a < p
a
p 1
= 1 mod p

Bibliografia
[DES81] DES Modes of Operation, FIPS PUB 81, National
Bureau of Standards, U.S. Department of Commerce, 1981.
[KPS02] C. Kaufman, R. Perlman, M. Speciner. Network
Security Private Communication in a Public World.
Prentice Hall.
[PFL08] C. P. Pfleeger, S. L. Pfleeger. Sicurezza in
Informatica. Pearson, Prentice Hall.
[STA07] W. Stallings. Sicurezza delle reti. Pearson, Prentice
Hall.
[Wiki-it] http://it.wikipedia.org/wiki/
[Wiki-en] http://en.wikipedia.org/wiki/
[ISECOM] Institute for Security and Open Methodologies
Crittografia a Chiave Pubblica
Parte II

Luca Grilli
DIFFIE-HELLMAN
Crittografia a Chiave Pubblica Parte II
Diffie-Hellman Introduzione
Diffie-Helmann il primo sistema a chiave pubblica
utilizzato
meno generale di RSA; non serve n a cifrare/decifrare n
a firmare messaggi
La sua applicazione il cosiddetto scambio delle
chiavi Diffie-Hellman
permettere a due entit di accordarsi su un segreto
(chiave) condiviso,
senza rivelarlo, e
scambiandosi messaggi in chiaro su una rete pubblica
insicura
intercettando tutti i messaggi scambiati non si in grado di
risalire al segreto condiviso
Diffie-Hellman Introduzione
il segreto condiviso non viene generato da una delle
due entit dialoganti, diciamo Alice e Bob
n Alice n Bob generano autonomamente il segreto
ma il risultato dello scambio dei messaggi
in particolare, dopo essersi scambiati
complessivamente due messaggi (in chiaro)
che tutto il mondo pi conoscere
Alice e Bob conosceranno il segreto condiviso K
AB

K
AB
viene poi usato per proteggere la confidenzialit
con tecniche di cifratura convenzionali

Diffie-Hellman Introduzione
Diffie-Hellman realmente usato per stabilire una
chiave segreta condivisa in alcune applicazioni
ad esempio, nellambito della cifratura dei dati inviati in
una LAN

si osservi comunque che Diffie-Hellman non
incorpora alcuna forma di autenticazione
senza unautenticazione preliminare si rischia di
condividere il segreto con un impostore


Diffie-Hellman Algoritmo
PRECONDIZIONE
le due parti dialoganti, Alice e Bob, devono
condividere due numeri p e g, dove
p: numero primo grande
g: radice primitiva di p

p e g possono essere noti in anticipo,
possono essere resi di dominio pubblico in una repository
accessibile sia da Alice che da Bob, oppure
possono essere generati dalliniziatore della comunicazione,
diciamo Alice, e trasmessi a Bob nel messaggio che gli invier
Diffie-Hellman Fase 0
la Fase 0, viene eseguita dalliniziatore della
comunicazione qualora i numeri p e g non siano
pubblici

0A) Generazione dei numeri p e g
Alice genera (o estrae da un suo archivio) una coppia
di numeri p e g tali che
p un numero primo grande
g un radice primitiva di p

p e g possono essere subito inviati a Bob oppure
possono essere trasmessi nella fase 3A)
Diffie-Hellman Fase 1A e 1B
1A) Generazione del segreto privato s
A
Alice genera un numero random s
A
di 512-bit tale che s
A
<
p
s
A
non la chiave condivisa
s
A
non sar mai trasmesso a Bob

1B) Generazione del segreto privato s
B
analogamente Bob genera un numero random s
B
di 512-bit
tale che s
B
< p
s
B
non la chiave condivisa
s
B
non sar mai trasmesso ad Alice

N.B.: in generale la fase 1B) non avviene dopo la 1A) e prima della
2A); la tempistica sar illustrata nel seguito
tuttavia le singole fasi A e le singole fasi B rispettano lordine con
cui sono descritte
Diffie-Hellman Fase 2A e 2B
2A) Calcolo del valore pubblico T
A
= g
s
A
mod p

Alice calcola T
A
che poi sar inviato a Bob
T
A
pu essere rivelato a tutto il mondo senza inficiare la
sicurezza dellalgoritmo

2B) Calcolo del valore pubblico T
B
= g
s
B
mod p

analogamente Bob calcola T
B
che poi sar inviato
ad Alice
T
B
pu essere rivelato a tutto il mondo senza inficiare la
sicurezza dellalgoritmo

Diffie-Hellman Fasi 3A, 4A e 3B, 4B
3A) Alice invia T
A
a Bob
3B) Bob invia T
B
ad Alice

4A) Calcolo della chiave segreta K
AB
Alice utilizzando T
B
ricevuto da Bob calcola
K
AB
= T
B
s
A
mod p
4B) Calcolo della chiave segreta K
BA
Bob utilizzando T
A
ricevuto da Alice calcola
K
BA
= T
A
s
B
mod p

facile provare che K
AB
= K
BA



K
AB
= K
BA

K
AB
= T
B
s
A
mod p = (g
s
B
mod p)
s
A
mod p =
= g
s
B
s
A
mod p = g
s
A
s
B
mod p =
= (g
s
A
mod p)
s
B
mod p = T
A
s
B
mod p = K
BA

Sicurezza: noti p, g, T
A
e T
B
possibile calcolare s
A
,
s
B
oppure g
s
A
s
B
?
al momento non sono note tecniche per calcolare g
s
A
s
B

in un tempo ragionevole, anche conoscendo g
s
A
e g
s
B

ottenere s
A
da g
s
A
calcolare il logaritmo discreto
dlog
g
g
s
A
ove dlog
g
: Z Z
p
ma il calcolo di logaritmi discreti non fattibile in tempi
ragionevoli
Diffie-Hellman Schema
Alice Bob
p noto in anticipo
g noto in anticipo
genera s
A
< p
calcola T
A
= g
s
A
mod p
T
A

genera s
B
< p
calcola T
B
= g
s
B
mod p
calcola K
BA
= T
A
s
B
mod p
calcola K
AB
= T
B
s
A
mod p
T
B

Diffie-Hellman: autenticit principal
Diffie-Hellman non fornisce alcuna forma di autenticazione
Alice non pu essere certa che T
B
sia stato inviato da Bob e non da
un impostore
Bob non pu essere certo che T
A
sia stato inviato da Alice e non da
un impostore

possibile che un impostore, Mr. X, intercetti e modifichi i
messaggi facendo credere a Bob di comunicare con Alice e
viceversa
Alice e Bob non hanno modo di rendersi conto dellattacco in atto
un attacco attivo di questo tipo noto come Man-in-the-
Middle Attack
talvolta si usa anche il termine Bucket Brigade Attack
Man-in-the-Middle Attack
Alice Bob
p noto in anticipo
g noto in anticipo
s
A
< p
T
A
= g
s
A
mod p
T
A

K
BX
= T
X
s
B
mod p
Mr. X
s
X
< p
T
X
= g
s
X
mod p
s
B
< p
T
B
= g
s
B
mod p
T
X

K
XB
= T
B
s
X
mod p
T
B

T
X

K
XA
= T
A
s
X
mod p
K
AX
= T
X
s
A
mod p
Man-in-the-Middle Attack
Alice pensa che K
AX
sia la chiave segreta K
AB
che condivide
con Bob
Bob pensa che K
BX
sia la chiave segreta K
BA
che condivide
con Alice
Mr. X ha due chiavi segrete
K
XA
per comunicare con Alice
K
XB
per comunicare con Bob

DOMANDA
Assumendo che la chiave segreta condivisa serva per cifrare i
successivi messaggi tra Alice e Bob,
possibile agire sul contenuto di tali messaggi per verificare se
c stato o meno un attacco Man-in-the-Middle, ovvero per
autenticare i due principal?
?Autenticazione via password?
Ipotesi: Alice e Bob si sono preliminarmente accordate su
una coppia di password:
pwd
A
: password che Alice invia a Bob
pwd
B
: password che Bob invia ad Alice

si consideri allora la seguente procedura di autenticazione,
dove K
AB
la chiave segreta condivisa ottenuta con Diffie-
Hellman
A
l
i
c
e

B
o
b

E(K
AB
, Im Alice||pwd
A
)
E(K
AB
, Hi Alice, Im Bob||pwd
B
)
scambio chiavi Diffie-Hellman
?Autenticazione via password?
DOMANDE
Il precedente schema di autenticazione pu
permettere ad Alice e Bob di autenticarsi e di
verificare pertanto se in atto un attacco Man-in-
the-Middle?



Autenticazione via password NON sicura
RISPOSTA
NO. Se in atto un attacco Man-in-the-Middle la
precedente procedura di autenticazione via
password non sicura.
Mr. X pu decifrare tutte i messaggi che riceve da Alice
con K
AX
, cifrarli con K
XB
e inviarli a Bob.
Viceversa, pu decifrare tutte i messaggi che riceve da
Bob con K
XB
, cifrarli con K
AX
e inviarli ad Alice.



Autenticazione via password NON sicura
A
l
i
c
e

B
o
b

T
A
T
X

scambio chiavi Diffie-Hellman
T
X
T
B

scambio chiavi Diffie-Hellman
K
AX

chiave segreta condivisa
K
XB

chiave segreta condivisa
E(K
AX
, Im Alice||pwd
A
)
M
r
.

X

E(K
XB
, Im Alice||pwd
A
)
E(K
XB
, Hi Alice, Im Bob||pwd
B
) E(K
AX
, Hi Alice, Im Bob||pwd
B
)
alcune proposte
Includendo nei messaggi cifrati, che Alice e Bob si
scambiano, la chiave condivisa K
AB
,
lautenticazione diventa sicura?
Includendo invece il timestamp dellora corrente?
Includendo entrambi?

Se invece fossero incluse delle domande personali
del tipo
Che film abbiamo visto la prima volta che ci siamo
incontrati a Parigi?
Autenticazione a chiave segreta insicura se

A
l
i
c
e

B
o
b

T
A
T
X

scambio chiavi Diffie-Hellman
T
X
T
B

scambio chiavi Diffie-Hellman
K
AX

chiave segreta condivisa
K
XB

chiave segreta condivisa
E(K
AX
, Im Alice||pwd
A
||K
AX
||t
0
)
M
r
.

X

E(K
XB
, Hi Alice, Im Bob||pwd
B
||K
XB
||t
2
)
E(K
XB
, Im Alice||pwd
A
||K
XB
||t
1
)
E(K
AX
, Hi Alice, Im Bob||pwd
B
||K
AX
||t
3
)
se lautenticazione sfrutta la chiave segreta condivisa
K
AB
, ottenuta con Diffie-Hellman, non sicura rispetto
ad attacchi Man-in-the-Middle
Diffie-Hellman Sicurezza
Usando soltanto Diffie-Hellman non possibile
verificare se in atto un attacco Man-in-the-
Middle
i principal non possono autenticarsi reciprocamente

Diffie-Hellman sicuro soltanto nel caso di
attacchi passivi
un intruso intercetta i messaggi, ma non li modifica
Attacco Man-in-the-Middle Difese
Per difendersi da attacchi attivi sono attuabili due
strategie generali

Diffie-Hellman con Numeri Pubblici

Scambio Diffie-Hellman Autenticato
Diffie-Hellman con Numeri Pubblici
Un possibile modo per sventare attacchi attivi
evitare che p, g, s
A
, s
B
, T
A
e T
B
vengano
generati/calcolati ad ogni scambio
p, g, T
A
e T
B
potrebbero essere resi pubblici in una
repository fidata
p, g saranno uguali per tutti gli utenti
ogni utente U pubblica il proprio valore T
U
,
mantenendo privato il segreto s
U
Diffie-Hellman con Numeri Pubblici
ne consegue che,
se un avversario non in grado di accedere alla
repository e di modificare i valori pubblici, allora
Diffie-Hellman diventa sicuro anche nel caso di
attacchi attivi

inoltre
non pi necessario lo scambio dei valori T
A
e T
B
consultando la repository ogni utente A pu ottenere
la chiave K
AB
che condividerebbe con lutente B

Scambio Diffie-Hellman Autenticato
Se Alice e Bob conoscono un qualche tipo di informazione
che permette loro di autenticarsi reciprocamente
una chiave segreta condivisa K
AB
; da non confondere con la chiave
concordata con Diffie-Hellman K
AB
la propria coppia chiave privata, chiave pubblica e la chiave
pubblica dellaltro

Possono usare tale(i) informazione(i) per provare che sono
realmente loro, e non un impostore, coloro che generano i
valori di Diffie-Hellman g, p, T
A
e T
B

tale prova pu avvenire sia contestualmente che dopo lo scambio
Diffie-Hellman esaminato in precedenza
in tal caso si parla di scambio Diffie-Hellman autenticato
Scambio Diffie-Hellman Autenticato
alcune possibili soluzioni sono:

Autenticazione contestuale allo scambio Diffie-Hellman
Cifrare lo scambio Diffie-Hellman con la chiave segreta K
AB
Cifrare il valore Diffie-Hellman con la chiave pubblica dellaltro
interlocutore
Firmare il valore Diffie-Hellman con la propria chiave privata

Autenticazione successiva allo scambio Diffie-Hellman
Dopo lo scambio Diffie-Hellman, trasmettere un hash della
chiave concordata K
AB
, del proprio nome e della chiave segreta
K
AB
Dopo lo scambio Diffie-Hellman, trasmettere un hash del valore
Diffie-Hellman trasmesso e della chiave segreta K
AB

Scambio Diffie-Hellman Autenticato
Notazione adottata
K
AB
: chiave segreta condivisa tra Alice e Bob prima di
effettuare lo scambio Diffie-Hellman

K
AB
: chiave concordata con Diffie-Hellman

K
AB
{msg}: cifratura di msg con la chiave segreta K
AB
, cio
E(K
AB
, msg)

{msg}
Bob
: cifratura di msg con la chiave pubblica di Bob,
cio E(PU
Bob
, msg)

[msg]
Bob
: firma di msg con la chiave privata di Bob, cio
E(PR
Bob
, msg)
K
AB
{scambio Diffie-Hellman}
Scambio Diffie-Hellman cifrato con la chiave
segreta K
AB
A
l
i
c
e

B
o
b

K
AB
{Im Alice, p, g, T
A
}
K
AB
= T
B
s
A
mod p = T
A
s
B
mod p = K
BA
K
AB
{Hi Alice, Im Bob, T
B
}
{ T }
OtherPublicKey
Cifratura del valore pubblico Diffie-Hellman T,
con la chiave pubblica dellaltro interlocutore

A
l
i
c
e

B
o
b

Im Alice, p, g, {T
A
}
Bob
K
AB
= T
B
s
A
mod p = T
A
s
B
mod p = K
AB
Hi Alice, Im Bob, {T
B
}
Alice
[ T ]
MyPrivateKey
Cifratura del valore pubblico Diffie-Hellman T,
con la chiave propria chiave privata

A
l
i
c
e

B
o
b

Im Alice, p, g, [T
A
]
Alice
K
AB
= T
B
s
A
mod p = T
A
s
B
mod p = K
BA
Hi Alice, Im Bob, [T
B
]
Bob
dopo scambio hash(K
AB
, name, K
AB
)
Dopo lo scambio Diffie-Hellman, trasmettere un hash
della chiave concordata K
AB
, del proprio nome e della
chiave segreta K
AB
A
l
i
c
e

B
o
b

Im Alice, h(K
AB
, Alice, K
AB
)

K
AB
= T
B
s
A
mod p = T
A
s
B
mod p = K
BA
Hi Alice, Im Bob, h(K
AB
, Bob, K
AB
)

g, p, T
A


T
B
dopo scambio hash(T, K
AB
)
Dopo lo scambio Diffie-Hellman, trasmettere un hash
del valore Diffie-Hellman trasmesso e della chiave
segreta K
AB
A
l
i
c
e

B
o
b

Im Alice, h(T
A
, K
AB
)

K
AB
= T
B
s
A
mod p = T
A
s
B
mod p = K
BA
Hi Alice, Im Bob, h(T
B
, K
AB
)

g, p, T
A


T
B
Diffie-Hellman altro svantaggio
Oltre alla mancanza di autenticazione, Diffie-
Hellman classico presenta anche il seguente
svantaggio

La comunicazione cifrata, con la chiave
concordata, pu avvenire soltanto dopo
lesecuzione di uno scambio attivo
Alice non pu inviare un messaggio cifrato a Bob
prima di ricevere T
B
Chiavi pubbliche/private D-H
Tale problema pu essere ovviato
introducendo le chiavi pubbliche Diffie-
Hellman
Una chiave pubblica D-H una tripla p, g, T
dove T = g
s
mod p
Ovviamente s la corrispondente chiave privata
Le chiavi pubbliche vanno custodite in un luogo
fidato e accessibile da tutti in modo sicuro
La chiave pubblica di Bob p
B
, g
B
, T
B


Chiavi pubbliche/private D-H
Esercizio
Utilizzando le chiavi pubbliche D-H, illustrare una
procedura che consenta ad Alice di inviare un
messaggio cifrato a Bob, con la chiave concordata
K
AB
, anche se Bob risulta essere inattivo.
cio Alice deve essere in grado di cifrare senza dover
attendere alcuna risposta da Bob,
Bob, una volta attivo, dovr poter calcolare K
AB
e
decifrare il messaggio
Chiavi pubbliche/private D-H
Alice Bob
chiave pubblica di Bob
p
B
, g
B
, T
B


genera s
A
< p
B
calcola T
A
*
= g
B
s
A
mod p
B
calcola K
AB
= T
B
s
A
mod p
B
cifra msg E(K
AB
, msg)

calcola K
BA
= (T
A
*
)
s
B
mod p
B
decifra E(K
AB
, msg)
msg = D(K
BA
, E(K
AB
, msg))

Bob inattivo
SOLUZIONE
T
A
*
, E(K
AB
, msg)

ELGAMAL SIGNATURE
Crittografia a Chiave Pubblica Parte II
Introduzione
la firma digitale ElGamal sfrutta opportunamente le chiavi
pubbliche e private Diffie-Hellman

ogni individuo deve avere una coppia PU, PR durevole nel
tempo
la chiave pubblica PU la tripla p, g, T
la chiave privata PR corrispondente il numero s tale che T = g
s
mod p

la firma di un messaggio m richiede la generazione di una coppia
PU
m
, PR
m
per il messaggio stesso

il calcolo della firma richiede luso di una funzione di hash sicura

la verifica della firma consiste nel verificare luguaglianza di due
particolari espressioni

Parametri
h(): una funzione di hash resistente alle collisioni

p: un numero primo grande
tale da rendere infattibile il calcolo del logaritmo
discreto
g < p: una radice primitiva di p

tali parametri possono essere condivisi tra tutti gli
utenti
Fase 0 Generazione delle chiavi
Tale fase va eseguita soltanto una volta dal firmatario
non va eseguita ogni volta che si firma un messaggio

Scegliere randomicamente un intero s, da non
divulgare, tale che 1 < s < p 1
Calcolare T = g
s
mod p
La chiave pubblica PU del firmatario la tripla p, g, T
La chiave privata PR del firmatario s
Fase 1 Firma di un messaggio
per firmare un messaggio m il firmatario esegue i seguenti passi

Calcola una coppia PU
m
, PR
m
per m
sceglie randomicamente un intero s
m

tale che 0 < s
m
< p 1 e gcd(s
m
, p 1) = 1
calcola T
m
= g
s
m
mod p; PU
m
, PR
m
= p, g, T
m
, s
m


Calcola il digest d
m
= h(m||T
m
)

Calcola la quantit X
m
= (s
m
+ d
m
s) mod (p 1) che la
firma del messaggio
talvolta si dice che la firma di m la coppia T
m
, X
m


Il messaggio m trasmesso insieme a T
m
e X
m


Fase 2 Verifica della firma
il destinatario di m e della firma T
m
, X
m
verifica la
firma come segue

Verifica preliminarmente che
0 < T
m
< p e che
0 < X
m
< p 1
Calcola il digest d
m
= h(m||T
m
)
Verifica la validit della seguente uguaglianza
g
X
m
mod p = T
m
T
d
m
mod p

la firma accettata solo se tutte le precedenti
verifiche sono superate, altrimenti la firma rigettata
Correttezza
Lalgoritmo corretto nel senso che la firma generata
sar sempre accettata dal verificatore

Prova
si osservi che (p) = p 1 la funzione totiente di p
g
X
m
mod p = g
(s
m
+ d
m
s) mod (p)
mod p =
= g
s
m
+ d
m
s
mod p =
= ((g
s
m
mod p) (g
d
m
s
mod p)) mod p =
= (T
m
(g
s
mod p)
d
m
) mod p =
= T
m
T
d
m
mod p

Sicurezza
Un avversario pu forgiare una firma
calcolando la chiave privata s del firmatario, o
individuando dei messaggi collidenti della funzione di hash
h()
entrambi i problemi sono ritenuti difficili

Si pu inoltre verificare (anche empiricamente) che
se il messaggio m viene modificato, dopo essere stato
firmato, con elevatissima probabilit la verifica della firma
fallisce
nessuno in grado di produrre una firma valida senza
conoscere la chiave privata s

DIGITAL SIGNATURE STANDARD
(DSS)
Crittografia a Chiave Pubblica Parte II
DSS Introduzione
Il National Institute of Standards and Technology (NIST)
nel 1991
ha proposto un algoritmo per la firma digitale basato su
ElGamal
lalgoritmo noto come DSA: Digital Signature Algorithm
le differenze tra DSA e ElGamal riguardano
prevalentemente le prestazioni
anzich eseguire tutti i calcoli mod p; ove p un numero primo di
512 bit
alcuni sono eseguiti mod q; ove q un numero primo di 160 bit
che divide p 1
esponenti di 160 bit anzich di 512 rendono il calcolo della
firma tre volte pi veloce
DSS Introduzione
tuttavia, alcune scelte fatte rendono DSS meno
efficiente di quanto poteva essere
in particolare, unoperazione dinversione deve essere
eseguita da entrambe le parti; dal firmatario e da chi
verifica la firma
si poteva optare per una soluzione pi facile e al tempo
stesso (complessivamente) pi efficiente, in cui
linversione deve essere eseguita solo dal firmatario
invece DSS, permette al firmatario di pre-calcolare il
suo inverso prima ancora di avere il messaggio,
a scapito di richiedere anche a chi verifica la firma di
calcolare un inverso
DSS Introduzione
DOMANDA: perch si deciso di favorire il firmatario a
discapito di chi deve verificare la firma?
per ogni firma c almeno una verifica, altrimenti non ci sarebbe la
necessit di firmare!
RISPOSTA: tale decisione pu rendere pi efficiente
lautenticazione fatta tramite smart card (applicazioni in cui
DSS usata)
una smart card dotata di un processore molto lento
il log in di un utente si basa sulla firma e verifica della firma
linversione loperazione computazionalmente pi dispendiosa
una smart card impiegherebbe alcuni minuti per eseguirla
conviene pertanto alleggerire il costo computazionale della
firma digitale sul lato smart card; anche se ci comporta un
processo di verifica pi dispendioso, ma ci tollerabile dato che
la verifica viene eseguita da calcolatori molto veloci
Algoritmo DSS Generazioni chiavi
0.1 Genera p e q (che saranno pubblici); q un numero primo di
160 bit, p un numero primo di 512 bit tale che p = kq + 1
0.2 Genera un numero g (che sar pubblico), tale che g
q
= 1 mod p
0.3 Scegli una coppia chiave pubblica/privata a lungo termine PU,
PR = T, S; ove S < q un numero random e T = g
S
mod p
1.0 Scegli una coppia chiave pubblica/privata associata al
messaggio PU
m
, PR
m
= T
m
, S
m
; generando un numero
random S
m
e ponendo T
m
= ((g
S
m
mod p) mod q).
1.1 Calcola linverso S
m
-1
mod q ci permette di guadagnare tempo
evitando di eseguire linversione in fase di firma.

Algoritmo DSS Firma del messaggio m
2.0 Calcola un message digest d
m
del messaggio.
Il NIST raccomanda di usare la funzione di hash SHS in congiunzione con DSS.
SHS calcola un hash di 160 bit che per pura casualit coincide con la lunghezza di q.
160 bit sono una scelta adeguata perch garantiscono la sicurezza dellhash e sono
un multiplo intero di 32 pi semplice la memorizzazione in sistemi con word di
32 bit. DSS pu essere usato con ogni funzione di hash, sebbene luso di hash con
pi di 160 bit non comporta un aumento di sicurezza
2.1 Calcola la firma X
m
=S
m
-1
(d
m
+ ST
m
) mod q
2.2 Trasmetti la seguente terna di informazioni m, T
m
, X
m
:
il messaggio m
il valore pubblico associato al messaggio T
m
la firma X
m
Le informazioni associate alla chiave pubblica, cio T, p, q e g, sono gi note e non
necessario trasmetterle con il messaggio.

Algoritmo DSS Verifica della firma
3.0 Calcola linverso mod q della firma X
m
-1
3.1 Calcola il digest del messaggio d
m
3.2 Calcola x
m
= d
m
X
m
-1
mod q

3.3 Calcola y
m
= T
m
X
m
-1
mod q

3.4 Calcola z
m
= (g
x
m
T
y
m
mod p) mod q

3.5 Se z
m
= T
m
la firma autentica

DSS Prova di correttezza
Per provare che la procedura di verifica corretta
necessario mostrare che
z
m
coincide con T
m
se le quantit m, T
m
, X
m
e T, p, q, g non sono alterate
PROVA
innanzi tutto, essendo g
q
= 1 mod p
esponente e si ha che g
e mod q
mod p = g
e
mod p
infatti, g
e
mod p = g
r
e
+ k
e
q
mod p = (g
r
e
g
k
e
q
) mod p =
= (g
r
e
mod p) (g
k
e
q
mod p) = (g
e mod q
mod p) (g
q
mod p)
k
e
=
= (g
e mod q
mod p) 1
k
e
= g
e mod q
mod p
sia v
m
= (d
m
+ ST
m
)
-1
mod q allora

DSS Prova di correttezza
X
m
-1
= [S
m
-1
(d
m
+ ST
m
)

mod q]
-1
= [S
m
(d
m
+ ST
m
)
-1
mod q]
X
m
-1
= S
m
v
m
mod q da cui sostituendo risulta
x
m
= d
m
X
m
-1
mod q = d
m
S
m
v
m
mod q
y
m
= T
m
X
m
-1
mod q = T
m
S
m
v
m
mod q quindi
z
m
= (g
x
m
T
y
m
mod p) mod q =
= (g
d
m
S
m
v
m
mod q
g
ST
m
S
m
v
m
mod q
mod p) mod q =
= (g
d
m
S
m
v
m
g
ST
m
S
m
v
m

mod p) mod q =
= (g
(d
m
+ ST
m
)S
m
v
m

mod p) mod q = (g
S
m

mod p) mod q = T
m



Generazione di p e q - osservazioni
La generazione dei numeri primi
p (512 bit) e q (160 bit) tali che p = kq + 1
computazionalmente molto dispendiosa
ma non deve essere eseguita molto frequentemente
p e q essendo pubblici potrebbero essere
definiti una volta per tutte (per lo meno p) ed
inseriti nello standard
tutti potrebbero usare lo stesso p, con alcuni
accorgimenti di sicurezza
Generazione di p e q - osservazioni
tuttavia la questione molto controversa!
si dice che possibile per qualcuno generare un p in
modo tale che questi possa violare le operazioni
crittografiche fatte con quel p e che nessuno sia in
grado di accorgersi di tale violazione
un particolare valore di p definito nello standard non
ben accetto
inoltre, se esiste un unico p, vero che si ha una
maggiore efficienza (non necessario generare nuovi p
e q),
ma gli attacchi allalgoritmo sarebbero pi semplici in
quanto dovrebbero funzionare solo per quel valore di p
Requisiti di Sicurezza
Per sicurezza si intende che valgono le seguenti
propriet
Firmare qualcosa non divulga la chiave privata S
Nessuno dovrebbe essere in grado di generare una
firma per un dato messaggio senza conoscere S
Nessuno dovrebbe essere in grado di generare un
messaggio avente una data firma
Nessuno dovrebbe essere in grado di modificare un
messaggio firmato in modo tale che la firma resti
valida
DSS Sicurezza
Domanda
DSS soddisfa tutti i requisiti di sicurezza?

Risposta
non esistono delle vere e proprie prove formali, ci sia
affida al Fundamental Tenet of Cryptography
inoltre, DSS ha la benedizione della NSA, ove
lavorano probabilmente i migliori crittografi del
mondo
tuttavia, c chi sostiene che NSA mai proporr un
algoritmo che non in grado di violare!
Sulla scelta del numero segreto S
m

Sia DSS che ElGamal richiedono che il firmatario generi un
unico numero segreto S
m

Usando uno stesso S
m
per firmare due messaggi distinti
si esporrebbe la chiave privata S del firmatario

Similmente, se S
m
fosse prevedibile o facilmente
indovinabile, si esporrebbe S

Domande
D1) Perch la chiave privata S del firmatario risulta essere
esposta una volta noto S
m
?
D2) Perch S risulta essere esposta quando due messaggi
vengono firmati usando lo stesso S
m
?
Sulla scelta del numero segreto S
m

Risposta 1 (caso DSS)
essendo X
m
=S
m
-1
(d
m
+ ST
m
) mod q la firma di m
ove X
m
, d
m
, T
m
, q sono note (almeno a chi verifica la
firma)
se anche S
m
fosse noto

S si otterrebbe calcolando il primo membro della
seguente uguaglianza
(X
m
S
m
d
m
)T
m
-1
mod q = S mod q

conoscendo S diventa banale forgiare una firma DSS
Sulla scelta del numero segreto S
m

Risposta 2 (caso DSS)
siano m e m* due messaggi firmati con lo stesso S
m
;
cio S
m
= S
m*
S
m
-1
= S
m*
-1
e T
m
= T
m*


X
m
= S
m
-1
(d
m
+ ST
m
) mod q
X
m*
= S
m
-1
(d
m*
+ ST
m
) mod q

(X
m
X
m*
) = S
m
-1
(d
m
+ ST
m
d
m*
ST
m
) mod q

(d
m
d
m*
) mod q = (X
m
X
m*
)S
m
mod q

(X
m
X
m*
)
-1
(d
m
d
m*
) mod q = S
m
mod q

Sulla scelta del numero segreto S
m

pertanto calcolando (X
m
X
m*
)
-1
(d
m
d
m*
) mod q
si otterrebbe S
m
e da S
m
si otterrebbe S (vedi Risposta 1)

Ne consegue che fondamentale scegliere S
m

in modo tale che sia unico e al tempo stesso
non prevedibile/indovinabile
Numeri segreti unici e non prevedibili
Ci sono diversi modi per generare un numero segreto
unico e non prevedibile/indovinabile

Usare numeri veramente casuali
ci richiede un hardware speciale
it's difficult enough to make hardware predictable, but it's
even harder to make it predictably unpredictable

Usare un generatore di numeri pseudo-random per
applicazioni crittografiche; Cryptographically Secure
Pseudo-Random Number Generator (CSPRNG)
necessaria memoria non-volatile per salvare lo stato
Numeri segreti unici e non prevedibili
Usare un hash crittografico di una combinazione
del messaggio con la chiave privata del firmatario
necessario conoscere il messaggio,
non possono essere eseguite operazioni in anticipo,
si perde il vantaggio in efficienza di ElGamal e DSS
rispetto RSA
ZERO KNOWLEDGE PROOF
SYSTEMS
Crittografia a Chiave Pubblica Parte II
Concetti base
La dimostrazione della conoscenza di un segreto
alla base di molte tecniche di autenticazione
nelle tecniche di autenticazione a chiave segreta il
segreto appunto la chiave condivisa tra i due
principal

nei protocolli a chiave pubblica il segreto noto solo
ad un principal
il quale deve dimostrare allaltro che detiene il segreto
senza fornire delle informazioni che possano
consentire ad un impostore di eseguire la prova
Dimostrazione a conoscenza zero
nellambito dei sistemi a chiave pubblica
Una dimostrazione a conoscenza zero (Zero
Knowledge Proof ZKP) se
1) permette di provare la conoscenza di un segreto
che deve essere associato alla chiave pubblica
2) senza fornire delle informazioni che permettano
ad un impostore di eseguire la prova (in seguito)
2.1) la prova non deve rivelare il segreto,
2.2) la prova non deve rivelare eventuali informazioni
che pur non essendo il segreto consentano comunque
ad un impostore di effettuare la prova
Concetti base
Le dimostrazioni a conoscenza zero sono
impiegate nei protocolli/sistemi di autenticazione
i cosiddetti Zero Knowledge Proof Systems (ZKPS)
RSA un esempio di ZKPS
possibile provare la conoscenza di un segreto associato alla
chiave pubblica; si pensi alla firma di una sfida
senza rivelare la chiave privata o altre informazioni che
permettano ad un impostore di impersonare il proprietario
della chiave privata
tuttavia, esistono ZKPS molto pi efficienti di RSA
anche se non permettono di cifrare e/o di firmare


ZKP La storia di Peggy e Victor
[Wiki-en, Wiki-it] In una
dimostrazione a conoscenza zero
sono sempre coinvolte due parti
il dimostratore Peggy: lentit che
dimostra di possedere il segreto, e
il verificatore Victor: lentit che
verifica la correttezza della prova
Storia di Peggy e Victor
Peggy conosce la parola segreta per aprire
la porta magica di una caverna, che si
richiude automaticamente
la caverna ha la forma di un cerchio, con
l'entrata su un lato e la porta magica che
blocca l'altro lato
ZKP La storia di Peggy e Victor
Victor dice che la pagher per il
segreto, ma non fino a quando sar
sicuro che lei lo conosca veramente
Peggy dice che gli dir il segreto, ma
non prima di ricevere i soldi
Pianificano quindi uno schema con il
quale Peggy pu provare di conoscere
la parola senza dichiararla a Victor
Prima, Victor aspetta fuori dalla
caverna mentre Peggy entra
Etichettiamo il sentiero sinistro e
quello destro partendo dall'entrata con
A e B
Peggy sceglie a caso uno dei due
sentieri
ZKP La storia di Peggy e Victor
Quindi, Victor entra nella caverna e grida
il nome del sentiero che Peggy dovr
utilizzare per ritornare indietro, fra A e B,
preso a caso
Se si ipotizza che lei conosca veramente
la parola magica, facile: apre la porta,
se necessario, e ritorna attraverso il
sentiero desiderato
da notare che Victor non conosce il
sentiero per il quale Peggy entrata
ZKP La storia di Peggy e Victor
Comunque, supponiamo che Peggy non conosca la parola
allora, sarebbe in grado di tornare attraverso il sentiero chiamato
se Victor avesse scelto il nome dello stesso sentiero per cui lei era
entrata
poich Victor ha scelto A o B a caso, avrebbe il 50% di probabilit
di indovinare correttamente
se i due ripetessero questo trucco molte volte, diciamo venti volte
una dopo l'altra,
l'opportunit per Peggy di anticipare correttamente tutte le
richieste di Victor diventerebbe statisticamente molto piccola (in
virt della probabilit di eventi indipendenti)

Perci, se Peggy appare in modo affidabile all'uscita
chiamata da Victor, questo pu concludere che molto
probabilmente conosca davvero la parola segreta

Autenticazione a conoscenza zero
Uno schema di autenticazione a conoscenza zero
(Zero Knowledge Authenication Scheme ZKAS)
consiste in unautenticazione che sfrutta una ZKP
non si tratta di una tecnica deterministica, ma
probabilistica
anche RSA in fondo probabilistica
deve poter essere resa arbitrariamente piccola la
probabilit che
un dimostratore onesto fornisca una prova errata
un verificatore onesto fornisca una verifica errata quando il
dimostratore onesto
un dimostratore disonesto fornisca una prova corretta
ZKAS Requisiti
Uno schema di autenticazione a conoscenza
zero deve soddisfare i seguenti requisiti
a) ad ogni entit associato un segreto privato s e
una chiave pubblica k
s
, cio una coppia s, k
s

ovviamente, K
s
non deve esporre s
b) lautenticazione consiste nel provare la
conoscenza del segreto s
c) la prova deve essere a conoscenza zero
le informazioni addotte dal dimostratore non devono
poter essere riutilizzate con successo (in seguito) da
un impostore la prova non consente di rivelare s
ZKAS Requisiti
d) chi non conosce il segreto s non deve poter
eseguire la prova con successo
e) chi non conosce il segreto s deve poter verificare
la correttezza della prova utilizzando la chiave
pubblica k
s
dellentit che si sta autenticando
senza la chiave pubblica non deve essere possibile
verificare la correttezza della prova
Impiego di problemi difficili
I requisiti a), b), c), d), e) suggeriscono di
realizzare uno ZKAS partendo da un problema
matematico P ritenuto difficile
un problema classificato come NP-Hard ideale
un problema per il quale non noto un algoritmo
polinomiale, ma non ancora classificato NP-Hard
pu andare ma
in futuro qualcuno potrebbe trovare un algoritmo
polinomiale!
Impiego di problemi difficili
sia P il problema difficile che si vuole usare per
realizzare un ZKAS
indicheremo con
X: lo spazio delle istanze (input) di P
Y: lo spazio delle soluzioni (output)
xX: una particolare istanza di P
y
x
Y: una soluzione di P relativa allistanza x
alg
P
: un algoritmo che risolve P, cio un algoritmo in grado
di calcolare la soluzione y
x
associata ad una qualunque
istanza x
alg
P
x

y
x
Impiego di problemi difficili
i requisiti a), b), c), d), e) pongono un certo insieme di
vincoli sulla scelta del problema P
d) chi non conosce il segreto deve risolvere il
problema P nella sua forma generale
b) il problema si deve semplificare notevolmente
per chi conosce il segreto
il segreto deve influenzare le istanze del problema
chi conosce il segreto non deve risolvere la versione
generale del problema, ma una sua restrizione
tale restrizione deve essere risolvibile in tempo
polinomiale (meglio se in tempo costante o in tempo
lineare)
Impiego di problemi difficili
e) la prova (probabilistica) consiste nel fornire
delle coppie x, y dove
x: unistanza di P dipendente dal segreto s
cio x = x(s) (x(s) non nota al verificatore perch non
conosce il segreto s)
y
x
: la soluzione di P per linput x
il verificatore usando la chiave pubblica k
s
del
dimostratore deve poter verificare, con elevata
probabilit, che y
x
veramente la soluzione
corrispondente a x
Impiego di problemi difficili
se tutti i requisiti sono soddisfatti tranne il
requisito c), per soddisfare questultimo basta
procedere nel seguente modo
il dimostratore deve prevedere due versioni del
problema; la versione P
A
e la versione P
B
y
x
A
sar la soluzione di P
A
per linput x
y
x
B
sar la soluzione di P
B
per linput x
inoltre, ottenere y
x
A
da y
x
B
e viceversa, deve continuare
ad essere un problema difficile
(N.B.: non necessario che entrambe le soluzioni siano verificabili
con la chiave pubblica k
s
; una delle due, diciamo y
x
B
, pu anche
essere verificata senza luso di k
s
)
Impiego di problemi difficili
a questo punto, il protocollo pu modificarsi come segue

il dimostratore anzich fornire direttamente delle coppie
x1, y
x1
, x2, y
x2
, , xN, y
xN


fornisce prima una sequenza di istanze x1, x2, , xN

poi, il verificatore, attribuisce in modo random ad ogni
istanza xi una di due etichette
ad esempio 0 o 1 (oppure A e B)

per ciascun input xi, il dimostratore fornisce la soluzione di
P
A
se xi era etichettato con 0
P
B
se xi era etichettato con 1
Impiego di problemi difficili
il dimostratore pu comunque fornire un numero
adeguato di coppie xi, y
xi
A
i = 1, , N
basta che N sia sufficientemente grande

al contempo, il verificatore ha una scarsa probabilit di
impersonare il dimostratore riciclando vecchi input xi
poich per ogni istanza xi ha il 50% di probabilit di conoscere la
relativa soluzione y
xi
A

e il 50% di probabilit di conoscere y
xi
B
mai dispone di entrambe le soluzioni
al crescere di N la probabilit di rispondere correttamente a tutte
le istanze tende a zero
ovviamente, si assume che lo spazio delle istanze X sia enorme
e che sia estremamente improbabile che una stessa istanza capiti
in due sequenze qualsiasi

ZKAS schema generale
Im Peggy, x
1
, x
2
, x
3
, , x
N-1
, x
N
Hi Peggy, here is my selection
x
1
, A, x
2
, B, x
3
, B, x
N-1
, A, x
N
, A

y
1
A
y
2
B
y
3
B
y
N-1
A
y
N
A
P
e
g
g
y

V
i
c
t
o
r

Problema di isomorfismo di grafi
[KPS02] propone una ZKAS che sfrutta il problema di
isomorfismo di grafi (Graph Isomorphism Problem GIP)
Due grafi con lo stesso numero di vertici sono
isomorfi se possibile rinominare i vertici di uno
con i nomi dellaltro ottenendo questultimo

pi formalmente
Due grafi G
1
= (V
1
, E
1
) e G
2
= (V
2
, E
2
), con lo stesso
numero di vertici, sono isomorfi se esiste una
biiezione f : V
1
V
2
tale che (u, v)E
1
se e solo se
(f(u), f(v))E
2

Esempio Due grafi isomorfi
a
b
c
d
g
h
i
j
1 2
3 4
5 6
7 8
f(a) 1
f(b) 6
f(c) 8
f(d) 3
f(g) 5
f(h) 2
f(i) 4
f(j) 7
G
1
G
2
f

ZKAS con P ottenuto da GIP
Si osservi che ad oggi
non noto un algoritmo polinomiale per risolvere
GIP; tuttavia non esiste una prova che GIP sia NP-
hard
dati due grafi isomorfi G
1
e G
2
, calcolare la
biiezione f tra i loro vertici non praticabile in un
tempo ragionevole

viene pertanto illustrato come usare GIP per
realizzare un ZKAS
ZKAS con P ottenuto da GIP
il dimostratore, Peggy, genera un grafo G
A
molto
grande (diciamo di 500)
rinominando in modo casuale i vertici di G
A

ottiene un grafo G
B
isomorfo per costruzione a G
A

Peggy, pertanto conosce la biiezione f che
trasforma G
A
in G
B
f il segreto s di Peggy, cio la sua chiave privata
nessun altro pu calcolarla in un tempo ragionevole
la chiave pubblica k
s
di Peggy la coppia di grafi
G
A
, G
B


ZKAS con P ottenuto da GIP
per provare a Victor che lei realmente Peggy,
rinominando in modo casuale i vertici di G
A
(o di
G
B
) genera un nuovo insieme di grafi G
1
, G
2
, , G
K

isomorfi a G
A
e pertanto anche a G
B
invia G
1
, G
2
, , G
K
a Victor
poi Peggy, chiede a Victor di specificare per
ciascun G
i
se desidera ottenere la biiezione
rispetto a G
A
oppure quella rispetto a G
B
fondamentale che Victor non ottenga entrambe le
biiezioni per ciascun G
i
ZKAS con P ottenuto da GIP
Peggy per ciascun grafo G
i
invia a Victor la
biiezione con G
A
o con G
B
coerentemente con la
scelta di Victor per quel grafo

Im Peggy, G
1
, G
2
, G
3
, , G
k-1
, G
k
Hi Peggy, here is my selection
G
1
, G
A
, G
2
, G
B
, G
3
, G
B
, G
k-1
, G
A
, G
k
, G
A


f
1A
f
2B
f
3B
f
k-1A
f
kA
P
e
g
g
y

V
i
c
t
o
r

ZKAS con P ottenuto da GIP
se un impostore cercasse di impersonare Peggy
intercettando e memorizzando tutte le
informazioni trasmesse

avrebbe il 50% di probabilit di rispondere
correttamente ad ogni istanza
se k sufficientemente elevato, k = 30, avrebbe
una probabilit pari a 1/2
30
di impersonare con
successo Peggy
ZKAS con P ottenuto da GIP
si osservi che il protocollo appena illustrato
realmente/completamente a conoscenza zero
nel senso che terminata lautenticazione Victor
oltre alla chiave pubblica conosce un insieme di
grafi isomorfi o G
A
o a G
B
e il relativo mapping
tali grafi non gli consentono di impersonare Peggy
un insieme analogo di grafi lo potrebbe benissimo
generare da se
ZKAS basato su GIP inefficiente
Sfortunatamente, lo schema di autenticazione a
conoscenza zero appena illustrato, che sfrutta
lisomorfismo di grafi, troppo inefficiente per
essere usato nella pratica!

si osservi inoltre che nel 2009 Dharwadker e Tevet
hanno fornito un algoritmo polinomiale per il problema
GIP,
ma non stato pubblicato su alcuna rivista scientifica
degna di nota
viene di fatto ignorato dalla comunit scientifica!
ZKAS basato su GIP inefficiente
Nelle prossime slide, si illustrer un protocollo di
autenticazione, estremamente efficiente, che
sfrutta un problema difficile nellambito
dellaritmetica modulare
a rigore tale schema di autenticazione non
completamente a conoscenza zero, anche se nella
pratica pu considerarsi tale
Tale protocollo stato pubblicato da Fiat-Shamir
nel 1987
Problema della radice quadrata modulare
n = pq: numero intero dispari
p, q: numeri primi
m < n: un intero assegnato (avente una radice
quadrata ordinaria non intera)

trovare un numero intero s tale che s
2
mod n = m
un problema difficile almeno quanto fattorizzare
un numero intero
s la radice quadrata modulo n (Modular Square
Root MSR)
ZKAS basato su MSR Fiat-Shamir
Generazioni delle chiavi
Peggy calcola la chiave pubblica n, v
n = pq il prodotto di due primi grandi, come in RSA
v un numero di cui Peggy conosce la radice quadrata
modulare,
ottenere v semplice, basta scegliere un numero
random s e porre v = s
2
mod n
s la chiave privata di Peggy da non rivelare
Peggy pu dimenticare i fattori p e q
n, v va divulgata a tutto il mondo
ZKAS basato su MSR Fiat-Shamir
Autenticazione
Peggy sceglie k numeri random r
1
, r
2
, , r
k
Per ogni r
i
invia a Victor r
i
2
mod n
Victor attribuisce a ciascun r
i
2
unetichetta che
vale o 1 o 0 e comunica tale etichettatura a Peggy
Peggy invia a Victor sr
i
mod n per ciascun r
i
2

etichettato con 1, e r
i
mod n per ciascun r
i
2

etichettato con 0
Victor eleva al quadrato ciascun numero della
risposta di Peggy
ZKAS basato su MSR Fiat-Shamir
e verifica che tale quadrato valga
vr
i
2
mod n se il corrispondente r
i
2
aveva etichetta
1, oppure
r
i
2
mod n se il corrispondente r
i
2
aveva etichetta 0
Im Peggy, r
1
2
, r
2
2
, r
3
2
, , r
k-1
2
, r
k
2

Hi Peggy, here is my selection
r
1
2
, 1, r
2
2
, 0, r
3
2
, 1,, r
k-1
2
, 0, r
k
2
, 1

sr
1
mod n, r
2
mod n, sr
3
mod n, , r
k-1
mod n, sr
k
mod n

P
e
g
g
y

V
i
c
t
o
r

ZKAS basato su MSR Fiat-Shamir
Supponiamo che Fred voglia impersonare Peggy
allora egli in grado di rispondere in modo
corretto agli r
i
2
che Victor etichetta con 0
ma non in grado di rispondere agli r
i
2
etichettati
con 1

DOMANDA: Per quale ragione necessario che
Victor etichetti con 0, ed in modo casuale, alcuni
r
i
2
?
ZKAS basato su MSR Fiat-Shamir
RISPOSTA
In assenza di etichette 0, il protocollo si
semplificherebbe
Peggy si limiterebbe ad inviare delle coppie
r
i
2
, sr
i
mod n
tuttavia non si avrebbe pi un protocollo a
conoscenza zero
Fred potrebbe infatti usare una precedente sequenza
inviata di Peggy ed impersonarla con successo
ZKAS basato su MSR Fiat-Shamir
letichettatura scelta in modo casuale da Victor
implica che Fred ha una probabilit del 50% di
rispondere in modo corretto ad ogni r
i
2
Fred potrebbe generarsi autonomamente gli r
i
, ma in
tal caso non saprebbe rispondere agli r
i
2
con etichetta 1
oppure potrebbe usare un insieme di r
i
2
etichettati in
passato con 1 in una precedente autenticazione,
ma allora non conoscerebbe i corrispondenti r
i
e non
saprebbe rispondere nel caso in cui letichetta 0
se k sufficientemente grande la probabilit che
Fred impersoni correttamente Peggy tende a 0
ZKAS basato su MSR Fiat-Shamir
ZKAS basato su MSR molto pi efficiente di RSA
assumendo k = 30
Peggy deve effettuare 45 operazioni modulari (30
quadrati pi una media di 15 moltiplicazioni per s)
Victor deve effettuare lo stesso numero di operazioni di
Peggy
usando RSA Peggy deve eseguire una
esponenziazione modulare
che consiste in una media di 768 moltiplicazioni
modulari
mentre Victor se la cava con 3 moltiplicazioni nel
caso in cui e = 3
ZERO KNOWLEDGE SIGNATURES
Crittografia a Chiave Pubblica Parte II
Zero Knowledge Signature
Ogni ZKPS pu essere trasformato in uno schema
di firma a chiave pubblica
per lo meno da un punto di vista teorico
nella pratica, le prestazioni in termini di consumo di banda e
di CPU escludono tale soluzione
In un qualsiasi sistema a conoscenza zero
Peggy ha un segreto che usa per trasmettere
qualcosa a Victor
ed in grado di rispondere ad ogni domanda posta da
Victor inerente quel qualcosa trasmesso
le domande di Victor possono essere di due tipi
Zero Knowledge Signature
un impostore pu rispondere in modo corretto
soltanto alle domande di uno solo dei due tipi
ad ogni domanda ha il 50% di probabilit di rispondere
correttamente
per rispondere correttamente a tutte e k le domande
ha una probabilit di (1/2)
k

in generale, Victor invia a Peggy una sfida, ovvero
una stringa binaria che codifica il tipo di domanda
a cui Peggy dovr rispondere
si tratta pertanto di uno schema interattivo

Zero Knowledge Signature Idea Base
Uno schema di firma non interattivo
non esiste alcun Victor che invia a Peggy una sfida
lo schema unidirezionale, Peggy ha un messaggio m
che desidera firmare
lidea quella di sostituire la sfida di Victor con il
digest di qualcosa dipendente dal messaggio
Peggy non potr predire loutput del digest,
ma conoscendo il segreto sar in grado di rispondere ad ogni
domanda; cosa che non pu fare un impostore
inoltre Victor deve poter verificare la firma con la
chiave pubblica di Peggy
Zero Knowledge Signature Fiat-Shamir
segue uno schema di firma derivato da Fiat-Shamir
Peggy sceglie k numeri random r
1
, r
2
, , r
k
k deve coincidere con il numero di bit dellalgoritmo di
digest utilizzato, es. k = 128 bit nel caso di MD5

Concatena il messaggio m con i valori r
i
2
mod n e
calcola il digest di quanto ottenuto, cio
h(m||r
1
2
mod n||r
2
2
mod n||||r
128
2
mod n)
I bit del digest vengono usati come surrogato di
Victor
La firma di m consiste nei k valori r
i
2
mod n pi le
relative k risposte di Peggy

Zero Knowledge Signature Fiat-Shamir
Si noti che la firma di un messaggio, a
differenza dellautenticazione, pu calcolarsi
anche off-line
un impostore ha pi tempo per selezionare un
insieme opportuno di r
i
per i quali in grado di
calcolare la radice quadrata mod n di vr
i
2
tuttavia, usando algoritmi di digest con almeno 64
bit tale rischio scongiurato

Bibliografia
[DES81] DES Modes of Operation, FIPS PUB 81, National
Bureau of Standards, U.S. Department of Commerce, 1981.
[KPS02] C. Kaufman, R. Perlman, M. Speciner. Network
Security Private Communication in a Public World.
Prentice Hall.
[PFL08] C. P. Pfleeger, S. L. Pfleeger. Sicurezza in
Informatica. Pearson, Prentice Hall.
[STA07] W. Stallings. Sicurezza delle reti. Pearson, Prentice
Hall.
[Wiki-it] http://it.wikipedia.org/wiki/
[Wiki-en] http://en.wikipedia.org/wiki/
[ISECOM] Institute for Security and Open Methodologies
Sistemi di Autenticazione
Introduzione

Luca Grilli
Premessa
Per autenticazione si intende il processo che
permette di verificare in modo affidabile lidentit
di qualcuno (o di qualcosa)
esistono svariate forme di autenticazione
una persona pu essere riconosciuta
dallaspetto fisico o dalla voce
da una guardia che confronta il viso con la foto nel badge
nel caso degli acquisti on-line, dalle informazioni associate
alla carta di credito

nel seguito si esamineranno le varie forme di autenticazione
Possibili scenari
Le varie forme di autenticazione possono
essere classificate in base
al tipo (persona o computer) di entit coinvolte
autenticazione computer/computer
autenticazione persona/computer
autenticazione persona/persona (non ci interessa)
alle informazioni e al modo in cui lautenticazione
avviene
autenticazione basata su password
autenticazione basata sullindirizzo
autenticazione crittografica


AUTENTICAZIONE BASATA SU
PASSWORD
Sistemi di autenticazione Introduzione
Autenticazione basata su password
Nel caso di autenticazione basata su password
lidentit equivale alla conoscenza della password
chi si deve autenticare invia la propria password, in
chiaro, allentit autenticante
la quale in grado di verificare se la password inviata
esiste e corrisponde allutente da cui stata inviata
Im Alice, the password is fiddlesticks
A
l
i
c
e

B
o
b

Ovviamente, le intercettazioni
costituiscono la minaccia principale
Un chiarimento
unautenticazione che richiede linserimento di un
password non detto che ricada nella categoria
autenticazione basata su password
se infatti le informazioni inviate risultano cifrate,
(magari con una chiave derivata dalla password)
allora si parler di autenticazione crittografica


Osservazioni
Domanda
Visto che lautenticazione crittografica molto pi
sicura, per quale ragione si usa lautenticazione basata
su password?
Risposta
per consentire ad una persona di effettuare il log-in in
una workstation difficile considerare protocolli di
autenticazione non basati su password
una persona ha difficolt a memorizzare delle chiavi segrete;
cio delle stringhe di 64 bit
sebbene, siano ormai disponibili dei gadget che
permetterebbero di risolvere tale problema
Osservazioni
sfortunatamente, anche nel caso di autenticazioni
computer/computer si ricorre talvolta a protocolli
basati su password
perch ad esempio inizialmente il protocollo era di tipo
uomo/macchina, ma poi si evoluto in
computer/computer
altre volte i progettisti ritengono (forse a ragione) che
luso di protocolli crittografici sia costoso in termini di
risorse di elaborazione e di tempo di sviluppo e
implementazione
altre volte la crittografia evitata a causa di questioni
legali
Altre criticit
si consideri il seguente scenario
un utente ha un account presso una workstation
inoltre ha la necessit di accedere, previo inserimento
di username e pwd, ad uno svariato numero di risorse
in rete distribuite su server distinti
per evitare la scomodit di inserire username e pwd
ogni volta che deve accedere ad una risorse di rete
sarebbe comodo che la workstation lo facesse in modo
automatico al suo posto,
cio le credenziali con cui lutente si autenticato
presso la workstation, possano venire inviate in modo
automatico da questultima ai vari server,
Altre criticit
ma ci comporta che deve essere usato lo stesso
username e pwd presso ogni server

Come possibile avere la stessa password su molti
sistemi diversi?
Si potrebbe assegnare ad ogni sistema la stessa
password in modo indipendente,
ma se poi sorge la necessit di modificarne una,
come possibile garantire la sincronizzazione?
Attacchi alle password Off-line vs On-line
Gli attacchi alle password possono essere di tipo
on-line o off-line
in un attacco on-line si tenta di indovinare la
password semplicemente inviandola al sistema
autenticante
per contrastarli, si pu limitare il numero di tentativi
ad esempio, gli sportelli bancomat ATM ritirano la tessera
dopo tre inserimenti errati della password
in alternativa il sistema potrebbe diventare sempre pi lento
allaumentare dei tentativi e/o
potrebbe insospettirsi e inviare una notifica ad un operatore
di sicurezza
Attacchi alle password Off-line vs On-line
invece, in un attacco off-line un avversario pu
catturare una quantit X derivata dalla password (ad
esempio lhash) con una tecnica nota
e poi,
prendendosi il tempo che vuole ed usando tutta la potenza
di calcolo e di memoria di cui dispone
scegliere password candidata p,
convertirla nel modo noto in X
p
e verificare se X
p
= X
ripetendo tale procedura se luguaglianza non sussiste
Attacchi alle password Off-line vs On-line
Un attacco off-line detto anche dictionary attack
perch le password candidate vengono prese da un
dizionario
se un avversario pu sferrare un attacco off-line,
allora necessario aumentare la grandezza dello
spazio cui appartiene il segreto
Memorizzare info. per autenticazione
Un server pu autenticare un utente solo se ha
accesso alle corrispondenti informazioni di
autenticazione
hash delle password, codice identificativo, ecc..
Molteplici sono i modi per gestire e memorizzare
tali informazioni
1. Sono individualmente configurate in ogni server
le info. dellutente Alice sono configurate in modo
indipendente in ogni server cui Alice ha accesso
2. Sono memorizzate in un Authentication Storage
Node (ASN) che offre il servizio di repository
un server che deve autenticare Alice pu richiederle
allASN poi pu eseguire da se lautenticazione
Memorizzare info. per autenticazione
1. Sono gestite in un Authentication Facilitator
Node (AFN) che offre il servizio di autenticazione
un server che deve autenticare Alice, rigira le
informazioni ricevute da Alice allAFN il quale esegue
lautenticazione rispondendo Yes o No al server
richiedente

ovviamente, nei casi 2. e 3. necessario che il
server autentichi a sua volta lASN o lAFN
altrimenti qualcuno potrebbe spacciarsi per
lASN/AFN e fornire informazioni di autenticazione
false
Memorizzare info. per autenticazione
Riguardo al dove memorizzare tali informazioni di
autenticazione
evitare database con password in chiaro
qualcuno, Trudy, potrebbe catturare il database
violando il nodo (server) che lo ospita, o
accedendo ad un backup
nel caso 1. Trudy potrebbe impersonare tutti gli
utenti di quel server
se un utente usa la stessa password su pi server allora
potrebbe essere impersonato anche in questi
nei casi 2. e 3., Trudy potrebbe impersonare tutti
gli utenti di tutti i server dellASN/AFN
Memorizzare info. per autenticazione
Esiste chiaramente un trade-off:
la strategia 1. pi costosa, essendo distribuita,
ma il rischio pi confinato
le strategie 2. e 3. sono meno costose, essendo
centralizzate, ma sono pi rischiose

Anzich memorizzare le password in chiaro
una possibilit memorizzare lhash
scegliendo in modo accurato la password si
protetti anche da attacchi di tipo dictionary


Memorizzare info. per autenticazione
In alternativa, il database potrebbe memorizzare
password cifrate (non in chiaro)
non c il rischio di dictionary attack
un intruso dovrebbe ottenere una chiave segreta
robusta, cio di elevata qualit
non derivata con una tecnica nota da una password dutente
sembra pertanto che memorizzare password cifrate
sia sempre la soluzione pi sicura
in pratica, una scelta abbastanza giusta per la
memorizzazione dei backup del database in supporti
di memorizzazione esterni al server
Memorizzare info. per autenticazione
ma non lo nel caso in cui si voglia proteggere il database
in esercizio
se il nodo del database viene violato da Trudy,
non dovrebbe essere difficile per Trudy ottenere la chiave di
cifratura che in genere memorizzata nellhard disk del server
in una posizione accessibile ad utenti con privilegi (ma gli intrusi
quasi sempre riescono ad ottenere i privilegi)
se la chiave non fosse nellhard disk sarebbe peggio!
vorrebbe dire che lamministratore di sistema inserisce a mano la
chiave segreta (128 it) ad ogni reboot quindi la chiave sar molto
probabilmente salvata sul suo PC
naturalmente possibile combinare entrambe le tecniche
cifrando il database con gli hash delle password
ottenendo i benefici di entrambe
AUTENTICAZIONE BASATA
SULLINDIRIZZO
Sistemi di autenticazione Introduzione
Autenticazione basata sullindirizzo
Si ha unautenticazione basata sullindirizzo se
lidentit della sorgente pu essere inferita
esaminando lindirizzo di rete dal quale arrivano i
pacchetti
lidea base che ciascun computer C memorizzi delle
informazioni che specificano gli account utenti, di altri
computer, accreditati ad accedere a C
ad esempio, se lutente Smith del calcolatore residente al
nodo N ha il permesso di accedere al computer C
ed eseguire richieste quale il log-in e comandi come
copy <source-file> <destination-file>
se C deduce che una richiesta arriva dal nodo N e da parte di
Smith, allora C onorer tale richiesta
Autenticazione basata sullindirizzo
Lautenticazione basata sullindirizzo sicura
rispetto alle intercettazioni, ma sottoposta alle
seguenti minacce
a) se qualcuno, diciamo Trudy, ottiene i privilegi su un
nodo FOO
oltre a poter accedere alle risorse di tutti gli utenti di FOO,
pu anche accedere alle risorse di rete di ogni utente con un
account su FOO
b) se Trudy pu impersonare gli indirizzi di rete dei
nodi, pu accedere a tutte le risorse di rete di tutti gli
utenti che hanno un account su qualcuno di tali nodi
Autenticazione basata sullindirizzo
Dipendentemente dallambiente (tipo di rete,
sistema operativo e configurazione),
lautenticazione basata sullindirizzo pu essere
pi o meno sicura rispetto ad inviare password in
chiaro

E chiaramente pi conveniente ed il
meccanismo di autenticazione scelto in molti
sistemi distribuiti
PROTOCOLLI DI AUTENTICAZIONE
CRITTOGRAFICI
Sistemi di autenticazione Introduzione
Protocolli di autenticazione crittografici
I protocolli di autenticazione crittografici possono essere
molto pi sicuri sia di quelli basati su password (in chiaro)
sia di quelli basati sullindirizzo

In un protocollo di autenticazione crittografico Alice
prova la sua identit eseguendo delle operazioni
crittografiche su quantit fornite da Bob

Le operazioni crittografiche eseguite da Alice
dipendono da uninformazione segreta nota solo ad
Alice o al pi anche a Bob

I protocolli di autenticazione crittografici saranno
ampiamente esaminati nel seguito
PASSWORD COME CHIAVI
CRITTOGRAFICHE
Sistemi di autenticazione Introduzione
Password come chiavi crittografiche
Le chiavi crittografiche, in particolare quelle dei
sistemi a chiave pubblica, sono costituite da sequenza
binarie casuali molto lunghe
una persona non pertanto in grado di ricordare
delle chiavi crittografiche
ma in grado di ricordare una password
spesso quindi conveniente disporre di tecniche per
derivare delle chiavi crittografiche a partire da
password
tecniche che trasformano una stringa di testo memorizzabile
da una persona in una chiave crittografica

Password Chiave DES
Sia pwd una stringa di testo
Calcola il digest h
pwd
= h(pwd)
La chiave DES si ottiene selezionando 56 bit dal
risultato h
pwd

chiaramente molto pi complicato e
computazionalmente costoso convertire una
password in una chiave privata RSA
dato che una chiave RSA deve godere di particolari
propriet aritmetiche
Password PU, PR Jeff Schiller
Jeff Schiller ha proposto un possibile modo per ottenere una
coppia di chiavi RSA da una password in un tempo
plausibile
Convertire la password in un seme per un generatore
di numeri casuali
Usare tale generatore per generare i numeri primi
grandi dai quali si ottengono la chiave pubblica e
privata

Si noti che eseguendo due volte la generazione delle
chiavi RSA si ottengono le medesime chiavi
Ovviamente nella pratica tale tecnica
computazionalmente inefficiente

Password PU, PR Jeff Schiller
la generazione delle chiavi RSA richiede infatti di
eseguire molti tentativi primi di ottenere un numero
primo grande
un trucco per accelerare i tempi il seguente
una volta trovata la prima coppia di chiavi, si contano
il numero di tentativi effettuati per la generazione dei
numeri primi p e di q
#t
p
, #t
q
= tentativi per p, tentativi per q
si chiede allutente di memorizzare oltre alla password
anche tale coppia #t
p
, #t
q

lesecuzioni successive dellalgoritmo possono
rigenerare p e q in un sol colpo


Password PU, PR Jeff Schiller
nel caso di autenticazione su una workstation si pu
anche pensare che la coppia #t
p
, #t
q
sia memorizzata
nella workstation stessa
non ha infatti alcun valore per chi non conosce la
password dutente a cui associata
tuttavia tecniche di questo tipo non sono usate
perch rimangono comunque
computazionalmente inefficienti




Chiave privata cifrata con la password
La soluzione comunemente adottata per evitare la
memorizzazione di una chiave privata PR
cifrare PR con una chiave segreta ottenuta dalla
password: E(PR, K
pwd
)
e memorizzare E(PR, K
pwd
) in una repository
accessibile dalla workstation dellutente
specificando le credenziale dellutente per la workstation
stessa
in modo tale che, la workstation dellutente, diciamo
Alice, possa in modo trasparente ad Alice recuperare
prima K
pwd
e poi decifrare la chiave privata


INTERCETTAZIONI E VIOLAZIONI
DEL SERVER AUTENTICANTE
Sistemi di autenticazione Introduzione
Scenario in esame
si consideri un utente, Alice, che deve autenticarsi
presso un server remoto Bob
per poter fruire dei servizi resi dal server Bob
Lautenticazione deve garantire che nessuno
sia in grado di impersonare Alice
anche se riesce ad intercettare i messaggi
scambiati tra Alice e Bob, e/o
riesce a violare il server Bob e ad accedere in
modo non autorizzato al database contenente le
informazioni per lautenticazione
Requisiti di sicurezza
consideriamo pertanto i seguenti requisiti d sicurezza
R1) protezione rispetto eventuali intercettazioni
delle informazioni trasmesse
se un avversario intercetta tali informazioni non deve
poter impersonare Alice
R2) protezione rispetto eventuali violazioni del
server e/o accessi in lettura non autorizzati al suo
database
se un intruso viola il server Bob e riesce ad accedere al
database non deve poter impersonare gli utenti di Bob
Osservazioni/Domande
Ovviamente, i requisiti R1) e R2) impongono
ladozione di una autenticazione crittografica

Domande
Come si pu procedere?
Conviene usare la password?
Conviene usare tecniche crittografiche a chiave
pubblica o a chiave segreta?
Uso di pwd
Alice
+ PU
Bob
Proviamo a combinare luso della password con
tecniche crittografiche a chiave pubblica
la password di Alice cifrata con la chiave pubblica di
Bob
nel database del server Bob la password non
memorizzata in chiaro, ma viene memorizzato il suo
digest
Im Alice, {fiddlesticks}
Bob
A
l
i
c
e

B
o
b

h(fiddlesticks)

PU
Bob
PR
Bob
Uso di pwd
Alice
+ PU
Bob

La precedente soluzione soddisfa i requisiti R1 ed R2?
R1 non soddisfatto
un impostore potrebbe riusare il messaggio inviato da Alice ed
impersonarla
inoltre si potrebbe ottenere la password con un attacco dictionary
se non viene applicato lo standard #PKCS1
R2 parzialmente soddisfatto
violando il server Bob si potrebbe ricavare la chiave privata PR
Bob
se la password non robusta un attacco off-line di tipo dictionary
potrebbe ricavarla
Im Alice, {fiddlesticks}
Bob
A
l
i
c
e

B
o
b

h(fiddlesticks)

Domanda: possibile modificare
questo schema di autenticazione?
PU
Bob
PR
Bob
Uso di pwd
Alice
+ PU
Bob

Si considerino le seguenti modifiche ove
random: numero random
tale numero implicito nello standard #PKCS1; se si segue
tale standard pu omettersi
timestamp: intero che codifica lora attuale
salt: numero random unico associato ad ogni utente
f(): una qualche funzione deterministica; pu anche
essere omessa


Im Alice, {fiddlesticks||random||timestamp}
Bob
A
l
i
c
e

B
o
b

h(f(salt||fiddlesticks))

PU
Bob
PR
Bob
Uso di pwd
Alice
+ PU
Bob

ora R1 abbastanza rispettato
la quantit random permette di sventare attacchi di
tipo dictionary sulle password cifrate con PU
Bob
il timestamp non consente di riciclare messaggi
scaduti; per, messaggi molto recenti potrebbero
ancora essere riciclati
invece R2 ancora parzialmente soddisfatto
violando il server Bob si potrebbe ricavare la chiave
privata PR
Bob

la presenza del salt rende pi difficile lattacco di tipo
dictionary sugli hash memorizzati nel database
anche se lintruso potrebbe individuare il salt!?
senza crittografia asimmetrica?



Domanda
Cosa succede se non fosse possibile ricorrere alla
cifratura a chiave pubblica?

Si assuma che Alice e Bob condividano un segreto S
AB

da cui sia possibile ottenere, con una procedura
conosciuta, una password K
AB

Uso di pwd
Alice
+ segreto condiviso
R1 continua ad essere soddisfatto abbastanza bene
R2 non soddisfatto: una violazione del server Bob
permetterebbe di ottenere il segreto condiviso S
AB
il segreto condiviso S
AB
in genere non sar protetto bene
quanto la chiave privata di Bob PU
Bob
la chiave privata PU
Bob
unica ed associata al server Bob,
pu essere protetta in luoghi e modi particolarmente sicuri
ad esempio potrebbe non essere salvata nellhard disk, ma
in una memoria non volatile speciale

A
l
i
c
e

B
o
b

h(f(salt||fiddlesticks))

S
AB
S
AB
Im Alice, K
AB
{fiddlesticks||random||timestamp}
Bob
Uso di password in chiaro
utilizzando password in chiaro
R1 non soddisfatto
R2 soddisfatto abbastanza bene
Im Alice, fiddlestikcs

A
l
i
c
e

B
o
b

h(f(salt||fiddlestikcs))

Chiavi crittografiche vs Password
Nellipotesi che Alice (o il suo client) disponga di
un qualche tipo di chiave crittografica
PR
Alice
: una chiave privata, o
K
AB
: una chiave segreta condivisa con Bob, non derivata
da password

E possibile migliorare i precedenti schemi di
autenticazione?
Conviene ancora usare tecniche a chiave pubblica
o sono preferibili tecniche a chiave segreta?
Uso di PR
Alice
La seguente soluzione,
che non fa uso di password,
ma sfrutta le propriet della firma digitale
soddisfa entrambi i requisiti R1 e R2
conosce PU
Alice
Im Alice

[R]
Alice
R

firmato con la chiave privata di Alice

R

A
l
i
c
e

B
o
b

Uso di K
AB
non derivata da pwd
Tale soluzione invece,
che non fa uso di password e
sfrutta una chiave segreta condivisa K
AB
tra Alice e Bob
soddisfa R1, ma non soddisfa R2; violando il server
Bob si otterrebbe il segreto K
AB
conosce K
AB
Im Alice

X(R, K
AB
)

X() una qualche funzione crittografica
X() = h((), K
AB
) oppure X() = K
AB
{}
R

A
l
i
c
e

B
o
b

Riassumendo
Se si desidera soddisfare a pieno i requisiti R1
e R2
conviene evitare luso di password
ed necessario ricorrere alla crittografia a chiave
pubblica

senza la crittografia a chiave pubblica diventa
molto complicato, se non impossibile, soddisfare
contemporaneamente R1 e R2,
mentre facile soddisfare o solo R1 o solo R2
INTERMEDIARI FIDATI
Sistemi di autenticazione Introduzione
Distribuzione delle chiavi segrete
si assuma che la sicurezza di una rete si basi sulla tecnologia
a chiave segreta
se la rete ha n nodi, e
ogni computer c deve poter autenticare ogni altro
nodo
c deve memorizzare n 1 chiavi
una per ogni altro sistema della rete
se un nuovo nodo viene aggiunto alla rete
dovrebbero essere generate n nuove chiavi
per avere una chiave segreta condivisa con tutti gli n nodi
pre-esistenti
Distribuzione delle chiavi segrete
sarebbe pertanto necessario distribuire tali n chiavi in
modo sicuro a tutti gli altri nodi della rete
tale strategia di gestione delle chiavi pu aver senso
solo per reti molto piccole!








Centri di distribuzione delle chiavi
Un centro di distribuzione delle chiavi, Key
Distribution Center (KDC), agevola la
gestione/distribuzione delle chiavi segrete

conosce le chiavi di tutti i nodi

se un nuovo nodo si aggiunge alla rete, sola una
chiave segreta, condivisa tra quel nodo e il KDC,
deve essere generata
Comunicazione tra due nodi del KDC








KDC
K
KDC
chiave segreta condivisa tra il nodo e il KDC
K
KDC
chiave segreta condivisa tra il nodo e il KDC
Comunicazione tra due nodi del KDC
Se un nodo deve comunicare con un nodo

comunica con il KDC in modo sicuro, e
usando la loro chiave segreta condivisa K
KDC

gli chiede di inviargli una chiave per comunicare con

il KDC autentica , sceglie un numero random R

da
usare come chiave segreta condivisa tra e

cifra R

con la chiave segreta K


KDC
che condivide con
, e
Comunicazione tra due nodi del KDC
trasmette a R

cifrata insieme alle istruzioni che
deve usare per comunicare con
in genere, il KDC non trasmette direttamente R

cifrato a ,
ma lo invia ad che poi lo inoltrer a

il messaggio cifrato per che il KDC invia ad , e che
dovr inoltrare a detto ticket

oltre a contenere R

il ticket contiene altre


informazioni utili
data di scadenza, nome del nodo , ecc.

KDC Vantaggi
I KDC semplificano la distribuzione delle chiavi
quando un nuovo utente deve essere aggiunto alla rete, o
quando si sospetta che una chiave dutente sia stata
compromessa

c un singolo punto della rete, il KDC, la cui
configurazione deve essere aggiornata

lalternativa al KDC installare le informazioni di un
utente in ciascun server ove potrebbe accedere
KDC Svantaggi
Luso dei KDC comporta per i seguenti svantaggi

contiene tutte le informazioni per impersonare un
utente ad un qualsiasi altro utente se
compromesso tutte le risorse di rete risultano
vulnerabili

un KDC un single point of failure, in caso di guasto
nessuno pu iniziare una comunicazione con uovi
utenti
le chiavi precedentemente distribuite continuano a
funzionare
KDC Svantaggi
possibile avere pi KDC (KDC multipli) con lo
stesso database di chiavi, ma ci comporta
una maggior complessit di gestione,
costi extra per le macchine e per la replicazione dei
protocolli, e
maggiori vulnerabilit, necessario proteggere pi
target da eventuali attacchi

un KDC pu costituire un collo di bottiglia
in questa caso, avere pi di un KDC pu alleviare tale
problema

Autorit di certificazione
La distribuzione delle chiavi pi facile con la
crittografia a chiave pubblica
ogni nodo deve custodire soltanto la propria chiave privata
tutte le chiavi pubbliche possono essere accessibili in un
unico punto
ma anche in questo caso continuano ad esserci dei
problemi
chi garantisce che le chiavi pubbliche disponibili in un dato
punto siano corrette
un intruso, Trudy, potrebbe sovrascrivere la chiave pubblica
di Alice con la propria, riuscendo cos ad impersonare Alice

Autorit di certificazione
per evitare la falsificazione delle chiavi pubbliche si ricorre
alle Autorit di Certificazione

Una Autorit di Certificazione, Certification Authority CA,
un intermediario fidato che genera i certificati,
cio dei messaggi firmati dalla CA contenenti il nome, la
chiave pubblica ed altre informazioni di uno specifico nodo

tutti i nodi dovranno essere pre-configurati con la chiave
pubblica della CA, in modo tale da poter verificare la sua
firma sui certificati rilasciati
si tratta dellunica chiave pubblica che devono conoscere a priori

Contenuto di un certificato
Un certificato include
il nome utente
persone fisica, organizzazione, server, applicazione,
la chiave pubblica dellutente
la data di scadenza
un numero seriale
e la firma, della CA che lo ha emesso, dellintero
contenuto del certificato

lo standard X.509 per le infrastrutture a chiave pubblica ha
definito il formato standard di un certificato
Visualizzazione di un certificato
Autorit di certificazione
i certificati possono essere memorizzati nel luogo
ritenuto pi conveniente
in un directory service, oppure
ciascun nodo pu memorizzare i certificati dinteresse
e trasmetterli durante lo scambio di autenticazione

in un certo senso le CA sono la controparte dei KDC
nelle infrastrutture a chiave pubblica
CA e KDC costituiscono lintermediario fidato la cui
compromissione pu arrecare seri danni allintegrit
della rete
Vantaggi della CA rispetto i KDC
La CA non necessario che sia on-line
pu risiedere in una stanza fisicamente ben protetta
(magari con una guardia)
si pu limitare laccesso alla CA ad una sola persona di
grande fiducia
questa persona interagendo con la CA, genera il certificato di un
dato utente, lo memorizza su un qualche supporto di memoria
esterna che pu consegnare a mano al diretto interessato
se la CA non on-line
nessun potenziale intruso pu accedervi per ottenere informazioni
utili
non deve implementare protocolli di rete che richiedono elevata
efficienza computazionale
pu essere implementata da un dispositivo estremamente
semplice e pertanto molto pi sicuro

Vantaggi della CA rispetto i KDC
Se la CA dovesse crashare, la rete continuerebbe a
funzionare
non sarebbe per possibile aggiungere nuovi utenti o
revocare certificati compromessi o di utenti sospetti
pertanto non essenziale avere CA multiple

I certificati sono poco sensibili ad eventuali attacchi
se memorizzati in modo conveniente, ma potenzialmente
insicuro (ad es. in un servizio di directory),
un sabotatore pu cancellare i certificati, impedendo
laccesso ai corrispondenti nodi della rete (attacco DOS)
ma non pu creare dei certificati fasulli o modificarli in
qualche modo se non dispone della chiave privata della CA
Vantaggi della CA rispetto i KDC
Una CA compromessa non pu decifrare le
conversazioni tra due nodi (reali) da lei serviti
mentre un KDC compromesso pu decifrare tutte le
conversazioni tra coppie di nodi da lui serviti
una CA compromessa
pu ingannare un utente, diciamo Alice
inviandogli una falsa chiave pubblica di Bob
e riuscire ad impersonare Bob in una comunicazione con Alice
ma non pu decifrare una comunicazione tra la vera Alice e il vero
Bob
la compromissione di una CA rimane un fatto molto
grave, ma non quanto la compromissione di un KDC
Revoca di certificati
Le CA presentano comunque il seguente svantaggio
rispetto i KDC
supponiamo che Fred offra dei servizi di hosting per conto
dellazienda X SpA
la societ X SpA fornisce a Fred un certificato (rilasciato a
favore della X SpA) necessario ad autenticare il server
Fred conosce la chiave privata della chiave pubblica
certificata
supponiamo inoltre che a causa di un contrasto con Fred, la
X SpA decida di interrompere il rapporto di lavoro
se il certificato ancora valido Fred pu continuare a
rendere dei servizi per conto della X SpA, magari anche
danneggiandola
Revoca di certificati
per la X SpA sarebbe importante informare gli utenti di
non accettare il certificato generato per Fred e ancora
in corso di validit
con i KDC tale problema di facile soluzione, basta
rimuovere K
Fred
dal KDC

ovviamente si ha un problema analogo anche
quando viene smarrita, o peggio rubata, la chiave
privata associata alla chiave pubblica certificata

Revoca di certificati
nel caso delle CA non facile estromettere qualcuno
che detiene una chiave privata la cui chiave pubblica
certificata
si noti che potrebbe essere molto rischioso attendere la
scadenza naturale del certificato; in queste situazioni
conviene revocare il certificato

Si revoca un certificato quando,
a partire da un certo momento,
non devono essere pi considerate valide le firme
generate con la chiave privata
abbinata alla chiave pubblica contenuta nel certificato
Liste di certificati revocati
La revoca di un certificato si attua inserendo
un riferimento al certificato allinterno di una
lista di revoca (Certificate Revocation List CRL)
una CRL elenca una lista di numeri seriali di
certificati da non onorare
ogni CA pubblica periodicamente una nuova CRL
che contiene tutti i certificati revocati e non
scaduti
Liste di certificati revocati
Un certificato valido se
la firma della CA valida,
non scaduto
non inserito nella CRL pi recente della CA che lo ha
emesso

la CRL ha una data e ora di emissione
se unapplicazione vuole assicurarsi che nessuno dei
certificati che onora sia stato revocato entro unora prima
della verifica
allora deve essere trascorsa al pi un ora dal momento in cui
la CRL, consultata da tale applicazione, stata emessa
quindi, in questo caso, una nuova CRL deve essere
pubblicata con una cadenza di unora

Liste di certificati revocati
un intruso potrebbe cancellare lultima CRL,
in tal caso le applicazioni configurate per consultare
esclusivamente CRL pubblicate nellultima ora si rifiuteranno
di onorare tutti i certificati
ma lintruso non pu impersonare un utente valido
distruggendo la CRL o sovrascrivendola con una CRL pi
vecchia

lo standard X.509 ha definito anche il formato delle
CRL, in base a tale standard una CRL deve includere
una lista di numeri seriali di certificati revocati e non scaduti
e una data e ora di emissione della CRL
la firma dellintera lista con la chiave privata della CA

Problema
Supponiamo che Bob sia unapplicazione che deve
autenticare lutente Alice

Illustrare un possibile protocollo di
autenticazione a chiave pubblica, che includa
una verifica della correttezza della chiave
pubblica di Alice
Soluzione


chiaramente Bob ha bisogno del certificato di
Alice, Cert
Alice
, e di una CRL recente
Bob pu ottenerli da un servizio di directory, oppure
Alice li trasmette a Bob
Soluzione
0) Bob recupera il certificato di Alice Cert
Alice
e una CRL
recente
1) Consultando il certificato Cert
Alice
individua la chiave
pubblica di Alice PU
Alice
2) Verifica la correttezza di PU
Alice
come segue

2.1) se il certificato Cert
Alice
correttamente firmato dalla CA
che lo ha emesso e non scaduto, e
2.2) la CRL correttamente firmata dalla CA ed
sufficientemente recente e non contiene il certificato Cert
Alice
allora Bob conclude che PU
Alice
corretta (quindi quella nel
certificato)
Soluzione
3) Bob ed Alice iniziano uno scambio di messaggi
seguendo uno schema di autenticazione a chiave
pubblica, ad esempio
3.1) Bob invia una sfida R ad Alice
3.2) Alice firma R con la propria chiave privata ed invia
[R]
Alice
a Bob
3.3) Bob verifica la firma di Alice ed in caso affermativo
autentica Alice

Soluzione schema
1) ottiene PU
Alice
Im Alice, Cert
Alice
, CRL

[R]
Alice
R

A
l
i
c
e

B
o
b

2) verifica
correttezza PU
Alice
3.1) genera R
3.2) calcola la
firma [R]
Alice
3.3) verifica la
firma [R]
Alice

Bibliografia
[DES81] DES Modes of Operation, FIPS PUB 81, National
Bureau of Standards, U.S. Department of Commerce, 1981.
[KPS02] C. Kaufman, R. Perlman, M. Speciner. Network
Security Private Communication in a Public World.
Prentice Hall.
[PFL08] C. P. Pfleeger, S. L. Pfleeger. Sicurezza in
Informatica. Pearson, Prentice Hall.
[STA07] W. Stallings. Sicurezza delle reti. Pearson, Prentice
Hall.
[Wiki-it] http://it.wikipedia.org/wiki/
[Wiki-en] http://en.wikipedia.org/wiki/
[ISECOM] Institute for Security and Open Methodologies
Autenticazione Crittografica
Protocolli e Insidie

Luca Grilli
Premessa
Le comunicazioni sicure quasi sempre richiedono una
stretta di mano (handshake) preliminare per
autenticare le parti comunicanti
spesso necessario anche proteggere integrit e/o
confidenzialit delle informazioni trasmesse

Lautenticazione richiede lo scambio di particolari
messaggi tra le parti,
e la conoscenza di particolari informazioni, alcune
delle quali devono essere segrete
Tutti questi aspetti vengono definiti nel protocollo
Protocolli di autenticazione crittografici
Progettare protocolli di autenticazione
(crittografici) sicuri nasconde molte insidie
variazioni minime ad un protocollo sicuro possono
introdurre delle falle molto pericolose
per questo molti protocolli in uso presentano delle falle di
sicurezza

cruciale comprendere a fondo le possibili
falle di sicurezza di un protocollo
attenzione alle modifiche a protocolli esistenti
attenzione allambiente in cui il protocollo viene usato

Propriet di un protocollo
Oltre alla sicurezza sono importanti anche le
prestazioni, ovvero lefficienza del protocollo

Lefficienza data da
numero di messaggi
compattezza dei messaggi
costo computazionale
risorse di calcolo richieste
Protocolli di autenticazione crittografici
Non esiste il protocollo migliore in senso
assoluto
alcune minacce sono pi frequenti e/o pericolose
in un dato contesto; in un altro possono anche
non esistere
necessario tener conto delle risorse disponibili
CPU, memoria, hardware specializzato, spese per i
diritti di utilizzo di brevetti, ecc.
dei vincoli progettuali relativi allambiente di uso
e se gli utenti sono disposti a seguire le politiche
di sicurezza


Iter progettuale di un protocollo
Si parte da un primo protocollo
contenente sicuramente delle falle di sicurezza
Si controllano tutte le debolezze immaginabili
relative al contesto dimpiego di quel protocollo
Si rimuovono le debolezze una alla volta
attenzione, rimuovere una falla pu introdurne altre non
presenti prima

Rimossa una falla, si ricomincia daccapo e ci si arresta
quando non ci sono pi falle (tra quelle note!)

conoscere le possibili falle cruciale sia per progettare
protocolli sicuri, sia per comprendere protocolli noti
Protocolli basati su password (in chiaro)
molti protocolli di autenticazione esistenti furono
progettati per ambienti in cui
le intercettazioni non erano un problema, ed
eventuali utenti malevoli erano considerati poco esperti
ad esempio i protocolli basati su password che non
includono alcun meccanismo di cifratura
Alice (liniziatore) invia a Bob il suo nome e la password in
chiaro attraverso la rete
Bob verifica nome utente e password,
in caso affermativo la comunicazione prosegue,
senza alcuna ulteriore attenzione alla sicurezza (nessuna
cifratura, nessun controllo di integrit crittografico)
Protocolli crittografici challenge/response
Un miglioramento significativo della sicurezza si
avuto sostituendo
la trasmissione della password in chiaro
con il meccanismo a sfida/risposta crittografico
(cryptographic challenge/response)

nelle prossime slide, si esamineranno
protocolli crittografici a sfida e risposta basati sulla
conoscenza di un segreto condiviso
usando sia algoritmi di cifratura a chiave segreta sia algoritmi
di digest
successivamente, si discuteranno protocolli simili
utilizzando la tecnologia a chiave pubblica
PROTOCOLLI A SFIDA E RISPOSTA
UNIDIREZIONALI (LOGIN ONLY)
Autenticazione Crittografica Protocolli e Insidie
Segreto condiviso Notazione
R: sfida; numero casuale e non prevedibile

K
Alice-Bob
{R}: cifratura di R con un algoritmo a chiave
segreta (DES, AES); K
Alice-Bob
la chiave di cifratura

h(K
Alice-Bob
, R): hash di R dipendente dal segreto K
Alice-Bob

ad esempio la sfida R viene concatenata con K
Alice-Bob


f(K
Alice-Bob
, R): quantit ottenuta applicando ad R una
trasformazione crittografica dipendente dal segreto
cio f(K
Alice-Bob
, R) pu essere sia K
Alice-Bob
{R} sia h(K
Alice-Bob
, R)
Prot. 1 Chiave segreta unidirezionale
si consideri il seguente protocollo di tipo login only
rappresenta un notevole passo in avanti rispetto a spedire la
password in chiaro
uno spione non pu impersonare Alice ascoltando lo
scambio perch la sfida R cambia di volta in volta in modo
non prevedibile
Im Alice

f(K
Alice-Bob
, R)

a challenge R

A
l
i
c
e

B
o
b

Bob autentica Alice sfruttando un segreto condiviso K
Alice-Bob

Prot. 1 Debolezze
Non c mutua autenticazione
Bob autentica Alice, ma non il viceversa
se Trudy pu ricevere i pacchetti inviati allindirizzo di
rete di Bob, e rispondere con lindirizzo di rete di Bob (o
attraverso altri mezzi convince Alice che il suo indirizzo
quello di Bob)
Alice sar ingannata creder che Trudy Bob
Trudy non ha bisogno di conoscere il segreto condiviso
K
Alice-Bob
per impersonare Bob
deve solo limitarsi ad inviare ad Alice una qualsiasi
vecchia sfida R e ignorare la sua risposta
Prot. 1 Debolezze
Se questo lintero protocollo
cio se non prevista una protezione della
confidenzialit del resto della conversazione
allora Trudy pu dirottare la conversazione dopo lo
scambio iniziale,
assumendo che sia in grado di generare pacchetti
aventi per source address lindirizzo di Alice (IP
spoofing)
potrebbe anche essere utile, ma non essenziale, per
Trudy, poter ricevere pacchetti indirizzati ad Alice
Prot. 1 Debolezze
Se il segreto condiviso K
Alice-Bob
fosse derivato
da una password,
allora conoscendo R, f(K
Alice-Bob
, R) e lalgoritmo per
ottenere la chiave dalla password,
un intercettatore potrebbe sferrare un attacco off-
line sulla password
sceglie una parola w, quale password candidata
calcola la relativa chiave segreta K
w
e verifica se f(K
w
, R) = f(K
Alice-Bob
, R)
in caso negativo ritenta
Prot. 1 Debolezze
Qualcuno che accede (in lettura) al server Bob
potrebbe ottenere K
Alice-Bob

ci particolarmente rischioso se K
Alice-Bob

derivata da una password, e
le password sono memorizzate in un database di
Bob
proteggere il database implica proteggere tutti i suoi
backup
impedendone laccesso fisico o
cifrando il contenuto e proteggendo in qualche modo la
chiave di cifratura

Prot. 1 Impiego
Nonostante i precedenti svantaggi,
se le risorse per aumentare la sicurezza sono
molto limitate,
il protocollo 1 costituisce unalternativa molto
pi sicura rispetto ad inviare password in
chiaro
anche se K
Alice-Bob
viene derivata dalla password
Prot. 2 Variante del Prot. 1
Una piccola variante del prot. 1 la seguente
Bob sceglie una sfida random R, la cifra, e trasmette il
risultato
Alice decifra la quantit ricevuta, usando K
Alice-Bob
per
ottenere R, ed invia R a Bob
Im Alice

R

K
Alice-Bob
{R}

A
l
i
c
e

B
o
b

Bob autentica Alice sfruttando una chiave segreta condiviso K
Alice-Bob

Prot. 2 vs Prot. 1
Prot. 2 richiede luso di operazioni crittografiche
invertibili
Prot. 1 pu implementarsi usando solo algoritmi di hash; in
genere gli algoritmi di hash offrono migliori prestazioni e
maggior portabilit
Se K
Alice-Bob
derivata da una password ed pertanto
vulnerabile ad attacchi dictionary
se inoltre R una quantit riconoscibile, ad es. 32 bit
random + 32 bit nulli di padding Trudy pu eseguire un
attacco dictionary senza dover essere in grado di intercettare
i messaggi (cosa non sempre facile)
ovviamente, se pu intercettare i messaggi scambiati tra le
parti pu eseguire un attacco dictionary in entrambi i
protocolli


Prot. 2 vs Prot. 1
Se R una quantit riconoscibile con tempo di vita
limitato; ad esempio R = random||timestamp
anche Alice pu autenticare Bob
(autenticazione mutua)
infatti, soltanto chi conosce K
Alice-Bob
pu generare
K
Alice-Bob
{R} = K
Alice-Bob
{random||timestamp}


essenziale che R abbia una durata temporale
molto limitata per evitare che K
Alice-Bob
{R} possa
essere riciclato da un falso Bob


Prot. 3 altra variante del Prot. 1
la seguente unaltra variante del protocollo 1
utilizzando un timestamp invece di una sfida random R
sufficiente un solo messaggio per lhandshake
Alice cifra listante temporale corrente,
Bob decifra il risultato e si assicura che sia un istante
temporale circa uguale a quello fornito dal suo orologio
necessario che gli orologi di Alice e Bob siano
ragionevolmente ben sincronizzati
Im Alice, K
Alice-Bob
{timestamp}

A
l
i
c
e

B
o
b

Bob autentica Alice sfruttando la sincronizzazione
degli orologi e un segreto condiviso K
Alice-Bob

Prot. 3 vs Prot. 1
il prot. 3 pu facilmente rimpiazzare un protocollo non
crittografico in cui la password inviata in chiaro
non necessario aggiungere lo scambio di ulteriori messaggi

il prot. 3 pi efficiente del prot. 1
oltre a risparmiare due messaggi, il server Bob non deve
mantenere alcuno stato volatile (ad esempio R) riguardo
Alice (assumendosi qualche rischio)
inoltre pu aggiungersi ad un qualsiasi protocollo di tipo
request/response (come lHTTP) ottenendo
unautenticazione mutua; basta che Bob invii ad Alice una
risposta dipendente in modo opportuno dal suo timestamp
originario (si vedr in seguito)
Prot. 3 vs Prot. 1
qualcuno potrebbe impersonare Alice intercettando e
riusando K
Alice-Bob
{timestamp}
tale attacco va per eseguito subito dopo aver intercettato
K
Alice-Bob
{timestamp}; il timestamp generato dal server Bob
non deve essere troppo diverso da quello di Alice
un modo per sventare tale minaccia memorizzare nel
server Bob tutti i timestamp ricevuti e non ancora scaduti

si ha unaltra potenziale debolezza se Alice usa lo
stesso segreto K
Alice-Bob
con pi server distinti
un intercettatore che opera in modo veloce pu ottenere la
quantit K
Alice-Bob
{timestamp} trasmessa ad un server per
impersonare Alice con un altro server
Prot. 3 vs Prot. 1
tuttavia, tale minaccia sventabile concatenando il nome del
server con il timestamp
anzich K
Alice-Bob
{timestamp} va inviato
K
Alice-Bob
{Bob||timestamp}

il prot. 3 vulnerabile ad eventuali modifiche
allorologio di sistema del server Bob
timestamp scaduti possono essere riusati

se la sicurezza dipende dallora la configurazione
dellora richieder un handshake sicuro
un handshake basato sullistante corrente potrebbe fallire se
i due orologi non sono sincronizzati
necessaria unautenticazione basata su un handshake di
tipo challenge/response per la sincronizzazione degli orologi

Prot. 3 vs Prot. 1
nel prot. 1, calcolare f(K
Alice-Bob
, R)

voleva dire
calcolare K
Alice-Bob
{R} oppure
calcolare lhash h(R||K
Alice-Bob
)
ci continua a valere nel caso del prot. 3, ma con
piccole complicazioni aggiuntive se si usa lhash
Bob deve eseguire un certo numero di tentativi per verificare
che h(timestamp||K
Alice-Bob
) sia stato generato da Alice,
se si accettano 10 minuti di differenza tra i due orologi
e il timestamp espresso in minuti
allora 20 tentativi sono sufficienti
ma per timestamp in microsecondi sono necessari pi di un
miliardo di tentativi!

Protocollo 4
assumendo che si voglia utilizzare un timestamp in
microsecondi e
una funzione di hash anzich una funzione
crittografica invertibile
una possibile soluzione che Alice trasmetta anche il
timestamp non cifrato
Im Alice, timestamp, hash(K
Alice-Bob
, timestamp)

A
l
i
c
e

B
o
b

Bob autentica Alice calcolando lhash di un timestamp ad alta
risoluzione e sfruttando un segreto condiviso K
Alice-Bob

Prot. 5 Chiave pubblica unidirezionale
Tutti i precedenti protocolli, a chiave segreta,
consentono a Trudy di impersonare Alice se pu
leggere il database del server
Utilizzando la tecnologia a chiave pubblica questa
vulnerabilit pu essere evitata
Im Alice

[R]
Alice
R

A
l
i
c
e

B
o
b

Bob autentica Alice verificando la sua firma digitale
Protocollo 5
[R]
Alice
: R firmato da Alice; cio cifrato con la sua
chiave privata PR
Alice
Bob verifica la firma [R]
Alice
usando la chiave pubblica di Alice
PU
Alice
ed accetta il login se il risultato R
il vantaggio di questo protocollo che il database di
Bob non pi vulnerabile agli accessi in lettura non
autorizzati
tuttavia, il database di Bob va comunque protetto da
modifiche non autorizzate, ma non da accessi non
autorizzati in lettura
qualcuno potrebbe modificare la chiave pubblica di Alice!
Prot. 6 Variante di Prot. 5
Bob sceglie R e la cifra con PU
Alice
Alice dimostra di conoscere PR
Alice
decifrando {R}
Alice
e
recuperando R
un problema di questa variante che molte tecnologie a
chiave pubblica (si pensi a DSS) permettono solo di firmare
e non di decifrare
Im Alice

R

{R}
Alice
A
l
i
c
e

B
o
b

Bob autentica Alice se lei pu decifrare un messaggio
cifrato con la sua chiave pubblica
Prot. 5 e 6 Un serio problema
In entrambi i protocolli 5 e 6 c un potenziale
serio problema
il protocollo 5 permette di ingannare qualcuno a
firmare qualcosa
si supponga di avere una quantit Q che si desidera
venga firmata da Alice
se si in grado di impersonare lindirizzo di rete di Bob
si pu attendere che Alice effettui il login
e fornirle la quantit Q quale sfida da firmare
Alice firmer la sfida fornendo [Q]
Alice
allattaccante

Prot. 5 e 6 Un serio problema
similmente, il protocollo 6 permette ad un
attaccante di decifrare un messaggio cifrato con
PU
Alice
se un attaccante vuole decifrare {msg}
Alice
impersonando lindirizzo di rete di Bob
pu attendere che Alice effettui il login
e fornirle la quantit {msg}
Alice
quale sfida cifrata da
decifrare
cos facendo, otterr da Alice msg



Prot. 5 e 6 Un serio problema
Come possibile evitare tali attacchi?

La regola generale evitare di usare la stessa
chiave per due scopi diversi
a meno che i vari protocolli non siano coordinati
in modo tale che un attaccante non possa mai
usarne uno per violarne un altro
un esempio di coordinamento vincolare la
struttura di R in base al tipo di applicazione
Sfide R strutturate
ad esempio la struttura di R dovrebbe prevedere
un campo type, da concatenare con il messaggio
vero e proprio, che dipende dal tipo di
protocollo/applicazione
in questo modo il protocollo incorporato nella firma
quindi non possibile passare da un protocollo
allaltro senza violare il contenuto nel campo type
nel caso di RSA, tali aspetti sono definiti nello
standard PKCS

Osservazioni
si noti pertanto che valgono le seguenti considerazioni
possibile progettare singoli protocolli sicuri,
che complessivamente introducono delle
vulnerabilit (prima assenti)

possibile progettare un nuovo protocollo sicuro
il cui dispiegamento potrebbe compromettere la
sicurezza degli schemi esistenti
PROTOCOLLI A SFIDA E RISPOSTA
MUTUA AUTENTICAZIONE
Autenticazione Crittografica Protocolli e Insidie
Prot. 7 Mutua autent. a chiave segreta
Se si desidera autenticare reciprocamente ambo le parti
sufficiente eseguire uno scambio di autenticazione in
entrambe le direzioni
f(K
Alice-Bob
, R
1
)

f(K
Alice-Bob
, R
2
)

R
2
A
l
i
c
e

B
o
b

Mutua autenticazione basata su un segreto condiviso K
Alice-Bob

R
1
Im Alice

Prot. 8 Mutua autent. a chiave segreta
Il protocollo 7 richiede lo scambio di cinque messaggi
complessivi (poco efficiente)
Sembra immediato poter ridurre a tre il numero di
messaggi caricando in ogni messaggio pi informazioni
Im Alice, R
2
f(K
Alice-Bob
, R
1
)

R
1
, f(K
Alice-Bob
, R
2
)

A
l
i
c
e

B
o
b

Mutua autenticazione ottimizzata
basata su un segreto condiviso K
Alice-Bob

Prot. 8 Reflection Attack
Il protocollo 8, pi compatto del 7, ora
vulnerabile ad un attacco di tipo reflection
si supponga che Trudy voglia impersonare Alice
Trudy inizia il protocollo 8,
ma quando riceve la sfida di Bob non pu proseguire;
non potendo cifrare R
1
Im Alice, R
2
R
1
, f(K
Alice-Bob
, R
2
)

T
r
u
d
y

B
o
b

Inizio dellattacco reflection (sessione 1)
Prot. 8 Reflection Attack
tuttavia, Trudy pu interrompere temporaneamente le
sessione corrente
e pu iniziarne una nuova usando R
1
quale sfida per Bob
Trudy non pu completare la seconda sessione; non pu
cifrare R
3
ma ora conosce f(K
Alice-Bob
, R
1
) e pu completare la prima
sessione rimasta appesa
Im Alice, R
1
R
3
, f(K
Alice-Bob
, R
1
)

T
r
u
d
y

B
o
b

Seconda sessione nellattacco reflection
Attacco di tipo reflection
Trudy (sessione 1) Bob
Trudy (sessione 2)
Sullattacco di tipo reflection
Un attacco di tipo reflection facile da sferrare se
possibile aprire simultaneamente pi connessioni con lo
stesso server
ci sono pi server che condividono uno stesso segreto con
Alice

Tale attacco pu essere sventato con un po di
attenzione e comprendendo bene la debolezza che
sfrutta
ovvero che Alice e Bob sono perfettamente
interscambiabili
la risposta ad una stessa sfida identica
Protezioni per attacchi di tipo reflection
Lidea quella di differenziare, in qualche modo, la
risposta di Alice e quella di Bob ad una stessa sfida;
seguono alcune possibili soluzioni
Usare chiavi differenti
una possibilit che Alice e Bob condividano due chiavi
completamente differenti K
AAB
e K
ABB
; Alice cifra con
K
AAB
, mentre Bob cifra con K
ABB

in alternativa, una delle chiavi pu essere derivata
dallaltra:
K
ABB
= -K
AAB
oppure K
ABB
= K
AAB
+ 1 oppure
K
ABB
= K
AAB
F0F0F0F0F0F0F0F0
16


Protezioni per attacchi di tipo reflection
Usare sfide strutturalmente differenti, garantire che
la sfida delliniziatore abbia una struttura diversa da
quella di chi risponde
ad esempio, liniziatore (Alice) potrebbe usare un numero
dispari mentre il risponditore un numero pari

Usare risposte dipendenti dal risponditore la risposta
non consiste nella cifratura della sola sfida, ma viene
aggiunta uninformazione associata in modo univoco
al risponditore
ad esempio, la risposta ad una sfida R non semplicemente
f(K, R) ma f(K, R||nome-id-risponditore)

Domanda
Il protocollo 7 vulnerabile ad un attacco di
tipo reflection? Per quale ragione?

La risposta NO
tale protocollo segue infatti un altro importante
principi generale:
idealmente, liniziatore dovrebbe essere il primo
a provare la sua identit
Altra vulnerabilit del Prot. 8
assumendo che il segreto condiviso K
Alice-Bob
sia derivato
da una password
Trudy pu eseguire un attacco off-line sulla
password senza dover intercettare alcuna
comunicazione tra Alice e Bob (tale vulnerabilit
non esiste nel protocollo 7)
Trudy deve solo inviare un messaggio a Bob affermando
di essere Alice e includere un numero R da cifrare
(attacco di tipo testo in chiaro selezionato)
ottenendo pertanto la coppia R, f(K
Alice-Bob
, R) che pu
essere utilizzata per indovinare la password
Prot. 9
aggiungendo un messaggio al protocollo 8
possibile renderlo molto pi robusto ad attacchi
off-line sulla password
il nuovo protocollo chiaramente meno efficiente
Im Alice

f(K
Alice-Bob
, R
2
)

f(K
Alice-Bob
, R
1
), R
2
A
l
i
c
e

B
o
b

Mutua autenticazione parzialmente ottimizzata
basata su un segreto condiviso K
Alice-Bob

R
1
Prot. 9
ora Trudy non pu pi effettuare un attacco off-line
sulla password semplicemente spacciandosi per Alice,
senza dover intercettare i messaggi
tuttavia, impersonando lindirizzo di Bob pu
tentare di ingannare Alice facendogli stabilire una
connessione con lei

tale vulnerabilit non va ignorata, ma comunque
molto pi difficile da sfruttare per un attaccante
Prot. 10 Mutua autent. a chiave pubblica
Assumendo che Alice e Bob conoscano ognuno la
chiave pubblica dellaltro
Utilizzando la tecnologia a chiave pubblica, possono
autenticarsi reciprocamente scambiandosi tre messaggi

Im Alice, {R
2
}
Bob
R
1
R
2
, {R
1
}
Alice
A
l
i
c
e

B
o
b

Mutua autenticazione a chiave pubblica
(basata sulla cifratura/decifratura)
Prot. 11 Mutua autent. a chiave pubblica
Una variante del protocollo 10 e che fa uso
della firma digitale la seguente
Im Alice, R
2
[R
1
]
Alice
R
1
, [R
2
]
Bob
A
l
i
c
e

B
o
b

Mutua autenticazione a chiave pubblica
(basata sulla firma digitale)
Prot. 9 e 10 Alcuni problemi
supponendo che Alice sia una persona (o una
workstation)
Alice non pu ricordare la chiave pubblica di Bob
PU
Bob
(nel caso della workstation, questultima potrebbe non
avere in memoria PU
Bob
)

(a) Come fa Alice ad ottenere PU
Bob
?
una possibilit che Bob stesso invii PU
Bob
ad Alice
ci non sarebbe per sicuro se Bob venisse
impersonato da Trudy
Prot. 9 e 10 Alcuni problemi
si assuma che Alice sia un utente umano collegato ad una
workstation
(b) un altro problema il recupero della chiave privata
di Alice PR
Alice
considerando che Alice pu, al
massimo, ricordare una password
convertire una password in una chiave segreta fattibile in
modo efficiente
convertire invece una password in una coppia PU, PR non
altrettanto semplice

la soluzione generalmente adottata per il problema b)
consiste nel recuperare PR
Alice
da un servizio di
directory o, in alcuni casi, da Bob stesso
Prot. 9 e 10 Alcuni problemi
ovviamente, PR
Alice
non memorizzata in chiaro,
ma cifrata con una chiave segreta derivata dalla
password di Alice

a questo punto, anche il problema a) pu risolversi
allo stesso modo
memorizzando PU
Bob
in un servizio di directory oppure
presso Bob stesso
a tale scopo esistono due possibili modi
1) memorizzare PU
Bob
cifrato con la chiave segreta di
Alice derivata dalla sua password

Prot. 9 e 10 Alcuni problemi
per ingannare Alice, un impostore, impersonando Bob,
dovrebbe saper cifrare una chiave pubblica falsa (di cui
conosce la chiave privata) con la chiave segreta di Alice
2) memorizzare un certificato per la chiave pubblica di
Bob firmato con la chiave privata di Alice
una volta che la workstation recupera PR
Alice
, pu
verificare la validit del certificato per PU
Bob




Prot. 11 Mutua autent. con timestamp
Utilizzando dei timestamp, anzich sfide random,
possibile ottenere un protocollo di mutua
autenticazione di due soli messaggi
tale soluzione molto utile, pu essere facilmente
aggiunta ai protocolli a richiesta/risposta (HTTP)
senza dover aggiungere un ulteriore messaggio
Im Alice, f(K
Alice-Bob
, timestamp)

f(K
Alice-Bob
, timestamp + 1)

A
l
i
c
e

B
o
b

Mutua autenticazione basata sulla sincronizzazione
degli orologi e su un segreto condiviso K
Alice-Bob
Prot. 11 Mutua autent. con timestamp
per evitare che Trudy possa impersonare Bob
riusando f(K
Alice-Bob
, timestamp)
copia la quantit crittografica di Alice e gliela
restituisce!
nella risposta viene richiesto un timestamp
diverso, cio timestamp + 1
ovviamente, sono possibili altre soluzioni
usare chiavi diverse per cifrare il timestamp
concatenare il proprio nome al timestamp prima di
applicare f( )
o in generale, rendere la risposta delliniziatore e del
risponditore non interscambiabili
Prot. 11 Mutua autent. con timestamp
chiaramente, tutte le questioni viste nel caso
unidirezionale e riguardanti gli orologi continuano ad
essere valide
lidea di usare timestamp + 1 stata introdotta
nel protocollo Needham-Schroeder e ripresa in
Kerberos V4
non si tratta per della scelta migliore
Trudy intercettando la risposta di Bob potrebbe riusarla
per impersonare subito dopo Alice
Bob potrebbe mantenere in cache tutte le coppie
timestamp, timestamp + 1 incontrate, ma tale soluzione
non elegante
Prot. 11 Mutua autent. con timestamp
se esistono pi repliche di Bob aventi la stessa chiave,
sarebbe necessario sincronizzare le loro cache oppure
concatenare il timestamp con un identificatore univoco
di ogni replica
una scelta migliore potrebbe essere concatenare al
timestamp un flag che specifica se il messaggio
inviato dalliniziatore o dal risponditore

Im Alice, f(K
Alice-Bob
, S||timestamp)

f(K
Alice-Bob
, R||timestamp)

A
l
i
c
e

B
o
b

Mutua autenticazione basata sulla sincronizzazione
degli orologi e su un segreto condiviso K
Alice-Bob
CIFRATURA/INTEGRIT DEI DATI
Autenticazione Crittografica Protocolli e Insidie
Cifratura/Integrit dei dati
Al fine di fornire protezione dellintegrit e della
confidenzialit dei dati da trasmettere dopo lo
scambio di autenticazione
Alice e Bob devono necessariamente usare la
crittografia (a chiave segreta) per cifrare e/o
aggiungere dei controlli di integrit crittografici
Lesecuzione di tali operazioni richiede
preliminarmente che le parti stabiliscano una chiave
segreta di sessione (session key)
anche se gi condividono dei segreti a lungo termine che
permetterebbero di cifrare o di eseguire dei controlli di
integrit
Cifratura/Integrit dei dati
Tipicamente, una chiave di sessione viene stabilita
modificando lo scambio di autenticazione in modo
tale che terminato lhandshake le due parti
condividano una chiave segreta

Esamineremo come procedere in relazione ai seguenti
scambi di autenticazione
Chiave segreta: Alice e Bob condividono una chiave segreta
K
Alice-Bob
(che non la chiave di sessione)
Chiave pubblica: Alice e Bob conoscono ciascuno la chiave
pubblica dellaltro e chiaramente la propria chiave privata
Chiave pubblica unidirezionale: soltanto una parte ha una
coppia PU, PR; lautenticazione unidirezionale
Cifratura/Integrit dei dati
ovviamente, un intercettatore non deve essere in
grado di ottenere la chiave di sessione

una volta illustrato come ottenere una chiave di
sessione
per ciascuno degli scenari precedenti
si illustrer come utilizzarla per cifrare e/o
aggiungere dei controlli di integrit crittografici

Autenticazione a chiave segreta
K
Alice-Bob
: segreto a lungo termine condiviso tra Alice e Bob
si consideri lo schema di autenticazione riportato sotto,
anche se quanto detto potr applicarsi al caso di
mutua autenticazione; anzich R ci saranno R
1
e R
2
autenticazione mediante timestamp anzich sfide random R
in ogni caso, c sufficiente informazione per stabilire una
chiave di sessione condivisa
Im Alice

K
Alice-Bob
{R}

R

A
l
i
c
e

B
o
b

Autenticazione con chiave segreta K
Alice-Bob
Autenticazione a chiave segreta
una possibile chiave di sessione K
s
= (K
Alice-Bob
+ 1){R}
in generale, una chiave di sessione pu ottenersi
modificando K
Alice-Bob
in qualche modo; K
modified
= f(K
Alice-Bob
)
e cifrando la sfida R con la chiave modificata
il risultato la chiave di sessione K
s

K
s
= K
modified
{R} = (f(K
Alice-Bob
)){R}

Im Alice

K
Alice-Bob
{R}

R

A
l
i
c
e

B
o
b

Autenticazione con chiave segreta K
Alice-Bob
Autenticazione a chiave segreta
Domanda
Perch necessario modificare K
Alice-Bob
?
Perch non possibile usare K
Alice-Bob
{R} come
chiave di sessione?

Risposta
K
Alice-Bob
{R} non pu utilizzarsi perch trasmessa
da Alice nel terzo messaggio dellhandshake!
Autenticazione a chiave segreta
Domanda
K
Alice-Bob
{R+1} pu andare bene?

Risposta
Tale chiave di sessione non sicura per una
ragione molto sottile
si supponga che Alice e Bob abbiano iniziato una
conversazione e Bob abbia inviato R come sfida
Trudy potrebbe aver registrato lintera conversazione,
cifrata con K
s
= K
Alice-Bob
{R+1}
Autenticazione a chiave segreta
in seguito, Trudy potrebbe impersonare lindirizzo di
rete di Bob in una successiva comunicazione con Alice
e dichiarandosi Bob, potrebbe inviare R+1 come sfida
alla quale Alice risponderebbe con K
Alice-Bob
{R+1}
Trudy sarebbe in grado di decifrare la precedente
conversazione (registrata) tra Alice e Bob
Im Alice

K
Alice-Bob
{R+1}

R+1

A
l
i
c
e

T
r
u
d
y

a
s

B
o
b

Trudy impersona Bob

Autenticazione a chiave segreta
in definitiva, Alice e Bob, dopo lo scambio di
autenticazione, conoscono oltre K
Alice-Bob
anche R
molte combinazioni di tali quantit permettono di
ottenere una chiave di sessione sicura,
ma ci sono anche combinazioni non accettabili

si noti che una buona chiave di sessione deve
variare da sessione a sessione
non essere indovinabile da un intercettatore
e non deve ottenersi cifrando con K
Alice-Bob
una quantit
X, dove X un valore che pu essere predetto o
estratto da un intruso (come ad esempio X = R + 1)
Autent. a chiave pubblica bidirezionale
nel caso di autenticazione a chiave pubblica
bidirezionale
Alice e Bob conoscono la propria chiave privata e la chiave
pubblica dellaltro
per definire una chiave (segreta) di sessione condivisa
K
s
esistono varie possibilit
Im Alice, {R
2
}
Bob
R
1
, {R}
Bob
R
2
, {R
1
}
Alice
A
l
i
c
e

B
o
b

K
s
= R

(1) K
s
= R Alice invia {R}
Bob

una parte, diciamo Alice,
sceglie un numero random R; che sarebbe la chiave di
sessione
lo cifra con la chiave pubblica di Bob
ed invia a Bob {R}
Bob

questo schema presenta la seguente vulnerabilit
un intruso, Trudy, pu dirottare la conversazione scegliendo
un suo R, cifrandolo con la chiave pubblica di Bob
e inviando il risultato a Bob al posto della chiave cifrata
fornita da Alice
contestualmente dovrebbe impersonare lindirizzo di rete di
Alice
(2) K
s
= R Alice invia [{R}
Bob
]
Alice
rispetto a prima Alice firma la quantit {R}
Bob
e invia a Bob [{R}
Bob
]
Alice
Bob verifica prima la firma di Alice usando PU
Alice
e poi decifra con la propria chiave privata {R}
Bob

riottenendo R
Im Alice, {R
2
}
Bob
R
1
, [{R}
Bob
]
Alice
R
2
, {R
1
}
Alice
A
l
i
c
e

B
o
b

K
s
= R

(2) K
s
= R Alice invia [{R}
Bob
]
Alice
lattacco precedente di Trudy
scegliere un proprio R, in luogo di quello di Alice, e
inviarlo a Bob crittografato
ora non pu funzionare perch Trudy non in
grado di forgiare la firma di Alice

tuttavia, se si vuole essere paranoici, c ancora
una piccola vulnerabilit
che pu essere ridotta parzialmente (vedi caso (3)) o
del tutto (vedi caso (4))
(2) K
s
= R Alice invia [{R}
Bob
]
Alice
la vulnerabilit la seguente:
si supponga che Trudy registri una intera conversazione
tra Alice e Bob; inclusi i dati cifrati con la chiave di
sessione
si supponga inoltre che successivamente (dopo un
minuto/giorno/mese) Trudy riesca a violare il server
Bob e ad ottenere tutti i suoi segreti; quindi anche
PR
Bob
ottenendo PR
Bob
Trudy pu recuperare la chiave di
sessione dalle informazioni trasmesse, in particolare da
[{R}
Bob
]
Alice
pu ottenere K
s
= R
(2) K
s
= R Alice invia [{R}
Bob
]
Alice

quindi Trudy pu decifrare la conversazione cifrata
tra Alice e Bob, precedentemente registrata

in altri termini la soluzione (2) permette di sferrare
degli attacchi alla confidenzialit retroattivi se
nel futuro un avversario riuscisse a violare Bob

(3) K
s
= R P R e P non inviate in chiaro

similmente a (2),
Alice genera una quantit random R
e invia {R}
Bob
a Bob
Bob genera una quantit random P
e invia {P}
Alice
a Alice
terminata la conversazione Alice e Bob
dimenticheranno R e P
Im Alice, {R
2
}
Bob
R
1
, {R}
Bob
R
2
, {R
1
}
Alice
, {P}
Alice
A
l
i
c
e

B
o
b

K
s
= R P

genera R

genera P
(3) K
s
= R P R e P non inviate in chiaro

definendo K
s
= R P, per ottenere la chiave di
sessione Trudy deve
registrare lo scambio tra Alice e Bob,
violare Bob per ottenere PR
Bob
e quindi R

ma anche violare Alice per ottenere PR
Alice
e quindi P

per ottenere K
s
Trudy dovrebbe violare entrambi

Im Alice, {R
2
}
Bob
R
1
, {R}
Bob
R
2
, {R
1
}
Alice
, {P}
Alice
A
l
i
c
e

B
o
b

K
s
= R P

genera R

genera P
(3) vs (2)
Domanda
nel caso (2) Alice deve firmare la sua quantit
(Alice invia [{R}
Bob
]
Alice
) invece di inviare
direttamente {R}
Bob

Perch nel caso (3) ci non necessario?
(3) vs (2)
Risposta
Alice e Bob non hanno bisogno di firmare le quantit
da loro inviate poich,
anche se Trudy riesce a sostituire {R}
Bob
con una
quantit a lei nota {R}
Bob

non sarebbe comunque in grado di ottenere la chiave
di sessione che vedrebbe Bob, cio K
s
= R P
per ottenere P Trudy dovrebbe decifrare {P}
Alice

al massimo, Trudy pu impedire che Alice e Bob
dialoghino (attacco DoS), ma non pu ottenere il testo
in chiaro di una loro conversazione


(4) Usare Diffie-Hellman
Alice e Bob possono effettuare uno scambio Diffie-
Hellman autenticato (gi esaminato)
dove ognuno firma la quantit da inviare allaltro
si supponga che le quantit g e p siano pubbliche

Im Alice, [T
A
]
Alice
[T
B
]
Bob
A
l
i
c
e

B
o
b

K
s
= K
AB
= T
B
s
A
mod p = T
A
s
B
mod p = K
BA
genera s
A
T
A
= g
s
A
mod p

genera s
B
T
B
= g
s
B
mod p

(4) Usare Diffie-Hellman

Usando Diffie-Hellman autenticato,
anche se Trudy riesce a violare sia Alice che
Bob,
non potr comunque essere in grado di
decifrare delle conversazioni registrate
perch non in grado di dedurre n S
A
n S
B

Autent. a chiave pubblica unidirezionale
In alcuni casi solo una delle parti ha una coppia
chiave-pubblica, chiave-privata
spesso, come nel caso di SSL, si assume che i server abbiano
le chiavi pubbliche certificate, e i client non si preoccupano
di ottenere chiavi e certificati
pertanto, lautenticazione crittografica
unidirezionale
il protocollo assicura il client (Alice) che sta
contattando il server Bob giusto,
ma terminato la scambio di autenticazione, che
permette tra laltro di definire una chiave di sessione,
il server non ha ancora autenticato il client
Autent. a chiave pubblica unidirezionale
il client Alice si autentica dopo lo scambio di
autenticazione
inviando username e password, cifrati con la
chiave di sessione K
s

nelle slide successive sono illustrati due possibili,
(a) e (b), modi per stabilire una chiave di sessione
condivisa K
s

durante lo scambio di autenticazione a chiave
pubblica unidirezionale

(a) K
s
= R Alice invia {R}
Bob
Alice, sceglie un numero random R, lo cifra con la
chiave pubblica di Bob ed invia {R}
Bob

tale schema presenta le debolezze viste nel caso (1)
Trudy pu registrare una intera conversazione e decifrarla se
riesce in futuro a violare Bob
Trudy pu sostituire un suo {R}
Bob
e dirottare la
conversazione seguente; tale debolezza meno critica in un
contesto dove non necessaria una mutua autenticazione

Im Alice, {R
A
}
Bob
, {R}
Bob
R
A
A
l
i
c
e

B
o
b

K
s
= R

(b) Usare Diffie-Hellman
Bob e Alice possono effettuare uno scambio Diffie-Hellman
dove Bob firma la sua quantit T
B
Alice non pu firmare nulla non disponendo di una coppia PU, PR
il caso (b) rispetto al caso (a) un po pi sicuro
Trudy non pu ottenere la chiave di sessione K
s
usata in
una precedente conversazione neanche violando Bob

si assuma che Bob dimentichi K
s
non appena la conversazione con
Alice termina
Im Alice, T
A
[T
B
]
Bob
A
l
i
c
e

B
o
b

K
s
= K
AB
= T
B
s
A
mod p = T
A
s
B
mod p = K
BA
genera s
A
T
A
= g
s
A
mod p

genera s
B
T
B
= g
s
B
mod p

Bob non autentica Alice, ma

Si noti che nessuno degli schemi (a) e (b)
assicura a Bob di comunicare con la vera Alice

ma in entrambi i casi Bob sicuro che lintera
conversazione con una singola persona
Confidenzialit e Integrit(Autenticit)
Tipicamente, la conversazione che segue lo scambio di
autenticazione viene cifrata con la chiave di sessione per
proteggere la confidenzialit
inoltre viene applicato un controllo di integrit ai vari
messaggi trasmessi (MIC o MAC)
ottenuto con tecniche crittografiche a chiave segreta oppure
sfruttando degli algoritmi di digest

si visto che non esiste un algoritmo standard per
proteggere contemporaneamente confidenzialit e
integrit
disponendo di una sola chiave (la chiave di sessione K
s
)
ed effettuando una singola operazione crittografica
Confidenzialit e Integrit(Autenticit)
pertanto si applicano alcune delle seguenti soluzioni che
proteggono confidenzialit ed integrit in due fasi
i) stabilire due chiavi di sessione nello scambio di
autenticazione K
sc
e K
si
K
sc
: chiave di sessione per la confidenzialit
K
si
: chiave i sessione per lintegrit
ii) derivare una chiave dallaltra, cambiando alcuni bit
in modo deterministico K
si
= f(K
sc
)
iii) una sola chiave K
s
, ma algoritmi crittografici distinti
ad esempio, confidenzialit tramite AES/CBC
integrit tramite HMAC

Confidenzialit e Integrit(Autenticit)
iv) includere un checksum debole per lintegrit
allinterno di un algoritmo robusto per la protezione
della confidenzialit

una volta stabilit una (o pi) chiave di sessione la
conversazione, generalmente, consiste nello scambio
di messaggi singolarmente cifrati e dei relativi MAC
ogni volta che una parte riceve un messaggio lo
decifra ed esegue il controllo di autenticit
poi, eventualmente, pu proseguire la conversazione

Attacchi allintegrit
manca un controllo sullordine dei messaggi
scambiati; sono possibili pertanto attacchi
allintegrit di tipo replay
un attaccante potrebbe registrare un messaggio (e il
relativo MAC) e poi effettuarne il replay in un secondo
momento; ci non sarebbe rilevabile

ovviamente, ci pu evitarsi includendo in ogni
messaggio un numero di sequenza
tale soluzione adottata in entrambe le versioni di
Kerberos
Attacchi allintegrit
in alternativa, si pu far dipendere il MIC (MAC) di
un messaggio m, oltre che da m stesso, anche da
tutti i precedenti messaggi scambiati
se m
i
= m
j
ci non implica che MAC(m
i
) = MAC(m
j
)

unaltra forma di attacco allintegrit e la reflection
un attaccante registra un messaggio avente una data
direzione (da Bob a Alice) ed
effettua il replay nellaltro senso (da Alice a Bob)
se lo stesso numero di sequenza valido in entrambe le
direzioni
tale attacco allintegrit non viene rilevato

Attacchi allintegrit
lattacco allintegrit di tipo reflection pu evitarsi
usando, per ciascuna direzione, dei range diversi per i
numeri di sequenza
oppure inserendo un flag che definisce la direzione
o differenziando in modo minimo lalgoritmo per il
calcolo dl MAC per le due direzioni

Numeri di sequenza e Key Rollover
Una conversazione potrebbe esaurire tutti i numeri di
sequenza; a meno che questultimi possano assumere
valori enormi

Si noti che, il riuso di precedenti numeri di sequenza,
espone (almeno teoricamente) ad attacchi allintegrit
di tipo reply

Una possibile soluzione il key rollover, cio la
rinegoziazione della chiave di sessione
ci ha anche il vantaggio di limitare il materiale che un
crittoanalista potrebbe raccogliere

Key Rollover
Il modo pi semplice per rinegoziare la chiave il seguente
una della due parti sceglie una chiave random K
s

la cifra con la vecchia chiave K
s
e invia allaltra parte K
s
{K
s
}
tale soluzione un po debole; se un crittoanalista fosse
riuscito ad ottenere K
s
otterrebbe anche K
s

il vantaggio di cambiare chiave si attenua

conviene pertanto o ripetere lo scambio di autenticazione
oppure utilizzare Diffie-Hellman

il rollover della chiave permette, tra laltro, di scegliere la
vecchia chiave per lintegrit e la nuova per la
confidenzialit
AUTENTICAZIONE MEDIATA (CON
KDC)
Autenticazione Crittografica Protocolli e Insidie
KDC alcuni richiami
Si gi visto che un KDC ha un database con le chiavi
di tutti gli utenti a lui afferenti
ogni utente Alice registrato presso il KDC pu
comunicare in modo sicuro con il KDC
Alice e il KDC possono autenticarsi reciprocamente e
proteggere la confidenzialit di ogni loro conversazione
poich entrambi conoscono la chiave segreta di Alice K
Alice

il KDC entra in gioco quando un utente Alice, desidera
ottenere una chiave segreta K
AB
da condividere con un
altro utente Bob del KDC
non potendo Alice e Bob comunicare direttamente il
KDC funge da mediatore

Mediazione del KDC idea base
Lo scambio riportato sotto illustra in modo
esemplificato il ruolo di mediazione del KDC
il KDC non sa se realmente Alice lutente che ha chiesto di
comunicare con Bob
Trudy potrebbe spacciarsi per Alice, ma poi non riuscirebbe
ad ottenere K
AB
; non in grado di decifrare il messaggio
K
Alice
{use K
AB
for Bob}
Alice wants Bob

K
Alice
{use K
AB
for Bob}

A
l
i
c
e

B
o
b

K
Bob
{use K
AB
for Alice}

K
D
C

invents key K
AB
Operazioni svolte dal KDC (in linea di principio)
Mediazione del KDC in pratica
Trudy al massimo pu indurre il KDC ad inviare ad Alice un
messaggio da lei non richiesto
le uniche parti che conoscono K
AB
dopo questo
scambio sono Alice, Bob e il KDC
pertanto, dopo lo scambio Alice e Bob possono
autenticarsi reciprocamente utilizzando il segreto
condiviso K
AB
il protocollo precedente per non quello utilizzato
nella pratica
se Alice invia immediatamente un messaggio a Bob
per i ritardi nella rete, possibile che questi arrivi prima del
messaggio che il KDC ha inviato a Bob
Mediazione del KDC in pratica
inoltre, il fatto che un utente qualsiasi, senza autenticarsi
presso il KDC, possa indurre questultimo ad aprire
connessioni verso un suo qualsiasi utente comporta una
serie di pericoli che dovrebbero essere gestiti
siccome Alice che desidera comunicare con Bob
la cosa pi ragionevole, che il KDC fornisca ad Alice
tutte le informazioni che egli avrebbe fornito a Bob
per instaurare una connessione sicura con Alice
nel protocollo Kerberos, linformazione cifrata che il
KDC invia ad Alice da passare a Bob chiamata ticket
il cosiddetto ticket per Bob

Prot. 12 Mediazione del KDC in pratica
nella pratica la mediazione del KDC avviene in modo simile
a come illustrato sotto
naturalmente, Alice e Bob devono poi autenticarsi
reciprocamente con una delle tecniche esaminate prima
ciascuno deve dimostrare allaltro di conoscere realmente K
AB
K
Alice
{use K
AB
for Bob}
ticket to Bob = K
Bob
{use K
AB
for Alice}

Alice wants Bob

A
l
i
c
e

B
o
b
K
D
C

invents key K
AB
Im Alice, ticket to Bob = K
Bob
{use K
AB
for Alice}

Operazioni svolte dal KDC (nella pratica)
Mediazione del KDC in pratica
rimangono comunque delle vulnerabilit molto
sottili

che hanno giustificato lintroduzione di molti
protocolli
alcuni dei quali si esamineremo nel seguito
come il protocollo di Needham-Schroeder
Protocollo di Needham-Schroeder (N-S)
Tale protocollo ha la stessa struttura portante di
quello esaminato prima, ma in aggiunta
aggiunge uno scambio per autenticare reciprocamente Alice
e Bob e
rimuove alcune sottili debolezze che ora saranno illustrate
Il protocollo di Needham-Schroeder [NEED78]
importante perch un classico protocollo di
autenticazione mediata da un KDC e
a lui si sono ispirati molti protocolli moderni, incluso
Kerberos
per una sua comprensione, al solito, necessario
analizzarlo in modo viscerale
Protocollo N-S terminologia
Il termine nonce sta per number that is used only
once cio numero che usato soltanto una volta
Un nounce potrebbe essere
un numero di sequenza (ammesso che non vi sia perdita di
stato durante i crash)
un numero random molto grande (la probabilit di una
ripetizione prossima a zero)
in teoria potrebbe essere anche un timestamp
se gli orologi degli apparati hardware non vanno mai indietro

si noti tuttavia che Needham e Schroeder vollero evitare in
modo esplicito ogni tipo di dipendenza da timestamp
Prot. 12 Prot. N-S 1^a vuln.

Il Prot. 12 presenta la seguente vulnerabilit
anche se in pratica improbabile che possa essere sfruttata da un
attaccante
si supponga che Trudy abbia rubato una vecchia chiave di
Bob K
Bob
Bob scoprendolo potrebbe gi aver provveduto a cambiarla
e che abbia anche rubato un vecchio messaggio di risposta
del KDC ad Alice
quando la chiave di Bob era ancora K
Bob

Trudy attende che Alice richieda al KDC di parlare con Bob
poi sostituisce la risposta del KDC con quella vecchia in suo
possesso, che appare ad Alice come una risposta ordinaria
Prot. 12 Prot. N-S 1^a vuln.

Trudy pu pertanto impersonare Bob
riesce a decifrare il ticket e ad ottenere la chiave di sessione

questa vulnerabilit, prevalentemente teorica, pu
essere rimossa non permettendo a Trudy di riusare
(reply) vecchie risposte del KDC
ad esempio aggiungendo un nounce N
1
alla richiesta
iniziale di Alice
e chiedendo al KDC di cifrarlo insieme alla chiave K
AB
Prot. 12 Prot. N-S 1^a vuln.

segue sotto il Prot. 12.1 ottenuto rimuovendo la
vulnerabilit appena illustrata
K
Alice
{N
1
, K
AB
}
ticket to Bob = K
Bob
{K
AB
}

N
1
, Alice wants Bob

A
l
i
c
e

B
o
b
K
D
C

invents key K
AB
Im Alice, ticket to Bob

Protocollo 12.1
Prot. 12 Prot. N-S 2^a vuln.

Nel Prot. 12.1 sussiste ancora la seguente vulnerabilit
si supponga che Trudy, utente del KDC, riesca a
modificare la richiesta di Alice, sostituendo Bob con
Trudy
il KDC restituirebbe ad Alice una chiave condivisa con
Trudy e non con Bob; cio K
AT
e non K
AB
tuttavia, dalle informazioni ricevute Alice non pu
rendersi conto di tale attacco; cio Alice convinta di
aver ricevuto K
AB
quindi Trudy potrebbe impersonare Bob senza che
Alice se ne accorga

Prot. 12 Prot. N-S 2^a vuln.

il precedente attacco sventabile aggiungendo
alle informazioni che il KDC deve inviare ad Alice
(cifrate con K
Alice
)
il destinatario della richiesta di connessione che
ha ricevuto il KDC
in tal modo Alice pu verificare se coincide con quello
presente nella sua richiesta
inoltre il KDC pu aggiungere il nome dellutente
che ha effettuato la richiesta tra le informazioni
che costituiscono il ticket per Bob
il motivo di tale scelta sar chiaro pi tardi

Prot. 12 Prot. N-S 2^a vuln.

implementando le precedenti modifiche si ottiene
il Prot. 12.2
K
Alice
{N
1
, Bob, K
AB
}
ticket to Bob = K
Bob
{K
AB
, Alice}

N
1
, Alice wants Bob

A
l
i
c
e

B
o
b
K
D
C

invents key K
AB
Im Alice, ticket to Bob

Protocollo 12.2
Prot. 12 Prot. N-S 3^a vuln.

Il Prot. 12.2 analogamente ai precedenti non include
uno scambio che permetta di autenticare
reciprocamente Alice e Bob
per lautenticazione reciproca ciascuno deve provare
allaltro di conoscere K
AB
Alice sa che soltanto chi conosce K
Bob
pu decifrare il ticket
per Bob e quindi riottenere K
AB
Bob decifrando il ticket, oltre a K
AB
, ottiene Alice e sa
pertanto che il KDC stato contattato da Alice e che solo lei,
Alice e il KDC conoscono K
AB

(ci spiega una delle modifiche inserite nel protocollo 12.2)


Prot. 12 Prot. N-S 3^a vuln.

Alice e Bob possono autenticarsi
reciprocamente nel seguente modo
Alice, insieme al ticket invia a Bob una sfida (N
2
) cifrata
con la chiave K
AB
Bob decifra il ticket e ottiene K
AB
, quindi usa K
AB
per
estrarre N
2
poi invia ad Alice K
AB
{N
2
1, N
3
}, N
2
1 serve a provare
ad Alice che conosce K
AB

N
3
invece la sfida per Alice
infine, Alice dimostra a Bob di conoscere K
AB

rispondendo alla sua sfida con K
AB
{N
3
}

Prot. 12 Prot. N-S 3^a vuln.
Il Prot. 12.3 include anche lo scambio per
autenticare reciprocamente Alice e Bob
K
Alice
{N
1
, Bob, K
AB
}
ticket to Bob = K
Bob
{K
AB
, Alice}

N
1
, Alice wants Bob

A
l
i
c
e

B
o
b

K
D
C

invents key K
AB
Im Alice ticket to Bob, K
AB
{N
2
}

Protocollo 12.3
K
AB
{N
2
1, N
3
}

K
AB
{N
3
1}

Protocollo di Needham-Schroeder
Il protocollo di Needham-Schroeder in pratica
concide con il Prot. 12.3
tranne per il fatto che il KDC include il ticket per Bob tra
le informazioni da cifrare con K
Alice

si osservi che ci non migliora la sicurezza in quanto il
ticket per Bob qualcosa di indecifrabile per Alice
tale ulteriore cifratura poteva pertanto omettersi
Protocollo di Needham-Schroeder
K
Alice
{N
1
, Bob, K
AB
, ticket to Bob}
where ticket to Bob = K
Bob
{K
AB
, Alice}

N
1
, Alice wants Bob

A
l
i
c
e

B
o
b

K
D
C

invents key K
AB
ticket, K
AB
{N
2
}

Needham-Schroeder
K
AB
{N
2
1, N
3
}

K
AB
{N
3
1}

m
1
m
3
m
4
m
5
m
2
Bibliografia
[DES81] DES Modes of Operation, FIPS PUB 81, National Bureau of Standards, U.S.
Department of Commerce, 1981.

[KPS02] C. Kaufman, R. Perlman, M. Speciner. Network Security Private
Communication in a Public World. Prentice Hall.

[NEED78] R. M. Needham, M. D. Schroeder. Using Encryption for Authentication in
Large Networks of Computers. Communications of the ACM, Vol. 21, December
1978, pp. 993-999.

[PFL08] C. P. Pfleeger, S. L. Pfleeger. Sicurezza in Informatica. Pearson, Prentice
Hall.

[STA07] W. Stallings. Sicurezza delle reti. Pearson, Prentice Hall.

[Wiki-it] http://it.wikipedia.org/wiki/

[Wiki-en] http://en.wikipedia.org/wiki/

[ISECOM] Institute for Security and Open Methodologies
Standard di Autenticazione
Kerberos V4



Luca Grilli
Introduzione
Kerberos un servizio, a chiave segreta, per
autenticare utenti e risorse (principal) in una rete
insicura
Basato sul lavoro di Needham e Schroeder, fu
progettato originariamente al MIT
Serve a semplificare lautenticazione di un utente di
una workstation per accedere a risorse remote
(protette) di cui possiede i diritti di accesso
Le prime tre versioni di Kerberos non sono pi usate
Le versioni V4 e V5, sebbene concettualmente simili,
sono sostanzialmente diverse e si stanno contendendo
il mercato

Introduzione
La versione V4 pi diffusa, pi semplice, e offre
migliori prestazioni, ma funziona solo su reti TCP/IP
mentre la versione V5 offre maggiori funzionalit ed
meno restrittiva
Si esaminer soltanto la versione V4 nelle prossime
slides

Curiosit: il nome Kerberos (Cerbero) deriva dalla
mitologia greca, Cerbero era il cane a tre teste posto a
guardia dellingresso dellAde (inferi)

Scenario di impiego tipico
Si supponga che un utente Alice effettui il login presso
una workstation inserendo username e password
o presso un sistema operativo di un computer multiutente
durante la sessione di login
cio nel periodo di tempo che intercorre dal login al logout
Alice potrebbe avere la necessit di accedere, previa
autenticazione, a risorse remote di cui possiede i
diritti di accesso
host remoti su cui Alice ha un account,
oppure file su server remoti di cui possiede i diretti di
accesso e/o modifica
Scenario di impiego tipico
WorkStation
usr
pwd
server2
server1
serverN
rete
insicura
Scenario di impiego tipico
se lautenticazione coinvolgesse direttamente Alice
dovrebbe, molto probabilmente, basarsi
sullinserimento delle credenziali di accesso, con ovvi
svantaggi
lautenticazione basata su password meno sicura di
unautenticazione a sfida e risposta a chiave segreta
Alice sarebbe chiamata ad inserire molto spesso le proprie
credenziali, oppure queste dovrebbero essere memorizzate
in qualche punto

Kerberos fornisce una soluzione sicura a tale problema
semplificando la vita ad Alice
Kerberos Idea Base
con Kerberos la workstation (sistema operativo) di
Alice in grado di effettuare lautenticazione al suo
posto
senza che Alice si renda conto che in atto un
processo di autenticazione
in altri termini, lautenticazione completamente
trasparente allutente

Kerberos stato pensato per reti insicure (come
Internet)
ove sono possibili sia attacchi alla confidenzialit,
che attacchi allintegrit
Implementazione di Kerberos
Unimplementazione di Kerberos consiste in
un Key Distribution Center (KDC) che viene eseguito in
qualche parte della rete su un nodo fisicamente
sicuro,
e una libreria di subroutine usate dalle applicazioni
distribuite che desiderano autenticare i propri utenti
Tra le applicazioni che sono state modificate per
incorporare delle chiamate a subroutine nella libreria
di Kerberos troviamo
telnet: serve ad interagire su un sistema remoto tramite riga
di comando
Implementazione di Kerberos
BSD rtools: gruppo di programmi di utilit inclusi in BSD
Unix che supportano il login remoto (rlogin), la copia di
file remoti (rcp) e lesecuzione remota di comandi (rsh)
NFS (Network File System): programma di utilit che
permette di accedere a file di un host remoto come se
fossero locali
Sebbene sono previste diverse modalit operative
Kerberos fu progettato per un ambiente in cui un
utente effettua il login in una workstation
inserendo user-name e password
Implementazione di Kerberos
user-name e password sono usate dalla
workstation per ottenere dal KDC
le informazioni necessarie ai processi locali per
autenticarsi e per accedere alle risorse remote al
posto dellutente
evitando che lutente inserisca ogni volta le sue
credenziali
Implementazione di Kerberos
WorkStation
usr
pwd
server2
server1
serverN
KDC
rete
insicura
librerie di subroutine di Kerberos
DA NEEDHAM-SCHROEDER A
KERBEROS
Standard di Autenticazione Kerberos V4
N-S Kerberos (0)
si supponga che lutente Alice, dopo aver effettuato il
login presso la workstation, desideri effettuare un
login remoto, comando rlogin, presso il server Bob
ovviamente Alice dispone gi di un account utente
presso Bob
nelle prossime slide si illustrer linterazione logica
tra Alice e il KDC (in pratica Needham-Schroeder)
Alice e il KDC non interagiscono direttamente, ma c
lintermediazione della workstation che inizialmente sar
trascurata
ci sar comunque evidenziato nello schema utilizzando
delle frecce tratteggiate
N-S Kerberos (0)
Il KDC condivide una chiave segreta, detta chiave
master, con ciascun principal (cio ciascun utente e/o
risorsa coinvolte nel processo di autenticazione)
K
A
e K
B
indicheranno le chiavi master di Alice e Bob
Alice informa il KDC che desidera contattare Bob
il KDC inventa una chiave di sessione K
AB
per Alice (per
la sua workstation) e Bob
poi cifra K
AB
e il nome Bob con la chiave master di
Alice K
A
e cifra K
AB
e il nome Alice con a chiave master di Bob
K
B
ottenendo il ticket per Bob

N-S Kerberos (0)
restituisce poi tutte queste informazioni ad Alice
Alice non pu leggere cosa c nel ticket di Bob
perch cifrato con la chiave master di Bob
solo Bob (e il KDC) pu decifrare il suo ticket ed
ottenere K
AB
e il nome Alice
ci rassicura Bob che chiunque conosce K
AB
agisce per
conto di Alice
pertanto, usando K
AB
, Alice e Bob possono autenticarsi
reciprocamente
ed eventualmente proteggere la confidenzialit e
lintegrit della loro conversazione

N-S Kerberos (0)
la chiave di sessione K
AB
insieme al ticket per Bob
costituiscono le credenziali di Alice presso Bob


K
A
{K
AB
, Bob}
ticket to Bob = K
B
{K
AB
, Alice}

Alice wants Bob

A
l
i
c
e

B
o
b

K
D
C

invents key K
AB
Im Alice, ticket = K
B
{K
AB
, Alice}

mutua autenticazione a chiave segreta K
AB


conversazione cifrata e con controllo dintegrit

N-S Kerberos (1)
ora si introdurr, in modo graduale,
lintermediazione della workstation di Alice
per prima cosa, Alice non dovr ricordarsi la
propria chiave master K
A
,

una possibilit che la chiave master di Alice si
ottenga dal usr e pwd: K
A
= f(usr, pwd)

e che la workstation calcoli K
A
quando Alice
effettua il login
N-S Kerberos (1.a)
A
l
i
c
e

B
o
b

K
D
C
login
usr pwd
A
l
i
c
e

s


w
o
r
k
s
t
a
t
i
o
n

la workstation calcola la chiave
master di Alice K
A
= f(usr, pwd)
Fase di login
N-S Kerberos (1.b)
K
A
{K
AB
, Bob}
ticket to Bob = K
B
{K
AB
, Alice}

Alice wants Bob

A
l
i
c
e

B
o
b

K
D
C

Im Alice, ticket = K
B
{K
AB
, Alice}

mutua autenticazione a chiave segreta K
AB


conversazione cifrata e con controllo dintegrit

rlogin Bob

A
l
i
c
e

s


w
o
r
k
s
t
a
t
i
o
n

any
commands

Esecuzione di un comando remoto
i) invents key K
AB
ii) finds Bobs master
key K
B
Schema (1) vulnerabilit
la workstation, che effettua lautenticazione al posto
di Alice, dovrebbe ricordare la sua password durante
lintera sessione di login
oppure dovrebbe ricordare la sua chiave master K
A
ed usarla quando Alice effettua delle operazioni che
richiedono la verifica della sua identit
tale soluzione non pu considerarsi sicura
Alice potrebbe, durante la sessione di login, eseguire del
software non fidato che potrebbe rubare la sua password
va limitato il pi possibile il tempo di memorizzazione
della password e della chiave master di Alice
Schema (1) riduzione vulnerabilit
per ridurre la precedente vulnerabilit conviene procedere
nel seguente modo
lidea quella di sostituire il ruolo della chiave master
K
A
con quello di una chiave di sessione di utente S
A
S
A
varia da sessione a sessione
pwd, usr e quindi K
A
vengono usati solo
temporaneamente allinizio di ogni sessione di login
per ottenere S
A
la chiave di sessione S
A
viene generata dal KDC
una volta ottenuta S
A
la workstation dimentica la pwd
di Alice e ricorda soltanto S
A
Schema (1) riduzione vulnerabilit
in altri termini, per ridurre la vulnerabilit, la prima
cosa che effettua la workstation
richiedere al KDC una chiave di sessione S
A
per
lutente Alice
S
A
sar valida soltanto per la sessione di login corrente;
in generale, S
A
sar valida per un tempo molto ridotto,
tipicamente poche ore
e sar usata dalla workstation, che agir al posto di
Alice, per verificare la sua identit
se qualcuno dovesse rubare S
A
, a differenza di prima,
questi pu impersonare Alice, ma solo per poco tempo;
fino alla scadenza di S
A
N-S Kerberos (2.a)
A
l
i
c
e

B
o
b

K
D
C
login
usr pwd
A
l
i
c
e

s


w
o
r
k
s
t
a
t
i
o
n

la workstation ottiene la chiave
di sessione S
A
per lutente Alice

dopodich dimentica pwd e K
A

Alice needs a user
session key

a) invents key S
A
b) finds Alices master
key K
A
Fase di login
K
A
{S
A
}
N-S Kerberos (2.b)
S
A
{K
AB
, Bob}
ticket to Bob = K
B
{K
AB
, Alice}

Alice wants Bob

A
l
i
c
e

B
o
b

K
D
C

Im Alice, ticket = K
B
{K
AB
, Alice}

mutua autenticazione a chiave segreta K
AB


conversazione cifrata e con controllo dintegrit

rlogin Bob

A
l
i
c
e

s


w
o
r
k
s
t
a
t
i
o
n

any
commands

Esecuzione di un comando remoto
i) invents key K
AB
ii) finds S
A
iii) finds K
B
Schema (2) svantaggio
cos come illustrato, il precedente protocollo richiede
al KDC di memorizzare, oltre alla chiave master di ogni
utente
anche la chiave di sessione; nel caso di Alice, il KDC
deve memorizzare sia K
A
che S
A
ci evitabile utilizzando il cosiddetto
Ticket-Granting Ticket (TGT) che il KDC invia ad Alice e
consiste
nella chiave di sessione S
A
pi altre informazioni come il nome di Alice e la scadenza del
TGT stesso
il tutto cifrato con la chiave master K
KDC
del KDC

Ticket-Granting Ticket (TGT)
Un Ticket-Granting Ticket, per il KDC, da inviare
ad un utente U viene generato dal KDC e consiste
nella chiave di sessione S
U
,
pi il nome dellutente UserName
ed altre informazioni accessorie cifrate con la chiave
master del KDC
come ad esempio lexpiration time del TGT

TGT = K
KDC
{S
U
, UserName, ExpirationTime, }


Uso del TGT
Durante il login iniziale, la workstation, che agisce al
posto di Alice, richiede al KDC una chiave di sessione
il KDC genera una chiave di sessione S
A
e la trasmette,
alla workstation, cifrata con la chiave master di Alice
K
A
il KDC trasmette anche un TGT

la workstation usa la chiave master di Alice K
A
per
decifrare S
A
dimentica poi la pwd di Alice e ricorda solo S
A
e il TGT


Uso del TGT
quando Alice deve accedere ad una risorsa remota
la sua workstation trasmette il TGT al KDC
insieme al nome della risorsa (server) per la quale
Alice ha bisogno di un ticket (diciamo Bob)
il KDC decifra il TGT ed ottiene S
A
e usa S
A
per cifrare la chiave di sessione condivisa
per Alice e Bob K
AB

in sintesi, il TGT informa il KDC di usare S
A
invece
della chiave master di Alice K
A
N-S Kerberos (3.a)
A
l
i
c
e

B
o
b

K
D
C
login
usr pwd
A
l
i
c
e

s


w
o
r
k
s
t
a
t
i
o
n

la workstation ottiene la chiave
di sessione S
A
per lutente Alice

dopodich dimentica pwd e K
A
e ricorda solo S
A
e TGT

Alice needs a user
session key and a TGT

a) invents key S
A
b) finds K
A
c) TGT = K
KDC
{S
A
, Alice}

Fase di login
K
A
{S
A
}, TGT

N-S Kerberos (3.b)
S
A
{K
AB
, Bob}
ticket to Bob = K
B
{K
AB
, Alice}

Alice wants Bob, TGT

A
l
i
c
e

B
o
b

K
D
C

Im Alice, ticket = K
B
{K
AB
, Alice}

mutua autenticazione a chiave segreta K
AB


conversazione cifrata e con controllo dintegrit

rlogin Bob

A
l
i
c
e

s


w
o
r
k
s
t
a
t
i
o
n

any
commands

Esecuzione di un comando remoto
i) invents key K
AB
ii) finds S
A
from TGT

iii) finds K
B
Alcune note
Nelle prime versioni di Kerberos non esisteva la
nozione di TGT
la comunicazione con il KDC utilizzava sempre la chiave
master dellutente
pi tardi, per aumentare la sicurezza, fu introdotta la
chiave di sessione di utente generata in fase di login
lidea era che soltanto i TGT fossero generati dal
KDC
mentre gli altri ticket dovevano essere ottenuti da
unaltra entit, che Kerberos chiama
Ticket-Granting Server (TGS)
Alcune note
tuttavia, il Ticket-Granting Server deve avere lo
stesso database del KDC
deve conoscere la chiave master di Bob K
B
per poter
dare ad Alice un ticket per Bob
pertanto, nella pratica il TGS e il KDC di Kerberos
sono la stessa cosa!
sarebbe pi facile comprendere Kerberos se la
documentazione non facesse riferimento a due entit
distinte (il TGS e il KDC)
e a due set di messaggi distinti, uno per protocollo, che
in pratica fanno la stessa cosa
Alcune note
in particolare, la documentazione di Kerberos fa
riferimento a
un Server di Autenticazione (Authentication Server
AS) e a
un Ticket-Granting Server (TGS)
che sono collocati nel KDC, intendendo che in pratica
sono la stessa cosa
la distinzione AS e TGS stata mantenuta per non
stravolgere la documentazione rispetto alle prime versioni

pertanto, nel seguito si useranno i termini KDC, AS e
TGS in modo intercambiabile
PROTOCOLLO KERBEROS V4
Standard di Autenticazione Kerberos V4
Configurazione
Ciascun principal ha una sua chiave segreta, detta
chiave master
Il server Kerberos chiamato KDC (Key Distribution
Center)
a volte chiamato Authentication Server o KDC/AS
Il KDC ha un database con i nomi di tutti i principal, a
lui afferenti, e le relative chiavi master
Per ragioni di sicurezza, le chiavi master dei principal
non vengono memorizzate in chiaro
ma vengono memorizzate cifrate con una chiave
segreta K
KDC
nota solo al KDC; K
KDC
detta la chiave
master del KDC
Configurazione
La chiave master di un utente umano derivata
dalla sua password
le altre risorse associate agli utenti umani sono
configurate utilizzando la loro chiave master
Kerberos si basa sulla tecnologia a chiave segreta
generalmente si usa DES quale algoritmo di cifratura
la versione V5 permette di impostare lalgoritmo di
cifratura, per lo meno a livello protocollare
ma nella pratica si usa sempre DES
In sintesi
Gli utenti umani devono memorizzare una
password; i dispositivi di rete devono memorizzare
una chiave segreta
Il KDC ha un database con i nomi dei principal, a
lui afferenti, e le relative chiavi master
Il KDC deve anche ricordare una chiave segreta
K
KDC
per se stesso
al fine di cifrare/decifrare il database con le chiavi degli
utenti, e
per generare i Ticket-Granting Tickets
Fasi di Kerberos
Nel seguito si esamineranno le due fasi di Kerberos:
1. Login: Alice effettua il login presso la sua
workstation, ottenendo una chiave di sessione e
un TGT
2. Esecuzione di un comando remoto: Alice esegue
un comando su un server remoto per il quale
prevista una fase preliminare di autenticazione
la workstation di Alice effettuer lautenticazione
al suo posto
KRB V4 Login/acquisizione di un TGT
Messaggio m1
Alice trasmette il proprio nome utente e password
alla workstation
Messaggio m2 [AS_REQ]
La workstation invia un messaggio al KDC, in
chiaro, contenente il nome utente di Alice
Messaggio m3 [AS_REP]
una volta ricevuto m2, il KDC restituisce alla
workstation, le credenziali per il KDC, cifrate con la
chiave master di Alice K
A
Kerberos V4 Acquisizione di un TGT
A
l
i
c
e

W
o
r
k
s
t
a
t
i
o
n

K
D
C

i) invents key S
A
ii) finds Alices master key K
A
iii) TGT = K
KDC
{Alice, S
A
}

Login/acquisizione di un TGT
Alice, password
[AS_REQ]
Alice needs a TGT
[AS_REP]
K
A
{S
A
, TGT}
m
1
m
2
m
3
KRB V4 Credenziali per il KDC
Le credenziali di Alice per il KDC consistono in
una chiave di sessione di utente S
A
una chiave segreta da usare durante la sessione di login
un Ticket-Granting Ticket (TGT), costituito da
la chiave di sessione S
A

il nome utente e
la data di scadenza
il tutto cifrato con la chiave master del KDC K
KDC
pertanto il TGT una stringa di bit non intelligibile per
chiunque tranne che per il KDC
KRB V4 Credenziali per il KDC
le credenziali di Alice per il KDC, sono inviate indietro,
dal KDC ad Alice, cifrate con la chiave master K
A
le informazioni nel TGT sono pertanto cifrate due volte;
prima con K
KDC
e poi con K
A
Kerberos V4 stato spesso criticato per questa scelta che
comporta uno sforzo computazionale doppio non giustificato
da un reale beneficio in termini di sicurezza

la workstation converte la password digitata da Alice
nella corrispondente chiave DES K
A
e una volta ricevute le credenziali, tenta di decifrarle
con K
A
KRB V4 Credenziali per il KDC
se tale decifratura viene eseguita con successo
cio se Alice ha digitato correttamente la password
la workstation, scarta la chiave master di Alice K
A

(la chiave derivata dalla password) e
memorizza invece il TGT e la chiave di sessione S
A


Alcuni dettagli
In realt, Kerberos V4 richiede allutente di inserire la
propria password solo dopo che la workstation ha
ricevuto le credenziali dal KDC
la workstation mantiene lutente in attesa e gli permette di
inserire la password solo dopo aver ricevuto la risposta dal
KDC
lobiettivo ridurre il pi possibile il tempo di
permanenza della password dutente nella
workstation
si tratta di una buona regola generale di sicurezza
tuttavia, nella pratica non si ha un vantaggio significativo in
quanto i tempi in gioco sono dellordine dei secondi
Alcuni dettagli
Invece, in Kerberos V5, lutente inserisce la password
prima che il KDC fornisca le credenziali alla
workstation
in particolare, in V5, la workstation deve prima
provare di conoscere la password dutente dopodich
pu richiedere le credenziali per il KDC
in questo modo meno facile sferrare un attacco off-
line sulla password
nella versione V4, chiunque, sostenendo di essere
Alice, ottiene K
A
{S
A
, TGT} senza dover intercettare
alcun messaggio
K
A
la chiave master di Alice, ottenuta dalla sua password

KRB V4 Documentazione ufficiale
la documentazione ufficiale di Kerberos nomina i
messaggi nel seguente modo

KRB_AS_REQ: Kerberos Authentication Server
Request
corrisponde al messaggio m2, per brevit nello schema
si usato AS_REQ
KRB_AS_REP: Kerberos Authentication Service
Reply
corrisponde al messaggio m3, per brevit nello schema
si usato AS_REP
Scopo del TGT
Qual lo scopo del TGT?

Risposta
Quando Alice deve accedere a una risorsa remota, la
sua workstation invia il TGT al KDC insieme a una
richiesta di un ticket per il nodo di tale risorsa
il TGT contiene le informazioni di cui ha bisogno il KDC
relative alla sessione di login di Alice
la chiave di sessione S
A
, il nome utente di Alice, la data di
scadenza,
tali informazioni permettono al KDC di operare senza
la necessit di mantenerle in memoria
Scopo del TGT
il KDC ha una base di dati prevalentemente statica,
e per ogni richiesta invia una risposta e
dimentica ci che accaduto
ci offre diversi vantaggi pratici, come semplificare
la replicazione dei KDC e il
non dover preoccuparsi di mantenere lo stato
quando si verificano dei crash di sistema
KRB V4 Esecuzione comando remoto
Nelle prossime slide si esaminer lesecuzione di
un comando remoto (rlogin), presso un server Bob
per il quale prevista unautenticazione
preliminare di Alice, che sar eseguita dalla sua
workstation
comodo distinguere due sottofasi
la workstation acquisisce dal KDC un ticket per Bob
la workstation (che agisce al posto di Alice) e Bob si
autenticano reciprocamente
KRB V4 Acquisizione di un ticket
Si supponga che dopo il login, Alice digiti un comando
che richiede laccesso ad un nodo remoto (messaggio
m4)
ad esempio rlogin Bob che permette ad Alice di effettuare
il login su Bob

la workstation invia al KDC (messaggio m5) il TGT, il
nome Bob e un authenticator
il cui scopo provare che la workstation conosce la
chiave di sessione S
A
lauthenticator consiste nel timestamp cifrato con S
A
tale richiesta (m5) nella documentazione di Kerberos
chiamata KRB_TGS_REQ

KRB V4 Acquisizione di un ticket
mentre la corrispondente risposta (m6)
chiamata KRB_TGS_REP
per brevit, nello schema si sono usati TGS_REQ e
TGS_REP, rispettivamente

TGS_REP contiene il ticket per Bob e K
AB
(la chiave
di sessione che Alice e Bob condivideranno) cifrate
con S
A
(la chiave di sessione che Alice condivide
con il KDC)
KRB V4 Acquisizione di un ticket
A
l
i
c
e

W
o
r
k
s
t
a
t
i
o
n

K
D
C

a) invents key K
AB
b) decrypts TGT to get S
A
c) decrypts authenticator
d) verifies timestamp
e) finds Bobs master key K
B
f) ticket to Bob = K
B
{Alice, K
AB
}

Alice ottiene un ticket per Bob
rlogin, Bob
[TGS_REQ]
Alice wants to talk to Bob
TGT = K
KDC
{Alice, S
A
}
authenticator = S
A
{timestamp}
[TGS_REP]
S
A
{Bob, K
AB
, ticket to Bob}
m
4
m
5
m
6
KRB V4 Acquisizione di un ticket
il KDC decifra il TGT (con K
KDC
) ed ottiene la chiave di
sessione S
A
; controlla anche la data di scadenza del
TGT
se il TGT valido, genera una nuova chiave K
AB
la chiave segreta condivisa tra Alice e Bob
e costruisce un ticket per Bob composto da
la nuova chiave K
AB
, il nome Alice (lutente da cui ha
ricevuto la richiesta) e lexpiration time del ticket stesso
il tutto cifrato con la chiave master di Bob, K
B
il KDC invia il ticket insieme al nome Bob e K
AB
, alla
workstation, cifrando tali informazioni con S
A

(messaggio m6)

una volta ricevute, la workstation le decifrer con S
A
Sulluso dellauthenticator
Necessit di sincronizzare gli orologi
luso dellauthenticator comporta che gli orologi delle risorse
di rete debbano essere ragionevolmente ben sincronizzati
devono essere tollerati dei ritardi tra i vari orologi
la forbice permessa viene impostata in modo indipendente
su ogni server
pertanto, alcuni server possono essere configurati in modo
tale da tollerare ritardi maggiori
tipicamente, si tollera una forbice di cinque minuti, si
assume che si in grado di garantire un tale disallineamento
senza dover sostenere degli sforzi amministrativi
considerevoli
Sulluso dellauthenticator
ma nella pratica tale assunzione si rivelata pi
problematica del previsto
per tale ragione, conviene usufruire di servizi per la
sincronizzazione oraria, che permettono di risolvere in
problema in modo efficace

si osservi inoltre che luso dellauthenticator
evitabile; non aumenta il livello di sicurezza
se qualcuno che non conosce S
A
trasmettesse il TGT e il
nome Bob al KDC, non sarebbe comunque in grado di
decifrare la risposta del KDC che cifrata con S
A
Sulluso dellauthenticator
i progettisti di Kerberos inclusero lauthenticator
per ragioni di uniformit
cio per rendere il protocollo che regola la
comunicazione con il TGS analogo ai protocolli che
regolano la comunicazione con altre risorse
i quali richiedono invece la presenza di un autheticator
per sventare attacchi di tipo replay di vecchie richieste

KRB V4 Mutua autenticazione Alice/Bob
una volta che la workstation in possesso di un
ticket per Bob, pu inviare una richiesta a Bob
nella documentazione ufficiale di Kerberos tale
richiesta chiamata KRB_AP_REQ
KeRBeros APplication REQuest
per semplicit si user AP_REQ (messaggio m7)
AP_REQ costituita da
il ticket per Bob
un authenticator, ovvero un timestamp cifrato con la
chiave K
AB
KRB V4 Mutua autenticazione Alice/Bob
A
l
i
c
e

s

W
o
r
k
s
t
a
t
i
o
n

B
o
b

[AP_REQ]
ticket to Bob = K
B
{Alice, K
AB
}
authenticator = K
AB
{timestamp}
K
D
C

m
7
[AP_REP]
K
AB
{timestamp + 1}
m
8
A
l
i
c
e

Login su Bob dalla workstation di Alice
KRB V4 Mutua autenticazione Alice/Bob
la risposta di Bob nota come KRB_AP_REP, in breve
AP_REP (messaggio m8)

Bob decifra il ticket ed ottiene K
AB
e il nome Alice
assume pertanto che lentit (workstation) che conosce K
AB

stia agendo al posto di Alice
poi Bob decifra lauthenticator per assicurarsi che
lentit con cui sta dialogando conosca realmente K
AB
verifica se il timestamp ottenuto prossimo allorario
corrente (cinque minuti di tolleranza)
in questo modo pu sventare eventuali attacchi di tipo
replay di vecchie richieste (pi vecchie di cinque minuti)
Sul controllo del timestamp
per assicurarsi che non sia in corso un attacco di tipo
replay che sfrutta richieste molto recenti
Bob dovrebbe mantenere i memoria tutti i
timestamps ricevuti negli ultimi cinque minuti
e verificare, non appena riceve un nuovo timestamp,
che sia diverso da tutti quelli in memoria e che sia
prossimo allora corrente
ogni authenticator pi vecchio di cinque minuti viene
scartato a priori
tuttavia, Kerberos V4 non si preoccupa di salvare i
timestamp
Sul controllo del timestamp
salvare i timestamp non sarebbe comunque
daiuto se Bob fosse un servizio replicato e ogni
sua istanza usasse la stessa chiave master
a meno che non viene incluso lindirizzo di rete
dellistanza di Bob (dinteresse) nellauthenticator
KRB V4 Mutua autenticazione Alice/Bob
per completare la mutua autenticazione necessario
anche che la workstation di Alice autentichi Bob, a
tale scopo
Bob incrementa di ununit il timestamp ottenuto
decifrando lauthenticator
cifra con K
AB
il valore ottenuto; cio calcola
K
AB
{timestamp + 1}
e lo rispedisce indietro alla workstation

la workstation di Alice ora rassicurata sul fatto che
sta dialogando con il vero Bob
KRB V4 Mutua autenticazione Alice/Bob
in quanto, il suo interlocutore (il presunto Bob)
conosce K
AB
deve essere stato in grado di decifrare il ticket
per Bob
deve conoscere la chiave master di Bob K
B

si assume chiaramente che
solo la workstation di Alice, il KDC e in seguito Bob
conoscano K
AB
solo Bob e il KDC conoscano K
B
Confidenzialit e Integrit
Successivamente, dipendentemente dalla
applicazione, i messaggi tra Alice e Bob possono
essere
non protetti (in chiaro) oppure
pu essere protetta
solo lintegrit,
solo la confidenzialit,
sia lintegrit che la confidenzialit
Confidenzialit e Integrit
la protezione della confidenzialit e/o della
integrit pu essere gestita in modo autonomo
dalle applicazioni che usano Kerberos per
lautenticazione
tuttavia, Kerberos mette anche a disposizione
delle facility per proteggere integrit e/o
confidenzialit
a tale scopo utilizza DES nella modalit operativa
PCBC (Plaintext Cipher Block Chaining)
una variante di CBC che permette di rivelare eventuali
modifiche ai blocchi cifrati
Bibliografia
[DES81] DES Modes of Operation, FIPS PUB 81, National Bureau of Standards, U.S.
Department of Commerce, 1981.

[KPS02] C. Kaufman, R. Perlman, M. Speciner. Network Security Private
Communication in a Public World. Prentice Hall.

[NEED78] R. M. Needham, M. D. Schroeder. Using Encryption for Authentication in
Large Networks of Computers. Communications of the ACM, Vol. 21, December
1978, pp. 993-999.

[PFL08] C. P. Pfleeger, S. L. Pfleeger. Sicurezza in Informatica. Pearson, Prentice
Hall.

[STA07] W. Stallings. Sicurezza delle reti. Pearson, Prentice Hall.

[Wiki-it] http://it.wikipedia.org/wiki/

[Wiki-en] http://en.wikipedia.org/wiki/

[ISECOM] Institute for Security and Open Methodologies
A
l
i
c
e

W
o
r
k
s
t
a
t
i
o
n

K
D
C

i) invents key S
A
ii) finds Alices master key K
A
iii) TGT = K
KDC
{Alice, S
A
}

Acquisizione di un TGT
Alice, password
[AS_REQ]
Alice needs a TGT
[AS_REP]
K
A
{S
A
, TGT}
m
1
m
2
m
3
A
l
i
c
e

W
o
r
k
s
t
a
t
i
o
n

K
D
C

a) invents key K
AB
b) decrypts TGT to get S
A
c) decrypts authenticator
d) verifies timestamp
e) finds Bobs master key K
B
f) ticket to Bob = K
B
{Alice, K
AB
}

Alice ottiene un ticket per Bob
rlogin, Bob
[TGS_REQ]
Alice wants to talk to Bob
TGT = K
KDC
{Alice, S
A
}
authenticator = S
A
{timestamp}
[TGS_REP]
S
A
{Bob, K
AB
, ticket to Bob}
m
4
m
5
m
6
A
l
i
c
e

s

W
o
r
k
s
t
a
t
i
o
n

B
o
b

[AP_REQ]
ticket to Bob = K
B
{Alice, K
AB
}
authenticator = K
AB
{timestamp}
K
D
C

m
7
[AP_REP]
K
AB
{timestamp + 1}
m
8
A
l
i
c
e

Login su Bob dalla workstation di Alice
Sicurezza dei Sistemi Operativi
Luca Grilli
Fabrizio Montecchiani
Introduzione
Un SO (Sistema Operativo), o OS (Operating System), gestisce il
modo in cui le applicazioni software accedono alle risorse hardware
del calcolatore:
CPU
memoria principale
memoria secondaria
periferiche di I/O
interfacce di rete

Un OS fornisce uninterfaccia semplificata e consistente a utenti e
applicazioni al fine di interagire con i componenti hardware
grazie a questa astrazione possibile sviluppare programmi software
senza preoccuparsi della particolare tipologia di hardware sul quale
saranno eseguiti
Introduzione
User Applications
Userland
Non-essential OS Applications
Kernel
O.S.
CPU
Memory
I/O Devices
Hardware
Introduzione
Gli OS svolgono numerose funzioni, alcune
delle quali strettamente legate a problemi di
sicurezza, in particolare vedremo:
meccanismi di autenticazione
sicurezza dei processi
sicurezza del filesystem
sicurezza della memoria
MECCANISMI DI AUTENTICAZIONE
Sicurezza dei Sistemi Operativi
Il Problema dellAutenticazione
Un OS deve poter identificare i propri utenti in
modo sicuro
utenti diversi potrebbero avere permessi di accesso
alle risorse diversi

Un meccanismo di autenticazione standard
ampiamente usato consiste nellinserimento di un
username e di una password
se la password inserita coincide con la password
memorizzata dallOS per il dato username allora
lutente viene autenticato

Memorizzare le Password
Un OS deve dunque memorizzare la password
di ogni utente che pu accedere al sistema

Generalmente gli OS memorizzano le
password criptate attraverso funzioni hash in
un file o in un apposito database
grazie alla propriet one-way delle funzioni hash,
un attaccante che riesce ad accedere al file dove
sono memorizzate le password non pu ricostruire
facilmente il loro valore


Windows e Linux
Windows (32 bit):
C:\WINDOWS\system32\config\SAM

Linux:
/etc/passwd
/etc/shadow (solo lutente root pu leggerle)

Possibili Attacchi
Brute Force: attacco offline, tutte le possibili password per
un dato alfabeto vengono generate automaticamente,
criptate con la funzione hash usata dal sistema di
autenticazione e confrontate con le password memorizzate

Dizionario: attacco offline, liste di parole comuni (es: nomi)
che vengono criptate con la funzione hash usata dal
sistema di autenticazione e confrontate con le password
memorizzate

Rainbow tables

Tempo e spazio sono risorse limitate!

Password Robuste
Linee guida:
evitare parole comuni (es: nomi)
evitare password brevi
usare caratteri maiuscoli E minuscoli
usare caratteri speciali (es: segni di punteggiatura)
usare i numeri

Quando possiamo considerare una password robusta?
Roma
P1er03
P@$$w0rd
Complessit della Password
Possibili password di lunghezza pari a 6 simboli
solo numeri:
10
6
= 1,000,000
solo caratteri maiuscoli O minuscoli :
26
6
= 308,915,776
solo caratteri maiuscoli E minuscoli :
52
6
= 19,770,609,664
solo 32 caratteri speciali (&, %, $, , , |, ^, , etc.):
32
6
= 1,073,741,824
numeri + caratteri maiuscoli E minuscoli + caratteri speciali:
94
6
= 689,869,781,056
ASCII standard 7 bit, 2
7
=128 possibili simboli:
128
6
= 4,398,046,511,104
Lunghezza della Password
Numeri + caratteri maiuscoli E minuscoli +
caratteri speciali = 94 possibili simboli
lunghezza 5:
94
5
= 7,339,040,224
lunghezza 6:
94
6
= 689,869,781,056
lunghezza 7:
94
7
= 64,847,759,419,264
lunghezza 8:
94
8
= 6,095,689,385,410,816
lunghezza 9:
94
9
= 572,994,802,228,616,704
Scadenza della Password
Es: scadenza password ogni 60 giorni
# PW/sec da testare con un attacco brute-force,
considerando un alfabeto di 94 simboli
lunghezza 5: 1,415 PW/sec
lunghezza 6: 133,076 PW/sec
lunghezza 7: 12,509,214 PW/sec
lunghezza 8: 1,175,866,008 PW/sec
lunghezza 9: 110,531,404,750 PW/sec
Esempio di Password Robusta

Voglio compr@re 11 Cani!

Per scoprire questa password con un
attacco brute-force in 60 giorni dovrei
disporre di un computer in grado di
generare circa 3,86 x 10
44
PW/sec!!!

Password Salt
Salt: aggiunta di bit random allinput di una
funzione hash (o di un algoritmo di crittografia) al
fine di aumentare la randomicit dellouput

Nel caso dellautenticazione possibile associare
un numero random alluserID dellutente
salt = numero random + userID
Password Salt
1. Lutente inserisce il suo userID X e la password P

2. Il processo di autenticazione dellOS recupera il salt S per luserID X e
lhash H del salt concatenato alla password associata a X

3. OS verifica se HASH(S||P) == H

Benefici
Se lattaccante non pu trovare il salt
associato con luserID, allora lo spazio di
ricerca per un attacco con dizionario cresce
notevolmente:
2
B
x D
B = # bits del salt, D = dimensione dizionario (# parole)

Benefici
Anche se lattaccante fosse in grado di recuperare
il salt memorizzato in forma criptata dallOS,
questo meccanismo consente di rallentare
notevolmente lattacco con dizionario,
rendendolo valido per un userID alla volta
senza salt possibile crackare molte password nello
stesso momento, inquanto si ha solo bisogno dellhash
di ogni possibile password e di confrontarlo con tutti
gli hash memorizzati
con il meccanismo di salt, ogni possibile password va
concatenata al salt ad essa associato prima di
calcolarne lhash
Benefici
E possibile che due utenti utilizzino la stessa password,
o che lo stesso utente scelga di utilizzare la stessa
password per due account diversi

Senza il meccanismo di salt le due password hanno lo
stesso hash
questo potrebbe rivelare il fatto che i due account hanno
la stessa password, permettendo a chiunque che conosce
una delle due password di accedere anche allaltro account

Grazie al meccanismo di salt gli hash delle due
password risultano invece diversi
Keyloggers e Social Engineering
Crackare una password potrebbe non essere lunico modo per
violare un sistema di autenticazione

Un keylogger uno strumento (HW o SW) in grado di intercettare
tutto ci che un utente digita sulla tastiera
per proteggersi da un keylogger che invia le informazioni catturate in
remoto si pu utilizzare un firewall HW o SW per intercettare e
bloccare la connessione del processo incriminato
inoltre possibile utilizzare tastiere virtuali sullo schermo, fornite da
molti OS
LanManager Hash
LM Hash (Lan Manager Hash): algoritmo per
memorizzare le password nei sistemi Windows
ormai obsoleti (Win 95/98)

Tuttoggi mantenuto per problemi di
compatibilit (va attivato manualmente)

Utilizzabile per password di lunghezza non
superiore a 14 caratteri

No prevede lutilizzo del salt
LanManager Hash
1. Pwd convertita in UPPERCASE
1. se la dimensione della pwd minore di 14B (1B per carattere)
viene eseguito un NULL padding
2. se la dimensione della pwd maggiore di 14B viene troncata

2. Password divisa in 2 chiavi da 7B, aggiungendo poi uno 0
ogni 7 bit

3. Le due chiavi da 8B sono usate per criptare la parola
KGS!@#$% con DES

4. I due valori cifrati sono concatenati per formare un LM
Hash di 16B
LanManager Hash
UPPERCASE
+
NULL PADDING / TRUNCATING
LanManager Hash
Debolezze:
case insensitive
di 95
14
possibili pwd (charset ASCII) ne restano 69
14

le password pi lunghe di 7 caratteri sono divise
in 2 met trattate separatamente e crackabili
separatamente
69
7
= 7.4*10
12
possibili pwd

NT Lan Manager Hash
NTLM Hash (NT Lan Manager Hash): sostituisce
LM Hash nei sistemi Windows NT moderni

Vero hash MD4

Supporta lintero charset Unicode

Lunghezza massima 127 caratteri (limite della
finestra di Logon)

NT Lan Manager Hash
PWD MD4
HASH NT
(16B)
Non prevede lutilizzo del salt
Output di 16B (come LM Hash)

NT Lan Manager Hash
Complessit password:
charset=65535 simboli
consideriamo una lunghezza pari a 14 caratteri
65535
14
= 2.7*10
67
possibili pwd


SICUREZZA DEI PROCESSI
Processi
Un processo unistanza di un programma in esecuzione
il codice di un programma in esecuzione viene caricato dalla
memoria secondaria in cui memorizzato e passato alla
memoria primaria
pi istanze di uno stesso programma possono essere eseguite
come processi diversi
un processo pu controllare altri processi
unapplicazione pu essere composta da pi processi
i processi attivi vengono eseguiti parallelamente attraverso la
tecnica di time-sharing su ogni core della CPU

Ogni processo univocamente identificato da un intero
detto PID (Process ID ) e viene associato alluser (utente)
che lo ha generato

Processi
Un nuovo processo generato mediante il
meccanismo di forking
il processo che richiede il forking detto parent
process, il processo forked detto child process
nella maggior parte degli OS il processo figlio
eredita i permessi del processo padre
a meno che il processo padre non specifichi
esplicitamente i permessi del processo figlio

Esempio di Codice C
int main()
{
printf("I'm the parent, my PID is %d, my parent is process %d\n",
getpid(), getppid());

fork();

printf("This sentence has been printed by process: %d my parent
is process %d\n", getpid(), getppid());
}


Istruzione fork()
Listruzione fork() crea una copia del processo corrente
valore di ritorno
0 nel processo figlio
maggiore di 0 nel processo padre (il valore restituito
proprio il PID del figlio)
minore di 0 nel caso in cui non sia stato possibile creare un
nuovo processo
viene creato uno address space (porzione di memoria
dedicata) separato per il processo figlio, il quale eredita
una copia esatta di tutti i segmenti di memoria del
processo padre (codice, stack, file descriptor, heap, variabili
globali, e program counter)



Albero dei processi
Il meccanismo di forking porta ad unorganizzazione dei
processi rappresentabile con una struttura ad albero
radicato (rooted tree)

Linux: la radice dellalbero sempre il processo init che
viene lanciato dal kernel durante il processo di boot del
sistema operativo. Il processo init crea poi nuovi
processi

Windows: le applicazioni lanciate dagli utenti sono
sempre figlie del processo Windows Explorer
Comunicazione tra Processi
IPC (Inter-Process Communication): i processi devono poter
comunicare tra loro al fine di gestire risorse condivise

Ci sono diversi motivi per cui fornire un ambiente che
permette la cooperazione tra processi:
condivisione delle informazioni
modularit
separazione dei privilegi

IPC consente di realizzare un importante principio di
sicurezza dei processi basato sull'indipendenza e
lisolamento degli address space di processi diversi

Comunicazione tra Processi
Esistono diversi meccanismi per la comunicazione tra
processi:
lettura/scrittura di files
semplice ma inefficiente (e poco sicuro)
porzione di memoria RAM condivisa
veloce ed efficiente
il kernel deve gestire in maniera sicura la separazione tra porzioni di
memoria condivise e private
pipes e sockets
oggetti in RAM condivisi che fungono da canale virtuale tra due
processi
signals
notifiche asincrone, il processore interrompe il flusso del processo
ricevente e verifica se esiste un gestore per la notifica (routine da
eseguire)
Demoni e Servizi
Linux: i daemons sono processi lanciati prima
dellautenticazione dellutente, tipicamente dal
processo init
possiedono permessi pi alti di qualsiasi utente
sopravvivono al termine delle sessioni utente
sono indistinguibili dagli altri processi

Windows: esistono processi analoghi chiamati services
rispetto ai daemons sono distinguibili dagli altri processi
sono monitorati in modo specifico allinterno del
TaskManger (esistono due tab separati, uno per i processi
e uno per i servizi)

Kernel
Il kernel il componente principale di un OS, inquanto
gestisce direttamente lhardware di basso livello (CPU,
memoria, periferiche di I/O)

Le periferiche di I/O (tastiera, mouse, scheda di
rete,) sono pilotate attraverso drivers
i drivers espongono alle applicazioni delle API
(Application Programmer Interface) al fine di
consentire lutilizzo della periferica ad alto livello
un driver specifico sia dal punto di vista
dell'hardware che pilota, sia dal punto di vista del
sistema operativo per cui scritto


System Call
I processi comunicano con il kernel per inoltrare
le richieste verso lhardware. La comunicazione
avviene mediante librerie dette system call
ad ogni system call segue generalmente un interrupt
che vincola il processore a fermare lesecuzione
corrente e a gestire la chiamata

Possibili attacchi:
contraffazione di una system call al fine di eseguire
codice malevolo ad ogni chiamata
danneggiamento di una system call al fine di
compromettere il funzionamento del sistema


System Call
Sempre pi spesso in realt, i programmatori non
usano direttamente le system call, ma delle API
che fungono da strato intermedio tra le
applicazioni e le system call, al fine di facilitare e
migliorare la portabilit delle applicazioni

Esistono API per i vari sistemi operativi:
API Win32 per i sistemi Windows
API POSIX per le varie versioni di Unix, Linux e Mac OS
X

System Call
Le funzioni contenute in queste API invocano a loro volta opportune
system call e spesso vi una corrispondenza diretta tra una
funzione API ed una corrispondente system call

Ad esempio, la libreria C dellambiente Unix una semplice forma di
API. In questa libreria esiste la funzione per aprire un file:



FILE *fp;

// usa la system call open
fp = fopen(myfile, W);

//usa la system call write
fprintf(fp,ciao);

//usa la system call close
fclose(fp);
System Call
Esistono tipi di System Call per ogni possibile
operazione:
controllo dei processi:
creazione, terminazione, esecuzione di codice specifico
prelievo degli attributi di un processo
attesa per un tempo indicato
sincronizzazione con altri processi
gestione dei file:
creazione, cancellazione, rinominazione
apertura, chiusura, lettura, scrittura
impostazione delle propriet
System Call
comunicazione fra processi:
creazione e chiusura del canale di comunicazione
invio e ricezione di messaggi
informazione sullo stato della comunicazione
gestione dei dispositivi
gestione delle informazioni di sistema
Utenti
Ogni processo associato ad un utente

Utenti specifici possono avere permessi
maggiori rispetto agli utenti normali
installare o rimuovere programmi
modificare i permessi degli altri utenti
modificare la configurazione del sistema


Utenti
Nei sistemi Unix lutente root non ha alcuna restrizione

Nei sistemi Windows esistono diversi utenti speciali
SYSTEM, LOCAL SERVICE e NETWORK SERVICE associati direttamente
al sistema operativo
SYSTEM non ha restrizioni
LOCAL SERVICE e NETWORK SERVICE agiscono con permessi ridotti e specifici
per i loro scopi
uno o pi administrator (con permessi minori rispetto allutente
SYSTEM)

Lautenticazione come root/administrator pu essere rischiosa
in caso di eliminazione accidentale di file di sistema
in caso di esecuzione accidentale di codice malevole che pu agire con
gli stessi permessi
Linux
Ad ogni processo sono associati 4 indici
un uid (user ID) che identifica lutente che ha lanciato il processo
un gid (group ID) che identifica il gruppo a cui appartiene lutente
un euid (effective user ID) che pu differire dalluid e identificare lutente
proprietario del file eseguibile, il quale pu avere permessi maggiori
leuid prevale sulluid solo nel caso in cui settato il bit setuid
Un egid (effective group ID) che pu differire dallgid e identificare il gruppo
proprietario dellapplicazione, il quale pu avere permessi maggiori
legid prevale sullgid solo nel caso in cui settato il bit setgid

Tramite questi id OS in grado di stabilire i permessi di un dato processo
su una data risorsa

I permessi del processo figlio sono automaticamente ereditati dal
processo padre


Linux
La decisione di attivare o meno il bit setuid/setgid dipende dal
proprietario del file eseguibile (di default sono disattivati)

Comandi:
chmod u+s <file_eseguibile>: attiva setuid
chmod u-s <file_eseguibile>: disattiva setuid
chmod g+s <file_eseguibile>: attiva setuid
chmod g-s <file_eseguibile>: attiva setuid

Molti programmi che accedono risorse di sistema hanno il bit setuid
settato e sono detti setuid programs (es: passwd, su)
Questo meccanismo pu essere soggetto ad attacchi di scalata dei
privilegi, che vedremo pi avanti


Linux Esempio 1/2
app: nome di un file eseguibile

userA e groupA: UID e GID dellutente proprietario del file app

userB e groupB: UID e GID dellutente che lancia app, producendo il
processo P

Se il bit SETUID di app attivo:
l EUID di P userA, il EGID di P groupA
lUID di P userB, il GID di P groupB

Se il bit SETUID di app NON attivo:
EUID e UID coincidono con userB
EGID e GID coincidono con groupB


Linux Esempio 2/2
Supponiamo ora che il processo P voglia accedere ad
un file di nome info
1. se EUID di P coincide con il proprietario di info, il
processo acquisisce i diritti di accesso del proprietario di
info
2. ALTRIMENTI se EGID di P e il gruppo di info coincidono, P
acquisisce i diritti di accesso del gruppo di utenti
associato a info
3. se NESSUNA delle due precedenti condizioni `e valida,
valgono i normali diritti di accesso che vedremo pi
avanti (lettura/scrittura/esecuzione), laccesso sar
consentito o meno a seconda della categoria di utenti
nella quale ricadono UID e GID del processo P

Windows
WUAC (Windows User
Access Control):
permessi standard per luso
regolare
possibilit di acquisire i
permessi da amministratore
solo temporaneamente, su
richiesta esplicita dei
programmi

Monitoraggio dei processi
Il monitoraggio dei processi in esecuzione pu
rivelare la presenza di codice malevolo
verificare il nome dei processi
opportuno conoscere il nome dei processi considerati
sicuri
importante notare anche piccole differenze nei nomi
verificare inoltre (anche per i processi sicuri)
user
attivit di rete (porte aperte, traffico,)
immagine (file eseguibile associato al processo)
path del file
autore
firma digitale (se presente e verificabile)
Comandi Linux
pstree: mostra lalbero dei processi
in esecuzione

ps: mostra i processi in esecuzione
in forma tabulare
ps -ef: tutti i processi
ps -u<username>: solo i
processi dellutente specificato

top: lista dei processi in esecuzione
ordinati per consumo di CPU

kill<pid>: termina il processo
con pid specificato

Strumenti Windows
TaskManager: applicazione standard
lista dei processi in esecuzione
informazioni base per ogni
processo
possibilit di terminare processi

ProcessExplorer: add-on gratuito
informazioni dettagliate per ogni
processo
visualizzazione albero dei processi
funzionalit aggiuntive
scaricabile al seguente URL:
http://technet.microsoft.com/en-
us/sysinternals/bb896653


Threads
La necessit di ottimizzare al meglio il tempo
di esecuzione di un processo ha portato
allintroduzione della nozione di thread

I thread sono delle sottoattivit di un processo
che godono della propriet di poter essere
eseguite tutte in parallelo
i thread non sono dei nuovi processi!
Threads
Threads
I thread allinterno di un processo condividono:
PID
address space
codice
variabili non locali
file descriptors aperti
user e group id

Mentre non condividono:
Thread ID (TID)
linsieme dei registri, compresi program counter e stack pointer
stack per le variabili locali e record di attivazione
Threads
Operazioni comuni
create
exit
suspend
resume
sleep
wake
join

Threads
User-level threads
implementati attraverso librerie ad alto livello che consentono la creazione, lo
scheduling, e la sincronizzazione dei thread
OS ignora la presenza dei thread

Vantaggi:
non richiesto alcun supporto da parte del SO (maggiore portabilit)
possono essere predisposte politiche di scheduling adeguate allapplicazione
le operazioni su thread sono efficienti perch non richiedono lesecuzione di
system call
la condivisione di memoria facile e veloce

Svantaggi:
lintero processo si blocca quando si blocca un solo thread
gli accessi ai dati condivisi devono essere opportunamente sincronizzati per
evitare errori
Logging
Un ulteriore tipo di analisi legato ai processi consiste nel
monitoraggio degli eventi registrati dallOS
tentativi di login, attivit di rete,

Linux Logging
diversi tipi di log (boot, I/O errors,)
salvataggio in files di testo semplici
diversi file di log in base alla distribuzione

Windows logging
eventi divisi in Sistema, Applicazioni e Sicurezza
ogni evento ha un id univoco
visualizzazione possibile solo con Windows Event Viewer

Linux Logging
Formato standard linux
File contenuto in /var/log/messages e accessibile
solo allutente root
Windows Event Viewer
Sequenza di Boot
La sequenza di boot o booting si riferisce al
caricamento del sistema operativo in memoria
1. inizialmente il processore esegue il codice
memorizzato nel componente firmware chiamato
BIOS (Basic Input/Output System)
in questa prima fase vengono eseguite vari attivit tra cui
un controllo dellhardware chiamato POST
2. viene richiamato un boot loader secondario (second-
stage boot loader o secondary loader) che a sua
volta carica in memoria lOS
3. il controllo passa allOS

Sequenza di Boot
Sequenza di Boot
In molti casi il boot loader secondario consente
allutente di specificare il dispositivo da cui caricare il
sistema operativo (es: hard disk, DVD drive, USB
controller)

Un possibile scenario di attacco consiste nel dirottare il
boot loader secondario verso un dispositivo esterno
Il processore carica lOS dellavversario che pu essere una
contraffazione dellOS della vittima
Molti boot loader secondari richiedono una password al
fine di effettuare modifiche

Ibernazione
I calcolatori moderni offrono la possibilit di
passare in modalit di ibernazione, in cui il
consumo di energia elettrica interrotto
il contenuto della memoria primaria copiato
nella memoria secondaria
tutte le informazioni sensibili (password, dati
personali,) sono memorizzate sul disco fisso
al riavvio i dati vengono nuovamente caricati sulla
memoria primaria


Vulnerabilit di Windows
Windows memorizza questi dati nel file C:\hiberfil.sys compresso
alcuni ricercatori hanno dimostrato che possibile decomprimere
questo file al fine di ricreare unimmagine della memoria primaria al
momento dellibernazione

Come ottengo una copia del file?
possibile estrarre il disco fisso da un computer ibernato
ancora pi facilmente, Windows non elimina subito il file hiberfil.sys
che pu restare salvato per diversi riavvii, permettendo una copia del
file in un secondo momento

come proteggersi?
possibile utilizzare algoritmi di cifratura robusti per criptare i file
memorizzati sul disco rigido
SICUREZZA DEL FILESYSTEM
Filesystem
Il filesystem un altro componente fondamentale di
un OS, in quanto fornisce unastrazione
sullorganizzazione della memoria secondaria del
calcolatore

Gli OS organizzano tipicamente i file in una gerarchia
Ogni cartella pu contenere file e/o sottocartelle

In questo modo possibile rappresentare la memoria
secondaria attraverso una struttura ad albero radicato
Windows Explorer
Terminologia
Principal: utente o gruppo di utenti

Permission: azione possibile
read
write
execute
list
Access Control Entries
ACE (Access Control Entry): tripla
<principal,type,permission>
type pu avere due soli valori: ALLOW o DENY
definisce esplicitamente cosa possibile fare e cosa
non per una specifica risorsa e per un dato principal

ACL (Access Control List): lista ordinata di triple
ACE

Ad ogni file e directory viene associata un ACL
che definisce la politica di accesso alla risorsa
Discretionary Access Control
DAC (Discretionary Access Control): il creatore
(owner) di un file o directory ha il potere di
modificare i permessi ad esso associati (ACE)
Closed policy o default sicuro: solo ACE di tipo
allow, tutti i permessi non esplicitamente concessi
sono automaticamente negati
Open policy: ACE tipo sia ALLOW che DENY

Linux Access Control
DAC con default sicuro

Laccesso a un file dipende da ACL del file e di
tutte le directory antenate:
partendo dalla directory root
tutte le directory antenate devono avere il permesso
execute per lutente specificato
il file deve avere il permesso per laccesso
richiesto (es. read) per lutente specificato


Permessi Linux
File permission matrix: matrice di permessi
associata ad ogni file e directory
standard per tutti i sistemi Unix
3 classi di permessi
owner: permessi per lutente creatore del file
group: permessi per gli utenti appartenenti allo stesso
gruppo del file
others: permessi per gli utenti che non sono il creatore
del file n appartengono allo stesso gruppo
Permessi Linux
I permessi di ognuna delle 3 classi sono definiti da 3
bit:
read bit:
file: lutente pu leggere il file
directory: lutente pu leggere la lista dei file in essa contenuti
write bit:
file: lutente pu modificare il contenuto del file
directory: lutente pu creare ed eliminare i file in essa contenuti
execute bit:
file: lutente pu eseguire il file come un programma
directory: pu cambiare la sua cartella corrente con essa
Esempi
Comandi Linux
ls l: restituisce la matrice dei permessi per
tutti i file e le directory contenuti nella
directory di lavoro corrente
Permessi Speciali Linux
Set-user-ID (suid o setuid) bit
su file eseguibili, causa lesecuzione del processo con i
diritti dellutente owner

Set-group-ID (sgid o setgid) bit
su file eseguibili, causa lesecuzione del processo con i
diritti del gruppo del file

Sticky bit
sulle directory, vieta a tutti gli utenti di eliminare o
rinominare file di cui non sono i creatori


Notazione Ottale
Permessi espressi con un numero di 3 o 4 cifre in base
8

Cifre da sx a dx:
[special bits][user bits][group bits][others bits]

Bits speciali:
4 (se setuid) + 2 (se setgid) + 1 (se sticky)

User/Group/Others bits:
4 (se readable) + 2 (se writable) + 1 (se executable)

Esempi
Accesso Senza Privilegi
Il bit setuid risolve il problema dellaccesso senza
privilegi

Esempio:
sappiamo che un processo eredita i permessi dal
processo padre
se un utente volesse modificare la propria password
attraverso il programma di sistema passwd non
potrebbe farlo inquanto non avrebbe i permessi per
accedere al file etc/passwd
In realt passwd viene eseguito con i privilegi
dellutente root grazie al bit setuid

Scalata dei Privilegi
Se un attaccante riesce a forzare un
programma setuid a eseguire codice arbitrario
(ad esempio tramite un attacco di tipo buffer
overflow) pu compromettere il sistema,
realizzando uno scenario di attacco chiamato
scalata dei privilegi (o privileges escalation)

Questo meccanismo va gestito attraverso
tecniche di programmazione sicura


Esempio di Codice C
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>

static uid t euid, uid;

int main(int argc, char * argv[ ])
{
FILE *file;
/* Store real and effective user IDs */
uid = getuid();
euid = geteuid();
/* Drop priviliges */
seteuid(uid);
/* Do something useful */
/* . . . */
/* Raise privileges */
seteuid(euid);
/* Open the file */
file = fopen("/home/admin/log", "a");
/* Drop privileges again */
seteuid(uid);
/* Write to the file */
fprintf(file, "Someone used this program.\n");
/* Close the file stream and return */
fclose(file);
return 0;
}

Nautlius
Nautilus il file manager
ufficiale dell'ambiente
desktop GNOME
Windows Access Control
DAC con open policy

Se non c una regola per un particolare principal o
permesso allora laccesso negato di default

Se non c una regola per un particolare principal o
permesso allora laccesso negato di default

A differenza di Linux, al fine di accedere ad un file o ad una
directory, sufficiente avere i permessi per lazione
richiesta sul dato file o directory
in questo modo possibile negare laccesso ad una data
directory pur consentendo laccesso alle directory figlie
Permessi Espliciti
Explicit permissions
standard permissions
modify
read and execute
read
write
full control

advanced permissions
possibile comporre i permessi standard per creare
permessi pi complessi
Es: read data, read attributes,

Permessi Ereditati
Inherited permissions: ogni permesso applicato
ad una directory pu essere esteso alle directory
figlie

Controllo dei permessi:
Il permesso DENY ha precedenza sul permesso ALLOW
I permessi espliciti hanno precedenza sui permessi
ereditati
I permessi ereditati hanno precedenza tra di loro in
base alla distanza dalla risorsa

Windows Explorer
NTFS
NTFS (New Technology File System):
sostituisce il filesystem FAT (File Allocation
Table) nei moderni OS Microsoft

Filesystem chiuso e proprietario, utilizzabile
solo dagli OS Microsoft

Supporta meccanismo ACL appena descritto
NTFS
NTFS
File Descriptors
Un file descriptor o file handle un identificatore per
un file o per una cartella

I file descriptor sono memorizzati in una tabella che li
mappa con il percorso del file a cui si riferiscono,
chiamata file descriptor table

Operazioni possibili
open: ritorna un file handle
read/write/execute file
close file: invalida il file handle


File Descriptors
Quando un processo (programma) necessita di accedere ad
un file in lettura o scrittura:
viene richiamata una open system call
il kernel verifica se il processo possiede i permessi necessari per
accedere al file con lazione richiesta
se la verifica positiva, il kernel crea un nuovo file descriptor e
una nuova entry nella file descriptor table, quindi ritorna il file
descriptor al processo
il processo pu leggere/scrivere sul file richiamando le relative
read/write system call, il kernel (attraverso la file descriptor
table) effettua le letture/scritture direttamente sul file originale
Al termine il processo dovrebbe richiamare una close system call
per rimuovere il file descriptor


File Descriptors Leaks
Quando un processo crea un processo figlio
(forking), questultimo eredita una copia di tutti i
file descriptors aperti dal processo padre

LOS verifica i permessi soltanto al momento della
creazione del file descriptor
Al momento della lettura/scrittura sul file, i controlli
effettuati si basano sui permessi associati al file
descriptor (ad esempio un processo pu sfruttare un
file descriptor in lettura solo per leggere il file e non
per scrivere)


File Descriptors Leaks
Scenario pericoloso:
un processo con alti privilegi apre un file
descriptor per un file protetto
prima di chiudere il file descriptor crea un nuovo
processo con privilegi minori, il quale eredita
comunque il file descriptor (inquanto ancora
aperto)
il processo figlio pu usare il file descriptor pur
non avendo i permessi necessari per operare sul
file protetto!

Esempio di Codice C
#include <stdio.h>
#include <unistd.h>

int main(int argc, char * argv[ ])
{
/* Open the password file for reading */
FILE *passwords;
passwords = fopen("/home/admin/passwords", "r");

/* Read the passwords and do something useful */
/* . . . */

/* Fork and execute Joes shell without closing the file */
execl("/home/joe/shell", "shell", NULL);

}

Per rimuovere questa vulnerabilit la funzione fclose() va
richiamata prima del comando execl()
Symbolic Links
Nei sistemi Unix un link simbolico (symlink) un file che contiene
le informazioni utili a referenziare un altro file presente nel
filesystem

Pi symlink possono essere concatenati (lultimo symlink della
catena deve comunque puntare ad un file fisico)

Per le applicazioni un symlink trasparente
compito dellOS risalire al file partendo dal symlink usato
dallapplicazione
Questo approccio pu creare problemi di sicurezza inquanto vano
verificati i permessi sia sul symlink (o sulla catena di symlink) sia sul
file che esso punta





Shortcuts
I sistemi Windows utilizzano invece le shortcuts,
che in maniera simile ai symlink puntano ad altri
file

Le shortcuts non sono trasparenti alle
applicazioni ma sono trattate come file normali
solo i programmi che le riconoscono come shortcuts
possono risalire al file puntato
approccio pi sicuro




SICUREZZA DELLA MEMORIA
Address Space
Un ulteriore servizio offerto dagli OS lorganizzazione
e lallocazione della memoria primaria

Quando un processo viene lanciato lOS alloca una
regione di memoria detta address space del processo
la gestione della memoria trasparente per il processo
il processo vede a sua disposizione lintera memoria

Generalmente un processo non pu avere accesso
alladdress space di un altro processo, se non per
risorse esplicitamente condivise


Unix Address Space
Modello address space diviso in 5 settori:
Text: memorizza il codice macchina del programma
Data: memorizza le variabili statiche del programma
inizializzate prima dellesecuzione
BSS (Block Started By Symbol): memorizza le variabili
statiche del programma non inizializzate
Heap: settore dinamico, memorizza i dati generati
durante lesecuzione del programma (es: oggetti
Java/C#/C++)
Stack: memorizza una struttura dati a pila, che tiene
traccia delle chiamate a metodi e routine con i relativi
argomenti e punti di ritorno

Unix Address Space
Lo stack cresce verso il basso
Unix Address Space
Ogni settore ha il suo set di permessi
readable/writable/executable
il settore text read-only inquanto il codice
macchina del programma in esecuzione non deve
essere modificato
gli altri settori necessitano di essere writable
inquanto i loro dati devono poter essere
modificati durante lesecuzione



Exploit
Un exploit un input che sfrutta una
vulnerabilit, un bug o un guasto di un sistema
al fine di eseguire un attacco

Attacco tipico:
ricerca di una vulnerabilit
reverse engineering del codice
costruzione dellexploit



Disassemblers e Decompilatori
Un disassembler un programma che traduce dal linguaggio
macchina al linguaggio assembly (operazione inversa di un
assembler)

L'output di un disassembler (disassembly) spesso fatto in modo da
poter essere facilmente compreso dall'uomo piuttosto che per
essere utilizzato come input per un assembler

I disassembler sono tra gli strumenti pi comunemente utilizzati per
il reverse engineering del software

Un decompilatore traduce il linguaggio macchina in un linguaggio
ad alto livello



Disassemblers e Decompilatori
Le costanti simboliche e i commenti vengono
generalmente rimossi dall'assembler
la perdita di queste informazioni rende pi difficile la
comprensione del codice rispetto al codice sorgente
originario

Sulle piattaforme con le istruzioni CISC di larghezza
variabile, o in presenza di codice auto-modificante,
possibile per un unico programma per avere due o pi
assembly plausibili
determinare quali istruzioni si incontreranno durante
unesecuzione del programma si riduce al problema della
fermata (dimostrato irrisolvibile)


Interactive Disassembler
Interactive DisAssmbler (IDA) un disassembler
largamente usato per il reverse engineering. Supporta
numerosi formati di file eseguibili per diversi processori
e OS

Caratterizzato soprattutto dall'interattivit
un tipico utente di IDA inizier con un listato generato
automaticamente per poi rinominare, commentare, o
aggiungere in altri modi informazioni al codice
disassemblato

Approfondimento: http://www.hex-rays.com/idapro/


Buffer Overflow
Buffer: blocco di memoria contiguo che contiene pi
istanze dello stesso tipo
in C e in molti altri programmi i buffer sono chiamati array
i buffer pi comuni sono gli array di caratteri (stringhe)

In C i buffer, come tutte le variabili, possono essere
dichiarati statici o dinamici
le variabili statiche sono allocate al momento del
caricamento del programma sul segmento data
le variabili dinamiche sono allocate in fase di esecuzione
sullo stack



Buffer Overflow
Scenario:
un programma alloca in memoria un buffer (array) di
dimensione fissata
nel buffer viene poi copiato un input proveniente dallutente
la dimensione di tale input non viene controllata prima
delloperazione di copia

Attacco:
un attaccante pu confezionare un input malevolo di
dimensione superiore a quella del buffer
il programma copia linput e sovrascrive regioni di memoria
oltre al buffer
lattaccante riesce a eseguire codice malevolo (shellcode) con i
privilegi del programma attaccato



Shellcode
Codice malevolo iniettato sfruttando un attacco buffer overflow
buffer riempito di codice malevolo = payload

Lattaccante solitamente inietta codice in grado di aprire un
terminale (shell) attraverso cui eseguire altri comandi
Linux: /bin/sh
Windows: command.com

Ad esempio in un sistema Linux possibile iniettare codice che richiama la
funzione setuid() per poi aprire un terminale

Il codice viene generalmente iniettato direttamente sullo stack o
sullheap e pertanto deve essere scritto in codice operativo
(opcodes) specifico per larchitettura della CPU attaccata




Morris Worm
Primo worm a sfruttare una vulnerabilit di tipo buffer
overflow
scritto da Robert Morris nel 1988 allo scopo dichiarato di
valutare le dimensioni di Internet
autoinstallante e autoreplicante, si diffuso in maniera
estremamente veloce, oltre le aspettative di Morris

Il target la funzione gets() appartenente alle librerie C
standard e utilizzata nel servizio finger dellUniversit
di Berkley
gets() legge una riga dallo standard input e la memorizza in
un buffer di 512 byte senza verificare le dimensioni
effettive della riga letta



Morris Worm
Attacco:
input di dimensione pari a 536 byte che causa il
buffer overflow
indirizzo di ritorno della routine sovrascritto con
lindirizzo dello shellcode (codice macchina per
architettura VAX)
lo shellcode lancia una shell e richiama il processo
di bootstrap della macchina al fine di installarsi
attacco di tipo Denial Of Service


Morris Worm
Morris fu condannato ad una
pena di tre anni di libert
condizionata, 400 ore di servizi
socialmente utili e 10.050 dollari
di multa

Oggi insegna al MIT Lab for
Computer Science

Nel 1998 ha venduto a Yahoo!, al
prezzo di 49 milioni di dollari, una
start-up da lui fondata, Viaweb
Inc. (oggi Yahoo! Store)



Arithmetic Overflow
Caso pi semplice di attacco, sfrutta la
rappresentazione di numeri interi

La maggior parte delle architetture a 32 bit gli interi
con segno sono rappresentati in complemento a due
il bit iniziale (pi a sinistra) del numero ha peso negativo o
positivo: tutti i numeri che cominciano con un "1" sono
numeri binari negativi, mentre tutti i numeri che
cominciano con uno "0" sono numeri binari positivi e se ne
ottiene il valore assoluto invertendo il valore dei singoli bit
e aggiungendo 1 al numero binario risultante
un numero binario di n cifre pu rappresentare con questo
metodo i numeri compresi fra -2
n-1
e +2
n-1
-1



Arithmetic Overflow
In esadecimale gli interi con segno da
0x00000000 a 0x7ffffff sono numeri positivi,
mentre da 0x80000000 a 0xffffffff sono numeri
negativi

La soglia tra questi due range consente situazioni
di overflow e underflow
Es: la somma di numeri molto grandi pu portare ad
un overflow, dando come risultato un numero
negativo



Stack-Based Buffer Overflow
Perch viene usato lo stack?

I moderni computer sono progettati tenendo in mente la necessit
di poter usufruire di linguaggi di alto livello (come C e C++).
la tecnica pi importante per la strutturazione dei programmi
introdotta dai primi linguaggi di alto livello la routine (function)
una chiamata a una procedura altera il flusso di controllo proprio
come fa un salto, ma a differenza di un salto, al suo termine il controllo
ritorna alla
dichiarazione o istruzione successiva alla chiamata
questo alto livello di astrazione implementato con l'aiuto dello stack

Lo stack usato nellambito delle routine per allocare
dinamicamente le variabili locali, per il passaggio dei parametri, e
per la restituzione di valori




Stack-Based Buffer Overflow
Lo stack un settore delladdress space contenente dati. La
sua dimensione regolata dinamicamente dal kernel
in fase di esecuzione
politica LIFO (Last In First Out)
la CPU esegue le istruzioni di PUSH e POP
ogni chiamata ad una routine associata ad un frame che
memorizza le variabili locali, gli argomenti, e lindirizzo di ritorno
verso la chiamata padre
alla base dello stack c il frame relativo alla chiamata main()

Un buffer overflow che coinvolge una variabile locale pu
causare la sovrascrittura di parte della memoria allocata
nello stack, con conseguenze pericolose




Stack-Based Buffer Overflow
Return address: puntatore allindirizzo di memoria in cui la
routine in questione stata chiamata

Stack pointer (ESP): registro dedicato che contiene
l'indirizzo dell'ultima locazione di memoria occupata sullo
stack (ovvero il top dello stack vista la politica LIFO di
inserimento)
viene aggiornato continuamente vista la dinamicit dello stack

Frame pointer (EBP): registro per tenere traccia della prima
locazione di memoria del record di attivazione di una
routine




Stack-Based Buffer Overflow
Gli indirizzi delle variabili locali di una routine
sono specificati rispetto al frame pointer poich il
suo valore rimane invariato per tutta la durata
della routine stessa






Esempio
void function(int a, int b, int c)
{
char buffer1[5];
char buffer2[10];
}

void main()
{
function(1,2,3);
}
c
b
a
Return Address
Frame Pointer
buffer1 (8 bytes)
buffer2 (12 bytes)
Esempio di Codice C (1/2)





La funzione strcpy(dest,src) (appartenente alle librerie C standard)
copia la stringa src in dest senza verificare se la dimensione di src
eccede quella di dest

Main(int argc, char *argv[])
/* get user_input */
{
char var1[15];
char command[20];
strcpy(command, whois ");
strcat(command, argv[1]);
strcpy(var1, argv[1]);
printf(var1);
system(command);
}


Esempio di Codice C (2/2)





La funzione strncpy(dest,src,n) consente di specificare il numero di
caratteri da copiare, se la lunghezza di src supera quella di dest i
caratteri in eccesso vengono scartati

Main(int argc, char *argv[])
/* get user_input */
{
char var1[15];
char command[20];
strcpy(command, whois ");
strcat(command, argv[1]);
strcpy(var1, argv[1]);
printf(var1);
system(command);
}


Stack Smashing Attack
Stack smashing attack: lattaccante sfrutta una
vulnerabilit buffer overflow per sovrascrivere
lindirizzo di ritorno della routine corrente
quando la routine termina il programma segue il
codice malevolo iniettato dallattaccante, anzich
riprendere il normale flusso di esecuzione

Difficolt: lattaccante deve conoscere lesatta
posizione sullo stack dellindirizzo di ritorno


Stack Smashing Attack
Stack Smashing Attack
Al fine di confezionare un attacco efficace
lattaccante deve:
assicurarsi che il codice malevolo iniettato risieda
nelladdress space del processo attaccato
(altrimenti non sarebbe eseguito)
il codice pu essere tenuto nel buffer stesso (payload)
Conoscere lindirizzo dello shellcode (buffer)
NOP Sledding
Trampolining
Return-to-libc



NOP Sledding
NOP (No-op): istruzione che non fa nulla, il processore esegue
semplicemente listruzione seguente

Lattaccante confeziona un input che contiene:
una quantit di dati appropriata da eccedere le dimensioni del buffer
una stima dellindirizzo di ritorno
una grande quantit di istruzioni NOP
lo shellcode

Semplifica il problema di dover conoscere esattamente la posizione
dello shellcode
la dimensione del payload aumenta grazie al gran numero di istruzioni
NOP





NOP Sledding
Se lattacco funziona il processo salter al punto
di ritorno stimato (sovrascritto da qualche
istruzione NOP) e slitter verso il codice
malevolo attraverso la catena di istruzioni NOP





NOP Sledding
Il NOP Sledding aumenta le probabilit di
riuscita per un attacco buffer overflow
attacco molto utilizzato
difficile da automatizzare
serve molto spazio per il payload
bisogna ancora stimare in qualche misura
lindirizzo dello shellcode




Trampolining
Al momento della loro inizializzazione molti
processi caricano nel loro address space delle
librerie esterne

Queste librerie sono caricate in zone protette
delladdress space e la loro locazione
prevedibile

Un attaccante pu sfruttare la conoscenza di una
libreria di sistema per eseguire un attacco senza
dover conoscere lindirizzo dello shellcode



Esempio
Un attaccante sa che una DLL di sistema di Windows
richiede al processore di saltare allindirizzo del registro
ESP che punta ad un buffer

Lattaccante inserisce il codice malevolo nel buffer
indirizzato dal registro e sovrascrive il punto di ritorno
della funzione corrente con quello dellistruzione nota
della DLL

Attacco difficile ma estremamente pericoloso inquanto
automatizzabile


Return-to-libc
Anche questa tecnica sfrutta librerie esterne
caricate in fase di esecuzione

libc: librerie C

Un attaccante pu determinare lindirizzo di una
funzione presente nelle librerie C allinterno
delladdress space da colpire e forzare il
programma a chiamare questa funzione



Return-to-libc
Attacco:
buffer overflow causa la sovrascrittura
dellindirizzo di ritorno con lindirizzo della
funzione C da richiamare (es: exec())
oltre allindirizzo di ritorno lattaccante sovrascrive
il buffer con gli argomenti per la funzione (es:
bin/sh)




Esempio
args
ret-addr
sfp
local buf
stack
exec()
printf()
/bin/sh
libc.so
Vantaggi
Non viene eseguito alcun codice sullo stack
attacco utilizzabile anche in caso di stack non
eseguibile
le librerie C offrono diverse funzioni target exec(),
system()





Approfondimento
How To Write A Buffer Overflow
http://insecure.org/stf/mudge_buffer_overflo
w_tutorial.html

Peiter C. Zatko, meglio conosciuto come
Mudge (Boston, 1970), un hacker
statunitense
nel 1995 scopre la vulnerabilit buffer
overflow
nel 2000 sviluppa un software per il cracking
delle password in ambiente Windows (lo
vedremo pi avanti)




Contromisure per Stack-Based BO
Scrivere codice sicuro che verifica sempre le dimensioni dellinput
proveniente dallutente

Utilizzare linguaggi di programmazione che non consentono questo
tipo di attacchi
C,C++ sono suscettibili a questi attacchi
Java e C# (e altri) non lo sono inquanto gli oggetti vengono allocati
dinamicamente sullo heap

Meccanismi di protezione a livello di OS
NX bit
ASLR
Stack-Smashing Protection
Canary




Canary
No eXecute Bit
NX (No eXecute) bit: bit che marca come non
eseguibile i segmenti di memoria relativi allo
stack e allheap

In questo modo non possibile eseguire
shellcode direttamente sullo stack e sullheap
contromisura non efficace per attacco return-to-
lib



Address Space Layout Randomization
ASLR (Address Space Layout Randomization): laddress
space di un processo viene arrangiato randomicamente
supportata dai sistemi Windows a partire da Vista (2007)
supportata anche dai sistemi Linux e Apple

Tecnica suscettibile ad attacchi brute-force: lattaccante
pu sfruttare un generatore di numeri pseudo-random
e ripetere lattacco pi volte
poco efficace in sistemi a 32 bit (pochi bit disponibili per la
randomizzazione)
pi efficace per sistemi a 64 bit



Esempio
Due boot di Vista diversi portano a locazioni
delle librerie in memoria diversi








Stack-Smashing Protection
Controllo in fase di esecuzione

Nel momento in cui una routine chiama lindirizzo
di ritorno lOS verifica se lo stack sia stato
modificato rispetto al momento in cui la funzione
stata chiamata

Se lo stack stato modificato viene lanciato un
errore di tipo segmentation fault e il programma
termina forzatamente



Canary
Controllo in fase di esecuzione

Canary: valore di controllo (spesso random)
inserito dallOS dopo un buffer o prima
dellindirizzo di ritorno
lOS verifica regolarmente lintegrit di questo valore
In caso di buffer overflow e di sovrascrittura
dellindirizzo di ritorno anche il canarino viene
sovrascritto



Heap-Based Buffer Overflow
I programmi possono allocare memoria dinamica e
persistente sullheap
possono verificarsi leak memory se questa memoria non
viene liberata
in Java e C# esiste il Garbage Collector

Con un heap overflow non possibile alterare
direttamente lesecuzione del programma

Gli heap overflows sono invece sfruttati per manipolare
le funzioni che gestiscono la memoria dellheap al fine
di eseguire codice arbitrario




Esempio di Codice C
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char *argv[ ])
{
// Allocate two adjacent blocks on the heap
char *buf = malloc(256);
char *buf2 = malloc(16);
// Does not check length of buffer before copying argument
strcpy(buf, argv[1]);
// Print the argument
printf("Argument: %s\n", buf);
// Free the blocks on the heap
free(buf);
free(buf2);
return 1;
}





Esempio 1/2
La funzione malloc(), implementata dalle vecchie
versioni del compilatore GNU (gcc), alloca blocchi
di memoria sullheap

I blocchi sono mantenuti in una linked list, ogni
blocco punta al blocco successivo e al precedente

Quando un blocco marcato come free, la
routine unlink() aggiorna i puntatori dei blocchi
ad esso adiacenti al fine di rimuoverlo dalla linked
list



Esempio 2/2
Un attacante pu
eseguire un overflow su un blocco
sovrascrivere il blocco successivo modificando i
suoi puntatori e marcandolo come free
forzare la routine di unlink a scrivere lindirizzo
dello shellcode in una locazione di memoria che
determiner successivamente un salto verso il
codice malevolo



Format String Attack
printf: famiglia di funzioni C usate per gestire
I/O (es: stampa a video di messaggi)

formati stringa (format strings): stringa che
denota come il messaggio dovr essere
stampato

// Stampa la variabile messaggio come una stringa
printf(%s,message)



Format String Attack
I formati stringa possono anche scrivere in
memoria, ad esempio il formato %n specifica
che la funzione print dovrebbe scrivere il numero
di byte delloutput fin qui stampato sullindirizzo
di memoria del primo argomento della funzione

Quando non viene definito alcun formato per la
stringa, largomento in input alla funzione
definisce il formato delloutput



Format String Attack
Se questo argomento fornito dallutente allora un
attaccante pu scrivere un input che utilizza formati
stringa, incluso %n, per leggere e scrivere in zone di
memoria arbitrarie
ad esempio possibile sovrascrivere lindirizzo di ritorno
della funzione e avviare un attacco di tipo return-to-libc
pi semplicemente possibile far crashare il programma
(attacco DOS)

Contromisura: fornire un formato stringa (es: %s)




Esempio di Codice C
//CODICE INSICURO
#include <stdio.h>
int main(int argc, char * argv[ ])
{
printf("Your argument is:\n");
// Does not specify a format string, allowing the user to
supply one
printf(argv[1]);
}

//CODICE SICURO
#include <stdio.h>
int main(int argc, char * argv[ ])
{
printf("Your argument is:\n");
// Supplies a format string
printf("%s",argv[1]);
}




Race Conditions
Una race condition una situazione in cui il comportamento del
programma (involontariamente) dipendente dalla tempistica in
cui si verificano certi eventi

Un classico esempio fa uso funzioni C access() e open()
la funzione open() apre il file specificato utilizzando luserID effettivo
(piuttosto che luserID reale) del processo chiamante per verificarne i
permessi
in altre parole, se un programma setuid di propriet dell'utente root
lanciato da un utente normale, il programma pu chiamare con
successo open() sui file che solo l'utente root ha il permesso
di accedere
la funzione access() controlla se l'utente reale (in questo
caso l'utente che esegue il programma) ha permesso di accedere al file
specificato





Esempio 1/6
Supponiamo che un semplice programma:
richiede il nome di un file come argomento
controlla se l'utente che esegue il programma ha il
permesso di aprire il file
in caso affermativo legge i primi caratteri del file e li
stampa

C' una race condition in questa implementazione:
vi un piccolissimo ritardo tra le chiamate access() e
open()
un utente malintenzionato potrebbe sfruttare questo
piccolo ritardo, modificando il file in questione tra le due
chiamate



Esempio 2/6
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <fcntl.h>

int main(int argc, char * argv[ ])
{
int file;
char buf[1024];
memset(buf, 0, 1024);
if(argc < 2) {
printf("Usage: printer [filename]\n");
exit-1);
}
if(access(argv[1], R_OK) != 0) {
printf("Cannot access file.\n");
exit(-1);
}
file = open(argv[1], O_RDONLY);
read(file, buf, 1023);
close(file);
printf("%s\n", buf);
return 0;
}





Esempio 3/6
Ad esempio, supponiamo che l'attaccante richieda
/home/joe/dummy come argomento, un file di testo innocente che
il malintenzionato pu accedere

Dopo che la chiamata access() restituisce 0, indicando che lutente
dispone dell'autorizzazione per accedere al file, l'utente
malintenzionato pu sostituire rapidamente /home/joe/dummy
con un link simbolico a un file di cui non ha
l'autorizzazione in lettura, come /etc/passwd

Successivamente, il programma chiamer open() sul link simbolico,
che avr successo perch il programma setuid ha come proprietario
root


Esempio 4/6
Si noti che questo tipo di attacco non potrebbe
essere fatto manualmente
la differenza di tempo tra due chiamate di funzione
abbastanza piccolo che nessun essere umano sarebbe
in grado di modificare il file abbastanza velocemente!

E invece possibile avere un programma in
esecuzione in background che scambia pi volte i
due file, ed esegue il programma vulnerabile
finch lo scambio non siverifica esattamente tra
le due istruzioni open() e access()

Time of Check/Time of Use Problem
In generale, questo tipo di vulnerabilit conosciuto
come Time of Check/Time of Use (TOCTOU) problem

Ogni volta che un programma controlla la validit e la
le autorizzazioni per un oggetto, sia esso un file o di
qualche altra propriet, prima di eseguire un'azione su
tale oggetto, occorre fare attenzione che queste due
operazioni siano eseguite atomicamente (dovrebbero
essere eseguite come una operazione unica)
in caso contrario, l'oggetto pu essere modificato tra il
momento in cui viene controllato e il tempo viene
utilizzato

Esempio 5/6
Per rendere sicuro il codice dellesempio la
chiamata di access() dovrebbe essere
completamente evitata

Il programma dovrebbe invece ritirare i propri
privilegi usando seteuid () prima di chiamare
open()
In questo modo, se l'utente che esegue il programma
non ha il permesso di aprire il file specificato, la
chiamata open() fallir
Esempio 6/6
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <fcntl.h>

int main(int argc, char * argv[ ])
{
int file;
char buf[1024];
uid t uid, euid;
memset(buf, 0, 1024);
if(argc < 2) {
printf("Usage: printer [filename]\n");
exit(-1);
}
euid = geteuid();
uid = getuid();
/* Drop privileges */
seteuid(uid);
file = open(argv[1], O RDONLY);
read(file, buf, 1023);
close(file);
/* Restore privileges */
seteuid(euid);
printf("%s\n", buf);
return 0;
}





Memoria Virtuale
Teoricamente ogni address space dovrebbe essere
allocato in una regione di memoria continua
il codice macchina deve poter eseguire dei salti del tipo
salta in avanti di 10 istruzioni
gli array sono indicizzati come blocchi di memoria
adiacenti tra loro

In realt questo approccio risulta essere inefficiente e
impraticabile
in alcuni casi la memoria totale potrebbe non essere
nemmeno sufficiente per ospitare tutti gli address space



Principi di Localit
Durante la loro esecuzione i programmi godono
di due importanti propriet:
Localit temporale: se un elemento x viene
referenziato allistante t, la probabilit che x venga
referenziato anche allistante t+tcresce al tendere di
t0
Localit spaziale: se un elemento x in posizione s
viene referenziato allistante t, la probabilit che
venga referenziato un elemento x in posizione s, con
|s-s| , allistante t+tcresce al tendere di t0


Principi di Localit
I principi di localit suggeriscono un
importante accorgimento nella gestione della
memoria: non necessario caricare un
programma interamente in memoria per
poterlo eseguire, sufficiente caricarlo localit
per localit
memoria cache: velocizza esecuzione del
programma
memoria virtuale: ottimizza la gestione della
memoria



Memoria Virtuale
Meccanismo di mappatura di indirizzi di
memoria virtuali (virtual memory) in indirizzi
reali
I programmi continuano a vedere un regione di
memoria contigua

Un componente HW chiamato MMU
(Memory Management Unit) si occupa di
tradurre gli indirizzi virtuali in indirizzi fisici



Memoria Virtuale
Paging
Attraverso questo meccanismo inoltre possibile mettere a
disposizione dei programmi una quantit di memoria
superiore alla reale capacit fisica del calcolatore
infatti possibile sfruttare porzioni di memoria secondaria su
cui memorizzare dati attualmente non utilizzati dai processi (es:
processi idle)
unarea della memoria primaria non acceduta per un certo
periodo di tempo pu essere spostata sulla memoria secondaria
(paged out)
se un processo richiama un indirizzo di memoria inattivo (page
fault) il sistema provvede a recuperare il blocco di memoria
richiesto dalla memoria secondaria e, possibilmente, a
sostituirlo con unaltro




Page Fault




Indirizzo non in
memoria:
PAGE FAULT

Paging Supervisor:
1 Richiama il blocco di memoria dalla
memoria secondaria e lo carica sulla
memoria primaria
2 Aggiorna il mapping degli indirizzi fisici e
virtuali
3 tenta di paginare una zona di memoria
non utilizzata recentemente
Processo:
richiesta di un
indirizzo di
memoria
Linux e Windows
In Linux solitamente necessario destinare
unintera partizione logica del disco fisso per
la memoria virtuale, chiamata swap partition

Windows memorizza i dati relativi alla
memoria virtuale in un file, chiamato page file
(C:\pagefile.sys)



Attacco alla Memoria Virtuale
Un attaccante pu:
spengere brutalmente un calcolatore
effettuare il boot di un altro OS (attraverso un
media esterno)
ricostruire la memoria virtuale accedendo ai
relativi file

Possibile contromisura: crittografare i dati
memorizzati su hard disk



Fonti
Introduction to Computer Security, Michael T.
Goodrich and Roberto Tamassia, Addison Wesley,
2011

www.cs.brown.edu/courses/csci1660/

www.wikipedia.org

Smashing the Stack for Fun and Profit, Aleph
One, Phrack Magazine Vol. 49(14), 1996


Sicurezza dei programmi
Introduzione
I programmi costituiscono gran parte di un
sistema informativo
La protezione dei programmi perci al cuore
della sicurezza informatica
Due domande fondamentali:
Come possibile prevenire la presenza di difetti in un
programma?
Come possibile proteggere le risorse informatiche da
programmi che contengono difetti?
PROGRAMMI SICURI
Sicurezza dei programmi
Cos un programma?
Un insieme di istruzioni per il calcolatore.
Esempi:
Il sistema operativo
I driver delle periferiche
Linfrastruttura di rete
I sistemi di gestione delle basi di dati (DBMS)
Gli applicativi (il browser Web, programmi di
videoscrittura, programmi di calcolo e simulazione, )

Cos un programma sicuro?
Un programma sicuro se abbiamo un certo
grado di fiducia nel fatto che il programma
garantisca la riservatezza, lintegrit e la
disponibilit che ci si aspetta

Valutare la sicurezza del programma un
procedimento analogo a valutarne la qualit
in generale.

Terminologia: difetto e malfunzionamento
Innanzi tutto importante definire una terminologia
condivisa.
Difetto (fault): passaggio, comando, o definizione
dei dati non corretto in un programma per
computer.
Malfunzionamento: deviazione dal
comportamento richiesto del sistema.

Quindi un difetto rappresenta il punto di vista
interno, quello dello sviluppatore: la causa.
Terminologia: difetto e malfunzionamento
Il malfunzionamento rappresenta il punto di vista
esterno (utente): leffetto del difetto.

Non sempre un difetto si traduce in (uno o pi)
malfunzionamenti.
Esempio: il codice difettoso non viene mai eseguito.
La qualit dipende dal punto di vista
Limportanza delle caratteristiche di qualit (sicurezza)
dipende da chi sta analizzando il software.
possibile avere divergenze nelle accezioni.
Il programma sicuro perch necessario troppo
tempo per la violazione dei controlli di protezione;
Il programma sicuro perch stato eseguito per un
certo periodo di tempo senza malfunzionamenti;
Atteggiamento estremista: qualsiasi potenziale errore
nel raggiungimento dei requisiti di sicurezza rende il
codice insicuro.
La qualit dipende dal punto di vista
possibile avere divergenze negli obiettivi:
Punto di vista del responsabile del progetto: il
sistema sicuro se soddisfa i requisiti di sicurezza,
indipendentemente dal fatto che questi siano
efficaci.
Esempio: tutte le macchine dotate di lucchetto, ma la
chiave la stessa per tutti i lucchetti!
La sicurezza complessa
Non esistono tecniche per eliminare o gestire
tutte le falle di sicurezza

La sicurezza per sua natura una questione
complessa, che spesso entra in conflitto con
usabilit e prestazioni
La sicurezza complessa: motivazioni
1. Complessit del sistema:
I requisiti vengono definiti in termini di cosa fare
La sicurezza riguarda la prevenzione: necessario
definire cosa non fare
quasi impossibile definire tutti i requisiti
Anche se fosse possibile definire tutti i requisiti, in un
sistema grande e articolato le interazioni tra i vari
moduli accadono in un numero di modi che non
gestibile.
Lesame e la verifica vengono allora fatti per i casi pi
probabili, non esaustivamente.
La sicurezza complessa: motivazioni
In sintesi la dimensione e la complessit del
sistema software impediscono una prevenzione e
mediazione completa delle falle.

2. Evoluzione tecniche di programmazione: la
programmazione e le tecniche di ingegneria
del software cambiano e si evolvono molto
pi rapidamente delle tecniche di sicurezza
informatica.
Non tutto perduto
La sicurezza informatica ha molto da offrire ai
programmi.

Comprendendo cosa pu andare storto e
come proteggersi da tale evento, possiamo
ideare strumenti e tecniche di protezione.
ERRORI DI PROGRAMMA NON
MALEVOLI
Sicurezza dei programmi
Errare humanum est
I programmatori e gli analisti commettono degli errori,
spesso n intenzionali, n malevoli.
Molti di essi provocano malfunzionamenti, ma non
portano a vulnerabilit serie.
Alcune classi di errori hanno costituito comunque un
grosso problema per la sicurezza e continueranno a
costituirlo:
a) Buffer overflow
b) Mediazione incompleta
c) Errori dovuto allo scarto fra tempo di controllo e
tempo di utilizzo
BUFFER OVERFLOW
Errori di programma non malevoli
Buffer overflow
Un buffer (o array o stringa) uno spazio di
memoria in cui possono essere memorizzati
dei dati.
La memoria finita, quindi la capacit del
buffer finita.
In molti linguaggi necessario dichiarare la
dimensione del buffer in modo che il
compilatore possa riservare la memoria
necessaria
Buffer overflow: esempio 1
Lindice si trova fuori dai
limiti.
Il compilatore pu
rilevare il difetto in fase
di compilazione
gcc non lo rileva
Java lo rileva
Ci nonostante
int main()
{
char sample[10];
sample[10]='B';
return 0;
}

Buffer overflow: esempio 2
Lindice si trova fuori dai limiti.
Questo difetto pu essere rilevato
solo in fase di esecuzione (runtime).
Lambiente di esecuzione potrebbe
rilevare lerrore ed impedire
lesecuzione della riga errata:
gcc non lo rileva
Java lo rileva
Il modulo di rilevazione dellerrore
utilizza risorse (memoria e tempo)
per proteggersi da un problema che
capita abbastanza di rado.
In alcuni caso potremmo non
permetterci il dispendio aggiuntivo di
risorse (ad esempio, programmi in
tempo reale).
Anche se volessimo spendere risorse
per questo controllo
int main()
{
char sample[10];
int i;
for(i=0; i<11; i++)
sample[i]='B';
}
Buffer overflow: esempio 3 (1)
Il codice di rilevazione
limite di un array non
pu rilevare il seguente
difetto.
int main()
{
char sample[] = "Hello
world!";
char* p;
int i;

p = sample;
for(i=0; i<40*1000; i++)
{
if(*p > 0)
putchar(*p);
p++;
}
}
Buffer overflow: esempio 3 (2)
Posso potenzialmente
leggere e scrivere da
qualsiasi locazione di
memoria!
In realt il sistema
operativo non mi
permette un accesso
indiscriminato
(Segmentation fault)
Sistemi operativi snelli
non effettuano il controllo
In ogni caso ho ottenuto
una serie di informazioni
Buffer overflow: implicazioni per la
sicurezza
A A A A A A A A A B
Dati dellutente
A A A A A A A A A B
Dati dellutente Codice del programma utente
A A A A A A A A A B
Dati dellutente Dati di sistema
A A A A A A A A A B
Dati dellutente Codice del programma di sistema
Supponendo che non venga eseguito un controllo, le implicazioni per la sicurezza potrebbero
essere molteplici, a seconda delle informazioni che seguono lo spazio allocato.
Buffer overflow nel passaggio di
parametri
Se i parametri per la routine vengono passati da
input, possibile provocare un buffer overflow.

Esempio:
http://www.somesite.com/subpage/userinput.asp?
parm1=(808)555-1212&parm2=2009Jan17

Cosa accade se il numero di telefono fornito ha
1000 caratteri? Crash del programma?
possibile sfruttare il crash?
Buffer overflow: riassunto
possibile rilevarlo/prevenirlo attraverso il
compilatore o lambiente di esecuzione (Java).
I moduli di rilevazione e prevenzione hanno un
costo (memoria, tempo).
Se non rilevato/prevenuto pu permettere la
scrittura di dati a piacimento!
I buffer overflow esistono da quando sono stati
creati i linguaggi di programmazione di alto livello
con gli array.
Buffer overflow: riassunto
Per lungo tempo hanno rappresentato solo un
picollo fastidio per utenti e programmatori, una
causa di errori e di crash di sistema.

Abbastanza di recente, per, gli aggressori li
hanno utilizzati come veicoli per provocare prima
un crash del sistema e poi un malfunzionamento
controllato con serie implicazioni per la sicurezza.
MEDIAZIONE INCOMPLETA
Errori di programma non malevoli
Mediazione incompleta
Riprendiamo lesempio del sito Web

http://www.somesite.com/subpage/userinput.asp?
parm1=(808)555-1212&parm2=2009Jan17

Cosa accadrebbe se fosse specificato 1800Jan01?
O 1800Feb30?
O 2048 Min32?
Mediazione incompleta
Potrei anticipare il problema del buffer overflow,
inserendo dei controlli lato client (il browser)
La data potrebbe essere specificata solo
selezionando controlli predefiniti
Ci non impedisce di realizzare una richiesta HTTP
manuale, digitando lindirizzo direttamente nel
browser.
In questo caso si dice che i valori dei dati non sono
completamente mediati: i dati critici si trovano in
una condizione esposta, non controllata.

Implicazioni per la sicurezza
Per meglio comprendere le implicazioni per la
sicurezza dovute alla mediazione incompleta,
consideriamo il seguente esempio.
Supponiamo che la richiesta HTTP per la conferma e
pagamento di un ordine sia la seguente:

http://www.things.com/order.asp?part=555&
price=10&quantity=5&total=50

Normalmente lutente utilizza il sito di e-commerce
dellazienda e non genera una richiesta manuale.
Implicazioni per la sicurezza
Ci per non impedisce di confezionare una
richiesta malevola come:

http://www.things.com/order.asp?part=5
55&price=10&quantity=5&total=20

Lesempio realmente accaduto!
Come si risolve?
Non necessario avere il prezzo unitario, n il
totale: sufficiente avere il codice del prodotto e
la quantit!

SCARTO FRA TEMPO DI CONTROLLO
E TEMPO DI UTILIZZO
Errori di programma non malevoli
Falla TOCTTOU
Per migliorare lefficienza, i processori e i sistemi
operativi moderni possono cambiare lordine di
esecuzione di istruzioni e procedure.
Ad esempio, lesecuzione di istruzioni consecutive di
una procedura possono essere inframezzate da
istruzioni di altre procedure (multi-tasking).
La falla Time-Of-Check To Time-Of-Use (TOCTTOU,
tock too) dovuta allo scarto di tempo tra la
verifica dellautorizzazione a compiere unazione e
lesecuzione dellazione stessa.
Falla TOCTTOU
Se i dati di autorizzazione non vengono utilizzati
direttamente e, nellattesa di essere utilizzati, sono
disponibili per la modifica, allora si verifica la falla.

Esempio: una persona compra una statua che costa
100
1. Lacquirente estrae 5 banconote da 20, le conta davanti al
venditore e le lascia sul tavolo.
2. Il venditore si gira e prende la statua.
3. Lacquirente riprende una banconota mentre il venditore
girato.
4. Il venditore si gira, prende il denaro e porge la statua
allacquirente, che esce dal negozio.

TOCTTOU: esempi
Esempio: accesso ad un file
1. Lutente X vuole leggere il file file_di_X
2. Viene confezionata una richiesta di accesso [X,
file_di_X, lettura, ?] e sottoposta a controllo
3. Laccesso viene permesso [X, file_di_X, lettura, OK]
4. Prima di essere utilizzata, la richiesta di accesso
viene modificata [X, file_nascosto, modifica, OK]
5. La richiesta di accesso viene utilizzata nella versione
modificata, permettendo operazioni negate.
Come evitarla?
Per evitare la falla sarebbe necessario utilizzare i
dati di permesso immediatamente o evitare di
esporli durante lattesa dellutilizzo.

Se ci non fosse possibile (multi-tasking), si
potrebbe aggiungere un checksum ai dati di
permesso, che lentit emittente possa verificare
in modo da poterne rilevare la modifica.
Combinazione di falle
Ognuna delle tre falle precedenti abbastanza
grave singolarmente.
Tuttavia laggressore intelligente utilizza le falle
come mattoni per la costruzione di un attacco
complesso.
Per questo motivo occorre conoscere e
proteggersi anche dalle falle pi semplici.
Le falle di programma allapparenza innocue
possono essere sfruttate da aggressori malevoli
per introdurre codice dannoso! (virus)
VIRUS E ALTRO CODICE MALEVOLO
Sicurezza dei programmi
Attivit silente
La maggior parte del lavoro svolta da un
programma invisibile agli utenti. Ad esempio:
Conoscete la forma in cui viene memorizzato un
documento?
Quali file vengo creati e modificati da un elaboratore di
testi quando create un documento?

Per questa ragione, poich lutente non vede
direttamente i dati utilizzati dal computer, gli
eventuali aggressori informatici possono utilizzare
programmi come veicoli per la modifica di dati o di
altri programmi.
Come avviene linfezione?
Quando si installa un pacchetto software
elaboratore di testi, plug-in da Internet, giochi,
si esegue un comando generalmente chiamato
INSTALL o SETUP.
Da qui in poi il programma di installazione prende il
controllo
crea, modifica, elimina e rinomina i file che gli sono
necessari.
A parte la (generica) documentazione di installazione
fornita, lutente non ha idea di quali regalini abbia
ricevuto in seguito allinstallazione.
Come avviene linfezione?
Si spera che siano tutti buoni, ma tra di essi
possibile nascondere del codice malevolo che
viene installato senza che lutente ne abbia
percezione.

importante conoscere la fonte del software che
installiamo!
Cosa pu fare il codice malevolo?
Il codice malevolo di fatto un programma e pu
quindi fare qualsiasi cosa in grado di fare un
programma
Scrivere un messaggio sullo schermo
Terminare lesecuzione di un programma
Modificare/cancellare un file archiviato

Pu anche insediarsi e rimanere inattivo fino a che
non si verifica una condizione di innesco:
Un orario o data predefinita
Un evento (per esempio, lesecuzione di un programma)
Un conteggio
Una combinazione di eventi
Cosa pu fare il codice malevolo?
Il codice malevolo inoltre viene eseguito sotto
lautorit dellutente corrente:
Pu entrare in contatto con tutto ci con cui a
contatto lutente e nello stesso modo.
Pu quindi aggiungere, modificare o eliminare qualsiasi
dato dellutente, senza che sia necessario il suo
esplicito consenso (una volta avviato).
Da quanto tempo esiste il codice
malevolo?
I riferimenti ai comportamenti dei virus risalgono
almeno al 1970
Lo studio di Ware nel 1970 (pubblicato nel 1979) e quello di
Anderson per laeronautica militare statunitense descrivono
in maniera ancora accurata minacce, vulnerabilit e falle di
protezione dei programmi.

La novit oggigiorno il numero di istanze distinte e di
copie di virus che sono comparse e scomparse,
nonch la velocit con cui nasce il codice per il loro
sfruttamento.
Zero day
Il rilascio di una patch di una vulnerabilit avviene
secondo le seguenti fasi:
1. Una nuova vulnerabilit viene scoperta.
2. Il produttore viene a conoscenza della vulnerabilit.
3. Viene sviluppata la prova di concetto per dimostrare
la vulnerabilit in una situazione controllata.
4. Il produttore sviluppa e distribuisce un rimedio
(patch).
5. Gli utenti implementano la difesa.
Zero day
Qualcuno pu sferrare un attacco effettivo
estendendo la prova di concetto o la definizione
della vulnerabilit.
Fintanto che gli utenti implementano la difesa
prima dellattacco effettivo, non si registra alcun
danno.

Viene definito giorno zero la data in cui il
produttore viene a conoscenza della
vulnerabilit.
Zero day
Un attacco che avvenga prima che il produttore
conosca la vulnerabilit detto sfruttamento del
giorno zero: zero day attack.

In senso pi generale, un zero day attack
avviene prima della disponibilit della patch
relativa.
TIPI DI CODICE MALEVOLO
Virus e altro codice malevolo
Tipi di codice malevolo
Virus: si unisce ad un programma e propaga copia di
se stesso in altri programmi.
transitorio: eseguito solamente in associazione al
programma ospite.
residente: rimane sempre attivo e pu essere attivato come
programma autonomo, dopo il termine del programma
ospite.

Cavallo di Troia: codice che oltre al suo effetto
primario presenta un secondo effetto malevolo non
evidente.
esempio: script di login che, oltre alle operazioni standard,
conserva una copia di nome utente e password per un
utilizzo successivo.
Tipi di codice malevolo
Bomba logica: codice malevolo che scatta al verifica di
una particolare condizione.
Trapdoor o backdoor: caratteristica di un programma
per accesso diverso dalla chiamata diretta.
esempio: programma bancario che, digitando il numero
990099 sul tastierino, mostra la registrazione delle
operazioni effettuate sulla macchina.

Worm: come il virus, ma si diffonde solo attraverso la
rete, mentre il virus pu utilizzare qualsiasi supporto.
Il worm si diffonde come programma autonomo.
Tipi di codice malevolo
Coniglio (rabbit): virus o worm che si replica
automaticamente senza limiti per esaurire le
risorse.

Nel seguito utilizzeremo virus come termine generico
per intendere qualsiasi codice malevolo.
Come si diffondono i virus?
Un virus eseguibile semplicemente residente su un
disco non produce effetti.
Affinch un virus inizi il suo lavoro malevolo e si
diffonda deve essere attivato attraverso la sua
esecuzione.

Il virus viene quindi associato ad un programma
normale (il programma ospite) in modo tale da
essere eseguito quando il programma ospite
lanciato.
Esempio: virus nel CD di installazione di un programma:
Lutente avvia il programma SETUP.EXE residente sul CD;
Come si diffondono i virus?
Da questo momento linfezione prosegue
autonomamente.
Per avviare il processo di infezione necessario
lintervento umano:
Un essere umano inserisce il virus nel supporto di
distribuzione;
Un essere umano avvia lesecuzione del programma a
cui associato il virus.
Come si diffondono i virus?
Un mezzo comune per la diffusione del virus
lallegato di posta elettronica.
In questo attacco laggressore deve convincere il
destinatario del messaggio ad aprire lallegato. Una
volta aperto, lallegato infetta il computer.
Alcuni gestori di posta elettronica, nel tentativo di
aiutare lutente, aprivano direttamente gli allegati alla
sola lettura del messaggio, creando invece una falla di
sicurezza.
Dove si posizionano nel programma
ospite? Virus accodati
Il virus inserisce copia di s stesso
prima della prima istruzione del
programma ospite
Allavvio del programma originale
tutte le istruzioni del virus
vengono eseguite per prime. Poi
lesecuzione prosegue
normalmente col programma
originale.
Semplice ed efficace:
lautore non deve sapere nulla del
programma ospite
Il programma ospite spesso serve
solo da vettore per linfezione
Lutente non percepisce la
presenza del virus (il programma
originale funziona normalmente)
Codice
virale
Programma
originale
Virus che circondano il programma
Il virus viene eseguito prima
e dopo il programma
originale.
Questo permette al virus di
intervenire sulloutput del
programma originale.
Ad esempio, un virus che
infetta il programma che
costruisce lelenco dei file su
disco potrebbe intercettare
loutput in modo da
eliminare i riferimenti a se
stesso e quindi non
comparire allutente.
Codice
virale
Parte (a)
Programma
originale
Codice
virale
Parte (b)
Virus integrati e sostituzioni
Il virus si integra nel
codice originale del
programma ospite.
In questo modo diventa
pi difficile da rilevare,
ma lautore del virus
deve conoscere lesatta
struttura del
programma ospite.
Codice virale
Programma
originale
Programma
modificato + =
Virus di documento
Si trova allinterno di un documento formattato
(cio con una struttura) come:
Documento scritto (Word, Open Office Writer, )
Un database
Una presentazione

Questi documenti sono infatti altamente
strutturati e contengono:
dati (parole o numeri) e
comandi (formule, controlli di formattazione,
collegamenti, )
Virus di documento
I comandi sono parte di un ricco linguaggio di
programmazione che comprende macro, variabili
e procedure, accesso ai file e persino chiamate al
sistema.

Sebbene quindi il virus di documento non sia
codice direttamente eseguibile, sfrutta lambiente
fornito dal programma di lettura del file per
eseguire operazioni malevole.
Modifica dei puntatori
Negli esempi precedenti il virus si unisce ad
un programma legittimo (modificandone il
file)

Un virus pu anche modificare i puntatori
nella tabella dei file per essere invocato al
posto del programma legittimo
LUOGHI IN CUI PU RISIEDERE UN
VIRUS
Virus e altro codice malevolo
Introduzione
Dal punto di vista del suo creatore, un virus
dovrebbe
Essere difficile da rilevare;
Non essere distrutto o disattivato facilmente;
Diffondersi in modo ampio;
Reinfettare il programma in cui si trova o altri
programmi;
Semplice da creare;
Indipendente dalla macchina o dal sistema operativo.
Pochi virus soddisfano tutti questi criteri.
Introduzione
Inizialmente la sfida per lautore del virus era scrivere
un codice che sarebbe stato eseguito ripetutamente
per garantirne la diffusione.

Ora sufficiente un esecuzione singola per garantire
la diffusione (i computer sono sempre connessi).
il virus spesso giunge come allegato di posta elettronica che
lutente deve eseguire

Esaminiamo i luoghi in cui possibile che un virus
risieda (dopo linstallazione) per procedere con
linfezione.
Virus del settore di avvio
Il sistema operativo un software
memorizzato su disco.
Allavvio:
1. il firmware copia (da una posizione
fissa del disco, detta settore di
avvio) il bootstrap loader in
memoria;
2. Il firmware passa il controllo al
bootstrap loader;
3. Il bootstrap loader continua il
caricamento del sistema operativo.
Il settore di avvio dispone di 512
byte. Per permettere bootstrap
loader pi grandi possibile il
concatenamento.
Se il virus riesce ad inserirsi nella
catena, la sua esecuzione
garantita ad ogni avvio.
Bootstrap
loader
Inizializzazione
del sistema
Codice
virale
Inizializzazione
del sistema
Bootstrap
loader
Prima dellinfezione
Dopo linfezione
Virus del settore di avvio: (s)vantaggi
Il virus acquisisce il controllo molto presto,
prima che vengano attivati gli strumenti di
rilevazione.
I file nellarea di avvio sono parti
fondamentali del sistema operativo:
Il sistema operativo li nasconde e ne impedisce
leliminazione: il virus risulta difficile da rilevare e
da eliminare. Tipicamente richiesto un avvio
della macchina tramite disco pulito.
Virus residenti in memoria
Per ridurre il tempo di esecuzione di un programma,
alcune parti del sistema operativo o programmi
utente rimangono in memoria, cos da non richiedere
lettura da disco e caricamento in memoria.
Questo tipo di codice definito codice residente.
Esempi di codice residente:
Routine per linterpretazione dei tasti della tastiera;
Codice di gestione delle eccezioni dei programmi;
Timer.
Virus residenti in memoria
Allegando un virus ad un codice residente, questo
sar eseguito pi volte.
Esempio: un virus associato ad un codice residente pu
essere eseguito pi volte e controllare i dischi nelle
unit rimovibili, provvedendo allinfezione.

In maniera analoga un virus pu modificare la
tabella dei programmi del sistema operativo, ad
esempio la lista dei programmi da eseguire
allavvio.
Altri luoghi
Abbiamo parlato della possibilit di eseguire
operazioni attraverso macro. Alcuni programmi hanno
delle Macro di avvio che permettono, ad esempio,
lesecuzione di operazioni ricorrenti interessanti per
lutente.
Un luogo in cui un virus pu risiedere e quindi la
macro di avvio.
Le librerie di codice (ad esempio le Dynamic Linked
Library, DLL) sono utilizzate da numerosi programmi e
vengono eseguite da ognuno di essi.
Un virus che infetta una libreria si garantisce
numerose esecuzioni.
DEFINIZIONE DEI VIRUS
Virus e altro codice malevolo
Introduzione
Un virus non pu essere completamente invisibile:
Il codice deve essere memorizzato da qualche parte e deve
trovarsi in memoria per poter essere eseguito;
Il virus viene eseguito in modo particolare, con particolari
metodi per la sua diffusione.
Ognuna di queste caratteristiche porta ad uno schema
eloquente: la definizione o firma.
La definizione del virus viene utilizzata dagli
analizzatori (virus scanner) per rintracciarlo.
Il virus viene rilevato solo con la relativa definizione:
ecco limportanza dellaggiornamento delle definizioni.

Schemi di memorizzazione
La maggior parte dei virus si
associa a programmi archiviati
su disco.

Il virus allegato invariabile,
perci linizio del codice una
definizione rilevabile.

Un altro parametro da valutare
pu essere la dimensione del
file a cui il virus si associa. Se il
programma ospite non viene
modificato internamente, la
dimensione complessiva
aumenta.
IF (--)
JUMP
Programma
originale
Codice del
virus allegato
Programma
originale
Modulo del
virus
separato
Schemi di memorizzazione
Per non aumentare la
dimensione possibile
sostituire delle parti del
programma, ma in questo caso
il comportamento dellospite
sarebbe modificato dal virus.

Ancora, lanalizzatore di virus
pu utilizzare un codice o una
checksum per rilevare le
modifiche a un file.

Pu anche cercare schemi
sospetti
Esempio: rilevare unistruzione
JUMP come prima istruzione di
un programma di sistema.
IF (--)
JUMP
Programma
originale
Codice del
virus allegato
Programma
originale
Modulo del
virus
separato
Virus polimorfico
Per rendere difficoltoso il rilevamento, lautore del
virus pu far s che lo schema di memorizzazione
cambi.
In questo caso si parla di virus polimorfico.

Seguono alcune tecniche che permettono di
rendere un virus polimorfico:
Inserire istruzioni che non producono alcuna
operazione (no-ops), come:
Aggiunta di uno 0 ad un numero;
Confronto di un numero con se stesso;
Salto allistruzione successiva.
Virus polimorfico
Cambiare la posizione delle parti di codice rispetto a
quelle dei dati.
Supponendo che un codice malevolo sia composto da 100
byte di programma e 50 byte di dati, varianti del virus
polimorfico potrebbero essere:
10 byte di programma, seguiti da 50 byte di dati, seguiti da i
restanti 90 byte di programma;

Crittografare parte del codice (virus crittografici). La
chiave e la routine di decrittazione devono essere in
chiaro, per poter riottenere il codice in chiaro.
Non appena il virus viene eseguito, questi effettua la
decifratura ottenendo la parte restante del suo codice
eseguibile
PREVENIRE LINFEZIONE VIRALE
Virus e altro codice malevolo
Codice eseguibile da fonte infetta
Un modo per prevenire linfezione consiste
nellevitare di ricevere del codice eseguibile da
una fonte infetta.
possibile riconoscere cosa sia codice
eseguibile?
possibile rilevare quale sia una fonte infetta?
Riconoscere codice eseguibile (1)
Individuare chiaramente quale sia codice eseguibile
non semplice.
Oggi i file sono pi complessi e anche quelli non
direttamente eseguibili (.exe) possono contenere del
codice eseguibile (macro).
Documenti di testo;
Fogli elettronici;
Presentazioni;

Le applicazioni che utilizzano questi file possono
cercare di aiutare lutente invocando
automaticamente il codice eseguibile, senza esplicito
consenso.
Riconoscere codice eseguibile (1)
Ad esempio, i gestori della posta elettronica
(Thunderbird, Outlook, Outlook Express, ) potevano
essere impostati per aprire automaticamente gli allegati
o il codice incorporato,
in modo che i messaggi di posta elettronica visualizzino,
per esempio, degli orsetti animati che ballano.

Questi falle sono eliminate nelle ultime
versioni.
Riconoscere fonti infette
Poich non possibile sapere quali fonti siano
infette, si dovrebbe presumere che qualsiasi fonte
esterna sia infetta.
Non per possibile tagliare tutti i contatti con il
mondo esterno.
Kephart et al. osservano che gli sforzi dei singoli
per mantenere i loro computer privi di virus porta
alla creazione di comunit non infette.
Riconoscere fonti infette
La trasmissione contenuta non a causa del
limitato contatto del singolo col mondo esterno,
ma grazie al limitato contatto con persone esterne
alla comunit.
I governi, per i segreti militari o diplomatici,
spesso sfruttano comunit di rete disconnesse.
In sintesi, il segreto nella scelta prudente della
comunit.
Tuttavia con la diffusione di Internet questa
possibilit sempre pi difficile.
Per costruire una comunit sicura si
dovrebbe
Usare software commerciale acquistato da rivenditori
solidi ed affidabili.
Provare tutto il nuovo software su un computer isolato.
Aprire gli allegati solo quando si certi che siano sicuri.
Creare unimmagine di ripristino del sistema e
archiviarla in un luogo sicuro.
Creare copia di backup dei file di sistema eseguibili.
Utilizzare regolarmente i rilevatori di virus e tenerli
regolarmente aggiornati.
Verit e malintesi sui virus (1)
I virus possono infettare solo i sistemi operativi
Microsoft.
Falso.
I sistemi Microsoft sono molto popolari, esistono
pertanto pi persone che scrivono software per questi
sistemi.
Di conseguenza questi sistemi sono spesso lobiettivo
prescelto dagli autori di virus.
In realt qualsiasi dispositivo contenente codice
informatico (computer, palmari, cellulari, automobili, )
e che sia connesso con altri dispositivi, pu essere
infettato da virus.
Verit e malintesi sui virus (2)
I virus possono modificare i file nascosti e di sola
lettura.
Vero.
Loccultamento o limpostazione di un file in sola lettura
sono operazioni eseguite via software, attraverso un
sistema a strati: intervenendo a livello degli strati
inferiori possibile aggirare questi ostacoli.
Verit e malintesi sui virus (3)
I virus possono apparire solo nei file di dati,
oppure solo in documenti di Word, oppure solo
nei programmi.
Falso.
Che cosa sono i dati? Che cos un file eseguibile?
La distinzioni non sempre chiara.
In ogni caso sempre necessario che ci sia
unesecuzione. La stringa di bit, che sia essa stessa
direttamente un comando, o che agisca attraverso
lambiente di esecuzione di unapplicazione, deve
scatenare lesecuzione di operazioni.
Verit e malintesi sui virus (4)
I virus si diffondono solo sui dischi o solo tramite
email.
Falso.
Qualsiasi mezzo che metta in contatto due
dispositivi un vettore di virus:
Un pagina Web che permette lo scaricamento di file;
Un archivio su server FTP;
Reti di condivisione di file;


Verit e malintesi sui virus (5)
I virus non possono rimanere in memoria dopo un
completo spegnimento e riavvio del sistema.
Vero
La memoria volatile: non mantiene informazione
senza alimentazione.
Tuttavia il virus pu essere riavviato automaticamente
ad ogni avvio (ad esempio, virus del settore di avvio).
Nota: libernazione e la sospensione non sono riavvii
del sistema. Il contenuto della memoria viene salvato
su disco.
Verit e malintesi sui virus (6)
I virus non possono infettare lhardware.
Vero.
Il virus presuppone la possibilit di modifica (non
volontaria dellutente) di codice eseguibile.
Se lhardware non ha codice modificabile oppure non
possibile modificarlo, linfezione non pu aver luogo.
Un virus (software) potrebbe per danneggiare il
dispositivo hardware se il driver permette operazioni
(potenzialmente) dannose.
ESEMPI DI CODICE MALEVOLO
Sicurezza dei programmi
IL VIRUS BRAIN
Esempi di codice malevolo
Introduzione
uno dei primi virus ad essere comparsi.
Deve il suo nome al fatto che modifica letichetta
dei dischi attaccati in BRAIN.

Sembra non avere effetti diversi dalla trasmissione
era verosimilmente una prova di concetto ,
tuttavia alcune varianti cancellano il contenuto del
disco o distruggono la tabella di allocazione dei
file.
Virus Brain Cosa fa
Cerca di diffondersi il pi possibile.
1. Si posiziona nella memoria superiore.
2. Esegue una chiamata di sistema per reimpostare
il limite della memoria superiore al di sotto di s
e quindi non essere disturbato.
3. Si appropria dellindirizzo dellinterrupt 19
(lettura del disco), reimpostando lindirizzo a se
stesso.
4. Utilizza linterrupt 6 (inutilizzato) per
memorizzare lindirizzo originale del 19.


Virus Brain Cosa fa
In questo modo il virus analizza tutte le chiamate
di lettura dal disco, gestendo tutte quelle relative
al settore di avvio.
Per nascondersi restituisce il contenuto originale
del settore di avvio del disco che ha provveduto a
memorizzare in settori del disco contrassegnati
come danneggiati.
Altre chiamate al disco vanno al normale gestore
della lettura, servito tramite linterrupt 6.


Virus Brain Come si diffonde
Si posiziona nel settore di avvio e in altri sei settori del
disco.
1. Contiene il codice di avvio originale;
2. Codice virale;
3. Codice virale;
4. Duplicato del settore 1;
5. Duplicato del settore 2;
6. Duplicato del settore 3.
I settori vengono contrassegnati come danneggiati, in
modo che il sistema operativo non li utilizzi
con le chiamate di basso livello possibile obbligare lunit a
leggere dai settori che il sistema operativo ha
contrassegnato come danneggiati

Virus Brain Come si diffonde
Una volta stabilitosi in memoria, il virus intercetta
le richieste di lettura del disco.
A ogni lettura il virus legge il settore di avvio e
cerca del quinto e nel sesto byte il valore
esadecimale 1234.
Se presente, deduce che il disco infetto.
Altrimenti provvede allinfezione.

IL WORM INTERNET
Esempi di codice malevolo
Introduzione
Il 2 novembre 1988 venne rilasciato su
Internet un worm che provoc seri danni alla
rete.
Non solo molti computer furono infettati, ma
quando la notizia si diffuse, molti altri sistemi non
infetti disattivarono le proprie connessioni dalla
rete per prevenire linfezione.
Worm Internet Obiettivi
A giudicare dal codice, il worm era
programmato per raggiungere tre obiettivi
principali:
1. Determinare dove poteva diffondersi;
2. Diffondere la sua infezione;
3. Rimanere sconosciuto e introvabile.
Worm Internet Effetti
Leffetto principale stato lesaurimento delle
risorse.
Il worm avrebbe avuto il compito di determinare se un
bersaglio fosse gi stato infettato;
in caso affermativo, il worm avrebbe negoziato in modo
da terminare o linfezione esistente o quella nuova.
A causa di un difetto nel codice, molte nuove copie non
terminarono.
Come risultato una macchina infetta veniva presto
gravata di molte copie del worm, tutte che tentavano
incessantemente di diffondere linfezione.
Le prestazioni venivano fortemente degradate.
Worm Internet Effetti
Un secondo effetto stata la disconnessione di molte
macchine da Internet:
Quelle gi infette, per non permettere la diffusione;
Quelle non infette, per evitare che fossero infettate.
Terzo effetto: isolamento e incapacit di eseguire il
lavoro necessario.
La disconnessione non ha permesso lesecuzione delle
normali attivit ha reso problematica la comunicazione per
risolvere il problema.

Ha provocato larresto o la disconnessione da Internet
di circa 600 computer.
Diverse migliaia di sistemi disconnessi per diversi giorni.
Worm Internet Come ha funzionato
Sfruttava diversi difetti ed errori di configurazione
della versione Berkley 4 del sistema operativo
Unix.
In questo modo raggiungeva i tre obiettivi visti in
precedenza:
Determinare dove potersi diffondere;
Diffondere linfezione;
Rimanere sconosciuto e introvabile.
Esaminiamo i difetti in dettaglio.
Determinare dove potersi diffondere
Sfruttava tre falle di protezione ben note alla
comunit Unix.
La prima era dovuta ad un errore congiunto
dellutente e del sistema.
Il file delle password Unix archiviato in forma cifrata,
ma il testo cifrato leggibile da chiunque (errore del
sistema).
Il worm crittava varie password comuni (come guest,
password, help, caff, coca, aaa, ) e
confrontava il testo cifrato con quello del file delle
password (la scelta di una password riconoscibile
lerrore dellutente). Se trovava la password, il worm
poteva accedere.
Determinare dove potersi diffondere
La seconda falla riguardava fingerd
il servizio per rispondere alla richieste di informazioni da altri
computer in merito alle informazioni sugli utenti di sistema.
La falla consisteva in una vulnerabilit di tipo buffer
overflow
era possibile confezionare un input malevolo tale da
sovrascrivere lindirizzo di ritorno di un record di attivazione
nello stack
Al termine della chiamata finger, finger poteva quindi
essere costretto a eseguire le istruzioni spinte al suo
interno
provocando la connessione del worm ad una shell remota.
Determinare dove potersi diffondere
La terza falla riguardava una trapdoor nel
programma sendmail.
Normalmente sendmail rimane in attesa di chiamata da
altri programmi per linvio di posta elettronica.
Il destinatario specificato viene verificato per poi
procedere con la ricezione del messaggio.
Tuttavia durante lesecuzione in modalit di debug il
worm obbligava sendmail a ricevere ed eseguire una
stringa di comandi al posto dellindirizzo di
destinazione.
Diffusione dellinfezione
Dopo aver trovato una macchina di destinazione
adatta, il worm utilizzava uno dei precedenti tre
metodi per inviare un bootstrap loader alla
macchina bersaglio.
Il loader consisteva in 99 righe di codice C da
compilare ed eseguire sulla macchina di
destinazione.
Il bootstrap loader avrebbe poi analizzato il resto
del worm dalla macchina host di invio.
Rimanere sconosciuti e introvabili
Se si verificava un errore di trasmissione mentre il
resto del worm veniva prelevato, il loader azzerava
e poi eliminava tutto il codice gi trasferito, quindi
terminava la procedura.
Non appena il worm riceveva il suo codice
completo, trasferiva il codice in memoria, lo
crittava ed eliminava le copie originali dal disco.
Il worm cambiava periodicamente nome e
identificativo del processo, in modo da non tenere
in esecuzione nessun singolo nome per troppo
tempo.
Cosa si appreso
Il worm Internet diede una scossa alla comunit
Internet, che allepoca era costituita principalmente
da universitari e ricercatori.
I siti colpiti provvidero a risolvere le falle;
Alcuni utente cambiarono le password;
Vennero realizzati strumenti per la rilevazione automatica
delle falle.
Nonostante ci gli analisti ritengono che molte delle stesse
falle esistano tuttora.
Il worm era benigno (non distruggeva dati, non
salvava le password), ma avrebbe potuto compiere
molti danni.
Cosa si appreso
Molte persone furono spinte allazione.
Gli Stati Uniti svilupparono uninfrastruttura per la
comunicazione e la correzione dei difetti del codice,
malevoli e non.
Venne istituito il Computer Emergency Response Team
(CERT) alla Carnegie Mellon University.

Gli amministratori oggi si scambiano informazioni
su problemi e soluzioni: la sicurezza deriva da
azioni e protezione supportate dallinformazione,
non dallignoranza e dallinattivit.


CODE RED
Esempi di codice malevolo
Introduzione
Apparve a met del 2001 con effetti
devastanti.

Colpiti 750.000 server in tutto, compresi
400.000 computer nel solo periodo dal 1 al 10
agosto.

Danno stimato in oltre due miliardi di dollari.
Code Red Che cosa ha fatto
Si propaga sui server Web che girano su
Internet Information Server (IIS) di Microsoft.
Funziona in due passaggi:
Infezione, tramite buffer overflow nella libreria a
collegamento dinamico idq.dll.
Propagazione, controllando indirizzi IP sulla porta
80 per vedere se il server vulnerabile.
Quali sono stati gli effetti
La prima versione era facile da individuare, perch
deturpava i siti Web con il seguente testo

HELLO!
Welcome to
http://www.worm.com !
Hacked by Chinese

Il resto delle attivit era determinato dalla data.
Dal 1 al 19 del mese, il worm produceva altri 99 thread che
ricercavano altri computer vulnerabili.
Dal 20 al 27, il worm lanciava un attacco distributed denial-
of-service al sito www.whitehouse.gov.
Dal 28 alla fine del mese rimaneva inattivo.
Quali sono stati gli effetti
Altre varianti compivano differenti operazioni, fino
a iniettare una cavallo di Troia nel server colpito
per permettere lesecuzione di comandi arbitrati
sul server.
Che cosa si appreso
Microsoft ha rilasciato la patch per risolvere il
problema, ma molti amministratori trascurarono
lapplicazione della patch.

La gestione degli aggiornamenti del software
una vera e propria attivit che richiede delle
risorse dedicate.

Ora esistono gli aggiornamenti automatici!
WEB BUG
Esempi di codice malevolo
Web Bug Che cosa fanno
Un Web bug (a volta chiamato tag pixel, clear gif,
gif a singolo pixel, gif invisibile o beacon gif)
unimmagine nascosta in un qualsiasi documento
che pu visualizzare tag HTML:
Una pagina web;
Un messaggio di posta elettronica (in formato HMTL);
Un foglio elettronico.

Il creatore vuole che il bug sia invisibile allutente,
ma che possa tenere traccia delle attivit sul web.
Web Bug Che cosa fanno
Ad esempio, visitando la home page di Blue Nile
allindirizzo www.bluenile.com, viene
automaticamente scaricato il seguente bug da
Avenue A, unagenzia di marketing:

<img height=1 width=1
src=http://switch.avenuaa.com/action/bluenile_homepage/v
2/a/AD7029944>
Web Bug Quali effetti hanno
Un Web bug inserisce un file chiamato cookie nel
disco rigido del sistema.
Il cookie tipicamente contiene un identificativo univoco
assegnato allutente.
Consideriamo la societ di marketing di cui allesempio
precedente.
Le informazioni contenute nel cookie vengono reinviate
al server ogni volta che viene fatta una richiesta al
medesimo server.
Se i Web bug di Avenue A sono utilizzati da molti siti,
possibile tracciare un profilo dellutente, sebbene sia
anonimo.
Come funzionano
A prima vista i Web bug non sembrano essere
malevoli, raccolgono dati numerici ma non tengono
traccia di informazioni personali come il nome e
lindirizzo del navigatore.

Tuttavia se lutente effettua un acquisto o una
registrazione al sito, questi dati verranno forniti e
potranno completare il profilo.
Inoltre, ogni richiesta al server Web contiene
comunque informazioni come:
Indirizzo IP del computer;
Il tipo di browser usato;
Come funzionano
La risoluzione del monitor;
Altre impostazioni del browser, per esempio se abilitata la
tecnologia Java;
Il tempo di connessione;
Valori precedenti dei cookie;

Queste informazioni possono essere utilizzate per
tenere traccia dellutente.
In modo pi malevolo, il bug pu essere utilizzato in
maniera astuta per determinare degli indirizzi IP con
determinate caratteristiche che potrebbero
permettere un attacco di successo.
Cosa si appreso
I Web bug sollevano interrogativi sulla privacy e
alcune nazioni stanno prendendo in
considerazione leggi per la protezione specifica dai
bug web.

I browser attuali permettono unalta granularit di
configurazione per le regole di gestione dei
cookie.
CODICE MALEVOLO SPECIALIZZATO
Sicurezza dei sistemi operativi
Introduzione
Finora abbiamo analizzato del codice (malevolo)
anonimo, scritto per influire su utenti e macchine
in modo indiscriminato.

In questa sezione analizzeremo del codice
malevolo scritto per un sistema particolare, per
unapplicazione specifica o per uno scopo
determinato.
TRAPDOOR
Codice malevolo specializzato
Introduzione
Una trapdoor un punto di ingresso non documentato
ad un modulo.
Vengono utilizzate di norma per lo sviluppo del codice:
Per provare il modulo;
Per fornire agganci con cui connettersi a futuri
perfezionamenti o modifiche;
Per consentire laccesso al modulo in caso di
malfunzionamenti.
Oltre allutilizzo durante lo sviluppo, le trapdoor
possono per consentire laccesso al programma una
volta che questo viene messo in produzione.
Stub
I sistemi informatici sono strutture complesse. Per
questa ragione i programmatori spesso sviluppano
e provano i sistemi in modo metodico, organizzato
e modulare, sfruttando il fatto che il sistema
composto da moduli e componenti.
I moduli vengono prima verificati singolarmente,
nella fase di verifica dellunit.
Successivamente vengono verificati nel
funzionamento integrato, nella verifica
dellintegrazione.
Stub
Per la verifica dei singoli moduli e dei loro
aggregati, potrebbero non essere ancora
disponibili i moduli che generano linput e
gestiscono loutput.
Per questo motivo i programmatori realizzano delle
routine aggiuntive che ricreano lambiente di
esecuzione del modulo in esame (creazione dellinput e
gestione delloutput, chiamati stub (troncone,
mozzicone) o driver per prove.
Gli stub verranno poi sostituiti, pi avanti nella
realizzazione del software, dai moduli di cui
emulano le funzionalit.
Codice di debug
A volte, quando lorigine di un problema di un
modulo non evidente, il programmatore
aggiunge del codice di debug.

Il codice serve per evidenziare che cosa accade
durante lesecuzione, stampando valori di
interesse o eseguendo speciali comandi.
Disattivare le funzionalit di debug in
produzione
Per controllare gli stub ed il codice di debug, il
programmatore include sequenze di controllo speciali
nella struttura del componente.
Ad esempio, particolari valori dellinput potrebbero essere
utilizzati come comandi per gestire il debug.

Linserimento dei comandi una pratica di verifica
riconosciuta, ma, se vengono lasciati in posizione
dopo i test, i comandi aggiuntivi possono divenire un
problema.
Il worm Internet ha diffuso la sua infezione utilizzando
proprio questo tipo di trapdoor di debug in un programma di
posta elettronica.
Controllo degli errori
Unaltra fonte di trapdoor uno scarso controllo degli
errori.
Un buon sviluppatore progetta il sistema in modo che
qualsiasi valore dei dati sia controllato prima del suo utilizzo.
Il controllo comporta la verifica della correttezza del dato e
della sua appartenenza allintervallo previsto.

In sistemi progettati in modo scadente il controllo
potrebbe non essere realizzato e un dato fuori
specifica potrebbe causare errori imprevisti.
La falla di fingerd sfruttata dal worm Morris era di questo
tipo. La routind di I/O di una libreria di C non controlla se
rimangono caratteri nel buffer di input prima di restituire il
puntatore a un carattere successivo.
Necessario documentare le trapdoor
Come i virus, le trapdoor non sono sempre cattive:
possono rivelarsi utili anche per rilevare falle di
sicurezza.

Affinch siano utili indispensabile:
Che siano documentate;
Che laccesso sia fortemente controllato;
Che siano progettate ed utilizzate con la piena
consapevolezza delle potenziali conseguenze.
Cause delle trapdoor
Le trapdoor possono rimanere nei programmi di
produzione perch gli sviluppatori:

1. Dimenticano di rimuoverle;
2. Le lasciano intenzionalmente nel programma a
scopo di test;
3. Le lasciano intenzionalmente nel programma per la
manutenzione dello stesso;
4. Le lasciano intenzionalmente nel programma come
mezzi nascosti di accesso dopo che questo
diventato parte accettata di un sistema di
produzione.
Cause delle trapdoor
Il primo un errore grossolano, il secondo e il
terzo costituiscono un serio problema per la
sicurezza, il quarto il primo passo di un attacco.
In generale le trapdoor rappresentano una
vulnerabilit quando espongono il sistema a
modifiche durante lesecuzione.
Un sistema non sicuro quando qualcuno ritiene
che nessun altro sapr individuarne il varco.
SALAMI ATTACK
Codice malevolo specializzato
Introduzione
Deve il suo nome al modo in cui pezzettini di carne
e grasso vengono mischiati in una salsiccia o in un
salame.

Con la stessa tecnica un salami attack unisce bit di
dati apparentemente non sequenziali per ottenere
risultati non significativi.
Esempio di salami attack (2)
Il classico esempio di salami attack riguarda il
calcolo degli interessi.
Supponiamo che:
Una banca paghi il 6.5% di interesse annuo;
Linteresse viene calcolato su base mensile ->
6.5%/365*31 = 0.5520%
Considerando un saldo di 100, linteresse mensile
risulta allora di 0.5520
Le banche effettuano i calcoli al centesimo di euro: cosa
accade alle frazioni di centesimo?
Una popolare leggenda sulla sicurezza informatica narra
di un programmatore che raccoglieva le frazioni di
centesimo e le accreditava sul suo conto

Esempi di salami attack (2)
In realt, poich alcuni arrotondamenti avvengono
per difetto, mentre altri per eccesso, il saldo
complessivo non dovrebbe discostarsi molto dallo
zero.
Situazione differente (e redditizia) potrebbe essere
ottenuta scalando qualche centesimo da ogni conto.
Il correntista che vedrebbe accreditarsi 0.53 invece di 0.55
probabilmente lo imputerebbe ad un errore proprio sul
calcolo, o comunque ad una questione di poco conto.
Oppure il programma potrebbe registrare un canone di 20
per un servizio che costa in realt 15, ed accreditare la
differenza su un conto speciale.
Perch esistono ancora?
I calcoli informatici sono notoriamente soggetti a
piccoli errori relativi ad arrotondamento e
troncamento.
Anzich documentare i (numerosi) errori esatti,
pi semplice per programmatore ed utenti
accettare una piccola percentuale di errore come
naturale ed inevitabile.
Per far quadrare i conti, il programma include una
correzione degli errori nei calcoli.
Una verifica inadeguata di queste correzioni il motivo
per cui un salami attack pu passare inosservato.
Perch esistono ancora?
Di solito il codice sorgente di un sistema troppo
grande o complesso per poter scovare attacchi di
questo tipo, a meno che non vi sia un motivo per
sospettarne la presenza.
La dimensione ed il tempo sono punti a favore del
programmatore malevolo.
I ROOTKIT E LA TECNOLOGIA SONY
XCP
Codice malevolo specializzato
Introduzione
Il nome rootkit si riferisce al tentativo da parte del
codice di operare come utente root
ossia come utente che gode dei massimi privilegi nei sistemi
operativi Unix.
Un rootkit tipico si insinua nella normale interazione
tra utente e sistema operativo nel modo seguente:
Ogni volta che lutente esegue un comando che
mostrerebbe la presenza del rootkit, per esempio mediante
lelencazione dei file o dei processi in memoria,
il rootkit intercetta la chiamata e filtra il risultato che viene
restituito, in modo che non risulti.
Introduzione
Per esempio:
una directory contiene sei file, uno dei quali il rootkit;
Il rootkit passa il comando di directory al sistema operativo;
Il rootkit intercetta il risultato, cancella la voce che lo
riguarda dallelenco e aggiusta loccupazione di spazio;
Allutente sono mostrati solo cinque file.

possibile scrivere un rivelatore di rootkit che agisca a
basso livello nel filesystem
e che confronti il risultato delle chiamata al sistema
operativo (modificate dal rootkit), con il risultato delle
interrogazioni a basso livello.
Sony XCP (1)
La Sony ha creato XCP (eXtended Copy Protection)
per impedire che un utente copi un CD musicale,
permettendone invece la riproduzione.

A questo scopo
Include nel CD il suo specifico riproduttore che
possiede lautorizzazione per leggere il CD;
Interferisce con ogni altro accesso non autorizzato al
CD, alterando il risultato della lettura dal CD.
Sony XCP (2)
Il rootkit deve autoinstallarsi quando il CD viene
inserito
utilizza la funzionalit utile di autorun di Windows.
XCP deve nascondersi allutente, in modo da non
poter essere rimosso
blocca la visualizzazione di ogni programma il cui nome
inizia con $sys$ (il nome del rootkit stesso).
Questo filtro si applica a qualsiasi nome. Un autore di
virus potrebbe nascondere un virus chiamandolo
semplicemente $sys$-1!
Sony XCP (2)
La Sony ha commesso due errori:
1. Ha distribuito del codice che, senza avvisare,
apre il sistema a possibili infezioni;
2. Ha installato il suo codice senza metterne a
conoscenza lutente, rendendo inoltre
difficoltosa la sua rimozione.
Tappare la falla
Di fronte alla pubblicit negativa che ha ricevuto da questo
rootkit, la Sony ha deciso di rilasciare un disinstallatore.
Sfortunatamente la pressione e la fretta hanno portato
ulteriori problemi.
Infatti il disinstallatore si presentava come una pagina
Web che scaricava ed eseguiva il programma di
disinstallazione.
I programmatori per non avevano previsto il
controllo di quale codice venisse eseguito
la pagina Web poteva eseguire codice di qualsiasi fonte, non
solo della Sony.
Il codice permaneva anche dopo la disinstallazione,
lasciando quindi la vulnerabilit nel sistema.
Numeri
Quanti computer sono stati infettati dal rootkit?
Nessuno lo sa con certezza.
Sono stati trovati 500.000 riferimenti nelle tabelle DNS
al sito contattato, ma alcune voci avrebbero potuto
supportare laccesso di centinaia o migliaia di computer.

Quanti utenti infetti ne erano a conoscenza? Non
possibile rispondere, come non possibile
sapere quanti computer siano ancora infetti.
Digital Rights Management
Alcune analisi mostrano come i sistemi di gestione dei
diritti dautore (DRM, Digital Rights Management)
configurano requisiti simili a quelli dello sviluppo di
codice malevolo.

Per lo sviluppo la Sony aveva lavorato in
collaborazione con i principali produttori di antivirus
per trovare il modo di nascondere il proprio rootkit
per la Sony la cosa migliore era che i consumatori ne
rimanessero alloscuro.
SCALATA DEI PRIVILEGI
Codice malevolo specializzato
Contesto di esecuzione
I programmi girano in un contesto che ne regola i
diritti di accesso e i privilegi.
La maggior parte dei programmi viene eseguita nel
contesto dellutente che li invoca:
Se i diritti di accesso sono impostati correttamente,
possibile creare, modificare o cancellare gli elementi
posseduti dallutente, ma gli oggetti critici per il sistema
sono protetti, essendo fuori dal contesto.
Un attacco basato sulla scalate dei privilegi (privilege
escalation) consente al codice malevolo di essere
lanciato da un utente con privilegi bassi, ma di andare
in esecuzione con privilegi superiori:
Pu quindi agire sugli oggetti di sistema.
Esempio: Live Update (1)
La Symantec produce software per la sicurezza.
Per consentire che i prodotti siano sempre
aggiornati, lazienda ha previsto lopzione Live
Update (LU)
Si tratta di una funzionalit ricerca ad intervalli
regolari aggiornamenti per il software e li installa.
Poich deve installare gli aggiornamenti
direttamente nella directory di sistema,
necessario che la funzionalit venga eseguita
con privilegi elevati.
Esempio: Live Update (1)
Il processo coinvolgeva lesecuzione dei seguenti
programmi:
LU1, componente di Live Update;
LU2, componente di Live Update;
Sys3, componente standard di sistema;
Sys4, componente standard di sistema.
Esempio: Live Update (2)
Per avviare lesecuzione di un programma i sistemi
operativi utilizzano il percorso di ricerca path:
il path contiene un elenco di directory in cui ricerca il
programma che stato chiamato.
quando un programma A chiama un programma B, il sistema
operativo cerca nella prima directory specificata nel path.

Se il programma viene trovato, allora si passa
allesecuzione,
altrimenti la ricerca procede nelle successive directory
del path o termina con un errore se non viene trovata
alcuna corrispondenza.
In caso di corrispondenze multiple, il programma eseguito
quello che per primo viene trovato nel path.

Esempio: Live Update (2)
comunque sempre possibile avviare un programma
tramite percorso esplicito:
C:\Programmi\Symantec\LU1.exe

In alcune versioni di Macintosh, La Symantec
consentiva lavvio di programmi attraverso path:
se lutente aggiungeva le directory del proprio spazio nelle
prime posizioni del path e aveva un programma Sys3,
ecco che questo veniva eseguito con privilegi elevati,
superiori a quelli dellutente, al posto del programma
originale.
FALSIFICAZIONE DELLINTERFACCIA
Codice malevolo specializzato
Descrizione
Lattacco Interface Illusion (phishing) di tipo
spoofing in cui una pagina web o parte di essa
falsificata.
Obiettivo dellaggressore convincere lutente a
compiere qualcosa di inappropriato, ad esempio:
Inserire i propri dati bancari in un sito che non quello
della banca;
Premere un pulsante Non accetto che invece significa
Accetto;
Scorrere lo schermo per attivare un evento che causa
linstallazione di software malevolo sul computer.
REGISTRAZIONE DEI TASTI PREMUTI
Codice malevolo specializzato
Descrizione
Non esiste una canale diretto tra un tasto premuto sulla
tastiera e il programma (ad esempio un elaboratore di
testi) che lo utilizza.

Quando si preme il tasto A:
1. Viene attivato un interruttore che genera un segnale;
2. Il segnale viene ricevuto da un driver di periferica;
3. Il driver analizza il segnale e genera il codice A;
4. Il codice passa attraverso altri livelli fino al programma
che lo utilizza;
5. Altre elaborazioni e conversioni portano alla comparsa di
A sullo schermo.
Descrizione
In questo processo intervengono numerosi
programmi, organizzati con un paradigma a livelli
(come, ad esempio, lo stack TCP/IP).

Uno dei programmi che intervengono pu essere
modificato per tenere traccia dei tasti premuti,
da cui poi poter rilevare informazioni importanti,
come codici di accesso, password.

Bibliografia
[PFL08] C. P. Pfleeger, S. L. Pfleeger. Sicurezza
in Informatica. Pearson, Prentice Hall.
[STA07] W. Stallings. Sicurezza delle reti.
Pearson, Prentice Hall.
[Wiki-it] http://it.wikipedia.org/wiki/
[Wiki-en] http://en.wikipedia.org/wiki/
[ISECOM] Institute for Security and Open
Methodologies
Dati Sensibili
Dati Sensibili
Molti DB contengono quelli che si definiscono
Dati Sensibili

Come definizione pratica diciamo che i dati
sensibili sono quelli che non dovrebbero
essere resi pubblici

Determinare quali dati siano sensibili dipende
dal singolo DB e dalla specifica applicazione

Dati Sensibili
Due casi estremi:
Nessun dato sensibile (p.es. catalogo di una
biblioteca)
Tutti i dati sensibili (p.es. database militari)

Questi casi sono i pi semplici da gestire:
Accesso consentito allintero DB
Accesso negato allintero DB
Dati Sensibili
Il caso pi interessante quello in cui alcuni
dati sono sensibili mentre altri non lo sono

Inoltre possibile che dati diversi abbiano
livelli di sensibilit diversi
Esempio
Cognome Sesso Razza Aiuto Multe Droghe Dormitorio
Adams M C 5000 45 1 Holmes
Bailey M B 0 0 0 Grey
Chin F A 3000 20 0 West
Dewitt M B 1000 35 3 Grey
Earhart F C 2000 95 1 Holmes
Fein F C 1000 15 0 West
Groff M C 4000 0 3 West
Hill F B 5000 10 2 Holmes
Koch F C 0 0 1 West
Liu F A 0 10 2 Grey
Majors M C 2000 0 2 Grey
Studente
Esempio
Campi non sensibili: Nome, Dormitorio

Campi sensibili: Aiuto, Multe, Droghe

Campi parzialmente sensibili: Sesso, Razza
Dati sensibili
Sensibili per Contenuto: Il valore dellattributo
sensibile
es. localit di postazioni missilistiche
Sensibili per Provenienza: la fonte dei dati pu
necessitare di riservatezza
es. messaggi di un informatore la cui identit segreta
verrebbe compromessa se i dati venissero divulgati
Dichiarati sensibili: lamministratore ha dichiarato
che i dati sono sensibili
es. donatore anonimo
Dati sensibili
Parti sensibili: attributo o record.
Un intero record o solo un certo attributo possono
risultare sensibili
es. campo stipendio, record che descrive una missione
segreta

Sensibili in relazione a informazioni divulgate in
precedenza:
Alcuni dati diventano sensibili in funzione di altri dati
es. la latitudine di una postazione segreta diventa
sensibile se si conosce anche la longitudine

Come proteggere i dati sensibili?
Decidere come divulgare i dati sensibili pu non
essere semplice

Si possono ottenere informazioni anche se i dati
sensibili non vengono mostrati

A volte anche alcune caratteristiche dei dati
devono essere considerati sensibili


Esempio
La seguente query non
mostra il valore
dellattributo droghe
ma tutti coloro presenti
nel risultato fanno uso di
droghe
Pu essere necessario
proteggere un valore
sensibile anche se questo
non viene mostrato in
modo esplicito
Cognome Sesso Razza Aiuto Multe Droghe Dormitorio
SELECT Cognome, Dormitorio
FROM Studente
WHERE Droghe>0
Studente
Tipi di divulgazione
Dati esatti:
Divulgazione del valore esatto di un dato sensibile

La divulgazione potrebbe avvenire per una
richiesta esplicita
Oppure i dati sensibili potrebbero essere restituiti
insieme ad altri dati non sensibili
Oppure il sistema potrebbe restituire i dati
sensibili per errore
Tipi di divulgazione
Limiti:
Indicazione che un valore sensibile compreso tra
due valori L e H

In questo caso con una ricerca dicotomica si
potrebbe ottenere un valore molto prossimo a
quello esatto
In alcuni casi semplicemente sapere che un valore
al di sopra (o al di sotto) di un certo limite
rappresenta una violazione della sicurezza
Tipi di divulgazione
Risultato negativo:
A volte si pu ottenere un informazione sapendo
che il valore cercato non pari ad un certo valore

Ad es. se sappiamo che il numero di condanne
penali di una certa persona non zero sappiamo
che la persona in questione stata condannata
(non sappiamo quante volte, ma )

Tipi di divulgazione
Esistenza:
A volte la sola esistenza di un attributo sensibile

Ad es. un responsabile del personale potrebbe
desiderare che non si sappia che la durata delle
interurbane dei dipendenti viene monitorata
Quindi la scoperta del campo interurbane in una
tabella con i dati del personale rivelerebbe dati
sensibili

Tipi di divulgazione
Valore probabile:
A volte si pu determinare la probabilit di un certo
evento

Vogliamo sapere se Tizio iscritto al partito X
Facciamo due query:
Quante persone risiedono allindirizzo ABC (indirizzo di
Tizio)? Risposta: 4
Quante persone risiedono allindirizzo ABC e sono iscritte al
partito X? Risposta: 1
Abbiamo il 25% di probabilit che Tizio sia iscritto al partito X

Protezione dei dati sensibili
Per aumentare la protezione dei dati sensibili
si potrebbe pensare di usare politiche sempre
pi restrittive in maniera da proteggere meglio
i dati

Ad esempio si potrebbe pensare di rifiutare
qualunque query che faccia riferimento ad un
campo sensibile
Questo per limiterebbe anche le interrogazioni
legittime

Protezione dei dati sensibili
Abbiamo due esigenze contrastanti:
Nascondere i dati per evitare di fornire dati
sensibili (Sicurezza)

Divulgare i dati non sensibili quanto pi possibile
per consentire lutilizzo corretto dei dati da parte
delle persone autorizzate (Precisione)

Sicurezza contro Precisione
Nascosto-non
divulgato
Non pu essere
dedotto dalle
query
Pu essere
dedotto dalle
query
Divulgato
liberamente
Rivelare per massima
precisione
Nascondere per
massima sicurezza
Inferenza
Inferenza
Linferenza un metodo per dedurre o
derivare dati sensibili da dati non sensibili

Riconsideriamo lesempio del database sugli
studenti e consideriamo sensibili i campi
Aiuto, Multe e Droghe
Esempio
Cognome Sesso Razza Aiuto Multe Droghe Dormitorio
Adams M C 5000 45 1 Holmes
Bailey M B 0 0 0 Grey
Chin F A 3000 20 0 West
Dewitt M B 1000 35 3 Grey
Earhart F C 2000 95 1 Holmes
Fein F C 1000 15 0 West
Groff M C 4000 0 3 West
Hill F B 5000 10 2 Holmes
Koch F C 0 0 1 West
Liu F A 0 10 2 Grey
Majors M C 2000 0 2 Grey
Studente
Attacco diretto
La seguente query rappresenta un tentativo
diretto di accedere ad un dato sensibile



Tale query potrebbe essere rifiutata dal DB perch
le tuple del risultato sono quelle con uno specifico
valore su un attributo sensibile

SELECT Cognome
FROM Studente
WHERE Sesso=M AND Droghe=1
Attacco diretto
La seguente query meno ovvia:




Apparentemente la query non seleziona solo tuple
con uno specifico valore su un campo sensibile
In realt la seconda e la terza condizione non sono
mai soddisfatte
SELECT Cognome
FROM Studente
WHERE (Sesso=M AND Droghe=1) OR
(SessoM AND SessoF) OR
(Dormitorio = Ayres)
Attacco diretto
La seguente query meno ovvia:




Per capirlo il DBMS dovrebbe capire che ci sono
due soli possibili valori per Sesso
E che non c alcuna tupla con valore di
Dormitorio pari Ayres
SELECT Cognome
FROM Studente
WHERE (Sesso=M AND Droghe=1) OR
(SessoM AND SessoF) OR
(Dormitorio = Ayres)
Attacco diretto
Una regola a volte utilizzata per decidere se
riportare i dati di una query quella di n
elementi sul k percento:

I risultati non vanno divulgati se un piccolo
numero di elementi costituisce pi del k% del
risultato

Nellesempio precedente una sola persona
costituiva il 100% del risultato
Attacco indiretto
Alcune organizzazioni che detengono dati
sensibili, divulgano soltanto dati statistici

Dati ottenuti come somme medie e conteggi

Lattacco indiretto cerca di dedurre un dato
sensibile sulla base di uno o pi dati statistici
intermedi
Attacco indiretto: Somma
La seguente query sembra innocua poich
restituisce soltanto valori aggregati:



Vediamo per il risultato

SELECT Sesso, Dormitorio, SUM(Aiuto)
FROM Studente
GROUP BY Sesso, Dormitorio
Attacco indiretto: Somma





Il risultato ci rivela che nessuna donna nel
dormitorio Grey riceve aiuti finanziari
Divulgazione di tipo risultato negativo
Sesso Dormitorio SUM(Aiuto)
M Holmes 5000
M Grey 3000
M West 4000
F Holmes 7000
F Grey 0
F West 4000
Attacco indiretto: Conteggio
Il conteggio pu essere combinato con la
somma per produrre risultati ancora pi
rivelatori:



SELECT Sesso, Dormitorio, COUNT(*)
FROM Studente
GROUP BY Sesso, Dormitorio
Attacco indiretto: Conteggio





Questo risultato combinato con il precedente ci
dice che i due uomini nei dormitori Holmes e West
ricevono un aiuto finanziario rispettivamente di
5000 e 4000
Sesso Dormitorio COUNT(*)
M Holmes 1
M Grey 3
M West 1
F Holmes 2
F Grey 1
F West 3
Attacco indiretto: Media
La media pu permettere di ottenere informazioni
esatte se utilizzata in combinazione con il
conteggio
Se riesco ad ottenere la media su un insieme
formato da un solo elemento, riesco a conoscere il
valore esatto per quellelemento
Usata opportunamente permette anche di
aggirare eventuali controlli sulla numerosit
dellinsieme su cui viene calcolata
Attacco indiretto: Media
Supponiamo che la media non venga divulgata
se il numero di elementi su cui calcolata 1
SELECT AVG(Aiuto)
FROM Studente
WHERE Dormitorio=Holmes
AVG(Aiuto)
4000
SELECT AVG(Aiuto)
FROM Studente
WHERE Dormitorio=Holmes
AND Sesso=F
AVG(Aiuto)
3500
Attacco indiretto: Media
Supponiamo che la media non venga divulgata
se il numero di elementi su cui calcolata 1
SELECT COUNT(*)
FROM Studente
WHERE Dormitorio=Holmes
COUNT(*)
3
SELECT COUNT(*)
FROM Studente
WHERE Dormitorio=Holmes
AND Sesso=F
COUNT(*)
2
Attacco indiretto: Media
COUNT(*)
3
COUNT(*)
2
AVG(Aiuto)
4000
AVG(Aiuto)
3500
Aiuto finanziario medio Aiuto finanziario medio alle donne
Numero di persone Numero di donne
4000
3
3 2 1

a a a
3500
2
2 1

a a
5000
3
a
Aiuto finanziario dellunico uomo nel dormitorio Holmes
Attacchi di Tracker
Abbiamo visto che uno delle tecniche di
protezione dallinferenza consiste nel non
divulgare i dati se un piccolo numero di elementi
fornisce molta informazione

possibile aggirare questa limitazione effettuando
pi query lecite

La combinazione dei risultati delle query ci d
linformazione sensibile
Attacchi di Tracker: esempio
Consideriamo la seguente query
SELECT COUNT(*)
FROM Studente
WHERE Sesso=F AND Razza=C
AND Dormitorio=Holmes
Attacchi di Tracker: esempio
Cognome Sesso Razza Aiuto Multe Droghe Dormitorio
Adams M C 5000 45 1 Holmes
Bailey M B 0 0 0 Grey
Chin F A 3000 20 0 West
Dewitt M B 1000 35 3 Grey
Earhart F C 2000 95 1 Holmes
Fein F C 1000 15 0 West
Groff M C 4000 0 3 West
Hill F B 5000 10 2 Holmes
Koch F C 0 0 1 West
Liu F A 0 10 2 Grey
Majors M C 2000 0 2 Grey
Attacchi di Tracker: esempio
Il dato non viene divulgato in quanto
dominato da una sola tupla

Osserviamo per che il valore in questione pu
essere calcolato contando
tutte le donne che non sono di razza C
o che non risiedono nel dormitorio Holmes
Attacchi di Tracker: esempio
SELECT COUNT(*)
FROM Studente
WHERE Sesso=F
AND (Razza <> C
OR Dormitorio <> Holmes)
SELECT COUNT(*)
FROM Studente
WHERE Sesso=F
COUNT(*)
6
COUNT(*)
5
Vulnerabilit del sistema lineare
Lattacco di tracker un caso specifico di una
vulnerabilit pi generica in cui sfruttando
algebra, logica e un po di fortuna si riesce ad
ottenere tramite diverse query dei valori
protetti
Vulnerabilit del sistema lineare
Riconsideriamo lesempio di prima, la query protetta
del tipo:

q = COUNT((Sesso = F)(Razza = C)(Dormitorio = Holmes))

in base allalgebra riscriviamo la query come:
q = COUNT(Sesso = F)
COUNT((Sesso = F)
((Razza = C) (Dormitorio = Holmes)))

in pratica q = c1 riscritta come q = c2-c3
Vulnerabilit del sistema lineare
Pi in generale potremmo avere
q
1
=c
1
+c
2
+c
3
+c
4
+c
5
q
2
=c
1
+c
2
+c
4
q
3
=c
3
+c
4
q
4
=c
4
+c
5
q
5
=c
2
+c
5
Nessuna delle query rivela apertamente uno dei
valori c
i
Risolvendo il sistema possiamo per conoscerli
tutti
Protezione dallinferenza
Esistono alcune tecniche per combattere
linferenza:
Analisi delle query
Soppressione: valori sensibili non forniti
Occultamento: la risposta vicina ma non
corrisponde esattamente al valore effettivo
Soppressione e occultamento
Un esempio di soppressione la gi citata
regola n elementi sul k percento
Alcune considerazioni:
Pu essere necessario sopprimere altri dati per
evitare che quelli sensibili siano ottenibili per
differenza
Esempio
Holmes Grey West Totale
M 1 3 1 5
F 2 1 3 6
Totale 3 4 4 11
Numero di residenti per sesso e dormitorio
Esempio
Holmes Grey West Totale
M 1 3 1 5
F 2 1 3 6
Totale 3 4 4 11
Numero di residenti per sesso e dormitorio
Esempio
Holmes Grey West Totale
M - 3 - 5
F 2 - 3 6
Totale 3 4 4 11
Numero di residenti per sesso e dormitorio
Attenzione: i valori soppressi possono essere dedotti per differenza
Risultati combinati
Per evitare di divulgare dati sensibili
possibile combinare pi righe o colonne
Uso di droghe
0 1 2 3
M 1 1 1 2
F 2 2 2 0
Numero di studenti per sesso e uso di droghe
Risultati combinati
Per evitare di divulgare dati sensibili
possibile combinare pi righe o colonne
Uso di droghe
0 o 1 2 o 3
M 2 3
F 4 2
Numero di studenti per sesso e uso di droghe
Risultati combinati
Analogamente risultati relativi agli aiuti
finanziari potrebbero essere mostrati per
intervalli: 0-1999, 2000-3999, 4000 e oltre
Campione casuale
La query viene effettuata su un campione
casuale dei dati
Il campione deve essere abbastanza ampio da
rappresentare lintera popolazione
In questo modo i dati sono rappresentativi
dellintera popolazione ma riducono la possibilit
di attacchi statistici
Perturbazione casuale dei dati
A volte pu essere utile perturbare i valori del
DB con un piccolo errore.
Per ogni x
i
che rappresenta il valore vero
dellattributo i
si pu generare un piccolo errore e
i
e aggiungerlo
ad x
i
per calcolare dati statistici
Valori aggregati quali la media o la somma
produrranno valori vicini a quelli veri ma non
esatti
Inferenza: commenti
Le varie soluzioni che abbiamo visto tendono
a proteggere un DB dal problema
dellinferenza
Al tempo stesso per limitano anche le
informazioni fornite agli utenti che intendano
fare un uso legittimo dei dati
Aggregazione
Un particolare tipo di inferenza e quello
dellaggregazione
Per aggregazione si intende lindividuazione di
dati sensibili mettendo insieme dati non
sensibili
Es: il nome di un impiegato ed il suo stipendio
nessuno dei due dati sensibile di per s, ma lo sono se
messi insieme
Aggregazione
Evitare laggregazione difficile perch bisogna
tenere conto delle informazioni gi in possesso
dellutente
Se un utente conosce il nome di un dipendente
non devo comunicargli il salario e viceversa
Tenere traccia delle informazioni in possesso di
ciascun utente pu essere proibitivo
Inoltre utenti diversi potrebbero condividere le
informazioni in loro possesso
ESERCITAZIONE SULLINFERENZA
Esercizio
Con riferimento alla tabella dipendenti, in
allegato, trovare lo stipendio di Mister X con un
attacco indiretto di tipo media.
Si hanno a disposizione le seguenti informazioni:
a) Mister X un uomo con pi di 30 anni e non di
Roma;
b) i rimanenti dipendenti maschi con pi di 30 anni
sono tutti romani;
c) nessun dipendente donna di Roma.
Esercizio
Si tenga conto, inoltre, che viene applicata la
seguente politica di protezione dei dati sensibili:
1. il campo stipendio non pu essere divulgato
direttamente e non pu essere utilizzato come
criterio di filtraggio;
2. i criteri di filtraggio possono essere eta, sesso, e
citta;
3. non possono essere utilizzati pi di due criteri di
filtraggio in una singola interrogazione;
4. consentita la divulgazione di medie e conteggi a
patto che si riferiscano ad almeno tre tuple.
Tabella dipendenti
cf cognome nome eta citta sesso ruolo stipendio
Rossi Mario 36 Roma M impiegato 1200
Neri Luigi 39 Roma M ricercatore 1700
Bianchi Mario 35 Roma M ricercatore 1400
Gialli Federica 36 Firenze F impiegata 1200
Verdi Anna 38 Milano F impiegata 1300
Rossi Claudia 31 Verona F segretaria 1000
Pieri Alessandro 37 Torino M dirigente 4000
Belli Ilaria 33 Venezia F commercialista 2000
Bianchini Francesca 32 Napoli F dirigente 3000
Brutti Elena 32 Perugia F impiegata 1200


Svolgimento strategia base
Una possibile strategia di attacco prevede
lindividuazione di due insiemi di tuple U e V tali
che:
I. ciascun insieme contiene singolarmente almeno tre
tuple (vincolo 4.);
II. ciascun insieme deve poter essere individuato
usando al pi due condizioni di filtraggio (vincolo 3.)
basate sugli attributi eta, sesso, e citta (vincolo 2.)
III. la differenza insiemistica U \ V deve contenere
soltanto mister X; ovvero {Mister X} = U \ V
IV. linsieme V deve essere un sottoinsieme di U: V U
Svolgimento strategia base
Una volta individuati due insiemi U e V,
soddisfacenti le condizioni I, II, III e IV,
ponendo:
m
U
= media degli stipendi dei dipendenti in U;
c
U
= numero dei dipendenti in U;
m
V
= media degli stipendi dei dipendenti in V;
c
V
= numero dei dipendenti in V;
si ottiene che
stipendio
Mister X
= m
U
c
U
m
V
c
V

Svolgimento individuazione di U e V
Si considerino i seguenti insiemi:
A: insieme dei dipendenti di sesso maschile (sesso
= M);
B: insieme dei dipendenti con pi di 30 anni (eta >
30);
C: insieme dei dipendenti romani (citta = Roma);
si osservi che dalla (a) e dalla (b) risulta che
{Mister X} = (A B) \ C = (A B) \ (B C)
mentre dalla (c) si ha che C A

Svolgimento individuazione di U e V
pertanto risulta che
{Mister X} = (A B) \ (B C), e
(B C) (A B)
quindi gli insiemi U e V sono:
U = A B
V = B C



Svolgimento query SQL
Individuazione di m
U
e c
U
:
SELECT avg(stipendi), count(stipendi) FROM
dipendenti WHERE sesso = M AND eta > 30;

Individuazione di m
V
e c
V
:
SELECT avg(stipendi), count(stipendi) FROM
dipendenti WHERE eta > 30 AND citta = Roma;
Bibliografia
[PFL08] C. P. Pfleeger, S. L. Pfleeger. Sicurezza
in Informatica. Pearson, Prentice Hall.
[STA07] W. Stallings. Sicurezza delle reti.
Pearson, Prentice Hall.
[Wiki-it] http://it.wikipedia.org/wiki/
[Wiki-en] http://en.wikipedia.org/wiki/
[ISECOM] Institute for Security and Open
Methodologies
ComputerNetworks
CircuitandPacketSwitching
Circuitswitching
Legacyphonenetwork
Singleroutethrough
sequenceofhardware
devicesestablishedwhen
twonodesstart
communication
Datasentalongroute
Routemaintaineduntil
communicationends
Packetswitching
Internet
Datasplitintopackets
Packetstransported
independentlythrough
network
Eachpackethandledona
besteffortsbasis
Packetsmayfollow
differentroutes
PacketSwitching
A
C
B
D
F
D
3 2 1
PacketSwitching
A
C
B
D
F
D
3 2
1
PacketSwitching
A
C
B
D
F
D
3
2 1
PacketSwitching
A
C
B
D
F
D
3 2 1
Protocols
Aprotocoldefinestherulesforcommunicationbetween
computers
Protocolsarebroadlyclassifiedasconnectionlessand
connectionoriented
Connectionlessprotocol
Sendsdataoutassoonasthereisenoughdatatobetransmitted
E.g.,userdatagramprotocol(UDP)
Connectionorientedprotocol
Providesareliableconnectionstreambetweentwonodes
Consistsofsetup,transmission,andteardownphases
Createsvirtualcircuitswitchednetwork
E.g.,transmissioncontrolprotocol(TCP)
Encapsulation
Apackettypicallyconsistsof
Controlinformationforaddressingthepacket:headerandfooter
Data:payload
AnetworkprotocolN1canusetheservicesofanother
networkprotocolN2
Apacketp1ofN1isencapsulatedintoapacketp2ofN2
Thepayloadofp2isp1
Thecontrolinformationofp2isderivedfromthatofp1
Header
Payload
Footer Header Payload Footer
NetworkLayers
Networkmodelstypicallyuseastackoflayers
Higherlayersusetheservicesoflowerlayersvia
encapsulation
Alayercanbeimplementedinhardwareorsoftware
Thebottommostlayermustbeinhardware
Anetworkdevicemayimplementseverallayers
Acommunicationchannelbetweentwonodesis
establishedforeachlayer
Actualchannelatthebottomlayer
Virtualchannelathigherlayers
InternetLayers
Application
Transport
Network
Link
Application
Transport
Network
Link
Network
Link
Network
Link
Ethernet
Fiber
Optics
Wi-Fi
Physical Layer
IntermediateLayers
Linklayer
Localareanetwork:Ethernet,WiFi,opticalfiber
48bitmediaaccesscontrol(MAC)addresses
Packetscalledframes
Networklayer
Internetwidecommunication
Bestefforts
32bitinternetprotocol(IP)addressesinIPv4
128bitIPaddressesinIPv6
Transportlayer
16bitaddresses(ports)forclassesofapplications
Connectionorientedtransmissionlayerprotocol(TCP)
Connectionlessuserdatagramprotocol(UDP)
InternetPacketEncapsulation
Application
Packet
TCP Data
TCP
Header
IP
Header
Frame
Header
Frame
Footer
Link Layer
Network Layer
Transport Layer
IP Data
Frame Data
Application Layer
InternetPacketEncapsulation
Datalinkframe
IPpacket
TCPorUDPpacket
Applicationpacket
D
a
t
a

l
i
n
k

h
e
a
d
e
r

I
P

h
e
a
d
e
r

T
C
P

o
r

U
D
P

h
e
a
d
e
r

A
p
p
l
i
c
a
t
i
o
n

p
a
c
k
e
t

D
a
t
a

l
i
n
k

f
o
o
t
e
r

TheOSIModel
TheOSI(OpenSystem
Interconnect)Reference
Modelisanetwork
modelconsistingof
sevenlayers
Createdin1983,OSIis
promotedbythe
InternationalStandard
Organization(ISO)
NetworkInterfaces
Networkinterface:deviceconnectingacomputertoa
network
Ethernetcard
WiFiadapter
Acomputermayhavemultiplenetworkinterfaces
Packetstransmittedbetweennetworkinterfaces
Mostlocalareanetworks,(includingEthernetandWiFi)
broadcastframes
Inregularmode,eachnetworkinterfacegetstheframes
intendedforit
Trafficsniffingcanbeaccomplishedbyconfiguringthe
networkinterfacetoreadallframes(promiscuousmode)
MACAddresses
MostnetworkinterfacescomewithapredefinedMACaddress
AMACaddressisa48bitnumberusuallyrepresentedinhex
E.g.,001A92D4BF86
ThefirstthreeoctetsofanyMACaddressareIEEEassigned
OrganizationallyUniqueIdentifiers
E.g.,Cisco001AA1,DLink001B11,ASUSTek001A92
Thenextthreecanbeassignedbyorganizationsastheyplease,
withuniquenessbeingtheonlyconstraint
OrganizationscanutilizeMACaddressestoidentifycomputers
ontheirnetwork
MACaddresscanbereconfiguredbynetworkinterfacedriver
software
Switch
Aswitchisacommon
networkdevice
Operatesatthelinklayer
Hasmultipleports,each
connectedtoacomputer
Operationofaswitch
LearntheMACaddressof
eachcomputerconnectedtoit
Forwardframesonlytothe
destinationcomputer
CombiningSwitches
Switchescanbearranged
intoatree
EachportlearnstheMAC
addressesofthemachines
inthesegment(subtree)
connectedtoit
Fragmentstounknown
MACaddressesare
broadcast
FramestoMACaddresses
inthesamesegmentasthe
senderareignored
MACAddressFiltering
Aswitchcanbeconfiguredtoprovideserviceonlyto
machineswithspecificMACaddresses
AllowedMACaddressesneedtoberegisteredwitha
networkadministrator
AMACspoofingattackimpersonatesanothermachine
FindoutMACaddressoftargetmachine
ReconfigureMACaddressofroguemachine
Turnofforunplugtargetmachine
Countermeasures
Blockportofswitchwhenmachineisturnedoffor
unplugged
DisableduplicateMACaddresses

ViewingandChangingMACAddresses
ViewingtheMACaddressesoftheinterfacesofamachine
Linux:ifconfig
Windows:ipconfig/all
ChangingaMACaddressinLinux
Stopthenetworkingservice:/etc/init.d/networkstop
ChangetheMACaddress:ifconfigeth0hwether<MACaddress>
Startthenetworkingservice:/etc/init.d/networkstart
ChangingaMACaddressinWindows
OpentheNetworkConnectionsapplet
Accessthepropertiesforthenetworkinterface
ClickConfigure
Intheadvancedtab,changethenetworkaddresstothedesiredvalue
ChangingaMACaddressrequiresadministratorprivileges
ARP
Theaddressresolutionprotocol(ARP)connectsthenetworklayertothedata
layerbyconvertingIPaddressestoMACaddresses
ARPworksbybroadcastingrequestsandcachingresponsesforfutureuse
Theprotocolbeginswithacomputerbroadcastingamessageoftheform
whohas<IPaddress1>tell<IPaddress2>
Whenthemachinewith<IPaddress1>oranARPserverreceivesthis
message,itsbroadcaststheresponse
<IPaddress1>is<MACaddress>
TherequestorsIPaddress<IPaddress2>iscontainedinthelinkheader
TheLinuxandWindowscommandarpadisplaystheARPtable
I nt er net Addr ess Physi cal Addr ess Type
128. 148. 31. 1 00- 00- 0c- 07- ac- 00 dynami c
128. 148. 31. 15 00- 0c- 76- b2- d7- 1d dynami c
128. 148. 31. 71 00- 0c- 76- b2- d0- d2 dynami c
128. 148. 31. 75 00- 0c- 76- b2- d7- 1d dynami c
128. 148. 31. 102 00- 22- 0c- a3- e4- 00 dynami c
128. 148. 31. 137 00- 1d- 92- b6- f 1- a9 dynami c
ARPSpoofing
TheARPtableisupdatedwheneveranARP
responseisreceived
Requestsarenottracked
ARPannouncementsarenotauthenticated
Machinestrusteachother
Aroguemachinecanspoofothermachines
ARPPoisoning(ARPSpoofing)
Accordingtothestandard,almostallARP
implementationsarestateless
Anarpcacheupdateseverytimethatitreceivesan
arpreplyevenifitdidnotsendanyarprequest!
Itispossibletopoisonanarpcachebysending
gratuitousarpreplies
Usingstaticentriessolvestheproblembutitis
almostimpossibletomanage!
ARPCaches
IP: 192.168.1.1
MAC: 00:11:22:33:44:01
IP: 192.168.1.105
MAC: 00:11:22:33:44:02
ARPCache
192.168.1.105 00:11:22:33:44:02
ARPCache
192.168.1.1 00:11:22:33:44:01
Data
192.168.1.1isat
00:11:22:33:44:01
192.168.1.105isat
00:11:22:33:44:02
PoisonedARPCaches
192.168.1.105isat
00:11:22:33:44:03
PoisonedARPCache
192.168.1.1 00:11:22:33:44:03
PoisonedARPCache
192.168.1.105 00:11:22:33:44:03
Data Data
192.168.1.1isat
00:11:22:33:44:03
192.168.1.1
00:11:22:33:44:01
192.168.1.105
00:11:22:33:44:02
192.168.1.106
00:11:22:33:44:03
Networks:IPandTCP
InternetProtocol
Connectionless
Eachpacketistransported
independentlyfromother
packets
Unreliable
Deliveryonabesteffortbasis
Noacknowledgments
Packetsmaybelost,reordered,
corrupted,orduplicated
IPpackets
EncapsulateTCPandUDP
packets
Encapsulatedintolinklayer
frames
Datalinkframe
IPpacket
TCPorUDPpacket
IPAddressesandPackets
IPaddresses
IPv4:32bitaddresses
IPv6:128bitaddresses
Addresssubdividedinto
network,subnet,andhost
E.g.,128.148.32.110
Broadcastaddresses
E.g.,128.148.32.255
Privatenetworks
notroutedoutsideofaLAN
10.0.0.0/8
172.16.0.0/12
192.168.0.0/16
IPheaderincludes
Sourceaddress
Destinationaddress
Packetlength(upto64KB)
Timetolive(upto255)
IPprotocolversion
Fragmentationinformation
Transportlayerprotocol
information(e.g.,TCP)
fragmentationinfo
source
destination
TTL prot.
length v
IPRouting
Arouterbridgestwoormorenetworks
Operatesatthenetworklayer
Maintainstablestoforwardpacketstothe
appropriatenetwork
Forwardingdecisionsbasedsolelyonthe
destinationaddress
Routingtable
MapsrangesofaddressestoLANsorother
gatewayrouters
InternetRoutes
InternetControlMessageProtocol(ICMP)
Usedfornetworktestinganddebugging
SimplemessagesencapsulatedinsingleIPpackets
Consideredanetworklayerprotocol
ToolsbasedonICMP
Ping:sendsseriesofechorequestmessagesand
providesstatisticsonroundtriptimesandpacketloss
Traceroute:sendsseriesICMPpacketswithincreasing
TTLvaluetodiscoverroutes
ICMPAttacks
Pingofdeath
ICMPspecifiesmessagesmustfitasingleIP
packet(64KB)
Sendapingpacketthatexceedsmaximumsize
usingIPfragmentation
Reassembledpacketcausedseveraloperating
systemstocrashduetoabufferoverflow
Smurf
Pingabroadcastaddressusingaspoofedsource
address
SmurfAttack
Attacker
Victim
Amplifying
Network
echo
request
echo
response
echo
response
echo
response
IPVulnerabilities
Unencryptedtransmission
Eavesdroppingpossibleatanyintermediatehostduringrouting
Nosourceauthentication
Sendercanspoofsourceaddress,makingitdifficulttotracepacketbackto
attacker
Nointegritychecking
Entirepacket,headerandpayload,canbemodifiedwhileenrouteto
destination,enablingcontentforgeries,redirections,andmaninthemiddle
attacks
Nobandwidthconstraints
Largenumberofpacketscanbeinjectedintonetworktolaunchadenialof
serviceattack
Broadcastaddressesprovideadditionalleverage
DenialofServiceAttack
Sendlargenumberofpacketsto
hostprovidingservice
Slowsdownorcrasheshost
Oftenexecutedbybotnet
Attackpropagation
Startsatzombies
Travelsthroughtreeofinternet
routersrooted
Endsatvictim
IPsourcespoofing
Hidesattacker
Scattersreturntrafficfrom
victim
Source:
M.T. Goodrich, Probabalistic Packet
Marking for Large-Scale IP Traceback,
IEEE/ACM Transactions on Networking
16:1, 2008.
IPTraceback
Problem
Howtoidentifyleaves
ofDoSpropagationtree
Routersnexttoattacker
Issues
Therearemorethan
2Minternetrouters
Attackercanspoof
sourceaddress
Attackerknowsthat
tracebackisbeing
performed
Approaches
Filteringandtracing
(immediatereaction)
Messaging(additional
traffic)
Logging(additional
storage)
Probabilisticmarking
ProbabilisticPacketMarking
Method
Randominjectionofinformationintopacketheader
Changesseldomusedbits
Forwardroutinginformationtovictim
Redundancytosurvivepacketlosses
Benefits
Noadditionaltraffic
Norouterstorage
Nopacketsizeincrease
Can be performed online or offline
TransmissionControlProtocol
TCPisatransportlayerprotocolguaranteeingreliabledatatransfer,in
orderdeliveryofmessagesandtheabilitytodistinguishdatafor
multipleconcurrentapplicationsonthesamehost
Mostpopularapplicationprotocols,includingWWW,FTPandSSHare
builtontopofTCP
TCPtakesastreamof8bitbytedata,packagesitintoappropriately
sizedsegmentandcallsonIPtotransmitthesepackets
Deliveryorderismaintainedbymarkingeachpacketwithasequence
number
EverytimeTCPreceivesapacket,itsendsoutanACKtoindicate
successfulreceiptofthepacket.
TCPgenerallychecksdatatransmittedbycomparingachecksumofthe
datawithachecksumencodedinthepacket
Ports
TCPsupportsmultipleconcurrentapplicationsonthesameserver
Accomplishesthisbyhavingports,16bitnumbersidentifyingwhere
dataisdirected
TheTCPheaderincludesspaceforbothasourceandadestination
port,thusallowingTCPtoroutealldata
Inmostcases,bothTCPandUDPusethesameportnumbersforthe
sameapplications
Ports0through1023arereservedforusebyknownprotocols.
Ports1024through49151areknownasuserports,andshouldbe
usedbymostuserprogramsforlisteningtoconnectionsandthelike
Ports49152through65535areprivateportsusedfordynamic
allocationbysocketlibraries
TCPPacketFormat
BitOffset 03 47 815 1618 1931
0 SourcePort DestinationPort
32 SequenceNumber
64 AcknowledgmentNumber
96 Offset Reserved Flags WindowSize
128 Checksum UrgentPointer
160 Options
>=160 Payload
EstablishingTCPConnections
TCPconnectionsareestablishedthroughathreewayhandshake.
Theservergenerallyhasapassivelistener,waitingforaconnection
request
TheclientrequestsaconnectionbysendingoutaSYNpacket
TheserverrespondsbysendingaSYN/ACKpacket,indicatingan
acknowledgmentfortheconnection
TheclientrespondsbysendinganACKtotheserverthusestablishing
connection
SYN
Seq=x
SYNACK
Seq=y
Ack=x+1
ACK
Seq=x+1
SYNFlood
TypicallyDOSattack,thoughcanbecombinedwithotherattack
suchasTCPhijacking
RelyonsendingTCPconnectionrequestsfasterthantheservercan
processthem
Attackercreatesalargenumberofpacketswithspoofedsource
addressesandsettingtheSYNflagonthese
TheserverrespondswithaSYN/ACKforwhichitnevergetsa
response(waitsforabout3minuteseach)
Eventuallytheserverstopsacceptingconnectionrequests,thus
triggeringadenialofservice.
Canbesolvedinmultipleways
OneofthecommonwaytodothisistouseSYNcookies
TCPDataTransfer
Duringconnectioninitializationusingthethreewayhandshake,initial
sequencenumbersareexchanged
TheTCPheaderincludesa16bitchecksumofthedataandpartsof
theheader,includingthesourceanddestination
AcknowledgmentorlackthereofisusedbyTCPtokeeptrackof
networkcongestionandcontrolflowandsuch
TCPconnectionsarecleanlyterminatedwitha4wayhandshake
TheclientwhichwishestoterminatetheconnectionsendsaFIN
messagetotheotherclient
TheotherclientrespondsbysendinganACK
TheotherclientsendsaFIN
TheoriginalclientnowsendsanACK,andtheconnectionis
terminated
TCPDataTransferandTeardown
Data
seq=x
Ack
seq=x+1
Data
seq=y
Ack
seq=y+1
Client
Server
Client
Server
Fin seq=x
Ack seq=x+1
Fin seq=y
Ack seq=y+1
TCPCongestionControl
Duringthemid80sitwasdiscoveredthatuncontrolledTCPmessages
werecausinglargescalenetworkcongestion
TCPrespondedtocongestionbyretransmittinglostpackets,thus
makingtheproblemwasworse
WhatispredominantlyusedtodayisasystemwhereACKsareusedto
determinethemaximumnumberofpacketswhichshouldbesentout
MostTCPcongestionavoidancealgorithms,avoidcongestionby
modifyingacongestionwindow(cwnd)asmorecumulativeACKsare
received
Lostpacketsaretakentobeasignofnetworkcongestion
TCPbeginswithanextremelylowcwndandrapidlyincreasesthe
valueofthisvariabletoreachbottleneckcapacity
Atthispointitshiftstoacollisiondetectionalgorithmwhichslowly
probesthenetworkforadditionalbandwidth
TCPcongestioncontrolisagoodideaingeneralbutallowsforcertain
attacks.
OptimisticACKAttack
AnoptimisticACKattacktakesadvantageoftheTCPcongestion
control
ItbeginswithaclientsendingoutACKsfordatasegmentsit
hasntyetreceived
ThisfloodofoptimisticACKsmakestheserversTCPstack
believethatthereisalargeamountofbandwidthavailableand
thusincreasecwnd
ThisleadstotheattackerprovidingmoreoptimisticACKs,and
eventuallybandwidthusebeyondwhattheserverhasavailable
Thiscanalsobeplayedoutacrossmultipleservers,withenough
congestionthatacertainsectionofthenetworkisnolonger
reachable
Therearenopracticalsolutionstothisproblem
SessionHijacking
AlsocommonlyknownasTCPSessionHijacking
Asecurityattackoveraprotectednetwork
Attempttotakecontrolofanetworksession
Sessionsareserverkeepingstateofaclientsconnection
Serversneedtokeeptrackofmessagessentbetweenclient
andtheserverandtheirrespectiveactions
MostnetworksfollowtheTCP/IPprotocol
IPSpoofingisonetypeofhijackingonlargenetwork
IPSpoofing
IPSpoofingisanattemptbyanintrudertosendpackets
fromoneIPaddressthatappeartooriginateatanother
Iftheserverthinksitisreceivingmessagesfromthereal
sourceafterauthenticatingasession,itcould
inadvertentlybehavemaliciously
TherearetwobasicformsofIPSpoofing
BlindSpoofing
Attackfromanysource
NonBlindSpoofing
Attackfromthesamesubnet
BlindIPSpoofing
TheTCP/IPprotocolrequiresthatacknowledgementnumbersbesent
acrosssessions
Makessurethattheclientisgettingtheserverspacketsandviceversa
Needtohavetherightsequenceofacknowledgmentnumberstospoof
anIPidentity
NonBlindIPSpoofing
IPSpoofingwithoutinherentlyknowingtheacknowledgmentsequence
pattern
Doneonthesamesubnet
Useapacketsniffertoanalyzethesequencepattern
Packetsniffersinterceptnetworkpackets
Eventuallydecodesandanalyzesthepacketssentacrossthe
network
Determinetheacknowledgmentsequencepatternfromthe
packets
Sendmessagestoserverwithactualclient'sIPaddressandwith
validlysequencedacknowledgmentnumber
PacketSniffers(cont.)

http://www.rootshell.be/~dhar/downloads/Sniffers.pdf
PacketSniffers
Packetsniffersreadinformationtraversinganetwork
Packetsniffersinterceptnetworkpackets
Eventuallydecodesandanalyzesthepacketssentacrossthe
network
Canbeusedaslegitimatetoolstoanalyzeanetwork
Monitornetworkusage
Filternetworktraffic
Analyzenetworkproblems
Canalsobeusedmaliciously
Stealinformation(i.e.passwords,conversations,etc.)
Analyzenetworkinformationtoprepareanattack
Packetsnifferscanbeeithersoftwareorhardwarebased
Sniffersaredependentonnetworksetup
PacketSniffing(switches)
MorecommonspoofingmethodonswitchednetworksisARPsniffing
AnetworkswitchcontainsanAddressResolutionProtocol(ARP)cache
TheARPisatablethatmapsnetworkIPaddressestotheMACaddress
IfnomappingexistsforarequestedIPaddress,broadcastsarequesttoallnetworked
machines
ThemachinewiththataddressrespondsandismappedintheARP
Byreturningafalsereply,aspoofingtoolcanmaptheARPtoitselfinsteadoftheactual
clientandthusreceiveallpacketsfromtheservertotheclient
Thereversecanbedoneaswelltoredirecttheclientpacketsthroughthesniffer
Furthermore,theARPisstateless
Itwillacceptareplytoabroadcastevenifnobroadcasthasbeenmade
ThiswouldallowasniffertooverwritetheARPcacheentrywithit'sownaddress
ThisisknownaspoisoningtheARP
ByutilizinganARPcache,onecansetupapassivesnifferthatcanbeextremelyhard
todetect
DetectingSniffers
Sniffersarealmostalwayspassive
Theysimplycollectdata
Theydonotattemptentrytostealdata
Thiscanmakethemextremelyhardtodetect
Mostdetectionmethodsrequiresuspicionthatsniffingisoccurring
Thensomesortofpingofthesnifferisnecessary
Itshouldbeabroadcastthatwillcausearesponseonlyfromasniffer
AnothersolutiononswitchedhubsisARPwatch
AnARPwatchmonitorstheARPcacheforduplicateentriesofamachine
Ifsuchduplicatesappear,raiseanalarm
Problem:falsealarms
Specifically,DHCPnetworkscanhavemultipleentiresforasingle
machine
StoppingPacketSniffing
Thebestwayistoencryptpacketssecurely
Snifferscancapturethepackets,buttheyaremeaningless
Capturingapacketisuselessifitjustreadsasgarbage
SSHisalsoamuchmoresecuremethodofconnection
Private/Publickeypairsmakessniffingvirtuallyuseless
Onswitchednetworks,almostallattackswillbeviaARPspoofing
Addmachinestoapermanentstoreinthecache
Thisstorecannotbemodifiedviaabroadcastreply
Thus,asniffercannotredirectanaddresstoitself
Thebestsecurityistonotletthemininthefirstplace
Sniffersneedtobeonyoursubnetinaswitchedhubinthefirstplace
Allsniffersneedtosomehowaccessrootatsomepointtostart
themselvesup
PortKnocking
Broadlyportknockingistheactofattemptingtomake
connectionstoblockedportsinacertainorderinan
attempttoopenaport
Portknockingisfairlysecureagainstbruteforceattacks
sincethereare65536
k
combinations,wherekisthe
numberofportsknocked
Portknockinghoweverifverysusceptibletoreplay
attacks.Someonecantheoreticallyrecordportknocking
attemptsandrepeatthosetogetthesameopenportagain
Onegoodwayofprotectingagainstreplayattackswould
beatimedependentknocksequence.
UserDatagramProtocol
UDPisastateless,unreliabledatagramprotocolbuiltontopofIP,thatisitlieson
level4
Itdoesnotprovidedeliveryguarantees,oracknowledgments,butissignificantly
faster
Canhoweverdistinguishdataformultipleconcurrentapplicationsonasingle
host.
AlackofreliabilityimpliesapplicationsusingUDPmustbereadytoacceptafair
amountoferrorpackagesanddataloss.Someapplicationlevelprotocolssuchas
TFTPbuildreliabilityontopofUDP.
MostapplicationsusedonUDPwillsufferiftheyhavereliability.VoIP,
StreamingVideoandStreamingAudioalluseUDP.
UDPdoesnotcomewithbuiltincongestionprotection,sowhileUDPdoesnot
sufferfromtheproblemsassociatedwithoptimisticACK,therearecaseswhere
highrateUDPnetworkaccesswillcausecongestion.
NetworkAddressTranslation
Introducedintheearly90stoalleviateIPv4addressspace
congestion
Reliesontranslatingaddressesinaninternalnetwork,toan
externaladdressthatisusedforcommunicationtoandfromthe
outsideworld
NATisusuallyimplementedbyplacingarouterinbetweenthe
internalprivatenetworkandthepublicnetwork.
SavesIPaddressspacesincenoteveryterminalneedsaglobally
uniqueIPaddress,onlyanorganizationallyuniqueone
WhileNATshouldreallybetransparenttoallhighlevelservices,
thisissadlynottruebecausealotofhighlevelcommunication
usesthingsonIP
Translation
Routerhasapoolofprivateaddresses
192.168.10.0/24
2/17/2010 Networks: IP and TCP 47
router (nat)
global realm private realm
192.168.10.237
s=192.168.10.237
d=128.148.36. 11
s=128.148.36.179
d=128.148.36.11
s=128.148.36.11
d=128.148.36.179
s=128.148.36.11
d=192.168.10.237
128.148.36.11
IPPacketModifications
source IP address
type of service total length
ident
header checksum
destination IP address
options
data
vers len
flags fragment offset
time to live
proto
padding
0 31
Modified
on input
Modified
on output
????
Computed
Firewalls, Tunnels, and
Network Intrusion Detection
1
Firewalls
A firewall is an integrated collection of security
measures designed to prevent unauthorized
electronic access to a networked computer system.
A network firewall is similar to firewalls in building
construction, because in both cases they are
intended to isolate one "network" or "compartment"
from another.
2
Firewall Policies
To protect private networks and individual machines
from the dangers of the greater Internet, a firewall can
be employed to filter incoming or outgoing traffic based
on a predefined set of rules called firewall policies.
3
Trusted internal network
Firewall policies
Untrusted
Internet et
p
Policy Actions
Packets flowing through a firewall can have one of three outcomes:
Accepted: permitted through the firewall
Dropped: not allowed through with no indication of failure
Rejected: not allowed through, accompanied by an attempt to inform
the source that the packet was rejected
Policies used by the firewall to handle packets are based on several
properties of the packets being inspected, including the protocol used,
such as:
TCP or UDP
the source and destination IP addresses
the source and destination ports
the application-level payload of the packet (e.g., whether it contains a
virus).
42
1
Blacklists and White Lists
There are two fundamental approaches to creating firewall policies (or
rulesets) to effectively minimize vulnerability to the outside world while
maintaining the desired functionality for the machines in the trusted
internal network (or individual computer).
Blacklist approach
All packets are allowed through except those that fit the rules defined
specifically in a blacklist.
This type of configuration is more flexible in ensuring that service to
the internal network is not disrupted by the firewall, but is nave from
a security perspective in that it assumes the network administrator
can enumerate all of the properties of malicious traffic.
Whitelist approach
A safer approach to defining a firewall ruleset is the default-deny
policy, in which packets are dropped or rejected unless they are
specifically allowed by the firewall.
5
Firewall Types
packet filters (stateless)
If a packet matches the packet filter's set of rules, the
packet filter will drop or accept it
"stateful" filters
it maintains records of all connections passing through it and can
determine if a packet is either the start of a new connection, a part of
an existing connection, or is an invalid packet.
application layer
It works like a proxy it can understand certain applications and
protocols.
It may inspect the contents of the traffic, blocking what it views as
inappropriate content (i.e. websites, viruses, vulnerabilities, ...)
62
1
Stateless Firewalls
A stateless firewall doesnt maintain any remembered context
(or state) with respect to the packets it is processing. Instead,
it treats each packet attempting to travel through it in isolation
without considering packets that it has processed previously.
7
Trusted internal
network
SYN
Seq = x
Port=80
SYN-ACK
Seq = y
Ack = x + 1
ACK
Seq = x + 1
Ack = y + 1
Allow outbound SYN packets, destination port=80
Allow inbound SYN-ACK packets, source port=80
Client
Server
Firewall
Stateless Restrictions
Stateless firewalls may have to be fairly
restrictive in order to prevent most attacks.
8
Trusted internal
network
SYN
Seq = y
Port=80
Allow outbound SYN packets, destination port=80
Drop inbound SYN packets,
Allow inbound SYN-ACK packets, source port=80
Client
Attacker (blocked)
Firewall
2
1
Statefull Firewalls
Stateful firewalls can tell when packets are part
of legitimate sessions originating within a trusted
network.
Stateful firewalls maintain tables containing
information on each active connection, including
the IP addresses, ports, and sequence numbers of
packets.
Using these tables, stateful firewalls can allow
only inbound TCP packets that are in response to
a connection initiated from within the internal
network.
9
Statefull Firewall Example
Allow only requested TCP connections:
10
Trusted internal
network
SYN
Seq = x
Port=80
SYN-ACK
Seq = y
Ack = x + 1
ACK
Seq = x + 1
Ack = y + 1
Allow outbound TCP sessions,
destination port=80
Client
SYN-ACK
Seq = y
Port=80
Attacker
(blocked)
Established TCP session:
(128.34.78.55, 76.120.54.101)
128.34.78.55
76.120.54.101
Firewall state table
Server
Firewall
2
1
Tunnels
The contents of TCP packets are not normally
encrypted, so if someone is eavesdropping on a
TCP connection, he can often see the complete
contents of the payloads in this session.
One way to prevent such eavesdropping without
changing the software performing the
communication is to use a tunneling protocol.
In such a protocol, the communication between a
client and server is automatically encrypted, so
that useful eavesdropping is infeasible.
11
Tunneling Prevents Eavesdropping
Packets sent over the Internet are automatically encrypted.
12
Server
Client
Tunneling protocol
(does end-to-end encryption and decryption)
Payloads are encrypted here
TCP/IP TCP/IP
Untrusted
Internet
2
1
Secure Shell (SSH)
A secure interactive command session:
1. The client connects to the server via a TCP session.
2. The client and server exchange information on administrative details, such as
supported encryption methods and their protocol version, each choosing a set of
protocols that the other supports.
3. The client and server initiate a secret-key exchange to establish a shared secret
session key, which is used to encrypt their communication (but not for
authentication). This session key is used in conjunction with a chosen block
cipher (typically AES, 3DES) to encrypt all further communications.
4. The server sends the client a list of acceptable forms of authentication, which
the client will try in sequence. The most common mechanism is to use a
password or the following public-key authentication method:
a) If public-key authentication is the selected mechanism, the client sends the server its public key.
b) The server then checks if this key is stored in its list of authorized keys. If so, the server encrypts a
challenge using the clients public key and sends it to the client.
c) The client decrypts the challenge with its private key and responds to the server, proving its
identity.
5. Once authentication has been successfully completed, the server lets the client
access appropriate resources, such as a command prompt.
13
IPSec
IPSec defines a set of protocols to provide
confidentiality and authenticity for IP packets
Each protocol can operate in one of two modes,
transport mode or tunnel mode.
In transport mode, additional IPsec header
information is inserted before the data of the original
packet, and only the payload of the packet is
encrypted or authenticated.
In tunnel mode, a new packet is constructed with
IPsec header information, and the entire original
packet, including its header, is encapsulated as the
payload of the new packet.
1
Virtual Private Networking (VPN)
Virtual private networking (VPN) is a technology
that allows private networks to be safely
extended over long physical distances by making
use of a public network, such as the Internet, as a
means of transport.
VPN provides guarantees of data confidentiality,
integrity, and authentication, despite the use of
an untrusted network for transmission.
There are two primary types of VPNs, remote
access VPN and site-to-site VPN.
15
Types of VPNs
Remote access VPNs allow authorized clients to access a
private network that is referred to as an intranet.
For example, an organization may wish to allow employees
access to the company network remotely but make it appear as
though they are local to their system and even the Internet
itself.
To accomplish this, the organization sets up a VPN endpoint,
known as a network access server, or NAS. Clients typically
install VPN client software on their machines, which handle
negotiating a connection to the NAS and facilitating
communication.
Site-to-site VPN solutions are designed to provide a secure
bridge between two or more physically distant networks.
Before VPN, organizations wishing to safely bridge their private
networks purchased expensive leased lines to directly connect
their intranets with cabling.
16 2
1
Intrusion Detection Systems
Intrusion
Actions aimed at compromising the security of
the target (confidentiality, integrity, availability of
computing/networking resources)
Intrusion detection
The identification through intrusion signatures
and report of intrusion activities
Intrusion prevention
The process of both detecting intrusion activities
and managing automatic responsive actions
throughout the network
17
IDS Components
The IDS manager compiles data from the IDS sensors to
determine if an intrusion has occurred.
This determination is based on a set of site policies, which
are rules and conditions that define probable intrusions.
If an IDS manager detects an intrusion, then it sounds an
alarm.
18
Untrusted
Internet
IDS Manager
IDS Sensor
router router
DSS S SSSS Mana
router
DS Se S nso so IDS Sensor DS Se S nso
Firewall
2
1
Intrusions
An IDS is designed to detect a number of threats, including the following:
masquerader: an attacker who is falsely using the identity and/or credentials
of a legitimate user to gain access to a computer system or network
Misfeasor: a legitimate user who performs actions he is not authorized to do
Clandestine user: a user who tries to block or cover up his actions by deleting
audit files and/or system logs
In addition, an IDS is designed to detect automated attacks and threats,
including the following:
port scans: information gathering intended to determine which ports on a
host are open for TCP connections
Denial-of-service attacks: network attacks meant to overwhelm a host and
shut out legitimate accesses
Malware attacks: replicating malicious software attacks, such as Trojan
horses, computer worms, viruses, etc.
ARP spoofing: an attempt to redirect IP traffic in a local-area network
DNS cache poisoning: a pharming attack directed at changing a hosts DNS
cache to create a falsified domain-name/IP-address association
19
Possible Alarm Outcomes
Alarms can be sounded (positive) or not (negative)
20
Intrusion Attack No Intrusion Attack
Alarm
Sounded
No
Alarm
Sounded
True Positive False Positive
True Negative False Negative
2
1
The Base-Rate Fallacy
It is difficult to create an intrusion detection system with
the desirable properties of having both a high true-positive
rate and a low false-negative rate.
If the number of actual intrusions is relatively small
compared to the amount of data being analyzed, then the
effectiveness of an intrusion detection system can be
reduced.
In particular, the effectiveness of some IDSs can be
misinterpreted due to a statistical error known as the base-
rate fallacy.
This type of error occurs when the probability of some
conditional event is assessed without considering the base
rate of that event.
21
Base-Rate Fallacy Example
Suppose an IDS is 99% accurate, having a 1% chance of
false positives or false negatives. Suppose further
An intrusion detection system generates 1,000,100 log
entries.
Only 100 of the 1,000,100 entries correspond to actual
malicious events.
Because of the success rate of the IDS, of the 100 malicious
events, 99 will be detected as malicious, which means we
have 1 false negative.
Nevertheless, of the 1,000,000 benign events, 10,000 will
be mistakenly identified as malicious. That is, we have
10,000 false positives!
Thus, there will be 10,099 alarms sounded, 10,000 of which
are false alarms. That is, roughly 99% of our alarms are
false alarms.
22
IDS Data
In an influential 1987 paper, Dorothy Denning identified
several fields that should be included in IDS event records:
Subject: the initiator of an action on the target
Object: the resource being targeted, such as a file,
command, device, or network protocol
Action: the operation being performed by the subject
towards the object
Exception-condition: any error message or exception
condition that was raised by this action
Resource-usage: quantitative items that were expended
by the system performing or responding to this action
Time-stamp: a unique identifier for the moment in time
when this action was initiated
23
Types of Intrusion Detection Systems
Rule-Based Intrusion Detection
Rules identify the types of actions that match certain known profiles
for an intrusion attack, in which case the rule would encode a
signature for such an attack. Thus, if the IDS manager sees an event
that matches the signature for such a rule, it would immediately sound
an alarm, possibly even indicating the particular type of attack that is
suspected.
Statistical Intrusion Detection
A profile is built, which is a statistical representation of the typical
ways that a user acts or a host is used; hence, it can be used to
determine when a user or host is acting in highly unusual, anomalous
ways.
Once a user profile is in place, the IDS manager can determine
thresholds for anomalous behaviors and then sound an alarm any time
a user or host deviates significantly from the stored profile for that
person or machine.
24 2
1