**# RIVEST–SHAMIR–ADLEMAN (RSA)
cifrario asimmetrico che sfrutta il problema della fattorizzazione di un numero primo. La chiave pubblica e formata da due numeri (noti) e la privata da (privati)
GENERAZIONE DELLE CHIAVI
viene scelto essere: con e numeri primi molto grandi
si calcola poi un numero coprimo di , a questo punto viene scelto fra i coprimi di : infine viene calcolato : Le chiavi finali risultano essere:
La cifratura e la decifratura sono implementate come esponenziazoini modulari
E molto importante che nel caso questo venga frammentato per garantire una cifratura corretta
RICERCA NUMERI PRIMI
Per implementare correttamente queste soluzioni e necessario trovare un’ implementazione efficiente per la ricerca di numeri primi
una possibile soluzione può essere
# numero random grande
int x = random.gen()
while(! primo(x)){ // test di primalita
x= x+2
}
return x
questa soluzione ha un tempo di esecuzione
TEST DI PRIMALITÀ
Ci sono 2 metodologie per eseguire un test di primalità:
- deterministico più oneroso ma garantisce di trovare un numero primo
- probabilistico meno oneroso ma non c’e certezza di trovare un numero primo
ATTACCHI A RSA
- Forza bruta: attacchi che sfruttano il numero n, la fattorizzazione del numeri primi, per evitare dobbiamo dividere in modo corretto la chiave.
- Attacchi matematici
- Attacchi a tempo: difficilissima da fare ma è stata dimostrata, esistono contromisure che possono essere adottate (es tecniche di padding)
- Attacchi a testo cifrato scelto: posso evitare se utilizzo il padding oaet (probabilistico)
FIRMA CON RSA
RSA e un algoritmo di cifratura con recupero (e.g. che necessita di frammentare il messaggio e firmare i singoli pezzi), questo lo rende meno adatto a eseguire la firma di testi in quanto essa può essere trasportata da un file ad un altro se i blocchi sono identici.
PERCHÉ FIRMARE CON RSA: AUTENTICAZIONE A OCCHI CHIUSI
grazie alla proprietà moltiplicativa di RSA e vero che:
questo consente di implementare la cosiddetta autenticazione ad occhi chiusi, dove un nodo e in grado di firmare un messaggio senza conoscerne il contenuto
- X sceglie a caso un numero coprimo con
- Invia a T il testo cifrato
- T firma e restituisce a X
- X moltiplica per :
- Il destinatario di può verificare che è autenticato da T:
questa proprietà può essere sfruttata da un attaccante per far firmare messaggi a una destinazione che altrimenti non li firmerebbe