Chiave pubblica e chiave privata
- X genera una chiave pubblica PK e una chiave privata SK
- X rende nota la chiave pubblica a chiunque voglia comunicare con lui
- Y scrive il messaggio m, lo cifra tramite la chiave pubblica di X e lo spedisce a X
- X riceve il messaggio cifrato c, lo decifra tramite la chiave privata e ottiene m
Osserva
- Se Z conosce la chiave pubblica PK e intercetta c non può ottenere m perché non conosce la chiave privata SK.
- Se Z vuole scoprire la chiave privata SK deve risolvere un problema numerico noto ma difficilissimo
RSA
- Rivest Shamir Adleman
- il nome è l’acronimo dei cognomi di tre ricercatori del MIT
- Ronald Rivest
- Adi Shamir
- Leonard Adleman
- presentato nel 1978
- brevettato nel 1983
- scaduto nel 2000
- per forzarlo è necessario fattorizzare un numero enorme come prodotto di due numeri primi
- oggi viene considerato sicuro (non fattorizzabile) un numero che in base 10 ha almeno 300 cifre, quindi una chiave di 1024 bit e oltre
Generazione delle chiavi
Scelgo due numeri primi a caso (grandi a piacere…)
- p = 3
- q = 11
Calcolo
- (p-1)(q-1)
2*10 = 20 - n = p*q
3*11 = 33
Scelgo
- e = 7 tale che
- e < n
- coprimo con (p-1)(q-1)
- d = 3 tale che
- e*d mod (p-1)(q-1) = 1
3*7 mod 20 = 21 mod 20 = 1
- e*d mod (p-1)(q-1) = 1
Ottengo
- PK = (n,e) = (33, 7), chiave pubblica
- SK = (n,d) = (33, 3), chiave privata
CODIFICA
Sia m = 15 il messaggio in chiaro.
Calcolo: c = me (mod n)
- 157 (mod 33) = 27
DECODIFCA
Ricevo il messaggio cifrato c = 27.
Calcolo: m = cd (mod n)
- 273 (mod 33) = 15
DSA
- Digital Signature Algorithm
- Un’alternativa alla difficoltà dell’operazione di fattorizzazione
- Utilizza il logaritmo discreto