Solo quello che ti interessa | Crittografia a chiave pubblica - Algoritmo RSA Copyright admin [email protected] http://www.belloma.it/crittografia-a-chiave-pubblica-algoritmo-rsa/ Crittografia a chiave pubblica - Algoritmo RSA - Nel 1977, Martin Gardner (divulgatore scientifico americano) pubblico nella rivista Scientific American un articolo intitolato “Un nuovo tipo di cifrario, per cui ci vorrebbero milioni di anni per poterlo decifrare”. Qui spiegò il sistema a chiave pubblica adottato ed espose il messaggio cifrato insieme alla sua chiave pubblica N di 130 cifre. Gardner sfidò i lettori a decifrare il messaggio, a partire dall’informazione data e indicò come traccia che la soluzione richiedeva di fattorizzare N nei suoi componenti primi p e q. - Gli ideatori di questo sistema furono i ricercatori del MIT, Ron Rivest, Adi Shamir e Len Adelman. - La risposta corretta fu ricevuta 17 anni più tardi e per trovarla fu necessaria la collaborazione di più di 600 persone. Le chiavi p e q individuate avevano ben 64 cifre ed il messaggio cifrato fu “le parole magiche sono schizzinose ossifraghe”. - L’algoritmo presentato era l’RSA acronimo dei cognomi dei suoi inventori. Si tratta della prima realizzazione pratica del modello a chiave pubblica proposto da Diffie ed oggi è impiegata abitualmente. Come dimostra questa storia, il processo di decifrazione è incredibilmente laborioso, ma comunque non impossibile (si ricorda che il problema della sicurezza è individuare un sistema che duri abbastanza per crearne uno ancora più difficile da “rompere”). - I sistema RSA è fondato sulle proprietà dei numeri primi. Di seguito le nozioni principali che ne sono la base: - Il numero di interi minori di n che sono primi (comprimi) con n si chiama funzione di Eulero e si esprime con φ(n). Es: φ(8) = 4 poiché 8 è primo con 1,3,5,7. - Se n=pq dove p e q sono numeri primi, allora φ(n)=(p-1)(q-1). - Dal piccolo teorema di Fermat (ap ≡ a mod. p), si deduce che ap-1 ≡ 1 mod. p dove a è comprimo (cioè MCD(n,a)=1) rispetto a p (p è un numero primo). - Per il teorema di Eulero, se n e a sono comprimi (MCD(n,a)=1), allora a φ(n) ≡ 1 mod. n. - Il sistema è detto a chiave pubblica per il fatto che la chiave di criptazione è messa a disposizione degli emittenti interessati ad inviare i messaggi. Ogni ricevente possiede una chiave pubblica. - Mario genera un valore n come prodotto tra due numeri primi n=pq e si sceglie un valore e in modo che MCD(φ(n),e) = 1. I dati che diventano pubblici sono il valore di n ed il valore di e. La coppia (n,e) rappresenta quindi la chiave pubblica del sistema. I valori p e q si chiamano numeri RSA. - Mario calcola il valore d tale per cui de ≡ 1 mod. φ(n), cioè de ≡ 1 mod. (p-1)(q-1). La coppia (n,d) rappresenta la chiave privata del sistema. - La forza dell'algoritmo sta nel fatto che per calcolare d da e o viceversa, non basta la conoscenza di n, ma serve il numero (p-1)(q-1) infatti fattorizzare (cioè scomporre un numero nei suoi divisori) è un'operazione molto lenta. La sicurezza di RSA, dunque è basato sull'elevata complessità page 1 / 4 Solo quello che ti interessa | Crittografia a chiave pubblica - Algoritmo RSA Copyright admin [email protected] http://www.belloma.it/crittografia-a-chiave-pubblica-algoritmo-rsa/ computazionale della fattorizzazione in numeri primi: fattorizzare un numero grande, diciamo con oltre 100 cifre, come prodotto di due numeri primi è un’operazione improponibile (non esiste un metodo conosciuto), tempi computazionali di millenni. - Pietro impiega la chiave pubblica di Mario (n,e) per criptare un messaggio m, mediate la funzione M = me mod. n. Il messaggio cifrato M viene inviato a Mario. Poiché, l’operazione Md=(me)d mod. n, equivale a dire che Md = m mod. n, allora Mario, con la sua chiave privata può ottenere il messaggio originario m. - Esempio: - p=3 e q=11, - quindi n=pq=33 - quindi φ(33)=(3-1)(11-1)=20 - Scelgo e <20 in modo che non abbia divisori comuni con 20 (è comprimo) (non è necessario che sia primo). Supponiamo e=7 , quindi la chiave pubblica di Mario sarà (33,7). - Individuo la chiave privata d che sarà l’inverso di 7 modulo 20, cioè 7d ≡ 1 mod 20, visto che 21/20 da resto 1, 7*3 = 21 ≡ 1 mod 20, per tanto d =3. La chiave privata sarà (33,3). - Supponiamo che Pietro vuole inviare a Mario il messaggio m=9, la sua criptazione sarà data da M = 97 = 4.782.969 ≡ 15 mod. 33. Quindi il messaggio cifrato è 15. - Mario riceve il messaggio e lo decifra con m = 153 = 3.475 ≡ 9 mod. 33. Il messaggio è stato quindi decifrato correttamente. - E’ evidente che al crescere di p e q, la decifrazione è un’operazione laboriosa, in quanto occorre una grande capacità di calcolo per trovare la congruenza, es: se p=23 e q=17, n=391, e=3, d=235, volendo cifrare il messaggio “34”, avremo 343=39.304≡204 mod. 391 occorrerà risolvere la seguente congruenza 204235 ≡ 34 mod. 391! Si osservi il grado della potenza! Elementi sui numeri primi utilizzati nella crittografia - Lavorare con modulo di numeri primi, costituisce la base dei moderni sistemi crittografici. - Il prodotto di numeri primi costituisce una funzione non reversibile, nel senso che non esiste un calcolo efficace che consenta di ottenere immediatamente il valore dei due fattori originari. Questo principio è usato nell’algoritmo RSA. - I numeri primi sono un sottoinsieme dei numeri naturali. Il teorema fondamentale dell’aritmetica stabilisce che qualsiasi numero maggiore di 1 può essere rappresentato da un unico prodotto di potenze di numeri primi ( fattorizzazione). - Ad eccezione del 2, tutti i numeri primi sono dispari e gli unici numeri primi consecutivi sono 2 e 3. - I numeri primi consecutivi, che si trovano cioè ad una distanza numerica di 2, come 11 e 13, o 17 e 19, vengono detti numeri primi gemelli. page 2 / 4 Solo quello che ti interessa | Crittografia a chiave pubblica - Algoritmo RSA Copyright admin [email protected] http://www.belloma.it/crittografia-a-chiave-pubblica-algoritmo-rsa/ - Numero primo di Marsenne: è un numero primo Mn esprimibile nel seguente modo Mn=2n-1. Sono numeri primi di Marsenne M2, M3, M5, M7, M13, M17, M19, M31. Attualmente si conoscono solo una quarantina di numeri di Marsenne. Il più grande, individuato nel 2013, è M57885161. Questo numero ha oltre 17 milioni di cifre. Si pensi che il numero di particelle di tutto l’universo è minore di 2300. - Numero primo di Fermat: è un numero primo Fn esprimibile nel seguente modo (n numero naturale): Si conoscono solo 5 numeri primi di Fermat: F0, F1 , F2, F3 , F4. - Piccolo teorema di Fermat: ap ≡ a mod. p, dove p è un numero primo e a un qualunque intero (che equivale a ap-1 ≡ 1 mod. p). I principi usati da RSA - Identità di Bézout: Se a e b sono numeri interi positivi, allora MCD(a,b)=k se esistono due numeri interi p e q che verificano pa+qb=k. Es: MCD(15,6)=3 , 15(1) + 6(-2)= 15-12=3, p=1 e q=-2. - Lavorando in modulo n, possiamo stabilire che se MCD(a,n)=1 (a ed n sono primi tra loro, comprimi) esisteranno gli interi p e q tali per cui pa+qn=1. Poiché stiamo lavorando in modulo n , qn=0 mod. n, quindi pa=1, ovvero p è l’inverso di a in modulo n. - Il numero di interi con inverso in modulo n sarà il numero di naturali a minori di n che verificano MCD(a,n)=1. Il numero di valori (di a) che verificano tale condizione, e cioè sono primi con n si indica con φ(n) e si chiama Funzione di Eulero. - Se la scomposizione in fattori primi di n è n = p1a1 p2a2… pkan , allora - Ad esempio n=1.600, abbiamo che n=2652. Per tanto φ (1600)=1600(1-1/2)(1-1/5)=640. Ciò significa che ci sono 640 numeri a tali che MCD(a,1600)=1. - Se n è un numero primo, per qualsiasi valore di a<n, MCD(a,n)=1, quindi φ (n)=n-1. page 3 / 4 Solo quello che ti interessa | Crittografia a chiave pubblica - Algoritmo RSA Copyright admin [email protected] http://www.belloma.it/crittografia-a-chiave-pubblica-algoritmo-rsa/ Perché funziona RSA - Mettendo insieme tutte queste argomentazioni, è possibile capire l’algoritmo RSA. - L’algoritmo codifica una corrispondenza numerica m di un messaggio in M attraverso la funzione M = me mod. n, dove e è tale che MCD(φ(n),e) = 1 con n=pq (p e q numeri primi; φ(n)=(p-1)(q-1)) - L’algoritmo consente una decodifica di M in m attraverso la funzione Md = m mod. n, dove d è tale che de ≡ 1 mod. j(n). - Dimostrazione - Il piccolo teorema di Fermat afferma che dato un numero primo p, allora per qualunque intero a si ha: ap ≡ a mod. p; ma si può esprimere anche in questo modo: dato un numero primo p e un numero a coprimo con p, allora ap-1 ≡ 1 mod. p (che si ottiene dividendo ambo i membri dell'equazione per a). - Il teorema di Eulero è una generalizzazione del piccolo teorema di Fermat e stabilisce che dato un intero a e un intero positivo n coprimo con a, allora aφ(n) ≡ 1 mod. n - Md=(me) d mod. n = med mod. n - Siccome ed mod. φ(n) = 1, ed=kj(n)+1=k(p−1)(q−1)+1, - Sostituendo med mod. n = mk(p-1)(q-1)+1 mod. n = mmk(p-1)(q-1) mod. n - Dal teorema di Eulero-Fermat mk(p-1)(q-1) mod. p = (m(p-1)) k(q-1) mod. p = 1 k(q-1) mod. p=1 (essendo m(p-1)mod. p = 1). - Analogamente m(p-1)(q-1) mod. q = (m(q-1)) k(p-1) mod. q = 1 k(p-1) mod. q = 1 (essendo m(q-1) mod. q = 1). - Di conseguenza abbiamo le due uguaglianze mk(p-1)(q-1) mod. p = 1 e (p-1)(q-1) mod. q = 1 - Per il teorema cinese del resto possiamo scrivere mk(p-1)(q-1) mod. (pq)=1, ovvero mk(p-1)(q-1) mod. n = 1 - Sostituendo med mod. n = mmk(p-1)(q-1) mod. n = m1 = m. page 4 / 4