Sei sulla pagina 1di 35

Dispensiate

TSI - Distinzioni fra algoritmi di


hashing
Breazzano Claudia - Mastromattei Michele - Rubino Edoardo
Ottobre 2018

Guida all'uso

ae no

A
1
Algoritmi di hosting

1 Introduzione
1.1 Cos’è una funzione hash
Una funzione hash è una qualunque funzione che trasforma i dati in input in un
output di lunghezza costante.

.
Una funzione hash ha le seguenti proprietà:

• M può essere di qualsiasi dimensione


• h è sempre della stessa dimensione di M
• H(M) è facile da calcolare
• ogni valore di h ha la stessa probabilità di essere restituito.

Per essere usate in ambito crittografico, le funzioni devono avere altre proprietà:
1. unidirezionalità: noto h deve essere computazionalmente impossibile
trovare M tale che H(M) = h
2. resistenza debole alle collisioni: conoscendo M, deve essere com-
putazionalmente impossibile trovare M’ tale che H(M)=H(M’)
3. resistenza forte alle collisioni: deve essere computazionalmente im-
possibile trovare una coppia (M,M’) tale che H(M)=H(M’)
4. e↵etto valanga: una piccola modifica di M deve alterare tutto h.

3
2 Algoritmi di hash
2.1 Definizione
L’algoritmo di hash elabora qualunque mole di bit. Si tratta di una famiglia di
algoritmi che soddisfa questi requisiti:
1. L’algoritmo restituisce una stringa di numeri e lettere a partire da un
qualsiasi flusso di bit di qualsiasi dimensione.
2. L’algoritmo non è invertibile, ossia non è possibile ricostruire il docu-
mento originale a partire dalla stringa che viene restituita in output.

2.2 Utilizzo
E’ possibile utilizzare le funzioni di hash per creare una hash table che è una
struttura dati molto efficente per le operazioni di ricerca.
La hash table contiene dati associati ad una chiave di ricerca e viene spesso uti-
lizzato nei database per indicizzare gli elementi che saranno oggetto di ricerca.
Questa tecnica (detta di hashing) permette di realizzare funzioni di ricerca che
riescono ad individuare l’elemento desiderato in un tempo costante, indipenden-
temente dal numero di elementi presenti nell’indice.

2.3 Secure Hash Algorithm: SHA


Con il termine SHA si indice una famiglia di 5 diverse funzioni crittografiche
sviluppate a partire dal 1993 dalla NSA acronimo di National Security Agency.
Come ogni algoritmo di hash, lo SHA produce un message digest di lunghezza
fissa partendo da un messaggio di lunghezza variabile.

Gli algoritmi della famiglia sono denominati SHA-1, SHA-224, SHA-256,


SHA-384, SHA-512, le ultime quattro varianti, sono spesso indicate generi-
camente come SHA-2 per distringuerle dal primo.

2.3.1 SHA-0/SHA-1
L’SHA-1 di↵erisce dall’SHA-0 unicamente per una sola rotazione di bit nel pro-
cesso di preparazione del messaggio della sua funzione di compressione ad una
via; ciò fu fatto, secondo l’NSA, per correggere un difetto nell’algoritmo origi-
nale, il quale riduceva la sicurezza crittografica di SHA-0.
Ad ogni modo, l’NSA non fornı̀ nessuna ulteriore spiegazione chiarificante.
Sono state in seguito riportate debolezze sia nel codice dell’SHA-0 sia in quello
dell’SHA-1. L’SHA-1 pare o↵rire maggiore resistenza agli attacchi, a supporto
dell’asserzione dell’NSA che il cambiamento aumentò la sicurezza.
L’SHA-1 (cosı̀ come l’SHA-0) produce un digest di 160 bit da un messaggio con
una lunghezza massima di 264 1 bit

4
2.3.2 Funzionamento dello SHA-0/SHA-1
1. Imbottitura: Al messaggio originale vengono aggiunti dei bit di ”imbot-
titura” affinché la lunghezza finale del messaggio risulti congruente a 448
modulo 512, cosı̀ facendo la lunghezza di ”messaggio+imbottitura” è pari
ad un numero 64bit più piccolo di un multiplo di 512bit.
2. Aggiunta lunghezza: Alla sequenza di bit (messaggio+imbottitura) cre-
ata durante il passo 1 viene aggiunto un intero unsigned di 64bit conte-
nente la lunghezza del messaggio originale. Alla fine di questi due primi
passi otteniamo una sequenza di bit che è un multiplo di 512.

3. Inizializzazione del bu↵er MD: Un bu↵er di 160bit suddiviso in 5


registri da 32bit ciascuno viene creato per la memorizzazione di alcuni
passaggi intermedi. I 5 registri verranno convenzionalmente indicati con
(A,B,C,D,E) ed inizializzati con i seguenti valori esadecimali:
• A = 67452301
• B = EFCDAB89
• C = 98BADCFE
• D = 10325476
• E = C3D2E1F0

4. Elaborazione dei blocchi da 512 bit: La sequenza di bit ”messag-


gio+imbottitura+lunghezzaMessaggio” viene divisa in blocchi da 512 bit,
che identificheremo con Bn con n che va da 0 a L.
Il fulcro dell’algoritmo SHA-1 è chiamato compression function ed è
formato da 4 cicli di 20 passi cadauno.
I cicli hanno una struttura molto simile tra di loro se non per il fatto che
utilizzano una di↵erente funzione logica primitiva.
Ogni blocco viene preso come parametro di input da tutti e 4 i cicli insieme
ad una costante K e i valori dei 5 registri. Alla fine della computazione ot-
terremo dei nuovi valori per A,B,C,D,E che useremo per la computazione
del blocco successivo sino ad arrivare al blocco finale F.

2.3.3 Funzionamento SHA-2


Gli algoritmi SHA-256 e SHA-512 lavorano, rispettivamente, con word di 32 e
64 bit: utilizzano un numero di↵erente di rotazioni e di costanti addizionali, ma
la loro struttura è sostanzialmente identica.
Gli algoritmi SHA-224 e SHA-384 sono semplicemente versioni troncate dei
precedenti due, con hash calcolati con di↵erenti valori iniziali.
Gli algoritmi SHA-2 non hanno ricevuto, a di↵erenza dell’SHA-1, molta at-
tenzione dalla comunità dei crittoanalisti per cui la loro sicurezza in campo
crittografico non è stata del tutto provata. Gilbert e Handschuh (2003) hanno
studiato queste nuove varianti e non hanno trovato vulnerabilità.

5
2.3.4 Pseudocodice SHA-1
Presentiamo in seguito lo speudocodice dell’algoritmo di SHA-1:

Le seguenti formule possono essere utilizzate per calcolare f nel ciclo principale
qui sopra:

6
2.3.5 Pseudocodice SHA-2
Pseudocode dell’algoritmo SHA-256.
Notare l’incremento nel mescolamento dei bit delle word w[16..63] rispetto
all’SHA-1.

7
2.3.6 Di↵erenze fra i due algoritmi
In seguito riportiamo una tabella contenente le di↵erenze fra i due alogirmi posti
in questa dispensa:

8
G DPR
1 GDPR
1.1 Cos’è
Il GDPR (acronimo di General Data Protection Regulation) è un regolamento
europeo realtivo alla protezione delle persone fisiche con riguardo al tratta-
mento e alla libera circolazione dei dati personali.

Il GDPR nasce da precise esigenze, come indicato dalla stessa Commissione


Ue, di certezza giuridica, armonizzazione e maggiore semplicità delle norme
riguardanti il trasferimento di dati personali dall’Ue verso altre parti del mondo.Si
tratta poi di una risposta, necessarie e urgente, alle sfide poste dagli sviluppi
tecnologici e dai nuovi modelli di crescita economica, tenendo conto delle esi-
genze di tutela dei dati personali sempre più avvertite dai cittadini UE.
C’è una responsabilità oggettiva da parte dell’organizzazione che gestisce i dati
anche al fronte di un attacco
Attualemnte, per le aziende, non basta mettere su un piano si sicurezza ma
dmostrare che il suo piano di sicurezza gestisca la privacy dei dati dei clienti e,
qualora ci fosse un attacco ai dati dell’azienda, avrà la responabilità oggettiva
su questo.
Questo comporta che qualora ci fossero delle ispezioni statali che devono veri-
ficare la qualità delle funzioni di sicurezza adottate dalle azienda, il non essere
in regola comporterà una multa.

1.2 Il piano di qualità del sistema


Questo documento procedurale, contenente scelte progettuali ed organizzative
è parte integrante del contratto ed onere d’impresa.
Il Piano della Qualità per la Sicurezza del sistema, è il documento che specifica
le modalità operative, le procedure, le risorse e la sequenza delle attività che
influenzano la qualità per la sicurezza del sistema, nonché l’organizzazione e le
responsabilità stabilite per garantirla.

1.3 Esmpio gestione degli accessi in un parcheggio


Supponiamo di avere un sistema di controllo di accessi.
Indichiamo con la coordinata spaziale e con t quella temporale.
L’azienda A è colei che gestisce i file multimediali registrati dalle telecamere.
Avremo dunque n file multimediali M1 , M2 , ..., Mn dove, ciascuno Mi sarà col-
legato a una specifica coordianta spaziale e a una determinata coordinata tem-
porale.
L’area, cosı̀ come i documenti, sono sottoposti ai seguenti vincoli:
1. Soltanto un utente abilitato può leggere i risultati della registrazione.
Per i soggetti abilitati, essi dovranno attenersi ad altri due vincoli:
(a) Localizzazione : l’utente abilitato dovrà guardare i filmati registrati
solamente in quella area prestabilita

3
(b) Interavllo temporale: anche qui, se l’utente è abilitato alla lettura
di file registrati in un intervallo temporale stabilito, dovrà attenersi
a tale intervallo
La soluzione, per tali vincoli (e in particolare per il punto (a) e (b)) sono: la
crittografia omorfica (nel caso della localizzazione) e crittografia tradizionale per
quella dell’intervallo temporale.

1.4 Crittografia omorfica


La crittografia omomorfica è un tipo di crittografia basata su tecniche che per-
mettono la manipolazione di dati cifrati. Ad esempio, avendo due numeri X e
Y (cifrati con lo stesso algoritmo omomorfico a partire da due numeri A e B) è
possibile calcolare la cifratura della somma di A e B sommando direttamente X
e Y, senza bisogno di e↵ettuare la decifratura.
Questa proprietà della crittografia omomorfica è molto importante oggi, soprat-
tutto con l’avvento del cloud computing: attualmente, infatti, i dati presenti
su una piattaforma di cloud non sono totalmente sicuri, soprattutto se bisogna
e↵ettuare delle operazioni su di essi, poiché per manipolarli c’è bisogno di de-
cifrarli. La crittografia omomorfica, invece, può risolvere questo problema e fare
in modo che le informazioni memorizzate nel cloud non debbano mai essere de-
cifrate (e che quindi siano sempre al sicuro).

Supponiamo, ricollegandoci all’esmpio del parcheggio, che un ente di sicurezza


(T) dia il consenso ad U di visualizzare i filmati nell’intervallo temporale t7 , t12 .
Chiameremo tale messaggio M1 .
Allora T cifrerà M1 fra t7 , t12 con una chiave (random) e da a U kr andom e
invierà ad U il messaggio M1 (t7 , t1 2) cifrato con Krandom .
Il problema che sorge usando questa struttura è che do a U Krandom e accedo al
dato in chiaro, quindi qualsiasi sistemista che lavora con U potrà leggere il dato.
Un modo per evitare questo evento è utilizzare l’operatore XOR.

1.5 Operatore XOR


L’operatore XOR gode del fatto che il numero di bit a 0 (zero) e di 1 non cam-
bia.
Ciò può essere verificato vedendo gli operatori distruttivi OR e AND.
In queste due operazioni, infatti, il numero di bit a 1 è sempre diverso da quelli
a 0 e viceversa.
L’operatore XOR non è distruttivo e per dimostrarlo, basta osservare che:

A B B=A

Se io avessi un messaggio M da cifrare e lo cifro con M (A B) = C, se


per caso a p1 do la chiave A e a p2 do la chiave B, allora nessuno dei due porà
leggere il messaggio C (messaggio cifrato).

4
1.6 Stream di bite
Se voglio cifrare un messaggio lungo, utilizzerò uno stream di bite.
Posso generare la sequenza casuale utilizzando Blum, o meglio m = (Blum,
stram).

1.7 Esempi di modelli


A fini soli espliciti, quando parleremo di chiare XOR, parleremo di sequenza di
bite, in accordo a come abbiamo definito m

1.7.1 Modello 1

1.8 Modello 2

In questo caso, avremo che:


• C avrà Sb1
• C manderà ad A una chiave random Rb1
• C manderà ad U Rb1 Sb1

5
• A farà M1 Sb1
• U potrà decifrare M1 e↵ettuando la seguente sequenza di XOR:
(M1 Sb1 ) Rb1 (Rb1 Sb1 = M1 )

Dunque U decifrerà solo quel pezo che abbiamo dato di messaggio.

6
Identità federata
1 Indentità federata
Con il termine identità elettronica di un soggetto (utente, computer, soft-
ware) s’intende l’insieme di dati digitali che identificano il soggetto in maniera
univoca all’interno di un dominio informatico.
I dati digitali che compongono l’identità elettronica sono di solito composti da
un insieme di valori del tipo attributo = valore.
Il processo completo della gestione dell’identità, dalla fase di creazione fino alla
sua eliminazione, viene chiamato la gestione dell’identita elettronica.
L’autenticazione è il processo che permette ad un soggetto (utente, computer,
software) di verificare la corretta identità di un altro soggetto con cui intende
comunicare. L’autorizzazione, invece, è il processo mediante il quale ad un
soggetto già autenticato si garantisce o si nega l’accesso ad un servizio in base
all’identità ed ai ruoli che lo identificano.
Spesso, per autorizzare l’accesso ad un servizio, più che l’identità del soggetto
serve conoscere il ruolo della persona autenticata. Ad esempio, un medico di
un ospedale, indipendentemente da chi sia, ha diritto di accedere ad un servizio
“X” gestito dallo stesso ospedale.
La verifica di accesso in base ai ruoli ricoperti permette inoltre di poter garantire
l’anonimato del soggetto che accede ad un determinato servizio.

Nell’istante stesso in cui il server ha fatto una parte di autenticazione, il server


può chiedere qualcosa di più specifico per ra↵orzare il riconoscimento (esempio:
Qual è il cognome da nubile di tua madre? )
Da qui nascono i:
• meccanismi a domanda
• meccanismi tramite email
• meccanismi a SMS

Questi meccanismi sono tutti soggetti ad attacci man in the middle(MITM).

3
L’unica difficoltà del MITM è che qualora il canale fosse un SSL, allora il MITM
dovrà avere un CA installato sul proprio PC oppure attuare una ingegneria
sociale.

1.1 Autenticazione di Google


Google ha inventato il seguente modello di sicurezza: rendo disponibile all’utente,
una chiavetta (USB, bluetooth) che, per ogni server registrato, ha ssociato una
kp e kp registrato nella propria memoria protetta.

Al termine della registrazione del dispositivo, il server avrà registrato una chiave
pubblica.

Ogni utente ha il suo repository di chiave pubblica.


Il canel cifrato, se c’è, è di tipo SSL ma il dispositiva, e↵ettua una challange per
una seconda autenticazione e lo rimanda al server.
In termini più chiari, sintetici e leggibili, ciò appena detto può essere racchiuso
dalla seguente immagine:

4
Questo modello non ha nessun vatanggio al MITM ma fa is che il browser sia
più sicuro.
Per quanto riguarda l’utente, invece, tale autenticazione ra↵orza la fiducia verso
il server però non soddisfa quello del MITM.

La domanda allora sorge spontanea: come posso contrappormi al MITM?


Se avessi una comunicazione non cifrata, non potrei fare nulla a riguardo, altri-
menti:

I due canali SSl sono due canali diversi.


Associata alla chiave di sessione, c’è l’ID di sessione che non è segreto.
Avremo, dunque, session ID 1 (SID1) e session ID 2 (SID2).
Il protocollo indica che il server mandi al browser una challange per richiedere

5
il session ID.
Il browser lo farà firmare all’utente e lo manda al server.
La risposta al server sarà il session ID con il client e, quest’ultimo, vede con la
session ID che avrà registrato.
Se è uguale allora tutto è andato a fuon fine, altrimenti c’è un MITM.
Questo dispositivo, prevede la clonazione.
Si osservi come, se l’attacco avvenisse al tempo della registrazion, allora il MITM
farebe un device virtuale il che implica che non sarà possibile riconoscerlo.

1.2 Identità federata

Risoluzione del problema second factor :


1. La chiave pubblica generara daò URF al tempo della registrazione

6
2. La sfida deve essere dinamica (e anche la risposta)
3. Perodicità della challange + clonazione del device (il counter deve avere
un valore inferiore di quello che si osserva).
E’ attaccabile?
Si, perchè se il MITM si mettesse dalla parte del browser, può e↵ettuare l’attacco.
La second factor aumenta l’autenticazione ma non la sicurezza.

Il risultato della challange sarà una chiave simmetrica (session key).

7
La funzione hash
1 La funzione hash
La funzione hash associa ad ogni elemento del dominio un solo elemento del
codominio.

2 ADS (Abstract Data Structure) e Algorithms


Riportiamo in seguito, in forma di elenco, i principali ADS e algorithms

• Hash • red/black tree

• Stach • QuickSort
• Queue • MergeSort
• Binary Tree • 2-3 tree
• Heap • AVL tree

• HeapSort • Tree

La hash table è una struttura dati usata per mettere in corrispondenza una
data chiave con un dato valore.
La hash table è molto utilizzata nei metodi di ricerca nominati hashing.
Nel dominio delle hash table, abbiamo le stringhe, dove f (stringa) ! intero
0.

La funzione hash deve minimizzare le collissioni.


Riportiamo un frammento di pseudocodice di una funzione hash in C:

int hash(stringa s, inte size){


int
P ret = 0;
caratteriStringa % size;
}

Poichè |codominio|  |dominio| deriva che la minimizzazione delle collisioni


non è garantita (in questo caso).
Ciò che è certo è la non invertibilità.
P
Come funzione hash, creiamo: caratteriposizione .
In questo caso, le proprietà sono garantite ma non è quella utilizzata in quanto
costosa.
Quindi, una funzione hash deve essere non facile (creare collisioni) e deve costare
poco.

In crittografia, alcune funzioni hash sono:

3
• MD5
• SHA1
• SHA256/512

e servono a costruire un identificativo unico su una informazione.


La sicurezza dell’hash è la sicurezza probabilistica.
L’azienda che garantisce la sicurezza degli algoritmi è la FIPS/NSA e la ver-
sione europea è Common Criteria.

L’hash garantisce la inalterabilità del documento sempre in termini proba-


bilistici.
Trovare una collsione su un hash 256 ha costo o(2256 ).
Un PC esegue 1011 operazioni al secondo che, convertito in base 2 è 236 oper-
azioni al secondo.
256
Quindi: 2236 = 2220 (quantità enorme).

4
3 Crittografia
|dominio| = |codominio| questo implica che si possono cifrare solo documenti
la cui grandezza rientra nel dominio.

Ci si aspetta, quindi algoritmi che cifrano documenti a blocchi.


Per questo motivo utilizzando algoritmi di crittografia, si lavora su 256 bit e
2048 bit.

Passare da 1024 bit a 2048 bit comporta:


• dimensione maggiore del dominio

• dimensione maggiore delle stringhe


• maggior tempo di crittografia

5
RSA
1 L’alterabilità di un documento
La funzione hash non garantisce che il documento non sia alterato (ossia non
modificabile) mentre la crittografia garantisce la non leggibilità del documento.
Concentriamoci sul primo aspetto: la crittografia non garantisce la non alter-
abilità del documento perchè, essendo il dominio uguale al codominio, allora
se c’è un possibile attacco al messaggio, tale messaggio arriverà comunque al
codominio :nella posizione sbagliata ma avrà comunque un valore.

Ciò implica che il messaggio M’ attaccato, avrà, nel dominio di partenza, un


valore diverso da quello inviato in origine.

Se da M vado in M’ e da M’ arrivo in M, dunque usando un solo canale di co-


municazione, allora sto utlizzando la crittografia simmetrica (usando dunque
una sola chiave), mentre se uso due chiavi (e quindi due canali, uno per M e
uno per M’), allora avremo una crittografia asimmetrica.

3
2 RSA
Poniamo il seguente problema:

Alice vuole mandare un messaggio sicuro a Bob

Sia Alice che Bob hanno a disposizione rispettivamente una chiave pubblica
e una chiave privata.
Nel dettaglio:
• indichiamo con k pu A e con k pr A rispettivamente la chiave pubblica e
privata di Alice
• indichiamo con k pu B e con k pr B rispettivamente la chiave pubblica e
privata di Bob
Il messaggio, dunque, fra Alice e Bob, avverrà nel seguente modo:

Alice utilizzerà la chiave pubblica di Bob (k pu B ) per criptare il messaggio e,


una volta arrivato il messaggio a destinazione, Bob dectipterà tale messaggio
utilizzando la sua chiave privata (k pr B ).
In modo più sintetico ed esplicito, ciò appena detto può essere trascritto come:

(k pu B , M) ! C
(k pr B , C) ! M

Si osservi come è stata omessa un passaggio importantissimo, e dunque da sot-


tolineare, che fra Alice e Bob è avvenuto un momento di trust, in cui i due
soggetti si sono fisicamente incontrati e scambiati le loro chiavi pubbliche.
Ciò è avvenuto in tempo preliminare (o t0 ) e per questo non riportato nello
scambio.

Consideriamo ora un nuovo caso:

Bob vuole essere certo che solo Alice può inviargli il messaggio

In questo caso, opereremo come segue:

1. Alice invierà il messaggio a Bob crittografandolo nel seguente modo:

(k pu B ,(k pr A ,M)) ! C
2. Bob riceverà il messaggio e lo decripterà utilizzando:

(k pu A ,(k pr B ,C)) ! M

Per una maggiore sicurezza per l’invio e il ricevimento del messaggio si può uti-
lizzare la firma digitale che opera come segue:

4
supponiamo sempre che i soggetti siano Alice e Bob e che il primo voglia man-
dare un messaggio al secondo, allora:

• Alice firmerà il messaggio con la propria chiave privata

(k pr A , M) ! M’
• e lo cifrerà utilizzando la chiave pubblica di Bob:

(k pu B , M’) ! H(M)

• il messaggio risulta essere cifrato e ricevuto da Bob che lo depripterà uti-


lizzando inizialmente la propria chiave privata:

(k pr B , H(M)) ! M’
• e successivamente quella pubblica di Alice

(k pu A , M’) ! M

5
Intimità dei numeri primi

1 Dimostrazione dell’infinità dei numeri primi


Dimostriamo, tramite un processo per assurdo l’infinità dei numeri primi.
Questa dimostrazione verte su quella di Euclide.

Supponiamo per assurdo che i numeri primi siano finiti.


Ora, poichè sono finiti, abbiamo che la cardinalità di tali numeri sia uguale a N
o, per essere più precisi, possiamo enumerare tutti i numeri primi.
Dunque, siano p1 , p2 , ...pN tutti i numeri primi esistenti, dove con pN indichi-
amo il numero primo più grande.

Una volta adottata questa notazione, possiamo riscrivere la nostra ipotesi in


modo più formale:

IPOSTESI: pN è il massimo dei numeri primi

Da questa ipotesi, Euclide a↵erma che: se fatorizziamo un numero, ad esempio


42 (e cioè 7 x 3 x 2) ed aggiungiamo 1 a questo numero, la divisione per ciascuno
dei suoi fattori darà sempre resto 1.
Eseguiamo la prova:
43 = 7 x 3 x 2 + 1

Ora, se proviamo a dividere 43 per uno dei fattori di 42, otteniamo sempre
resto 1:
43
• 7 = 6 con resto di 1 (si ricorda che 6 = 3x2)
43
• 3 = 14 con resto di 1 (nota che 14 = 7x2)
43
• 2 = 21 con resto di 1 (nota che 21 = 3x7)
Si osservi come la divisione ha sempre resto 1 e vale sempre il prodotto dei
restanti fattori.
Ecco, con questo procedimento, Euclide si creò un postulato.

Torniamo ora alla lista dei nostri numeri primi che, per ipotesi, abbiamo detto
essere finiti e moltiplichiamoli tutti tra di loro:

P = p1 , p2 , ...pN

Non c’è dubbio che il numero P ottenuto per prodotto è maggiore di ciascuno
dei numeri, e, in particolare del massimo di essi:

P > pN

a maggior ragione se aggiungiamo 1:

3
P + 1 > pN

Prendiamo ora in esame il teorema fondamentale dell’aritmetica enun-


ciato in seguito:

teorema fondamentale dell’aritmetica: un numero o è primo o è ottenuto


dal prodotto di numeri primi.

Da ciò ne derivano due risultati:

1. P + 1 è un numero primo
Abbiamo dimostrato però che P + 1 > pN , ma ciò contraddice la nostra
ipotesi che pN sia il massimo dei numeri primi.
Ne consegue che, se P + 1 è primo, allora pN non è il massimo dei numeri
primi.

Abbiamo anche dimostrato che la nostra ipotesi è la scrittura formale


dell’a↵ermazione i numeri primi sono finiti.
Allora, visto che abbiamo ottenuto una contraddizione, deve essere vero il
contrario, ovvero che la nostra ipotesi è falsa e i numeri primi sono infiniti.
2. P + 1 è un numero composto
Se P + 1 è un numero composto, deve essere per forza divisibile per un
divisore.
Ma abbiamo visto che, per costruzione, P + 1 non può essere diviso né da
p1 , né da p2 , né da pN , perché la divisione di un numero cosı̀ costruito per
questi fattori da sempre resto 1.
Se P + 1 è composto, allora deve esistere un altro numero primo pM che
deve essere forzatamente maggiore di pN perché diverso da tutti gli altri
primi.
Ecco, qui Euclide usa il postulato che si è appena costruito sopra.
Ma se pM > pN , allora vuol dire che pN non è il massimo dei numeri primi
e, quindi di nuovo, che la nostra ipotesi è falsa e che i numeri primi sono
infiniti.

Euclide dimostra che, supponendo che i numeri primi siano finiti, si ottiene
sempre una contraddizione e, quindi, che i numeri primi devono essere
necessariamente infiniti.

4
Paradosso del compleanno

1 Paradosso del compleanno


La teoria della probabilità è un campo della matematica particolarmente ricco
di paradossi.
Il paradosso del compleanno è un esempio perfetto. Se si scelgono a caso 24
persone, intuitivamente si potrebbe pensare che la probabilità che due o più di
loro abbiano lo stesso compleanno sia molto bassa.
Invece, la probabilità, è 27
50 , cioè poco più del 50%.
George Gamow, presenta la dimostrazione sfruttando la probabilità dell’evento
contrario. La probabilità che il giorno del compleanno di due persone qualsiasi
non sia uguale è chiaramente di 364 365 (poichè c’è solo una probabilità su 365 che
il giorno del compleanno di una persona, coincida con quello di un’altra).
La probabilità che il giorno del compleanno di una terza persona sia diverso da
quello delle prime due, è 363
365 e cosı̀ via finchè non arriviamo alla ventiquattres-
ima persona ( 342
365 ).
Otteniamo cosı̀ una serie di 23 frazioni che devono essere moltiplicate fra loro
per ottenere la probabilià che tutti i 24 compleanni cadano in giorni diversi.
Il prodotto è una frazione che, ridotta ai minimi termini, è 23 50 (questo calcolo
non tiene conto del 29 Febbraio e del fatto che le date di nascita tendono a
concentrarsi di più in certi mesi che in altri; ossia assumiamo che i compleanni
assumino una distribuzione uniforme).
Definiamo con:
(P (E)): la probabilità che le n persone siano nate in giorni diversi e sia E
l’evento ”nessuna delle n persone è nata nello stesso giorno”.
Allora:

365 ⇥ 364 ⇥ 363 . . . ⇥ (365 n + 1)


P (E) =
365 ⇥ 365 ⇥ 365 ⇥ . . . ⇥ 365
Quindi la probabilità che almeno due delle n persone siano nati nello stesso
giorno è data da: 1 P (E).

Nella figura seguente viene mostrato graficamente come cresce la curva della
probabilità all’aumentare del numero di persone.
Il grafico è limitato a 100 persone, perchè oltre quel numero, la probabilità è
troppo vicina alla certezza e sul grafico non si distinguerebbe più dalla retta.
Notiamo che la curva sale rapidamente fino intorno alle 40 persone, poi tende
ad appiattirsi avvicinandosi alla certezza.
La certezza assoluta, banalmente, non si raggiunge fino a che non sono coinvolte
366 persone.

3
2 Cos’è una funzione hash
Una funzione hash è una qualunque funzione che trasforma i dati in input in un
output di lunghezza costante.

.
Una funzione hash ha le seguenti proprietà:
• M può essere di qualsiasi dimensione
• h è sempre della stessa dimensione di M
• H(M) è facile da calcolare

4
• ogni valore di h ha la stessa probabilità di essere restituito.
Per essere usate in ambito crittografico, le funzioni devono avere altre proprietà:
1. unidirezionalità: noto h deve essere computazionalmente impossibile
trovare M tale che H(M) = h

2. resistenza debole alle collisioni: conoscendo M, deve essere com-


putazionalmente impossibile trovare M’ tale che H(M)=H(M’)
3. resistenza forte alle collisioni: deve essere computazionalmente im-
possibile trovare una coppia (M,M’) tale che H(M)=H(M’)

4. e↵etto valanga: una piccola modifica di M deve alterare tutto h.

3 Paradosso del compleanno e la collsione hash


Torniamo brevemente al problema del compleanno: questo paradosso, ha im-
portanti ricadute nella crittografia e nel dimensionamento del blocco da cifrare.
In particolare, nell’ambito della crittografia, si utilizza, il paradosso del com-
pleanno per indicare che le funzioni hash crittografiche abbiano la proprietà
resistenza forte alle collisioni.
Si suppongano gli n valori equamenti probabili.
La formula generale è:
n!
P (n, k) = 1
(n k)!nk

Con le dovute approssimazioni, ottengo:


k(k 1)
P (n, k) > 1 e 2n

Eguagliando questa quantità a 0,5, si scopre per quale valore di k, ho una prob-
abilità del 50% di avere due elementi uguali.
p p p p m
k = ln(2) ⇤ 2n = 1, 18 n ⇡ n = 2m = 2 2

Mostriamo ora, come tramite questi risultati, una funzione hash può risultare
N
insicura quando vengono generati 2 2 risultati in quanto si ha la probabilità di
oltre il 50% di aver trovato una collisione.

Poniamo il seguente problema:


1. il mittente A si prepara a firmare un messaggio M aggiungendo il relativo
codice hash (lungo n bit) crittografato con la propria chiave privata.

5
n
2. l’estraneo genera 2 2 varianti di m tutte con lo stesso significato.
Prepara inoltre un uguale numero di varianti del messaggio fraudolento
da sostituire al vero messaggio
3. per il paradosso del compleanno, l’estraneo ha una probabilità maggiore
di 0,5 di trovare una coppia di messaggi (vero, fraudolento) con lo stesso
codice hash.
4. l’estraneo o↵re la variante valida ad A per la firma. Poichè le due varianti
hanno lo stesso codice hash, produrranno la stessa firma; ciò permetterà
all’estraneo di sostituire il messaggio firmato da A con uno fraudolento
senza dover conoscere la chiave segreta di A.

Ecco come ottiene 236 varianti di un messaggio senza alterarne il significato.

6
Smart card

1 Smart card
Le Smart Card e i token USB, dispositivi di firma utilizzati per la Firma Digitale
e i servizi di identificazione, sono apparati elettronici in grado di conservare in
maniera protetta le chiavi private e di generare al loro interno la Firma Digitale.
Utilizzano microprocessori basati su standard previsti dalla legge, nei quali sono
implementate avanzate tecnologie crittografiche in un ambiente con standard di
sicurezza molto restrittivi.
La firma digitale viene utilizzata in questo contesto per assicurare la provenienza
e l’integrità della fattura elettronica inviata alla pubblica amministrazione.

In questo scenario, gli utenti che emettono numeri rilevanti di fatture hanno
utilizzato la fattispecie giuridica della sottoscrizione con procedura automatica.
In questo scenario il firmatario sottoscrive in modalità massiva il flusso di fat-
ture e poi le invia al Sistema di Interscambio dell’Agenzia delle Entrate.

Il dispositivo di firma utilizzato si chiama HSM (Hardware Security Module) e


alla data conserva in Italia oltre l’85% per cento delle chiavi crittografiche (dati
AgiD).

Il Regolamento europeo eIDAS n.910 del 23 luglio 2014 (2014/910/UE) ha com-


pletato ed ampliato le regole previste dalla Direttiva Europea 1999/93/EC sulle
firme elettroniche, sui servizi digitali fiduciari e sui servizi di identificazione
ed autenticazione. L’obiettivo principale del Regolamento è quello di migliorare
l’efficienza delle transazioni elettroniche nel mercato europeo, grazie al reciproco
riconoscimento dei sistemi di autenticazione ed identificazione sia delle persone
fisiche sia di quelle giuridiche.

2 Gestione delle smart card


Si osservino i livelli di un sistema operativo.
Da un certo livello in poi ho l’anomizzazione dei processi e, la gestione della
smart card, avviene tramite code.

In un generico web service, la gestione avviene utilizzando la seguente strut-


tura:

3
Abbiamo due tipi di modelli:
• Modello multitasking (utilizzato da Apache)

• Modello multithreading: modello più semplice del precedente.


Entrambi i modelli hanno delle ottime soluzioni nella gestione dei web service.

4
La logica empirica sonando lllaurizio

1 La logica empirica
La logica empirica è la base del ragionamento empirico e quindi del metodo
empirico, e permette di capire un processo reale.
Una logica è un sistema di assiomi, alfabeto e regole che sono coerenti o non
coerenti rispetto alla logica utilizzata.

3
2 Il problema della roulette
Definiamo una roulette come:

• P(N) = porobabilità che la pallina capiti sulla casella nera

• P(R) = porobabilità che la pallina capiti sulla casella rossa


1
• P(N) = P(R) = 2

Sapendo che sono usciti k neri, ci chiediamo qual è la probabilità che il k+1
esimo risultato sia nero.
Quindi ci chiediamo se la probabilità rimanga invariata dopo k lanci, ossia se
P(k+1 = nero | k = nero) = 12
Questo è vero sotto il modello matematico, ma cerchiamo di analizzarlo sotto
una logica empirica.

Supponiamo che alla prima estrazione, al tempo t0 sia uscito nero.


Assumiamo con tx il tempo di rottura della roulette.
Da t0 a tx passa tempo , ossia | t0 - tx | =

Essendo un processo finito (perchè temina a tx ), esiste un osservatore del caso


a di↵erenza di un processo infinito (primo dato empirico).

Al tempo tx ci si aspetta che il numero di casi rossi sia circa uguale al nu-
mero dei casi neri, ossia (P(rossi ' neri) ⇡ 1) e in un tempo t >> t0 avermo
che P(rossi ' neri) ⇡ 1.

Analizziamo un intervallo [t1 , t2 ] incluso in [t0 ,tx ] e supponiamo che l’esito sia
sempre nero (all’interno di questo intervallo).
Dunque, al tempo t2+1 , la probabilià di avere rosso è maggiore di quella nera.

4
3 Funzioni hash
Abbiamo un messaggio M e vogliamo creare una funzione f (M ) che lo protegga.
Questa funzione crea una stringa M’ che non sia facilmente riconducibile a M.

Sappiamo che M 2 U e |U| = N.


Vogliamo che da M si arrivi a M’ con f che è un ”segreto”, ossia che il mapping
è un grafo casuale, dove, ad esempio, se da 5 ricavo 7 senza conoscere f , allora
non so nulla sulla trasformazione di 6.
! ! 1
Quindi: P(6 f 9 | 5 f 7) = N 1 (quando la funzione non è biettiva).

In generale, quello che vorremmo è che: se mettiamo il messaggio M in una


black box (dove trovo la funzione f), il risultato è una frequenza di numeri che
si comportano come numeri random.
Poniamo un esempio: sia la funzione f la funzione mod7. Allora la generazione
dei numeri in output andrà da 0 a 6 ([0, 6]).
!
Se trovo un valore x tale che x f 0, allora abbiamo scoperto f (che è il divisore
proprio di quel numero) e dunque non sarà più segreta.

La condizione necessaria per avere un valore casuale è P (r1 |rj ) = P (ri )


con ri e rj varibili probabilistiche indipendenti.
Se non conosco f non ho un test polinominale per falsificare i test.

La dualità della teoria della sicurezza, verte sulla generazione di bit pseudo
casuali (derivate da f ) e di scoprire dipendenze.

5
Numeri casuali

1 Cos’è un numro cauale?


Una sequenza casuale N k è una sequenza di caratteri generata da una fun-
zione f k(m) dove l’ i esimo carattere della stringa può essere espresso come
si = si 1 +ci , ad esempio può essere usato il troncamento dell’ora in millisecondi
per randomizzare, e il primo carattere s0 = p1 calcolabile e detto generatore.

2 Sequenza casuale in informatica


Prendiamo come una stringa formata da 0 e da 1 ottenuta da lanci di una mon-
eta equa, questa è una sequenza randomica.

Il problema nell’ informatica è dato dal fatto che il lancio di una moneta equa
(quindi la probabilità 12 ), può essere simulato da programmi deterministici e
non c’è quindi una vera randomicità.

2.1 Possibile soluzione al problema


Una possibile soluzione per la generazione di una stringa randomica tramite il
lancio di una moneta è quello di utilizzare un’urna con un insieme di monete
totalmente sbilanciate dove ogni moneta avrà una probabilità di avere un uno
diversa da tutte le altre monete contenute all’interno dell’urna.
In questo modo chiamiamo casuale una sequenza che riteniamo essere stata
prodotta dal caso.
Osservando una sequenza di questo tipo:

0101010101010101010101

ci poniamo la seguente domanda: ritenimo credibile chi ci dicesse di aver ot-


tenuto tale stringa e↵ettuando un lancio di una moneta?
La risposta è ovviamente no: non la riteniamo essere stata prodotta dal caso.
Assumendo che tale sequenza sia stata invece e↵ettivamente ottenuta da lanci
di moneta, comprendiamo che possiamo distinguere due concetti di casualità.
Mantenendo il riferimento alla moneta: un concetto riguarda l’aspettativa su
ciò che è prodotto del caso, l’altro riguarda l’e↵ettività dell’essere prodotto del
caso.
Finora la sequenza di 0 e 1 è stata messa esplicitamente in una relazione di
rappresentatività rispetto a qualche cosa di diverso da essa.
Possiamo però osservare che ogni aspettativa su una serie di lanci di moneta si
traduca semplicemente in una aspettativa sulla sequenza di 0 e 1 che la rappre-
senta.
Come nel nostro esempio, l’individuazione di regolarità avviene come semplice
individuazione di schemi di simboli.

3
Quindi, astraendo dalla sequenza di simboli come rappresentante una sequenza
di risultati: ciò che si vuol cercare qui di chiarire è quella casualità che pertiene
alla sequenza in quanto tale, indipendentemente dalla sua genesi ed indipenden-
temente dal significato dei simboli in essa.
Se diciamo una sequenza essere casuale, è perché essa lo è a prescindere dal fatto
che i simboli in essa stiano a rappresentazione di una qualsiasi altra cosa (ciò
nonostante converrà talvolta, a beneficio dell’intuizione, ricordare comunque che
tali simboli debbano poter esprimere una qualche altra cosa).

2.2 Definizione di stringa random (Kolmogorov )


L’intuizione che ci guidava era che le stringhe random non devono essere facil-
mente descritte, ovvero avere un’alta complessità.
Ma qual è un valore ragionevole che indica un’alta complessità?
L’idea fondamentale è che se la complessità di una stringa (la lunghezza della
descrizione più breve) è pari alla lunghezza della stringa stessa, allora la de-
scrizione (la stringa da cui il metodo di descrizione restituisce la stringa da
descrivere) non è sostanzialmente diversa dalla stringa stessa, ovvero, detto più
esplicitamente è la stringa stessa la più breve descrizione di sé stessa.
In questo caso la stringa è detta incompressibile.
L’intuizione quindi, avendo dato un significato ad alta complessità, si traduce
in:una stringa è random se è incompressibile.
Possiamo quindi dare la definizione di stringa random, dopo aver fatto la seguente
osservazione. In un certo senso sarebbe artificioso a↵ermare che la lunghezza
della stringa costituisca un criterio per la separazione netta tra random è non-
random, ovvero tra incompressibile e compressibile.
Sembra opportuno quindi introdurre nella definizione una costante (arbitraria)
che comporti un certo intervallo di compressibiltà.
Una stringa s è c random se è c incompressibile, ovvero: se, stabilito un
margine di incompressibiltà c tale che C(s) = l(s) c.

Potrebbero piacerti anche