Axino: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
+portale |
|||
Riga 30:
<references />
=== RSA (Rivest, Shamir, Adleman) ===
Proposto nel 1977 dai suoi tre ideatori a cui venne dato il nome dell’algoritmo. L'idea di base è che la fattorizzazione di numeri grandi (con più di 100 cifre decimali) nell'algebra modulare è estremamente difficile.
Ecco come vengono generate le due chiavi:
# Bob sceglie '''due numeri primi grandi p e q e calcola n = p · q'''. n è il modulo.
# Bob calcola il prodotto '''z = (p − 1)·(q − 1)''' e sceglie e primo rispetto a z ovvero tale che '''MCD(z, e) = 1'''
# Bob calcola d, il '''moltiplicativo inverso modulo z''' per cui ('''d · e ≡ 1(mod z)''').
# Bob '''rende noti e ed n che costituiscono la chiave pubblica''', mentre tiene '''segreti d, p e q''' (e di conseguenza z).
Esempio funzionamento algoritmo RSA con calcoli
'''p = 97'''
'''q = 19'''
'''n''' = p * q = 97 * 19 = '''1843'''
'''z''' = (p-1) * (q-1) = 96 * 18 = '''1728'''
Sceglie e tale che MCD(e,z) = 1 --> '''e = 23'''
Calcolo di d tale che d*e = risultato sarà 1 (con mod z) --> '''d = 1127'''
1127 * 23 = 25921 mod 1728 = 1
'''Kpub Bob (e = 23, n = 1843), Kprv Bob (d = 1127, n = 1843)'''
Se Alice vuole '''cifrare 118''' e spedirlo a Bob '''prendo 118 lo elevo alla chiave pubblica''' (e) 23 e faccio il modulo
'''118^23 mod 1843 = 1784'''
'''Mando a Bob 1784''' che poi '''eleva alla sua Kpr''' col modulo comune
'''1784^1127 mod 1843 = 118'''
=== Discrete Log Problem (fatto in laboratorio) ===
Collegato con lo schema di alice e Bob dove anche se un attaccante può osservare i valori pubblici g^a e g^b (dove a e b sono le chiavi private di Alice e Bob rispettivamente), risolvere il logaritmo per trovare a o b è un compito estremamente difficile, grazie alla complessità computazionale che cresce esponenzialmente con la dimensione del modulo p. Modulo = %
Funzione = '''g<sup>x</sup> % p'''
dove '''g''' e '''p''' vengono scelte dagli utenti in comune
'''x''' viene scelta privatamente da ogni utente
Ci si scambiano i risultati ottenuti e poi per invertire per capire la chiave dell'altro si fa: '''risAltroUtente<sup>x</sup> % p = Key Privata Tra Utenti'''
'''Comandi linux'''
'''Cifratura'''
openssl enc '''-aes-128-cbc''' -pbkdf2 -in plain.txt -kfile pass_file -out cipher.txt
'''Decifratura'''
openssl enc '''-aes-128-cbc''' -d -in cipher.txt -out plain.txt -kfile pass_file -pbkdf2
'''Per generare una coppia di chiavi rsa:'''
openssl genrsa -out chiave.privata [1024 | 2048]
'''Per cifrare il file plaintex con key.pub:'''
openssl pkeyutl -encrypt -pubin -inkey key.pub -in plaintext > mess.cif
'''Per decifrare il file mess.cif con key.pri e ottenere mess.decif'''
openssl pkeyutl -decrypt -inkey key.pri -in mess.cif -out mess.decif
'''Estraggo la chiave pubblica dal certificato'''
openssl x509 -pubkey -noout -in cert_mittente.crt > pubK
'''Per "firmare un documento" usare l'opzione -sign:'''
openssl dgst -sha256 -sign key.pri -out firmaDoc NomeDoc
'''Per verificare la validità del documento:'''
openssl dgst -sha256 -verify key.pub -signature firmaDoc NomeDoc{{particelle}}
{{Controllo di autorità}}
{{portale|fisica}}
|