Primalità
Gregorio D’Agostino
6 Aprile 2017
Metodi Esatti
Metodi indeterminati
Esercizi
Metodo dell’ispezione
I
Algoritmo: Dato un numero n per verificare se è primo, lo si
divide n per tutti i numeri minori della sua radice quadrata
approssimata per difetto.
∀a <
√
n : mod(n, a) 6= 0 ⇒ n primo.
Metodo dell’ispezione
I
Algoritmo: Dato un numero n per verificare se è primo, lo si
divide n per tutti i numeri minori della sua radice quadrata
approssimata per difetto.
∀a <
I
√
n : mod(n, a) 6= 0 ⇒ n primo.
Numero di operazioni (divisioni) necessarie per il test: ∼
√
n
Metodo dell’ispezione
I
Algoritmo: Dato un numero n per verificare se è primo, lo si
divide n per tutti i numeri minori della sua radice quadrata
approssimata per difetto.
∀a <
√
n : mod(n, a) 6= 0 ⇒ n primo.
√
n
I
Numero di operazioni (divisioni) necessarie per il test: ∼
I
Memoria necessaria per il test: 3 interi di precisione pari alla
lunghezza di n.
Miglioramenti del metodo della ispezione
I
Se si considerano solo i numeri pari (ed il 2) si dimezza il
√
numero di divisioni e si aggiungono n moltiplicazioni. Si
verificano solo i numeri della forma 2k + 1. il tempo di calcolo
√
√
(∼ n(1 − 1/2) = 1/2 n).
Miglioramenti del metodo della ispezione
I
I
Se si considerano solo i numeri pari (ed il 2) si dimezza il
√
numero di divisioni e si aggiungono n moltiplicazioni. Si
verificano solo i numeri della forma 2k + 1. il tempo di calcolo
√
√
(∼ n(1 − 1/2) = 1/2 n).
Memoria necessaria per il test: 3 interi di precisione pari alla
lunghezza di n.
Miglioramenti del metodo della ispezione
I
I
I
Se si considerano solo i numeri pari (ed il 2) si dimezza il
√
numero di divisioni e si aggiungono n moltiplicazioni. Si
verificano solo i numeri della forma 2k + 1. il tempo di calcolo
√
√
(∼ n(1 − 1/2) = 1/2 n).
Memoria necessaria per il test: 3 interi di precisione pari alla
lunghezza di n.
Se si escludono anche i multipli di 3 il tempo di calcolo
√
√
diviene circa un terzo ( n(1 − 1/2)(1 − 1/3) = 1/3 n). Si
verificano solo i numeri della forma 6k ± 1
Miglioramenti del metodo della ispezione
I
I
I
I
Se si considerano solo i numeri pari (ed il 2) si dimezza il
√
numero di divisioni e si aggiungono n moltiplicazioni. Si
verificano solo i numeri della forma 2k + 1. il tempo di calcolo
√
√
(∼ n(1 − 1/2) = 1/2 n).
Memoria necessaria per il test: 3 interi di precisione pari alla
lunghezza di n.
Se si escludono anche i multipli di 3 il tempo di calcolo
√
√
diviene circa un terzo ( n(1 − 1/2)(1 − 1/3) = 1/3 n). Si
verificano solo i numeri della forma 6k ± 1
Se si escludono anche i multipli di 5 il tempo di calcolo diviene
√
√
circa un terzo ( n(1 − 1/2)(1 − 1/3)(1 − 1/5) = 4/15 n).
Memoria necessaria per il test: 6 interi di precisione pari alla
lunghezza di n.
Miglioramenti del metodo della ispezione
I
I
I
I
I
Se si considerano solo i numeri pari (ed il 2) si dimezza il
√
numero di divisioni e si aggiungono n moltiplicazioni. Si
verificano solo i numeri della forma 2k + 1. il tempo di calcolo
√
√
(∼ n(1 − 1/2) = 1/2 n).
Memoria necessaria per il test: 3 interi di precisione pari alla
lunghezza di n.
Se si escludono anche i multipli di 3 il tempo di calcolo
√
√
diviene circa un terzo ( n(1 − 1/2)(1 − 1/3) = 1/3 n). Si
verificano solo i numeri della forma 6k ± 1
Se si escludono anche i multipli di 5 il tempo di calcolo diviene
√
√
circa un terzo ( n(1 − 1/2)(1 − 1/3)(1 − 1/5) = 4/15 n).
Memoria necessaria per il test: 6 interi di precisione pari alla
lunghezza di n.
L’idea si può estendere eliminando i multipli dei primi r primi.
Il tempo scende e la memoria sale.
Miglioramenti del metodo della ispezione
I
I
I
I
I
I
Se si considerano solo i numeri pari (ed il 2) si dimezza il
√
numero di divisioni e si aggiungono n moltiplicazioni. Si
verificano solo i numeri della forma 2k + 1. il tempo di calcolo
√
√
(∼ n(1 − 1/2) = 1/2 n).
Memoria necessaria per il test: 3 interi di precisione pari alla
lunghezza di n.
Se si escludono anche i multipli di 3 il tempo di calcolo
√
√
diviene circa un terzo ( n(1 − 1/2)(1 − 1/3) = 1/3 n). Si
verificano solo i numeri della forma 6k ± 1
Se si escludono anche i multipli di 5 il tempo di calcolo diviene
√
√
circa un terzo ( n(1 − 1/2)(1 − 1/3)(1 − 1/5) = 4/15 n).
Memoria necessaria per il test: 6 interi di precisione pari alla
lunghezza di n.
L’idea si può estendere eliminando i multipli dei primi r primi.
Il tempo scende e la memoria sale.
Esercizio: scrivere codice Octave che attui il metodo
dell’ispezione.
Il crivello di Eratostene
I
I crivello di Eratostene consente di trovare tutti i primi minori
della radice quadrata di un numero assegnato n e verificarne
la primalità.
Il crivello di Eratostene
I
I crivello di Eratostene consente di trovare tutti i primi minori
della radice quadrata di un numero assegnato n e verificarne
la primalità.
I
Il metodo consiste nel cancellare da una lista (contenente i
√
numeri fino a n) tutti i multipli dei numeri primi già scoperti
iniziando dal 2 e dividere n solo per i sopravvissuti.
Il crivello di Eratostene
I
I crivello di Eratostene consente di trovare tutti i primi minori
della radice quadrata di un numero assegnato n e verificarne
la primalità.
I
Il metodo consiste nel cancellare da una lista (contenente i
√
numeri fino a n) tutti i multipli dei numeri primi già scoperti
iniziando dal 2 e dividere n solo per i sopravvissuti.
I
Quando l’algoritmo è utilizzato solo per verificare la primalità
del numero n, si interrompe non appena uno dei primi divide
n. L’algoritmo in questo caso è l’estensione naturale dei
precedenti.
Il crivello di Eratostene
I
I crivello di Eratostene consente di trovare tutti i primi minori
della radice quadrata di un numero assegnato n e verificarne
la primalità.
I
Il metodo consiste nel cancellare da una lista (contenente i
√
numeri fino a n) tutti i multipli dei numeri primi già scoperti
iniziando dal 2 e dividere n solo per i sopravvissuti.
I
Quando l’algoritmo è utilizzato solo per verificare la primalità
del numero n, si interrompe non appena uno dei primi divide
n. L’algoritmo in questo caso è l’estensione naturale dei
precedenti.
√
La memoria richiesta è pari a n, ma il tempo si riduce: le
√
divisioni sono assenti e si compiono circa nπ(n)
moltiplicazioni. Con il simbolo π(n) si indica il numero dei
numeri primi minori di n.
I
Il crivello di Eratostene
I
I crivello di Eratostene consente di trovare tutti i primi minori
della radice quadrata di un numero assegnato n e verificarne
la primalità.
I
Il metodo consiste nel cancellare da una lista (contenente i
√
numeri fino a n) tutti i multipli dei numeri primi già scoperti
iniziando dal 2 e dividere n solo per i sopravvissuti.
I
Quando l’algoritmo è utilizzato solo per verificare la primalità
del numero n, si interrompe non appena uno dei primi divide
n. L’algoritmo in questo caso è l’estensione naturale dei
precedenti.
√
La memoria richiesta è pari a n, ma il tempo si riduce: le
√
divisioni sono assenti e si compiono circa nπ(n)
moltiplicazioni. Con il simbolo π(n) si indica il numero dei
numeri primi minori di n.
I
I
Esercizio: Scrivere un codice di Octave che realizzi il crivello
di Eratostene. Calcolare i primi 100 primi.
Quanto sono densi i numeri primi
I
Abbiamo già dimostrato che sono infiniti. Quindi:
lim π(n) = ∞.
n→∞
Quanto sono densi i numeri primi
I
Abbiamo già dimostrato che sono infiniti. Quindi:
lim π(n) = ∞.
n→∞
I
La funzione π(n) è monotona crescente. Con quale velocità
va all’infinito?
Quanto sono densi i numeri primi
I
Abbiamo già dimostrato che sono infiniti. Quindi:
lim π(n) = ∞.
n→∞
I
La funzione π(n) è monotona crescente. Con quale velocità
va all’infinito?
I
Il teorema dei numeri primi (attribuito ad Hadamard e a de la
Vallée-Poussin) dimostra che si comporta come
π(n) ∼ n/log (n), cioè:
lim
n→∞
π(n)
= 1.
n/log (n)
Quanto sono densi i numeri primi
I
Abbiamo già dimostrato che sono infiniti. Quindi:
lim π(n) = ∞.
n→∞
I
La funzione π(n) è monotona crescente. Con quale velocità
va all’infinito?
I
Il teorema dei numeri primi (attribuito ad Hadamard e a de la
Vallée-Poussin) dimostra che si comporta come
π(n) ∼ n/log (n), cioè:
lim
n→∞
I
π(n)
= 1.
n/log (n)
Se chiamiamo pn l’n-esimo numero primo, una formulazione
equivalente è:
pn ∼ n · log (n).
Quanto sono densi i numeri primi - cont
I
Gauss ha congetturato che π(n) si comporti come la funzione
Li:
Z n
dx
def
.
Li(n) − Li(2) =
2 log (x)
Quanto sono densi i numeri primi - cont
I
Gauss ha congetturato che π(n) si comporti come la funzione
Li:
Z n
dx
def
.
Li(n) − Li(2) =
2 log (x)
I
In questo caso la derivata (cioè la densità) sarebbe proprio
1/log (n). Ma questa ipotesi non è stata mai dimostrata, nè
confutata.
Conseguenze per la criptografia
I
La densità dei numeri primi va con l’inverso del logaritmo di
n. Quindi più è grande n e più è difficile trovare dei numeri
primi scegliendo a caso.
def
ρ(n) =
1
π(n)
∼
.
n
log (n)
Conseguenze per la criptografia
I
La densità dei numeri primi va con l’inverso del logaritmo di
n. Quindi più è grande n e più è difficile trovare dei numeri
primi scegliendo a caso.
def
ρ(n) =
I
1
π(n)
∼
.
n
log (n)
Questo significa che se cerchiamo chiavi più complesse per la
cifratura RSA dobbiamo spendere un tempo più lungo o
disporre di una piattaforma di calcolo più potente.
Conseguenze per la criptografia
I
La densità dei numeri primi va con l’inverso del logaritmo di
n. Quindi più è grande n e più è difficile trovare dei numeri
primi scegliendo a caso.
def
ρ(n) =
1
π(n)
∼
.
n
log (n)
I
Questo significa che se cerchiamo chiavi più complesse per la
cifratura RSA dobbiamo spendere un tempo più lungo o
disporre di una piattaforma di calcolo più potente.
I
Come già detto l’alternativa di utilizzare metodi non uniformi
per scegliere i numeri primi da utilizzare come chiavi riduce lo
spazio delle chiavi e rende la cifratura meno robusta.
Il Metodo di Fermat
I
Si basa sul principio che se un numero non è primo, è
esprimibile in forma di prodotto di due numeri a e b (non
necessariamente primi):
n = a · b.
Il Metodo di Fermat
I
Si basa sul principio che se un numero non è primo, è
esprimibile in forma di prodotto di due numeri a e b (non
necessariamente primi):
n = a · b.
I
Trovare a e b equivale a trovare le loro semisomma (s) e
semidifferenza (d):
(
def
s = a+b
2 ,
d
def
=
a−b
2 ;
che si inverte in:
a = s + d,
b = s − d.
Il Metodo di Fermat
I
Si basa sul principio che se un numero non è primo, è
esprimibile in forma di prodotto di due numeri a e b (non
necessariamente primi):
n = a · b.
I
Trovare a e b equivale a trovare le loro semisomma (s) e
semidifferenza (d):
(
def
s = a+b
2 ,
d
def
=
a−b
2 ;
che si inverte in:
I
a = s + d,
b = s − d.
La differenza dei quadrati di s e d eguaglia n:
s 2 − d 2 = 1/4[(a + b)2 − (a − b)2 ] = 1/4[4ab] = ab = n.
Algoritmo di Fermat
I
L’agoritmo di Fermat, parte dal numero k0 più piccolo numero
il cui quadrato supera n:
2
k0
> n,
(k0 − 1)2 < n;
e calcola la differenza del quadrato rispetto ad n (k 2 − n).
Algoritmo di Fermat
I
L’agoritmo di Fermat, parte dal numero k0 più piccolo numero
il cui quadrato supera n:
2
k0
> n,
(k0 − 1)2 < n;
e calcola la differenza del quadrato rispetto ad n (k 2 − n).
I
I
Ad ogni passo si incrementa di uno il numero k (k → k + 1) e
la procedura si arresta quando k 2 − n è un quadrato perfetto
e quindi possiamo identificare k con s e k 2 − n con d 2 .
√
√
p = k + k 2 − n, q = k − k 2 − n
Algoritmo di Fermat
I
L’agoritmo di Fermat, parte dal numero k0 più piccolo numero
il cui quadrato supera n:
2
k0
> n,
(k0 − 1)2 < n;
e calcola la differenza del quadrato rispetto ad n (k 2 − n).
I
I
I
Ad ogni passo si incrementa di uno il numero k (k → k + 1) e
la procedura si arresta quando k 2 − n è un quadrato perfetto
e quindi possiamo identificare k con s e k 2 − n con d 2 .
√
√
p = k + k 2 − n, q = k − k 2 − n
Esercizio: Scrivere un codice Octave che realizza l’algoritmo
di Fermat.
Algoritmo di Fermat
I
L’agoritmo di Fermat, parte dal numero k0 più piccolo numero
il cui quadrato supera n:
2
k0
> n,
(k0 − 1)2 < n;
e calcola la differenza del quadrato rispetto ad n (k 2 − n).
I
I
Ad ogni passo si incrementa di uno il numero k (k → k + 1) e
la procedura si arresta quando k 2 − n è un quadrato perfetto
e quindi possiamo identificare k con s e k 2 − n con d 2 .
√
√
p = k + k 2 − n, q = k − k 2 − n
I
Esercizio: Scrivere un codice Octave che realizza l’algoritmo
di Fermat.
I
L’algoritmo richiede pochissima memoria (5 interi) e un
numero di passi che dipende dalla differenza d.
Conseguenze dell’esistenza dell’algoritmo di Fermat sulla
cifratura RSA
I
Se nell’algoritmo di RSA scegliamo due fattori primi (p e q)
vicini tra loro, d sarà piccola e quindi l’algoritmo di Fermat
fattorizzerà n e si arresterà in pochi passi.
Conseguenze dell’esistenza dell’algoritmo di Fermat sulla
cifratura RSA
I
Se nell’algoritmo di RSA scegliamo due fattori primi (p e q)
vicini tra loro, d sarà piccola e quindi l’algoritmo di Fermat
fattorizzerà n e si arresterà in pochi passi.
I
Se invece scegliamo due numeri primi troppo diversi tra loro
allora uno dei due sarà piccolo ed il metodo dell’ispezione
diretta si arresterà in pochi passi.
Conseguenze dell’esistenza dell’algoritmo di Fermat sulla
cifratura RSA
I
Se nell’algoritmo di RSA scegliamo due fattori primi (p e q)
vicini tra loro, d sarà piccola e quindi l’algoritmo di Fermat
fattorizzerà n e si arresterà in pochi passi.
I
Se invece scegliamo due numeri primi troppo diversi tra loro
allora uno dei due sarà piccolo ed il metodo dell’ispezione
diretta si arresterà in pochi passi.
I
Il cifratore deve prevenire da entrambi i possibili attacchi. Ne
consegue che la differenza e la somma dei due numeri primi (p
e q) devono essere dello stesso ordine di grandezza. La
cardinalità di questo spazio definirà la complessità delle chiavi.
In pratica basta limitare la scelta di p (e quindi q) ad esempio
√
√
all’intervallo (1/2 n, 3/4 n).
Variazioni sulla cifratura RSA
I
Una delle idee più naturali per complicare RSA consiste
nell’usare una fattorizzazione a tre o più primi.
n = p1 p2 p3 .
Variazioni sulla cifratura RSA
I
Una delle idee più naturali per complicare RSA consiste
nell’usare una fattorizzazione a tre o più primi.
n = p1 p2 p3 .
I
In realtà, la situazione peggiorerebbe per il cifratore, perché il
minore dei fattori sarebbe necessariamente più piccolo e quindi
basterebbe applicare il crivello di Eratostene a tutti i numeri
minori della radice cubica di n. Il metodo dell’ispezione
risulterebbe notevolmente semplificato.
Variazioni sulla cifratura RSA
I
Una delle idee più naturali per complicare RSA consiste
nell’usare una fattorizzazione a tre o più primi.
n = p1 p2 p3 .
I
In realtà, la situazione peggiorerebbe per il cifratore, perché il
minore dei fattori sarebbe necessariamente più piccolo e quindi
basterebbe applicare il crivello di Eratostene a tutti i numeri
minori della radice cubica di n. Il metodo dell’ispezione
risulterebbe notevolmente semplificato.
I
Inoltre anche la minima differenza tra due fattori sarebbe più
piccola, accelerando quindi convergenza del metodo di
Fermat. Anche in questo caso basterebbe studiare i k minori
di k0 + n1/3 .
Metodi indeterminati
I
I metodi precedenti consentono di determinare la primalità del
numero n con certezza e consentono anche di determinare
almeno una fattorizzazione.
Metodi indeterminati
I
I metodi precedenti consentono di determinare la primalità del
numero n con certezza e consentono anche di determinare
almeno una fattorizzazione.
I
Esistono dei criteri che non risolvono con certezza il problema
della primalità, ma che consentono in alcuni casi di escluderla.
Metodi indeterminati
I
I metodi precedenti consentono di determinare la primalità del
numero n con certezza e consentono anche di determinare
almeno una fattorizzazione.
I
Esistono dei criteri che non risolvono con certezza il problema
della primalità, ma che consentono in alcuni casi di escluderla.
I
Tali metodi sono basati su condizioni necessarie di primalità,
ma non sufficienti.
Metodi indeterminati
I
I metodi precedenti consentono di determinare la primalità del
numero n con certezza e consentono anche di determinare
almeno una fattorizzazione.
I
Esistono dei criteri che non risolvono con certezza il problema
della primalità, ma che consentono in alcuni casi di escluderla.
I
Tali metodi sono basati su condizioni necessarie di primalità,
ma non sufficienti.
I
I numeri che soddisfano alcuni criteri necessari di primalità ma
non suffienti di chiamano pseudo-primi
Metodi indeterminati
I
I metodi precedenti consentono di determinare la primalità del
numero n con certezza e consentono anche di determinare
almeno una fattorizzazione.
I
Esistono dei criteri che non risolvono con certezza il problema
della primalità, ma che consentono in alcuni casi di escluderla.
I
Tali metodi sono basati su condizioni necessarie di primalità,
ma non sufficienti.
I
I numeri che soddisfano alcuni criteri necessari di primalità ma
non suffienti di chiamano pseudo-primi
I
Il metodo (già visto) dalla primalità cinese è uno di questi: se
2n 6= 1 (mod n) possiamo escludere che n sia primo, ma se la
relazione è soddisfatta non possiamo esprimerci.
Metodi indeterminati
I
I metodi precedenti consentono di determinare la primalità del
numero n con certezza e consentono anche di determinare
almeno una fattorizzazione.
I
Esistono dei criteri che non risolvono con certezza il problema
della primalità, ma che consentono in alcuni casi di escluderla.
I
Tali metodi sono basati su condizioni necessarie di primalità,
ma non sufficienti.
I
I numeri che soddisfano alcuni criteri necessari di primalità ma
non suffienti di chiamano pseudo-primi
I
Il metodo (già visto) dalla primalità cinese è uno di questi: se
2n 6= 1 (mod n) possiamo escludere che n sia primo, ma se la
relazione è soddisfatta non possiamo esprimerci.
I
Esercizio: scrivere un codice Octave che esegua il test di
primalità cinese.
Criterio di Eulero
I
Anche questo criterio può solo escludere la primalità, ma non
garantirla.
Criterio di Eulero
I
Anche questo criterio può solo escludere la primalità, ma non
garantirla.
I
Si basa sul piccolo teorema di Fermat.
Criterio di Eulero
I
Anche questo criterio può solo escludere la primalità, ma non
garantirla.
I
Si basa sul piccolo teorema di Fermat.
I
In realtà, se per tutti gli a (non solo il 2) an−1 = 1 (mod n) si
può dire con certezza che n è primo [Bastano i numeri fino ad
(n+1)/2].
Criterio di Eulero
I
Anche questo criterio può solo escludere la primalità, ma non
garantirla.
I
Si basa sul piccolo teorema di Fermat.
I
In realtà, se per tutti gli a (non solo il 2) an−1 = 1 (mod n) si
può dire con certezza che n è primo [Bastano i numeri fino ad
(n+1)/2].
I
Nella realtà questo sarebbe molto più oneroso
computazionalmente del metodo di Eratostene (e perfino
dell’ispezione diretta) e quindi si limita il test ad un insieme
finito di a. In tal modo il test garantisce una pseudoprimalità
(può solo escludere la primalità se siamo fortunati). In pratica
diviene solo più accurato del test cinese.
Criterio di Eulero
I
Anche questo criterio può solo escludere la primalità, ma non
garantirla.
I
Si basa sul piccolo teorema di Fermat.
I
In realtà, se per tutti gli a (non solo il 2) an−1 = 1 (mod n) si
può dire con certezza che n è primo [Bastano i numeri fino ad
(n+1)/2].
I
Nella realtà questo sarebbe molto più oneroso
computazionalmente del metodo di Eratostene (e perfino
dell’ispezione diretta) e quindi si limita il test ad un insieme
finito di a. In tal modo il test garantisce una pseudoprimalità
(può solo escludere la primalità se siamo fortunati). In pratica
diviene solo più accurato del test cinese.
I
Per un’ insieme selezionato di numeri a ∈ S, si verifica:
a
n−1
2
= ±1 (mod n)
Criteri basati sul piccolo teorema di Fermat
I
Si possono scegliere a caso dei numeri ed eseguire il test di
Fermat su di essi. Chiameremo questo criterio ”Ispezione
casuale alla Fermat di dimensione m” (m numero di valori
testati).
an−1 ≡ 1 ( mod n ).
Criteri basati sul piccolo teorema di Fermat
I
Si possono scegliere a caso dei numeri ed eseguire il test di
Fermat su di essi. Chiameremo questo criterio ”Ispezione
casuale alla Fermat di dimensione m” (m numero di valori
testati).
an−1 ≡ 1 ( mod n ).
I
I numeri di Carlmichael resistono a qualunque test di Fermat
(esclusi i divisori dello zero cioè di n). Per definizione un
numero di Carlmichael soddisfa le seguenti eguaglianze:
n : ∀a < n : an ≡ a ( mod n ).
Criteri basati sul piccolo teorema di Fermat
I
Si possono scegliere a caso dei numeri ed eseguire il test di
Fermat su di essi. Chiameremo questo criterio ”Ispezione
casuale alla Fermat di dimensione m” (m numero di valori
testati).
an−1 ≡ 1 ( mod n ).
I
I numeri di Carlmichael resistono a qualunque test di Fermat
(esclusi i divisori dello zero cioè di n). Per definizione un
numero di Carlmichael soddisfa le seguenti eguaglianze:
n : ∀a < n : an ≡ a ( mod n ).
I
Il più piccolo numero di Carlmichael è 341=11x31.
Criteri basati sul piccolo teorema di Fermat
I
Si possono scegliere a caso dei numeri ed eseguire il test di
Fermat su di essi. Chiameremo questo criterio ”Ispezione
casuale alla Fermat di dimensione m” (m numero di valori
testati).
an−1 ≡ 1 ( mod n ).
I
I numeri di Carlmichael resistono a qualunque test di Fermat
(esclusi i divisori dello zero cioè di n). Per definizione un
numero di Carlmichael soddisfa le seguenti eguaglianze:
n : ∀a < n : an ≡ a ( mod n ).
I
Il più piccolo numero di Carlmichael è 341=11x31.
I
Esercizio verificare con Octave che 341 è di Carlmichael.
Quanto fa 1131 e 3111 ? Che succede se a è un divisore di
341?
Criteri basati sulle radici quadrate dell’unità
I
Esistono sempre due radici banali dell’unità:
2
1
≡ 1 (mod
2
2
(n − 1) = n + 2n + 1 ≡ 1 (mod
n),
n);
Criteri basati sulle radici quadrate dell’unità
I
I
Esistono sempre due radici banali dell’unità:
2
1
≡ 1 (mod
2
2
(n − 1) = n + 2n + 1 ≡ 1 (mod
n),
n);
x 2 = 1 equivale a x 2 − 1 = 0. Se n è primo, Zn è un campo;
(x − 1)(x + 1) = 0 implica che uno dei due fattori sia nullo e
dunque le due soluzioni banali sono le uniche.
Criteri basati sulle radici quadrate dell’unità
I
I
I
Esistono sempre due radici banali dell’unità:
2
1
≡ 1 (mod
2
2
(n − 1) = n + 2n + 1 ≡ 1 (mod
n),
n);
x 2 = 1 equivale a x 2 − 1 = 0. Se n è primo, Zn è un campo;
(x − 1)(x + 1) = 0 implica che uno dei due fattori sia nullo e
dunque le due soluzioni banali sono le uniche.
Se n non è primo, possono esistere altre soluzioni. In
particolare se n = pq (con p e q primi). x 2 = 1 equivale (th.
dei resti cinese) al sistema:
2
x ≡ 1 (mod p),
x 2 ≡ 1 (mod q);
che a sua volta equivale a
x ≡ 1, p − 1 (mod
x ≡ 1, q − 1 (mod
p),
q);
Le radici quadrate non banali dell’unità
I
Quindi ci sono quattro soluzioni distinte di cui due sono quelle
banali:
x
x
≡ 1 (mod
≡ 1 (mod
p),
q);
x
x
≡ p − 1 (mod
≡ q − 1 (mod
p),
q);
e corrispindono alle soluzioni x = 1 e x = n − 1 = pq − 1. Ma
ve ne sono altre due sono non banali:
x ≡
1
(mod p),
x ≡ p − 1 (mod p),
x ≡ q − 1 (mod q);
x ≡
1
(mod q).
Le radici quadrate non banali dell’unità
I
Quindi ci sono quattro soluzioni distinte di cui due sono quelle
banali:
x
x
≡ 1 (mod
≡ 1 (mod
p),
q);
x
x
≡ p − 1 (mod
≡ q − 1 (mod
p),
q);
e corrispindono alle soluzioni x = 1 e x = n − 1 = pq − 1. Ma
ve ne sono altre due sono non banali:
x ≡
1
(mod p),
x ≡ p − 1 (mod p),
x ≡ q − 1 (mod q);
x ≡
1
(mod q).
I
Conoscendo una delle due radici non banali:
x12 ≡ 1 con 1 < x < n − 1.
Le radici quadrate non banali dell’unità
I
Quindi ci sono quattro soluzioni distinte di cui due sono quelle
banali:
x
x
≡ 1 (mod
≡ 1 (mod
p),
q);
x
x
≡ p − 1 (mod
≡ q − 1 (mod
p),
q);
e corrispindono alle soluzioni x = 1 e x = n − 1 = pq − 1. Ma
ve ne sono altre due sono non banali:
x ≡
1
(mod p),
x ≡ p − 1 (mod p),
x ≡ q − 1 (mod q);
x ≡
1
(mod q).
I
Conoscendo una delle due radici non banali:
x12 ≡ 1 con 1 < x < n − 1.
I
si ricava facilmente anche l’altra (x2 = n − x1 ):
x22 = (n − x1 )2 = n2 − 2nx1 + x12 ≡ 1.
Decomposizione tramite una radice quadrata dell’unità
I
Basta conoscere una radice quadrata non banale dell’unità per
decomporre n:
x12 ≡ 1 ⇔ (x1 − 1)(x1 + 1) ≡ 0 (mod n).
Decomposizione tramite una radice quadrata dell’unità
I
Basta conoscere una radice quadrata non banale dell’unità per
decomporre n:
x12 ≡ 1 ⇔ (x1 − 1)(x1 + 1) ≡ 0 (mod n).
I
che in Z diviene:
(x1 − 1)(x1 + 1) = kn.
Decomposizione tramite una radice quadrata dell’unità
I
Basta conoscere una radice quadrata non banale dell’unità per
decomporre n:
x12 ≡ 1 ⇔ (x1 − 1)(x1 + 1) ≡ 0 (mod n).
I
che in Z diviene:
(x1 − 1)(x1 + 1) = kn.
I
Per il teorema dell’ unicità della decomposizione, uno dei
fattori x1 ± 1 è multiplo di p e l’altro di q.
Decomposizione tramite una radice quadrata dell’unità
I
Basta conoscere una radice quadrata non banale dell’unità per
decomporre n:
x12 ≡ 1 ⇔ (x1 − 1)(x1 + 1) ≡ 0 (mod n).
I
che in Z diviene:
(x1 − 1)(x1 + 1) = kn.
I
Per il teorema dell’ unicità della decomposizione, uno dei
fattori x1 ± 1 è multiplo di p e l’altro di q.
I
Quindi per calcolare p (o q) basta calcolare il massimo
comune divisore tra x1 − 1 ed n.
q = ((x1 − 1), n),
p = ((x1 + 1), n).
Criteri basati sulle radici quadrate dell’unità - cont
I
Da quanto visto, è possibile definire un criterio di
pseudoprimalità con i seguenti passi:
Criteri basati sulle radici quadrate dell’unità - cont
I
Da quanto visto, è possibile definire un criterio di
pseudoprimalità con i seguenti passi:
I
Si scelgono a caso m numeri maggiori di n/2 e si elevano al
quadrato (analogamente al metodo di Fermat).
Criteri basati sulle radici quadrate dell’unità - cont
I
Da quanto visto, è possibile definire un criterio di
pseudoprimalità con i seguenti passi:
I
Si scelgono a caso m numeri maggiori di n/2 e si elevano al
quadrato (analogamente al metodo di Fermat).
I
Se nessuno dei numeri è congruo all’unità il numero è
pseudoprimo.
Criteri basati sulle radici quadrate dell’unità - cont
I
Da quanto visto, è possibile definire un criterio di
pseudoprimalità con i seguenti passi:
I
Si scelgono a caso m numeri maggiori di n/2 e si elevano al
quadrato (analogamente al metodo di Fermat).
I
Se nessuno dei numeri è congruo all’unità il numero è
pseudoprimo.
I
Se scopriamo una radice dell’unità possiamo decomporre n e
quindi decifrare RSA.
Criteri basati sulle radici quadrate dell’unità - cont
I
Da quanto visto, è possibile definire un criterio di
pseudoprimalità con i seguenti passi:
I
Si scelgono a caso m numeri maggiori di n/2 e si elevano al
quadrato (analogamente al metodo di Fermat).
I
Se nessuno dei numeri è congruo all’unità il numero è
pseudoprimo.
I
Se scopriamo una radice dell’unità possiamo decomporre n e
quindi decifrare RSA.
I
Possiamo anche combinare i due metodi. Si eleva k al
quadrato, poi se è congruo all’unità o se differisce da n per un
quadrato perfetto, il numero n è scomposto.
Soluzione esercizio Spia
I
f(12)=6, f(10)=5, f(8)=4, f(6)=3, f(4)=7.
Soluzione esercizio Spia
I
f(12)=6, f(10)=5, f(8)=4, f(6)=3, f(4)=7.
I
La soluzione più semplice è contare il numero di lettere
necessario a scrivere il numero gridato dalla sentinella.
Soluzione esercizio Spia
I
f(12)=6, f(10)=5, f(8)=4, f(6)=3, f(4)=7.
I
La soluzione più semplice è contare il numero di lettere
necessario a scrivere il numero gridato dalla sentinella.
I
dodici ha 6 lettere; dieci ne ha 5, otto ne ha quattro, sei ne ha
tre; ma quattro ne ha 7.
Soluzione esercizio Spia
I
f(12)=6, f(10)=5, f(8)=4, f(6)=3, f(4)=7.
I
La soluzione più semplice è contare il numero di lettere
necessario a scrivere il numero gridato dalla sentinella.
I
dodici ha 6 lettere; dieci ne ha 5, otto ne ha quattro, sei ne ha
tre; ma quattro ne ha 7.
I
Ovviamente esistono infiniti algoritmi che risolvono il
probema, anche con algoritmi polinomiali (teorema di
Lagrange). Ma questo è sufficientemente semplice da essere
ricordato e calcolato rapidamente.
Soluzione esercizio Spia
I
f(12)=6, f(10)=5, f(8)=4, f(6)=3, f(4)=7.
I
La soluzione più semplice è contare il numero di lettere
necessario a scrivere il numero gridato dalla sentinella.
I
dodici ha 6 lettere; dieci ne ha 5, otto ne ha quattro, sei ne ha
tre; ma quattro ne ha 7.
I
Ovviamente esistono infiniti algoritmi che risolvono il
probema, anche con algoritmi polinomiali (teorema di
Lagrange). Ma questo è sufficientemente semplice da essere
ricordato e calcolato rapidamente.
I
L’esempio della spia mostra anche come un algoritmo
apparentemente complicato (contare il numro di lettere che
compungono il numero) possa condurre, in casi particolari, a
soluzioni semplici.
Nuovi esercizi
I
Scrivere un codice Octave che esegua i crivello di Eratostene.
Nuovi esercizi
I
Scrivere un codice Octave che esegua i crivello di Eratostene.
I
Scrivere codice Octave che calcola una potenza di un numero
(modulo n) nel minor numero di passi possibile.
Nuovi esercizi
I
Scrivere un codice Octave che esegua i crivello di Eratostene.
I
Scrivere codice Octave che calcola una potenza di un numero
(modulo n) nel minor numero di passi possibile.
I
Scrivere un codice che verifichi la condizione di
pseudoprimalità di Fermat con i primi n1/4 numeri primi.