




































































Studia grazie alle numerose risorse presenti su Docsity
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Prepara i tuoi esami
Studia grazie alle numerose risorse presenti su Docsity
Prepara i tuoi esami con i documenti condivisi da studenti come te su Docsity
Trova i documenti specifici per gli esami della tua università
Preparati con lezioni e prove svolte basate sui programmi universitari!
Rispondi a reali domande d’esame e scopri la tua preparazione
Riassumi i tuoi documenti, fagli domande, convertili in quiz e mappe concettuali
Studia con prove svolte, tesine e consigli utili
Togliti ogni dubbio leggendo le risposte alle domande fatte da altri studenti come te
Esplora i documenti più scaricati per gli argomenti di studio più popolari
Ottieni i punti per scaricare
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Appunti del corso Data Security & Privaci, Università degli studi di Firenze
Tipologia: Appunti
1 / 76
Questa pagina non è visibile nell’anteprima
Non perderti parti importanti!





































































Definizioni e teoremi sulla sicurezza
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) =
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^
m′∈P
p(m′) =
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
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.
a 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 linearevisto come una realizzazione del principio di permutazione. Ulteriori permutazioni e combinazioni possono aver luogo all’interno della funzione F.
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.
u 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.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).
L’informazione contenuta all’interno del pacchetto si pu`o proteggere mediante due approcci:
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).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.
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
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:
Questi due insiemi devono essere tali che:
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
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.
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.u 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 suppostoPer a, b qualsiasi, n ≥ 1 valgono le seguenti propriet`a:
a 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.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.
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.
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.
a) 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:
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.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):
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
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:
In generale, per generare casualmente un numero primo n dell’ordine di 2k^ possiamo applicare la seguente idea:
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
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.