2. ALGORITMO
Considerando la base canonica {ei}i di Rn ogni matrice invertibile risolve il
sistema:
Ax=ei per ogni i= 1,…….,n
Quindi raggruppando gli n sistemi si ricava l’espressione:
AX=I dove X=A-1 (1)
3. Effettuando delle combinazioni lineari sulle equazioni del sistema (1) si
ricava:
DX=B dove D è una matrice diagonale (2)
Su questa proprietà si fonda l’algoritmo di Gauss-Jordan, applicando le
combinazioni che permettono di passare dal sistema (1) al sistema (2).
4. Per applicare queste combinazioni affianchiamo alla matrice A una matrice
identica I della stessa dimensione di A e otteniamo:
[A|I]n x 2n
Adesso su questa matrice rettangolare svolgiamo essenzialmente 3 passaggi:
1. Applicare l’eliminazione di Gauss e ricavare una matrice a scala superiore;
2. Moltiplicare ogni riga della matrice per l’elemento sulla diagonale di A;
3. Riapplicare l’eliminazione di Gauss per rendere la matrice di sinistra uguale
alla matrice identica annullando gli elementi rimanenti sopra la diagonale.
5. Applicando questi passaggi la matrice I che avevamo affiancato alla
matrice A diventa la matrice A-1 .
Ora mostriamo come abbiamo riportato questo algoritmo in linguaggio
SmallTalk.
Pharo3.0
7. La crittografia è la scrittura di un testo in modo tale che le
persone estranee al codice non possano comprenderlo, ma il
lettore desiderato sia in grado di decifrarlo per leggere il
messaggio contenuto in esso.
8. In tempi di guerra, ad esempio, è essenziale che il nemico non
sappia cosa voi e i vostri alleati stiate tramando, perché vincere o
perdere una guerra può dipendere dalla segretezza delle
operazioni belliche e dalle strategie, atte a sorprendere il nemico
quando meno se lo aspetta.
9. Sistemi crittografici antecedenti a RSA
La codifica e la decodifica dovevano conoscere il metodo di
crittografia e la chiave per decifrare il messaggio;
Le chiavi erano simmetriche.
Nel 1977 si arrivò alla formalizzazione di un nuovo
algoritmo, chiamato RSA, dalle iniziali di Rivest, Shamir e
Adleman.
10. Elementi di base
Sfrutta la difficoltà di fattorizzare un numero n molto
grande;
Chiave asimmetrica (pubblica e privata);
Teorema di Eulero;
Piccolo teorema di Fermat.
11. Supponiamo che Alice voglia mandare un messaggio a Bob e
impedire a Colin di sapere ciò che dice. Per farlo, utilizzando il
sistema crittografico RSA, Bob deve innanzi tutto produrre una
chiave secondo la seguente ricetta:
Funzionamento
12. Generazione di una chiave RSA
1. Si producono due primi p e q in modo che:
a. p e q abbiano lo stesso numero di cifre;
b. p e q siano “random”.
2. Si calcola n=pq e j(n)=(p-1)(q-1)=n-p-q+1.
3. Si sceglie un numero e coprimo con j(n) e più piccolo di j(n).
4. Si calcola d tale che ed=1 mod(j(n)).
5. Si trasmette la chiave pubblica e e si conserva la chiave privata
d.
13. Nella pratica oggi si usano p, q dell’ordine di 10150, in modo tale
che n=pq sia un numero a 1024 bit.
Il numero e si chiama esponente di codifica (o cifratura) mentre
il numero d si chiama esponente di decodifica (o decifratura).
Notiamo che, una volta creata, la chiave RSA può essere
utilizzata indeterminatamente. Il suo utilizzo continuato di per
sé non la svela.
14. Per mandare il messaggio a Bob, Alice rappresenterà il suo
messaggio attraverso un numero P (testo in chiaro) multiplo di
n e lo cifrerà secondo la seguente regola:
Cifratura del messaggio
Ee,n(p)=pemod(n)
E si chiama funzione di cifratura (o codifica, o crittatura).
c=E(p) si chiama testo cifrato.
15. Il testo cifrato viene trasmesso da Alice a Bob, il quale lo decifra
secondo la seguente regola:
Decifratura del messaggio
Dd,n(c)=cdmod(n).
La funzione D si chiama funzione di decifratura (o decodifica, o
decrittatura).
16. Tempi necessari a svolgere le tre operazioni:
Generazione della chiave;
Cifratura;
Decifratura.
Per quanto riguarda le ultime due operazioni è dell’ordine di
O(log3n).
Un risultato simile si ottiene per la generazione della chiave.
17. Pur trattandosi di tempi polinomiali, essi rispecchiano il
maggiore inconveniente di RSA. Si tratta di un sistema lento,
poco adatto a cifrare messaggi lunghi.
18. Assumiamo ora il punto di vista di Colin. Per sapere il contenuto
del messaggio (cioè calcolare il valore di P), Colin deve risolvere
l’equazione di congruenza:
Xe=c mod(n)
I valori di e, n, c sono infatti pubblici.
21. Common Modulus
Fissiamo n una volta per tutte, che verrà utilizzato da tutti gli
utenti. L’utente 1 (Alice) avrà una coppia unica e₁, d₁ dalla
quale ricaverà una chiave pubblica (n,e₁) e una chiave segreta
(n,d₁).
22. Common Modulus
Tuttavia, questo non è vero e il sistema risultante non è
sicuro. Infatti, Bob può utilizzare i suoi valori e₂ e d₂ per
fattorizzare il modulo n. Dopodiché Bob può ricavare la
chiave privata di Alice dalla sua chiave pubblica.
23. Siano d la chiave privata di Bob ed e la sua corrispondente
chiave pubblica. Supponiamo che un antagonista (Colin)
voglia la firma di Bob su un messaggio M. Dal momento che
non è uno sprovveduto, Bob si rifiuta di firmarlo.
Colin può allora fare questo tentativo: prende un numero
random r e pone M’=reM mod(n). Dopodiché chiede a Bob
di firmare il messaggio M’.
Blinding
24. Bob potrebbe essere convinto ad apporre la sua firma S’,
fidandosi dell’aspetto innocuo di M’.
Ma S’=(M’)dmod(n). A Colin basterà quindi calcolare
S=(S’/r)mod(n) per ottenere la firma S di Bob sull’originale
M e cioè (dopo alcuni calcoli) Se=M mod(n).
Blinding