RIVEST–SHAMIR–ADLEMAN (RSA)
cifrario asimmetrico che sfrutta il problema della fattorizzazione di un numero primo in cui 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 grandim si calcola poi un numero coprimo di come segue 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 esponenziazioni 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à
Per ricercare un numero primo per la generazione dei segreti previsti per RSA e necessario definire un metodo per determinare se un dato numero e primo o meno, 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
L’algoritmo RSA e vulnerabile a diverse tipologie di attacco:
- 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