Sei sulla pagina 1di 18

Analisi della sicurezza nelle moderne tecniche

crittografiche

ITIS E. Mattei Sondrio


Esame di Stato 2015
Alunno: Riva Davide
Classe V, sezione E
Indice
1. Premessa storica 2
2. Considerazioni iniziali 4
3. La crittografia asimmetrica 5
4. Algoritmo di fattorizzazione 7
5. I sistemi paralleli 8
6. Struttura del software e benchmarking 11
7. Ciclo di vita e modelli di sviluppo del software 13
8. Lopen source e gli open data 14
9 Bibliografia 16

1
1. Premessa storica
Da sempre luomo haricercatomezziperpotercomunicareadistanzacon
la maggior segretezza possibile, principalmente in periodo di guerra
quando il nascondere le informazioni al nemico era di vitale importanza.
Emblema dei metodi utilizzati
nellantichit il cifrario di
Cesare (ideato dallomonimo
imperatore di Roma vissuto nel
primo secolo a.C.): esso
consiste nel sostituire ogni
lettera nel testo originario con
quella che la segue di tre posti
nellalfabeto (vedi esempio a
fianco). Numerosi furono i
metodi di cifratura utilizzati, ma non si fecero significativi passi avanti
nellambito della crittoanalisi sino al XIX secolo: infatti icifrarieranomolto
semplici e si basavano sullidea che solo il mittente e il destinatario
potessero conoscere la chiave e che essa fosse unica sia per cifrare che
per decifrare.
Le cose cambiarono durante la
Seconda guerramondiale(1939-1945);
i tedeschi infatti utilizzarono la
macchina Enigma, uno strumento
meccanico che era in grado di
generare dieci milioni di miliardi di
chiavi, rendendodifattoimpossibilela
decifratura delle trasmissioni con i
mezzi disponibili allepoca. Inoltre la
chiave veniva cambiata
quotidianamente, in modo che se una
delle macchine fosse caduta sotto
mano nemica essi avrebbero potuto
decifrare i messaggi scambiati solo
fino allo scoccare della mezzanotte.
Fintanto che questo metodo rimaneva
inviolabile, la Germania poteva
continuare isuoiprogettidiegemonia.
Gli Alleati per, grazie al lavoro del
matematico britannico Alan Turing,
realizzarono Colossus, una macchina
in grado di decifrare le trasmissioni dei nazisti; essa fu uno tra i primi
calcolatori realizzati e gett le basi delle moderne tecniche dicrittoanalisi.
2
Grazie a questi strumenti divenne infatti possibile eseguire calcoli
matematici in tempi ridottissimi: sul mercato con una spesa massima di
100 euro sono oggi disponibili macchine in grado di effettuare 100 mila
milioni di operazioni in virgola mobile in un secondo (come Parallella).
La crittografia torn nuovamente in auge durante la Guerra fredda nella
seconda met del XX secolo, quando divenne fondamentale per le due
superpotenze che si erano create (USA e URSS) mantenere il massimo
livello di segretezza: in questo contesto nacque lOTP (One-Time Pad), un
meccanismo che se usato correttamente rendeva i dati cifrati inviolabili.
Ma gli enormi problemi, soprattutto legati al fatto che la chiave era lunga
tanto quanto il messaggio da cifrare e che essa stessa doveva essere
comunicata hanno reso necessario lo sviluppo di nuovi metodi, tra i quali
la crittografia asimmetrica. Con questo metodo mittente e destinatario
posseggono due chiavi usate rispettivamente per cifrare e decifrare,
rendendo inutile il tentativo dintercettare la chiave scambiata che non
potr quindi essere utilizzata per decodificare i messaggi analizzati.
Ci si rese inoltre conto che non era tantolasegretezzacherendevasicuro
un metodo di cifratura, quanto la robustezzadellachiave.Sicomincicos
a rendere pubblicamente disponibili gli algoritmi anche fuori dal campo
militare; a oggi gli utilizzi sono molteplici: dallautenticazioneneisistemidi
pagamento a una semplice chiamata tutti noi ogni giorno ci troviamo a
usarli senza rendercene conto.

Alan Turing
Nato il 23 giugno 1912 Turing fu un abile
matematico, logico e crittoanalista, nonch un
pioniere dellinformatica. Defin per la prima volta
il concetto di algoritmo e teorizz un modello
matematico(lamacchinadiTuring)chepermisela
nascita dei computer. Grazie alle sue conoscenze
nellambito della crittoanalisi durante la Seconda
guerra mondiale lavor per il governo brittannico
per ilqualedecriptlecomunicazionimilitarichei
nazisti si scambiavano.
Mor suicida il 7 giugno 1954, probabilmente a
causa delle accuse di omossessualit (allepoca
considerata un crimine) che nel 1952 lo
costrinsero ad accettare la castrazione chimica
per evitare la prigione.

3
2. Considerazioni iniziali
Nella nostra epoca i sistemi di cifratura sono utilizzati da chiunque
(cittadini, aziende, stati) e per qualsiasi scopo (dalla sempliceconnessione
al proprio modem Internet, alle transazioni bancarie sino alla cifratura di
documenti sensibili di una nazione). Sono inoltre nate numerose aziende
relative a questo ambito, prima fra tutte RSA Security che, fra i suoi
prodotti, annovera anche lomonimo metodo di crittografia asimmetrica.
Gli algoritmi sviluppati diventano sempre pi complessi e le chiavi di
cifratura sempre pi lunghe; nello stesso tempo i meccanismi di
decifratura si affinano sempre pi e le prestazioni dei PC aumentano in
modo vertiginoso: oggi la domanda nonquestoalgoritmosicuro?ma
piuttosto in quanto tempo verr decifrato?. Per esempio nel1991venne
indetta la RSA Factoring Challenge nella quale veniva premiato con una
sommadidenarochifosseriuscitoafattorizzaredellechiaviasimmetriche
prestabilite. Se in quellanno una chiave di 330 bit veniva considerata
relativamente sicura, oggi il numero consigliato cresciutoseivoltetanto,
sino a raggiungere i 2048 bit. Chiunque non rimanga al passo con i tempi
destinato a perdere una parte della sicurezza allinternodelsuosistema
informatico: recuperando messaggi risalenti agli anni novanta possibile
infatti decifrarli conrelativasemplicit,cosacheavverranchefraqualche
decennio con i documenti cifrati ora.

4
3. La crittografia asimmetrica
Questo tipo di crittografia permette di scambiare messaggi da una
persona a unaltra senza che sia necessaria una chiave comune.
Supponiamo ad esempio che
unnostroamicodebbainviarci
un messaggio segreto senza
che nessun altro possa
leggerne il contenuto;
intuitivamente basterebbe
rinchiuderlo allinterno di uno
scrigno protetto con un
lucchetto, per poi fabbricare
una copia delle chiavi da
fornire al mittente. In questo
modo solo i possessori dellechiavi,chiunqueessisiano,possonoinviaree
ricevere messaggi. Ma cosa succederebbe se venisse sottratta lachiave?Il
nuovo possessore potrebbe fingersi uno dei dueespediredeicontenutia
proprio piacimento o leggere quelli in arrivo.
Per questo scopo nacque la
crittografia asimmetrica:
permettere la comunicazione
senza avere la necessit di
conoscere a priori la chiave
(nellesempio precedente
significa non dover possedere
necessariamente la chiave per
poter inviare il messaggio). In
questo metodo esistono due
diverse chiavi: una pubblica
(utilizzata solitamente per cifrare) e una privata (che ha invecelafunzione
di decifrare i messaggi criptati precedentemente dalla chiave pubblica).
Supponiamo che Marco debba inviare un messaggio a Lucia: Marco
invier solamente il lucchetto a Lucia (chiave pubblica), la quale lo user
per chiudere lo scrigno contenente il messaggio; Marco allora, una volta
ricevuto lo scrigno, lo aprir con la sua chiave (chiave privata): in questo
modo nessuno potr aprire il lucchetto eccetto Marco.
Un altro campo in cui la crittografia asimmetrica viene largamente
utilizzata quello delle firme digitali. In questo caso le due chiavi
invertono le proprie funzionalit: la chiave privata infatti viene utilizzata
dal mittente con la quale cifra la funzione di hash del messaggio (che
rappresenta una sorta dimpronta digitale, statisticamente diversa al

5
variare del contenuto). Successivamente chiunque in possesso della
chiave pubblica potr verificare che il messaggio non sia stato modificato
da terzi e attestare la paternit di quel documento (in quanto per
manomettere il messaggio necessariomanomettereancheilsuohash,il
quale per crittografato e quindi modificabile solo dal possessore della
chiave privata).
Ma qual il meccanismo alla base di questo tipo di algoritmi? La cifratura
asimmetrica si basa sul principio cheilprodottofraduenumeriprimi(che
corrisponde a una parte sia della chiave pubblica che privata)
relativamente veloce da effettuare, ma la fattorizzazione del numero
semiprimo (cio un numero naturale che il prodotto di due numeri
primi) generato dalla moltiplicazione precedente unoperazione
computazionalmente complessa.

Esempio
Immaginiamo ad esempio di prendere come numeri primi 97 e 103:
ottenere il loro prodotto (9991) semplice, ma nonesistenessunmetodo
altrettanto veloce per risalire ai due fattori iniziali conoscendo solo 9991.
E ora possibile intuire perch questo tipo di crittografia pu essere
considerato sicuro: presi due numeri primi molto grandi diventa quindi
impossibile (in quanto richiederebbe tempi nellordine delle centinaia di
anni) ottenere la chiave pubblica da quella privata o viceversa.

6
4. Algoritmo di fattorizzazione
Per poter scomporre un numero semiprimo n neisuoiduefattori p e q
stata scelta una versione migliorata dellalgoritmo Trial Division poich
semplice da implementare ed parallelizzabile allinfinito rendendo il
software di decodifica scalabile: ci significa che allaumentare delle
risorse disponibili (in questo caso computer) i calcoli allinterno
dellalgoritmo si possono distribuire in esse aumentando le prestazioni.
Inoltre la sua complessit lineare al crescere di n .

Innanzitutto necessario determinare in che range effettuarelaricercadi


uno dei due numeri ( p o q ) per i quali p * q = n ; infatti conoscendo un
fattore possibile ottenere laltro ( p = n/q, q = n/p ).

Possiamo dimostrare per assurdo che almeno un fattore debba trovarsi


nellintervallo ] 1; n ] . Poniamo p = n + k e q = n + m , dove
k > 0 m > 0 . Il loro prodotto sar quindi
p * q = (n + k ) * (n + m) = n + mn + k n + k m , ovviamente maggiore di n e
quindi impossibile.
Il caso limite sar infatti per k = m = 0 , ottenendo una radice quadrata
perfetta ( p * q = (n + 0) * (n + 0) = n * n = n ).

Dividiamo ora il numero n per 2 , verificando se siapariomeno.Nelcaso


in cui lo sia possiamo affermare che uno dei due fattori sicuramente 2 ,
mentre laltro n / 2 . Nel caso sia dispari si divide invece n per tutti i
numeri dispari interi presenti nellintervallo ] 2; n ] (in quanto non
essendo divisibile per 2 non lo sar neppure per tutti i suoi multipli),
verificando quale delle operazioni non abbia resto: se il resto 0 il
divisore corrisponder ad uno dei due fattori.

Esempio

Proviamo a fattorizzare il numero 35 . Sicuramente non pari in quanto


n/2 = 35 / 2 = 17, 5 con resto di 1 . Cercheremo quindi i suoi fattori
nellintervallo ] 2; n ] = ] 2; 5 ] :
35 mod 3 = 2 3 non un fattore di 35
35 mod 4 = 3 4 non un fattore di 35
35 mod 5 = 0 5 un fattore di 35

Il secondo fattore sar quindi 35 / 5 = 7 .

Verifichiamo infine il risultato: se p = 5 q = 7 allora n = p * q = 5 * 7 = 35 :


lalgoritmo ha correttamente individuato i due fattori del numero

7
analizzato.

5. I sistemi paralleli
Il software realizzato sulla base
dell'algoritmo analizzato
precedentemente pu essere
eseguito in modo parallelo su
diversi host all'interno di un
dominio Windows; inoltre nelle
singolemacchineessosuddiviso
sui vari core del processore. In
questo modo possibile ottenere
delle ottimeprestazionidividendo
il carico su PC di fascia media,
evitando cos l'acquisto di costosi
server.
Tramite il protocollo MPI
(Message Passing Interface)
stato quindi possibiletrasformare
un gruppo di macchine MIMD (Multiple Instruction streamMultipleData
stream) in un cluster (ovvero un insieme di elementi di elaborazione che
comunicano e cooperano per risolvere velocemente problemi di grandi
dimensioni e possono essere visti come un unico sistema) attraverso lo
scambio di messaggi.
La potenza di calcolo sar quindi data dalla somma della potenza di
calcolo delle singole macchine che coopereranno per eseguire la
fattorizzazione: a ogni singolo host viene assegnata una porzione
dell'intervallo ] 2; n ] (dove n il numero da scomporre) e, in caso esso
trovi un fattore, lo comunicher al nodo principale (root rank) che
visualizzer a schermo i fattori e interromperirestantinodidelcluster.Il
tempo impiegato per portare a termine il proprio compito sar quindi
inversamente proporzionale al numero di core totali e direttamente
proporzionale alla grandezza di n . E inoltre necessario che i vari nodi
abbiano le stesse caratteristiche: in caso contrario il tempo di esecuzione
varierebbe in base alla macchina nella quale eseguitoequindipotrebbe
degradare le prestazioni dellintera applicazione.

Fasi del software

1. La macchina con rank 0 attende un input da tastiera contenente il


semiprimo da fattorizzare. Inizialmente verifica se il numero
ottenuto non zero o uno (in tal caso p = n, q = 1 ) o se divisibile
8
per due: in caso positivo restituisce i due fattori ( 2; n/2 ) , altrimenti
trova la sua radice quadrata e divide l'intervallo ] 2; n ] in k parti
(dove k il numero di nodi escluso il root rank), inviandole alle
singole macchine. Nel caso in cui lampiezza dellintervallo data da
n /k sia troppo piccola per essere inviata (ad esempio se il cluster
possiede 10 nodi e ilnumerodafattorizzarecorrispondea 9 )soloil
nodo principale effettua il calcolo della fattorizzazione.
2. Gli altri nodi nel cluster ricevono l'intervallo e lo suddividono
anch'esso in z parti (dove z il numero di singoli core all'interno
dellamacchina).Vengonocreatiquindi z thread,unoperognicore,i
quali ricercheranno nell'intervallo ricevuto i fattori di n ; se ne
trovano uno ( p ) comunicano al nodo principale di avertrovatoun
risultato. Se lampiezza degli intervalli stabilititroppopiccolaallora
solo un core effettuer il calcolo (vedi esempio precedente nella
prima fase).
3. La macchina principale mostra a schermo i due fattori: uno sar
quello ricevuto precedentemente, l'altro corrisponde a n/p .

Esempio

Immaginiamo di dover fattorizzare il numero 1037 con laiuto di 10


macchine, ciascuna con un processore dual core.

Innanzitutto il nodo principale effettua il calcolo n mod 2 = 1037 mod 2 ,


ottenendo un resto di 1 : il numero non quindi pari. Successivamente
calcola la sua radice quadrata ( 32, 2 ), dividendo poi l'intervallo
] 2; n ] = ] 2; 32 ] in 10 intervalli (ciascuno di (n 2)/(k 1) = (32 2)/9 = 3
elementi):
] 2; 5 ]
] 5; 8 ]
] 8; 11 ]
] 11; 14 ]
] 14; 17 ]
] 17; 20 ]
] 20; 23 ]
] 23; 26 ]
] 29; 32 ]

Allo stesso modo ogni macchina, che possiede 2 core, divide gli intervalli
in:
] 2; 3 ] ] 3; 5 ]

9
] 5; 6 ] ] 6; 8 ]

] 14; 15 ] ] 15; 17 ]
] 17; 18 ] ] 18; 20 ]

] 23; 24 ] ] 24; 26 ]
] 29; 30 ] ] 30; 32 ]

Il thread che dovr analizzare l'intervallo fra ] 15; 17 ] trover che 17 un


fattore di 1037 e invierquest'informazioneallamacchinaprincipale:essa
calcoler il secondo numero primo ( 1037/17 = 61 ), visualizzando poi
entrambi a schermo e inviando un messaggio agli altri nodi per
interrompere i restanti calcoli ormai superflui.

10
6. Struttura del software e benchmarking
Lapplicazione parallela stata sviluppata in C#, si appoggia alla versione
4.5 del .NET Framework e utilizza la libreria MPI.NET
(http://www.osl.iu.edu/research/mpi.net/) per realizzare un cluster di
macchine in Windows HPC Server. Inoltre stato realizzato uno script in
PowerShell per automatizzare le configurazioni durante la fase di debug.
Essa composta da due sotto-progetti:
- Primen: il fulcro principale del software che si occupadellagestione
del cluster e della fattorizzazione del numero.
- BigIntegerExtender: estende la classe BigInteger del .NET
Framework per permettere il calcolo delle radici quadrate; inoltre
aggiunge una classe (BigIntegerSerializable) per la serializzazione di
numeri interi a grandezza variabile.
Sono stati inoltre
realizzati dei test
grazie allaboratorio
di Sistemi e reti:
attraverso 21 PC
collegati fra loro da
uno switch stato
possibile
fattorizzare un
numero di 92 bit in
poco pi di 2
minuti. Ogni
macchina era
equipaggiata con
Windows 8x64,una
CPU Intel(R)
Core(TM) i5-3470 e
8GB diRAM.Estato
cos possibile
dimostrare che i
tempi di
fattorizzazione
crescono in modo
lineare rispetto alla grandezza della chiave ed esponenzialmente se si
considera la sua lunghezza in bit. Inoltre il numero di nodi del cluster edi
core totali ha una grande influenza sulle prestazioni.
Durante questi test sono sorti numerosi problemi, derivanti dal fatto che
nei vari PC eraconfigurataunaschedadiretevirtualechenonpermetteva

11
il corretto invio dei messaggi di broadcast allinterno del cluster. Inoltre
stato necessario disabilitare la sospensione automatica allinterno delle
macchine, in quando le arrestava facendo terminare lapplicazione in
modo anomalo. Si anche dovuto arrestare lantivirus AVG (il quale
indicava erroneamente il sofware come malevolo, generando un falso
positivo) e aggiungere una regola al firewall diWindowsperpermetterela
comunicazione tra le varie macchine.

12
7. Ciclo di vita e modelli di sviluppo del software
Durante la progettazione del software fondamentale definire un
modello che permetta la gestione organizzata delle varie fasi nel suociclo
di vita. Per questapplicazione stata scelta una metodologia agile, che si
basa su:
- Automazione: la documentazione e i test sono generati in modo
automatizzato (in questo caso il compito affidato a Visual Studio).
- Controllo di versione: attraverso il software Git stato possibile
gestire il versionamento del software.
- Semplicit: la fase di progettazione, la documentazione e il codice
sorgente sono il pi semplici possibile facilitando ipotetiche fasi
successive di modifica e correzione.
- Coding conventions: lapplicazione segue delle convenzioni per la
stesura del codice, in particolare le C# Coding Conventions
(https://goo.gl/iVmoJ7).
Per quanto riguarda le metodologie di test sono stati effettuati sia test
funzionali (i quali hanno lobbiettivo di correggere eventuali errori) che
prestazionali (permettendo di individuare le parti di codice che
renderebbero questo tipo di applicazione troppo lenta).

13
8. Lopen source e gli open data
Negli ultimi anni tornato in auge il
tema dellopen source: un modello di
sviluppo nel quale le licenze dei
software permettono di utilizzare
questultimo senza le restrizioni
previste dal sistema capitalistico. In
questo modo le varie applicazioni
possono essere liberamente utilizzate,
modificate e condivise. Ivantaggisono
innumerevoli: prima di tutto chiunque
pu realizzare prodotti derivatidaaltri
software di questo tipo, contribuendo
al miglioramento delle tecnologie
precedenti: basti pensare ad aziende
come Google ed Amazon che fanno di
questi strumenti il proprio cavallo di
battaglia. Inoltre permette il loro
utilizzo a costo zero da parte degli
utenti e delle aziende: per esempio
possibile scrivere un documento in
LibreOffice senza dover pagare
costose licenze (ad esempio per
prodotti come Microsoft Office).
Parallelamente si sviluppato il concetto di open data: i documenti in
questo modo vengono resi disponibili liberamente; chiunque voglia
attingere dai dati raccolti da organizzazioni esterne pu farlo
semplicemente e gratuitamente. Questa idea trova la sua ideale
applicazione allinternodellaburocraziastatale(lacosiddettatrasparenza),
negli enti di ricerca, etc.
Queste idee possono essere facilmente fraintese con il concetto di
gratuito, rendendo il tutto unidea utopistica. In realt possibile per
unazienda abbracciare questo tipo di sviluppo: ne lemblema Red Hat
che distribuisce il proprio sistema operativo in modo libero, offrendo poi
licenze e corsi di formazione a pagamento, fatturando nello stessotempo
397 milioni di euro (dati relativi al 2013).
Per questi motivi il codice sorgente del mio progetto stato rilasciato
sotto una licenza open source (MIT) ed liberamente consultabile su
GitHub:
- https://github.com/Davide95/Primen
- https://github.com/Davide95/BigIntegerExtender

14
Analogamente la stessa tesina distribuitaconlicenzaCreativeCommons
e consultabile allindirizzo https://goo.gl/h2kTyo. Le immaginiconcuisono
state realizzate le illustrazioni sono anchesse di pubblico dominio o sotto
licenze permissive. Gli autori principali sono Pixabay
(https://goo.gl/SbuKsu), Simon Phipps e Karsten Sperling.

15
9 Bibliografia
Alan Turing, Wikipedia (https://goo.gl/6UGblj)
Clio Magazine Volume 3 modulo 1, La Scuola
(ISBN: 978-88-350-1399-0)
Dispense del Dipartimento di Ingegneria, Universit degli Studi
Roma Tre (https://goo.gl/ckPMco)
Dispense del dott. Agostino Dovier, professore di Informatica
delluniversit di Udine (https://goo.gl/yBRrX8)
Fatturato e utili in crescita per Red Hat nel trimestre, Ictbusiness.it
(https://goo.gl/Swf2ni)
Gestione di progetto e organizzazione di impresa di Antonio
Dell'Anna e Martina Dell'Anna (ISBN: 978-88-963-5464-3)
Le basi della storia antica 2 unit 9, Scolastiche Bruno Mondadori
(ISBN: 978-88-424-3145-9)
Open Data, Wikipedia (https://goo.gl/vt4LGo)
Open Source Initiative (https://goo.gl/i3PJwv)
Parallella (https://goo.gl/V3US8d)
The RSA Factory Challenge FAQ, RSA Laboratories
(https://goo.gl/iETHwo)
Sistemi e reti volume 3 unit di apprendimento 2, Hoepli
(ISBN: 978-88-203-5136-6)
Tecnologie e progettazione di sistemi informatici e di
telecomunicazioni volume 3 unit di apprendimento 1 e 2, Hoepli
(ISBN: 978-88-203-5158-8)
The Art of Agile Development, James Shore
(ISBN: 978-0596527679)
Trial Division, Wolfram MathWorld (https://goo.gl/hQGfo6)

16
Quest'opera distribuita con Licenza C
reative Commons
Attribuzione 4.0 Internazionale.

17

Potrebbero piacerti anche