Docsity
Docsity

Prepara i tuoi esami
Prepara i tuoi esami

Studia grazie alle numerose risorse presenti su Docsity


Ottieni i punti per scaricare
Ottieni i punti per scaricare

Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium


Guide e consigli
Guide e consigli


Data Security & Privacy, Appunti di Sicurezza Dei Sistemi Informativi

Appunti del corso Data Security & Privaci, Università degli studi di Firenze

Tipologia: Appunti

2020/2021

Caricato il 08/07/2021

lorenzo-pratesi-1
lorenzo-pratesi-1 🇮🇹

2 documenti

1 / 76

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
Data Security & Privacy
Lorenzo Pratesi Mariti
2020
Definizioni e teoremi sulla sicurezza
Contents
4 Perfect Secrecy e One-Time Pad 3
4.1 PerfectSecrecy .................................. 3
4.2 One-TimePad................................... 3
4.2.1 Costruzione ................................ 3
5 SPN e Cifrari di Feistel 4
5.1 Reti di Sostituzione-Permutazione . . . . . . . . . . . . . . . . . . . . . . . . 4
5.2 CifraridiFeistel ................................. 6
6 Gestione della Chiave Condivisa 8
6.1 Link encryption vs. end-to-end encryption . . . . . . . . . . . . . . . . . . . 8
6.2 Distribuzione della chiave segreta . . . . . . . . . . . . . . . . . . . . . . . . 8
6.3 Duratadellechiavi ................................ 9
7 Crittografia a Chiave Pubblica 9
7.1 Prerequisiti per un sistema di cifratura a chiave pubblica . . . . . . . . . . . 10
8 Aritmetica Modulare 11
8.1 Concettidibase.................................. 11
8.2 Operazioni modulo n............................... 13
8.3 MCD e algoritmo di Euclide . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
8.4 I teoremi di Fermat e di Eulero . . . . . . . . . . . . . . . . . . . . . . . . . 15
8.5 Algoritmo di esponenziazione veloce . . . . . . . . . . . . . . . . . . . . . . . 17
8.6 Il Teorema Cinese del Resto . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
8.7 Generazione di numeri primi e test di primalit`a . . . . . . . . . . . . . . . . 19
8.7.1 IltestdiFermat ............................. 19
8.7.2 IltestdiRabin .............................. 20
8.8 Illogaritmodiscreto ............................... 21
1
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f
pf30
pf31
pf32
pf33
pf34
pf35
pf36
pf37
pf38
pf39
pf3a
pf3b
pf3c
pf3d
pf3e
pf3f
pf40
pf41
pf42
pf43
pf44
pf45
pf46
pf47
pf48
pf49
pf4a
pf4b
pf4c

Anteprima parziale del testo

Scarica Data Security & Privacy e più Appunti in PDF di Sicurezza Dei Sistemi Informativi solo su Docsity!

Data Security & Privacy

Lorenzo Pratesi Mariti

Definizioni e teoremi sulla sicurezza

  • 4 Perfect Secrecy e One-Time Pad Contents
    • 4.1 Perfect Secrecy
    • 4.2 One-Time Pad
      • 4.2.1 Costruzione
  • 5 SPN e Cifrari di Feistel
    • 5.1 Reti di Sostituzione-Permutazione
    • 5.2 Cifrari di Feistel
  • 6 Gestione della Chiave Condivisa
    • 6.1 Link encryption vs. end-to-end encryption
    • 6.2 Distribuzione della chiave segreta
    • 6.3 Durata delle chiavi
  • 7 Crittografia a Chiave Pubblica
    • 7.1 Prerequisiti per un sistema di cifratura a chiave pubblica
  • 8 Aritmetica Modulare
    • 8.1 Concetti di base
    • 8.2 Operazioni modulo n
    • 8.3 MCD e algoritmo di Euclide
    • 8.4 I teoremi di Fermat e di Eulero
    • 8.5 Algoritmo di esponenziazione veloce
    • 8.6 Il Teorema Cinese del Resto
    • 8.7 Generazione di numeri primi e test di primalit`a
      • 8.7.1 Il test di Fermat
      • 8.7.2 Il test di Rabin
    • 8.8 Il logaritmo discreto
  • 9 Lo schema RSA
    • 9.1 Parametri, encryption e decryption
    • 9.2 Aspetti computazionali
    • 9.3 Resistenza di RSA
      • 9.3.1 Attacchi di forza bruta
      • 9.3.2 Attacchi matematici
      • 9.3.3 Attacchi basati sul tempo
      • 9.3.4 Attacchi chosen-plaintext
  • 10 Schemi basati sul log discreto
    • 10.1 Il sistema di cifratura El Gamal
    • 10.3 Scambio della chiave di Diffie-Hellman
  • 11 Funzioni di autenticazione
    • 11.1 Funzioni hash crittografiche
    • 11.2 Birthday attacks e MAC
  • 12 Teoria dell’Informazione
    • 12.1 Entropia di Shannon
    • 12.2 Entropia condizionale
    • 12.3 Divergenza di Kullback-Leibler
    • 12.4 Propriet`a dell’entropia
  • 13 Compressione dei dati
    • 13.1 Codici di compressione
    • 13.2 Codici di compressione ottimi
    • 13.3 Codici di Huffman
  • 14 Canali e Capacit`a
    • 14.1 Canali rumorosi
    • 14.2 Codici correttori e teorema di channel coding
  • 16 Sicurezza Incondizionata
    • 16.1 Key Equivocation
    • 16.2 Unicity distance

Decryption

Dk[c] = c ⊕ k

Infatti, per la propriet`a dello XOR: Dk[Ek[m]] = Dk[m ⊕ k] = m ⊕ k ⊕ k = m.

Definizione 4.3. One-Time Pad `e un cifrario perfetto.

Dimostrazione. Sia dunque m ∈ P un messaggio qualsiasi e sia c ∈ C un ciphertext qualsiasi di probabilit`a non nulla. Dobbiamo dimostrare che:

p(m|c) = p(m)

Possiamo riscrivere il lato sinistro usando la regola di Bayes:

p(m|c) =

p(c|m) · p(m) p(c)

Passiamo ora a valutare l’espressione a destra dell’uguaglianza. L’osservazione cruciale e che, per la proprieta dello XOR a ⊕ a = 0, abbiamo c = m ⊕ k ⇐⇒ k = c ⊕ m. Quindi, dati m e c, esiste una e una sola chiave km,c = c ⊕ m cifrando m con la quale si ottiene c come ciphertext. Perci`o, per ogni m e c

p(m|c) = p(km,c) =

2 N

dove l’ultima uguaglianza e giustificata dalla distribuzione uniforme sulle chiavi. Veniamo ora al calcolo di⋃ p(c). L’ evento [C = c] si puo decomporre come un’unione di eventi disgiunti

m′∈P [C^ =^ c, M^ =^ m ′], ognuno avente probabilit`a p(c, m′) = p(c|m′)p(m′). Ma, per quanto

sopra detto, p(c|m′) = 1/ 2 N^. Dunque p(c) si pu`o scrivere come:

p(c) =

m′∈P

p(c|m′)p(m′) =

m′∈P

p(m′) 2 N^

2 N

m′∈P

p(m′) =

2 N

dove l’ultima uguaglianza deriva del fatto che

m′∈P p(m

′) = 1. Sostituendo nel lato destro

della (1) il valore calcolato per p(c|m) e per p(c), ovvero 1/ 2 N^ , otteniamo l’identit`a cercata.

5 SPN e Cifrari di Feistel

5.1 Reti di Sostituzione-Permutazione

Consideriamo il caso di cifrari monolafabetici a blocchi su n bit. Nel caso pi`u generale, per ogni fissata chiave, un tale cifrario definisce una trasformazione f iniettiva da blocchi di n bit a blocchi di n bit f : { 0 , 1 }n^ −→ { 0 , 1 }n

Nel caso piu generale, che stiamo considerando, le possibili trasformazioni sono tante quante le permutazioni dei 2n^ blocchi, cioe 2n!.

Vantaggi

Per dissipare la regolarita statistica, dunque, si devono prendere blocchi piuttosto grandi, ad esempio con n = 64. Le ragioni principali sono due: da una parte i blocchi grandi tendono ad essere equiprobabili con probabilita piccole; dall’altra risulta praticamente impossibile accumulare dati significativi sulla frequenza dei blocchi, data la loro dimensione. Questi fatti ci mettono al riparo da attacchi statistici ciphertext-only. Inoltre, attacchi di tipo known-plaintext non sono noti contro cifrari di questo tipo. Per esempio, giacch´e la funzione di encryption non `e una funzione lineare della chiave, non funzionano attacchi del tipo visto contro il cifrario di Hill.

Svantaggi

Blocchi di grandi dimensioni pero presentano un problema pratico insormontabile: la chiavee rappresentata dalla permutazione stessa, che viene codificata impiegando n × 2 n^ bit. Se prendiamo n = 64, la chiave risulta avere un numero di bit pari a 64 × 264 ≈ 1021. Tale numero di bit `e esorbitante e verosimilmente eccede la grandezza in bit del messaggio che si vuole trasmettere.

Propriet`a

Per ovviare a questo problema, Shannon, e dopo di lui Feistel, proposero di ricorrere a cifrari a blocchi piu semplici da implementare del puro cifrario a sostituzione, iterati pero un certo numero di volte per aumentarne la resistenza. Questo porta al concetto di Substitution- Permutation Network (SPN), proposto da Shannon. Da questo concetto traggono origine quasi tutti i cifrati a chiave condivisa oggi in uso, come i cifrari di Feistel, tra cui il DES, e AES. I due concetti proposti da Shannon per realizzare cifrari pratici e resistenti all’analisi statistica dell’attaccante sono quelli di diffusione e confusione.

  • Diffusione: serve a dissipare la ridondanza di ogni singola lettera o blocco, spalman- dola su tutto il testo cifrato. Allo scopo si useranno due tecniche. - Permutazione delle singole lettere o dei bit del plaintext, secondo regole fissate. Questa tecnica serve a nascondere la frequenza dei vari blocchi di bit (lettere), ovvero dei q-grammi. La frequenza delle singole lettere rimane la stessa. - Combinazione: ogni bit (lettera) del ciphertext viene fatta dipendere da molti bit (lettere) del plaintext. Questo serve a nascondere la frequenza delle singole lettere. Abbiamo gi`a visto all’opera questo principio nel caso del cifrario di Hill. Ecco un altro esempio di combinazione.
  • Confusione: Serve a rendere difficile da analizzare la relazione plaintext −→ cipher- text che si ottiene una volta fissata la chiave. Il meccanismo per farlo sara quello di impiegare, nella definizione di questa relazione, operazioni di sostituzione di gruppi di bit (lettere) con altri, in funzione del valore della chiave. Abbiamo gia visto questo principio applicato ai cifrari mono e poli alfabetici e al metodo One-Time Pad. E da` sottolineare che la funzione di sostituzione non deve mai essere una funzione lineare

visto come una realizzazione del principio di permutazione. Ulteriori permutazioni e combinazioni possono aver luogo all’interno della funzione F.

  • La funzione F `e la stessa per tutti i round, e prende come argomenti Ri e Ki.

Per quanto detto, il generico round i-esimo (i > 0) pu`o essere descritto come segue:

Round(Li− 1 , Ri− 1 , Ki) = (Li, Ri)

dove: Li = Ri− 1 , Ri = F (Ri− 1 , Ki) ⊕ Li− 1 e (L 0 , R 0 ) `e il plaintext.

Decryption

Per decifrare un ciphertext, occorre semplicemente farlo passare di nuovo attraverso l’algoritmo, avendo cura pero di usare le n sottochiavi in ordine inverso. Per convincersi di questo fatto, notiamo prima di tutto che vale la seguente proprieta. Sia (Li, Ri) la coppia ottenuta all’uscita del round i, per 1 ≤ i ≤ n. Allora si verifica facilmente che, facendo passare la coppia (Ri, Li) (si noti lo scambio tra parte destra e sinistra) da Round con chiave Ki, si ottiene in uscita la coppia (Ri− 1 , Li− 1 ). Questo pu`o anche essere derivato dalla definizione di round i-esimo

Definizione (Round i-esimo.)

Ri− 1 = Li Li− 1 = Ri ⊕ F (Ri− 1 , Ki) = Ri ⊕ F (Li, Ki)

Criteri per la scelta della funzione F

L’aspetti, quello forse piu criticoe la scelta della funzione F , che implementa l’operazione di sostituzione. Nei cifrari DES e AES, come pure in altri cifrari, la funzione F impiega al suo interno le cosidette Substitution-Box, in breve S-Box. Una S-box e una tabella che associa ad ogni possibile blocco di m bit in ingresso un blocco di n bit in uscita. Due criteri che sono pensati per impedire all’attaccante di stabilire relazioni statistiche ap- prezzabili tra bit di ingresso (plaintext o chiave) e singoli bit di uscita (ciphertext): l’esistenza di queste relazioni potrebbe aiutare l’attaccante a ridurre lo spazio di ricerca sia della chiave che del testo in chiaro, o aiutarlo ad analizzare separatamente, e quindi piu efficientemente, i singoli bit di uscita e di ingresso.

  • Avalanche Criterion (criterio della valanga). Un buon algoritmo di cifratura deve garantire che un piccolo cambiamento nel plaintext e/o nella chiave produca un grande cambiamento nel testo cifrato. In particolare, il cambiamento di un bit nel plaintext o di un bit nella chiave deve produrre in media il cambiamento di molti bit nel ci- phertext. Esiste una versione piu restrittiva di questo criterio detta Strict Avalanche Criterion (SAC). Essa afferma che qualunque bit di uscita j di una S-box deve cam- biare con probabilita 1/2 quando un qualunque singolo bit di ingresso i della S-box viene invertito, per ogni i, j.
  • Bit Independence Criterion (criterio dell’indipendenza tra bit). I bit di uscita j e k dovrebbero cambiare in modo indipendente quando un singolo bit di ingresso i viene invertito, e questo per ogni i, j e k.

6 Gestione della Chiave Condivisa

Scenario: i messaggi vengono scambiati all’interno di una rete a commutazione di pacchetto, come Internet. In una rete a commutazione di pacchetto avremo vari nodi host e vari collega- menti detti link. Quando un messaggio deve essere inviato da un host ad un altro che se non sono collegati in modo diretto interviene un meccanismo di smistamento routing. Il messag- gio trasmesso `e formato da un payload (messaggio, contenuto) ed un header (informazioni utili per l’instradamento).

6.1 Link encryption vs. end-to-end encryption

L’informazione contenuta all’interno del pacchetto si pu`o proteggere mediante due approcci:

  • Link encryption: ogni link della rete e dotato di un meccanismo di encryption/decryption: ciascuna coppia di nodi collegata da un link diretto condivide una distinta chiave seg- reta, e il traffico di informazioni su quel link viene protetto da quella chiave. Questo approccio protegge dalla traffic analysis (l’headere cifrato), tuttavia espone a violazioni di confidenzialita quando i pacchetti si trovano all’interno dei nodi (la parte datie in chiaro).
  • End-to-end encryption: ogni coppia di nodi che vogliono comunicare tra loro (end- systems) condivide una chiave segreta K. I pacchetti che si scambiano i due nodi attraversano la rete con l’header in chiaro e la parte dati cifrata con la chiave K. Questo approccio garantisce la confidenzialit`a e l’autenticazione in ogni momento (solo mittente e destinatario posseggono la chiave) ma espone ai pericoli della traffic analysis.

In genere si preferisce utilizzare una combinazione tra i due approcci: mittente e destinatario si affidano a End-to-end encryption mentre il sistema sottostante, si preoccupa di usare link encryption.

6.2 Distribuzione della chiave segreta

Key Distribution Center (KDC): supponiamo che esista un entit`a fidata chiamata KDC, i due interlocutori (che non condividono ancora una chiave) si rivolgono ad essa per ottenere la chiave. Inizialmente ogni nodo possiede una master key per interloquire con KDC, si suppone che tale chiave sia fissata all’inizio ed abbia una durata molto lunga. Due utenti qualsiasi, diciamo A e B, possono accordarsi su una chiave condivisa, detta session key, medi- ante il seguente protocollo, dovuto a Needham e Schroeder (si ha una mutua autenticazione). Il protocollo prevede il seguente scambio di messaggi:

Considerazioni, vulnerabilit`a

E ragionevole supporre che, in certe circostanze, una vecchia chiave di sessione^ K s′, non piu in uso tra A e B, possa essere compromessa (per esempio, perch´e l’attaccante, dato un tempo abbastanza lungo, `e in grado di recuperarla). Da questo punto di vista, il protocollo di Needham-Schroeder visto prima presenta una debolezza. In particolare, il punto 3 del

  • una chiave privata K A− , conosciuta soltanto da A e mantenuta segreta.

Se un utente B vuole inviare un messaggio M ad A, cifra M con la chiave pubblica di A (K+ A ) e invia il seguente messaggio cifrato

C = EK A+ [M ]

Quando A riceve il messaggio C, usa la propria chiave privata K− A per decifrarlo:

DK A− [C] = DK− A

[

EK+ A [M ]

]

= M

7.1 Prerequisiti per un sistema di cifratura a chiave pubblica

  • un insieme di coppie di chiavi K ⊆ K+^ × K−
  • una famiglia di funzioni di cifratura {fK+ : M −→ C | K+^ ∈ K+^ : fK+ iniettiva}

Questi due insiemi devono essere tali che:

  1. sia computazionalmente facile generare 〈K+, K−〉 ∈ K;
  2. fk+ sia facile da calcolare;
  3. f (^) k−+^1 sia difficile da calcolare;
  4. f (^) k−+^1 sia facile da calcolare se si conosce K−;
  5. dati K+^ e C = fK+^ (M ), `e difficile ricavare K−;
  6. Per ogni messaggio M da firmare, vale che fK+ [fk− [M ]] = M ;
  7. Dati M, S = fK− [M ] e K+^ `e difficile risalire a K−.

Una funzione che gode delle proprieta (2) e (3) si dice essere one-way. Se una funzione gode anche della proprieta (4), la funzione si dice one-way trapdoor (OWT). Le funzioni di encyption e decryption vengono definite ponendo: fK = f (^) K−^1 + e dunque: EK+ [M ] = fK+ (M ) e DK− [C] = fK− (C). Si introducono tuttavia problemi di autenticazione: come si fa a sapere se una chiave pubblica K+^ appartiene veramente ad un dato utente? Si usa la firma digitale. La firma digitale permette al ricevente: di verificare la provenienza del messaggio (autenticazione) e la sua integrita, di provare ad un terzo, in qualsiasi momento, di aver ricevuto quel messaggio (non-ripudiabilita).

8 Aritmetica Modulare

8.1 Concetti di base

Definizione 8.1. Un numero intero p > 1 e primo see divisibile solamente per 1 e p. L’insieme dei numeri primi si indica con P = { 2 , 3 , 5 , 7 , 11 , 13 , ...}.

Teorema 8.2 (fattorizzazione unica) Per ogni numero intero positivo n, esistono unici p 1 , ..., ph ∈ P e α 1 , ..., αh positivi tali che

n = pα 1 1 · · · · · pα h h=

∏^ h

i=

pα ii

Dimostrazione. Dividiamo la dimostrazione del teorema fondamentale dell’aritmetica in due parti: (1) nella prima parte dimostreremo che ogni numero naturale maggiore di 2 o e un numero primo o ammette una scomposizione in fattori primi; (2) nella seconda parte dimostreremo l’unicita di tale fattorizzazione.

  1. Detto n un qualsiasi numero naturale maggiore di 1, ossia n ≥ 2, procediamo per induzione su n - (Passo base) Sia n = 2. Poich´e 2 e un numero primo, l’enunciatoe vero. - (Passo induttivo) Supponiamo che ogni numero naturale compreso tra 2 ed n o e un numero primo o si puo scrivere come prodotto tra numeri primi, e dimostriamo che cioe vero anche per n + 1 - Se n + 1 e un numero primo abbiamo la tesi; - se n + 1 none primo, allora esiste un numero primo p che divide n + 1, e quindi esiste un numero naturale a con 2 ≤ a ≤ n tale che n + 1 = p · a. Poich´e a e un numero naturale compreso tra 2 ed n, per ipotesi induttiva o ae primo, oppure si pu`o scrivere come prodotto tra numeri primi. Ad ogni modo, siamo riusciti a scrivere n + 1 come prodotto tra numeri primi, da cui segue la tesi.
  2. Procediamo ad una dimostrazione per assurdo e supponiamo che esistano dei numeri scomponibili in modi diversi. Diciamo n il piu piccolo tra essi e siano n = p 1 · p 2 · ... · pr, n = q 1 ·q 2 ·...·qs due fattorizzazioni distinte di n con pi 6 = qj per ogni i ∈ { 1 , 2 , ..., r} e per ogni j ∈ { 1 , 2 , ..., s}. Se ci fosse qualche fattore identico, ossia se ci fosse un ph uguale a qk, allora potremmo dividere entrambe le scomposizioni per tale fattore e ricondurci cosı al caso in cui le due fattorizzazioni siano formate da fattori distinti. A questo punto, essendo p 1 6 = q 1 , supponiamo che q 1 > p 1 e poniamo m := (q 1 − p 1 ) · q 2 · q 3 ...qs. Moltiplicando si ottiene m := (q 1 − p 1 ) · q 2 · q 3 ...qs = q 1 · q 2 ...qs − p 1 · q 2 · q 3 ...qs. Poich´e avevamo supposto che n = q 1 · q 2 ...qs, sostituendo nella relazione precedente si ricava m := n − p 1 · q 2 ...qs da cui si deduce che m < n. Riprendiamo ora il numero m := (q 1 − p 1 ) · q 2 · q 3 ...qs ed osserviamo che in questa scomposizione non compare il fattore p 1 , infatti (q 1 − p 1 ) 6 = p 1 e per quanto supposto

8.2 Operazioni modulo n

Per a, b qualsiasi, n ≥ 1 valgono le seguenti propriet`a:

  1. (a mod n) ± (b mod n) ≡n (a ± b) mod n;
  2. (a mod n) · (b mod n) ≡n (a · b) mod n;
  3. a + b ≡n a + c =⇒ b ≡n c (Legge di cancellazione per la somma). La proprieta vale perch´e esiste l’inverso rispetto all’operazione di somma. Infatti, per un qualsiasi numero a ∈ Zn si ha che n = a + (n − a) ≡n 0. Quindi l’inverso di a (rispetto alla somma)e unico in Zn ed `e proprio n − a.
  4. se (a, n) = 1 allora a · b ≡n a · c implica b ≡n c (Legge di cancellazione per il prodotto).

Proposizione 8.8 (inverso modulo n). Sia n ≥ 1. Esiste, ed `e unico in Zn, l’inverso di a rispetto al prodotto modulo n, se e solo se (a, n) = 1. Quando esiste, l’inverso di a modulo n in Zn si indica con a−^1 mod n.

8.3 MCD e algoritmo di Euclide

Lemma 8.9 (Algoritmo di Euclide). Sia n ≥ 1 e a un intero. Allora

(a, n) = (n, a mod n)

Dimostrazione. Sia x un intero qualsiasi. Dimostriamo che x|a e x|n se e solo se x|n e x|(a mod n): in tal modo, le coppie di interi (a, n) e (n, a mod n) hanno gli stessi divisori comuni, e quindi anche lo stesso MCD. Supponiamo prima che x|a e x|n. Applicando il Teorema della Divisione, possiamo dividere a per n, a = q · n + (a mod n), per q opportuno, da cui a mod n = a − q · n. Per l’ipotesi x|a e x|n, otteniamo allora che vale anche x|(a − q · n) = (a mod n). Viceversa, assumiamo che x|n e x|(a mod n). Come prima, per il Teorema di Divisione possiamo scrivere a = q · n + (a mod n) e dunque otteniamo che x|a.

Dati degli interi a e b, con b ≥ 1, il lemma precedente afferma che (a, b) = (b, a mod b). Poniamo ora r 0 = a e r 1 = b. L’algoritmo di Euclide consiste nel calcolare gli elementi della successione ri = ri− 2 mod ri− 1 con i ≥ 2.

Teorema 8.10 (Identita di Bezout). Dati a e b interi non entrambi nulli,e possibile esprimere d = (a, b) come combinazione lineare intera di a e b. In altre parole, esistono interi x e y tali che d = a · x + b · y. In particolare, se b ≥ 1 e d = 1, abbiamo x ≡b a−^1 mod b.

Dimostrazione. Per comodit`a di notazione, poniamo r 0 = a, r 1 = b 6 = 0. Applicando ripetutamente il teorema della Divisione, possiamo ottenere una sequenza decrescente di

resti non negativi {r 1 , ..., rm+1}, dove rm+1 = 0 `e il primo resto nullo.

r 0 = q 1 · r 1 + r 2 r 1 = q 2 · r 2 + r 3 r 2 = q 3 · r 3 + r 4 .. . rm− 2 = qm− 1 · rm− 1 + rm rm− 1 = qm · rm + rm+1 = qm · rm

Per il Lemma 8.9, rm = (a, b) = d. Riscrivendo le equazioni di cui sopra, possiamo ottenere una sequenza di definizioni per i resti non nulli:

r 0 = a r 1 = b r 2 = r 0 − q 1 · r 1 r 3 = r 1 − q 2 · r 2 r 4 = r 2 − q 3 · r 3 .. . rm = rm− 2 − qm− 1 · rm

Per induzione su i, si mostra facilmente che ciascun ri, 0 ≤ i ≤ m, pu`o essere scritto come a · x′^ + b · y′, per opportuni x′^ e y′^ interi. In particolare, quindi, esistono x e y tali che rm = d = a · x + b · y.

Proposizione 8.11. Sia n > 0. Esiste a^1 mod n se e solo se MCD(a, n) = 1. Inoltre l’inverso, quando esiste, `e unico in Zn.

Dimostrazione.

  • (Esistenza) Supponiamo prima che esista a^1 mod n. Preso un qualsiasi d divisore comune di a ed n avremo, moltiplicando per n/d

a × a−^1 = 1 mod n e dunque 0 =

n d

× a × a−^1 =

n d

mod n

quindi 0 = nd mod n. L’unica possibilitae che d = 1, per cui MCD(a, n) = 1.

  • (Unicita) Supponiamo che MCD(a, n) = 1. Dimostriamo l’esistenza e l’unicita dell’inverso di a modulo n. In effetti, l’esistenza deriva dalla parte finale del teorema prece- dente (l’identita di Bezout). L’unicita deriva dalla commutativita e associativita del prodotto, infatti: a = 1 mod n e a × b′^ = 1 mod n implicano b′^ × a × b = 1 × b = b = b′^ mod n.

Osservazione 8.3. In generale φ(p) = p − 1 se p `e primo. Se p, q ∈ P, con p 6 = q, φ(p · q) = φ(p) · φ(q).

Teorema 8.14 (Eulero). Se a e n ≥ 1 sono coprimi tra loro, allora aφ(n)^ ≡n 1.

Dimostrazione. Siano Z∗ n = {x 1 , ..., xφ(n)} coprimi con n in Zn. Vogliamo dimostrare che

{x 1 , ..., xφ(n)} = {a · x 1 mod n, ..., a · xφ(n) mod n}

La prova si basa sulle seguenti osservazioni:

  • per ogni i, a · xi mod n e coprimo con n. Infatti a loe per ipotesi, xi per costruzione, e dunque anche a · xi lo e. Da cui segue, per il Lemma 8.9 che anche a · xi mod ne coprimo con n.
  • per ogni i 6 = j, a · xi 6 ≡n a · xj. Se cos`ı non fosse, per la legge di cancellazione del prodotto (4), dovrebbe risultare xi ≡n xj. Per come sono stati scelti xi e xj , risulta invece che xi 6 ≡n xj.

Quindi φ ∏(n)

i=

xi =

φ ∏(n)

i=

[(a · xi) mod n] ≡n

φ ∏(n)

i=

a · xi = aφ(n)^ ·

φ ∏(n)

i=

xi

Dato che ciascun xi e coprimo con n, anche il prodotto degli xi loe. Ci`o implica che esiste l’elemento inverso modulo n (^) 

φ ∏(n)

i=

xi

− 1 mod n

Moltiplicando entrambi i membri dell’equazione precedente per tale elemento inverso si ot- tiene la tesi.

Corollario 8.15. (base di RSA) Siano p, q numeri primi distinti, sia n = p·q, sia m ∈ Zn e sia h qualsiasi. Allora mh·φ(n)+1^ ≡n m

Dimostrazione. Se m e coprimo con n si applica il teorema di Eulero. Se m none coprimo con n = p · q ci sono due casi (escludendo il caso banale m = 0):

  • m ha p come fattore, per cui risulta che m = j · p con 1 ≤ j < m;
  • m ha q come fattore, per cui risulta che m = j · q con 1 ≤ j < m;

Evidentemente m non puo avere sia p che q come fattori, perch´e p · q = n e m < n. Dato che m ha p come fattore, risulta che me coprimo con q. Per il teorema di Eulero si ha che mφ(q)^ ≡q 1

Elevando entrambi i membri della precedente equivalenza a φ(p) si ottiene

mφ(p)φ(q)^ ≡q 1

Considerando che φ(p)φ(q) = φ(pq) = φ(n) ed elevando entrambi i membri della precedente equivalenza ad h si ottiene mhφ(n)^ ≡q 1.

Ci`o significa che per un opportuno i si ha che

mhφ(n)^ = i · q + 1

Moltiplicando per m = j · p l’equazione precedente, si ottiene

mh·φ(n)+1^ = (i · q + 1) · j · p = i · j · p · q + j · p ≡n j · p = m

8.5 Algoritmo di esponenziazione veloce

Il problema da trattare e il seguente an^ mod m = (a · ... · a) mod n. Una prima soluzione potrebbe essere quella standard, ovvero moltiplicare a tante volte quanto necessario e ridurre modulo m, tale soluzione non efficiente in quanto i risultati intermedi possono essere numeri enormi. Una strategia piu efficace e quella di calcolare potenze successive di 2, si eleva a al quadrato e se ne prende il residuo modulo m (ottenendo a^2 mod m), poi si eleva questo numero an- cora al quadrato e se ne prende il residuo modulo m(ottenendo a^4 mod m), e cosı via fino a ottenere a^2

k mod m. In questo modo, i risultati intermedi sono numericamente trattabili, e il metodo termina in soli k passi.

Algorithm 1: Algoritmo di esponenziazione modulare veloce Input: a, n >= 0, m >= 1 Output: an^ mod m n=(nk− 1 ,...,n 0 ) 2. Si calcola la rappresentazione in base 2 su k cifre di n; d=1. Accumulatore di prodotti parziali; c=0. Contatore del livello dell’esponente; for i = k - 1 → 0 do d = (d * d) mod m; c = 2 * c; if n[i] == 1 then d = (d * a) mod m; c = c + 1; end end return d;

La correttezza dell’algoritmo segue da due invarianti soddisfatti dall’algoritmo:

8.7 Generazione di numeri primi e test di primalit`a

In generale, per generare casualmente un numero primo n dell’ordine di 2k^ possiamo applicare la seguente idea:

  1. generare un vettore di k bit casuali, porre i bit pi`u e meno significativi a 1. Sia n il numero risultante espresso in forma binaria;
  2. applicare ad n un test di primalit`a;
  3. se n non `e primo, tornare al primo passo, altrimenti si conclude restituendo n.

Questa procedura converge abbastanza velocemente. Infatti, un teorema fondamentale della teoria dei numeri, ci assicura che il numero di primi minori o uguali ad n:

π(n) def = |{p : p ≤ n e p `e primo}|

`e asintoticamente uguale a n/ ln(n), ovvero

lim n→∞

π(n) n/ ln(n)

Cio implica che, per n molto grande, c’e all’incirca un primo ogni ln(n) numeri.

In generale per constatare la primalit`a di un numero n possiamo sfruttare la seguente idea: supponiamo di avere un algoritmo A

A(n) =

1 (vero), se n e composto 0 (falso), se ne probabilmente primo

Dunque: Pr[n composto | A(n) = 1] = 1 e Pr[n composto | A(n) = 0] ≤  con 0 ≤  < 1

8.7.1 Il test di Fermat

Il test si basa sul Teorema di Fermat. Quest’ultimo ci assicura che se n e primo e 0 < x < n, allora xn−^1 ≡n 1. Rovesciando questa asserzione, otteniamo che se xn−^1 6 ≡n 1 con 0 < x < n, allora ne composto. Questo suggerisce di definire il predicato:

compF (x, n)def= vero ⇐⇒ 0 < x < n ∧ xn−^1 6 ≡n 1

Quindi dato n cerco un x che viola il teorema di Fermat, se esiste questo x posso concludere che n e composto. Chiamiamo un numero x t.c. (x, n) = 1 e compF (x, n) da vero un testimone di Fermat per n (testimoniano la colpa di n di essere un numero composto). Cosa si puo dire della risposta falso? Questa si ottiene se xn−^1 ≡n 1: in questo caso, il teorema di Fermat non ci autorizza in alcun modo a concludere che il numeroe primo, cioe che la rispostae corretta, tuttavia possiamo limitare l’errore. Se ogni numero composto avesse “abbastanza” testimoni di Fermat, potremmo sperare di limitare superiormente la probabilit`a di errore, e ottenere dunque un test Montecarlo.

Proposizione 8.17. Esistono numeri composti che non hanno alcun testimone di Fermat.

Dimostrazione. Il numero 561 = 3 · 11 · 17 non ha testimoni di Fermat. Infatti, preso 0 < x < n coprimo con n, per ciascuno dei tre fattori primi p di 561, abbiamo x^561 −^1 ≡p 1, come si vede usando il teorema di Eulero, che ci permette di ridurre l’esponente 561 modulo φ(p). Ad esempio, per p = 11, 560 mod 10 = 0, da cui x^560 ≡ 11 1. Dal CRT - parte unicit`a

  • segue che x^560 ≡ 561 1.

8.7.2 Il test di Rabin

Si parte sempre dal Teorema di Fermat (8.12), ma lo si “rafforza” con la seguente propriet`a dei numeri primi:

Proposizione 8.18 (resti quadratici). Sia n primo e 0 < x < n. Allora x^2 ≡n 1 se e solo se x ≡n ±1.

Dimostrazione. Ovviamente ±1 sono soluzioni di x^2 ≡n 1. Viceversa, x^2 ≡n 1 se e solo se (x + 1)(x − 1) ≡n 0, per cui n divide o il primo termine o il secondo, se n|(x + 1) possiamo concludere che x ≡n −1, se se n|(x − 1) possiamo concludere che x ≡n 1.

Vogliamo cercare un testimone che violi almeno una delle due propriet`a (Fermat o Radici quadrate).

Definizione 8.19 (test di Rabin). compR(x, n) vale vero se e solo se 0 < x < n e, posto n − 1 = 2rm, con m dispari, nella sequenza

x 0 = xm^ mod n x 1 = x^20 mod n (≡n x^2 m) x 2 = x^21 mod n (≡n x^4 m)

... xr = x^2 r− 1 mod n (≡n x^2

r (^) m ≡n xn−^1 )

si ha che x 0 6 = 1 e inoltre xi 6 ≡n −1 per 0 ≤ i < r. Se (x, n) = 1 e compR(x, n) vale vero, diremo che x `e un testimone di Rabin per n.

Proposizione 8.20. Sia n > 1 dispari. Se compR(x, n) vale vero allora n `e composto.

Dimostrazione. Se compR(x, n) vale vero, la sequenza degli xi per costruzione deve essere o del tipo ∗, ..., ∗, oppure ∗, ..., ∗, −1, oppure ∗, ..., ∗, 1 , ..., 1, dove ∗ denota qualsiasi numero diverso modulo n da ±1 (si noti che r > 0 essendo n − 1 pari). Ma allora il numero n non puo essere primo: nei primi due casi verrebbe violato il teorema di Fermat (xn−^1 6 ≡n 1), nel terzo, avremmo trovato una radice quadrata non banale dell’unita (ovvero, si violerebbe la Proposizione 8.18 sui resti quadratici: esiste xi 6 ≡n ±1 t.c. x^2 i ≡n xi+1 = 1).

Teorema 8.21. Ogni numero n composto dispari ha almeno 34 n testimoni di Rabin.