Lezione del 23/04/2024
funzioni Unidirezionali il cui segreto ti aiuta a fare l’operazione di Inversione. base per fare crittosistema asimmetrico. RSA come esempio usa la moltiplicazione fra numeri di grandi dimensioni. E’ facile da fare ma dato un numero enorme è molto difficile fattorizzare questo numero. Invece se conosco uno dei fattori è molto banale! E diventa solamente una operazione di divisione. Abbiamo visto come queste proprietà possono essere usate per fare chiave pubbliche e private. Possiamo vedere queste chiavi anche come certificati dei siti.
RSA sicuramente il più usato, ma ora abbiamo anche costrutti basati su curve ellittiche, che funziona sempre un po’ con la logica della trapdoor function. sono delle curve piane che rispondono a delle formule ben precise in cui ho a e b come parametri della curva. Ci sono delle caratteristiche speciali di a e b per cui possiamo avere delle curve che sono safe, non tutti gli a e b vanno bene. Se facciamo questa cosa sul piano cartesiano possiamo. Ci sono poi delle dimostrazioni rispetto alle curve, ma sono tutte cose che non fanno parte dell’orale. Possiamo anche fare delle operazioni di somma/moltiplicazione → dot operation.
Ora sta spiegando come funzionano: dot operation, punto di generazione, valori massimi e punti iniziali,… la cosa interessante è che anche sapendo tutti le info, è computazionalmente impossibile andare a calcolare n. Questa diventa una informazione segreta che non è desumibile dalle informazione pubbliche. Posso usare queste proprietà per andare a creare un critto sistema.
Le curve funzionano generalmente meglio e sono più economiche, conviene anche perché questo ci da modo di avere un altro strumento di protezione. Nulla ci dice che qualche matematico sia in grado un domani di calcolare i fattori in maniera molto smart.
Per le curve comnque ci vuole un certo livello di fiducia, perché a volte ci sono stati dei buchi su delle curve sponsorizzate dal NIST.
Principi di robustezza, per algoritmi simmetrici abbiamo detto che se l’algoritmo è fatto bene, la sicurezza si misura sulla lunghezza della chiave. Dal testo cifrato non posso avere alcune informazioni sulla chiave e nel simmetrico devo andare di brute force per poter andare a recuperare il testo in chiaro. Ma nel mondo asimmetrico non è così; la chiave pubblica ci da qualche informazione rispetto alla chiave privata. Non è più vero che se un una pk di 128 bit ho 128 bit di sicurezza, ne ho in realtà molti meno. per avere gli stessi livelli di sicurezza devo avere delle chiavi che siano molto più lunghe.

Quando generiamo qualcosa che usa chiavi RSA si suggerisce di stare su 2048 bit come chiave asimmetrica, siamo un pelo sotto i 128 del simmetrico, e così via…
Tutto questo per RSA. Per le curve ellittche si parla di 200 e 300 bit per avere robustezze paragonabili, decisamente meglio come numeri rispetto ad RSA.
Anche l’algoritmo di per sé è più complicato rispetto agli algoritmi simmetrici e questo è potenzialmente un problema. Quello che succede è che per cifrare in modo efficiente e veloce degli stream e flussidi dati, non uso mai cifrari asimmetrici, ma SIMMETRICI.
L’ideale per gli algoritmi asimettrici è lo scambio delle chiavi e vanno benissimo i questo senso perché risolvono il fatto di cambiare una chiave in un canale di comunicazione sicura. Come prima cosa quando voglio stabilire un canale di comunicazione sicuro genererò una chiave e la cifro, poi il destinatario la decifra con l’algoritmo simmetrico e otteniamo entrambi una chiave simmetrica con cui andare a lavorare in maniera molto più efficiente.
L’idea è: uso asimmetrico per scambiarmi una chiave che mi permette di andare a comunicare simmetrico. In alternativa posso andare a usare questo tipo di algoritmi per andare a fare firme digitali in cui non posso avere alcun tipo di ripudio.
Come faccio a scambiare le chiavi? Pensiamo di avere un sistema asincrono, come un nas in cui ho un file cifrato con la pk di un utente che poi si scarica la chiave e la sua sk (pk = public key e sk = secret key) per andare a decifrare il tutto.
Però non tutti i sistemi sono così, spesso abbiamo situazioni sincrone, pensiamo al nostro browser che deve andare a comunicare con qualche sito. Il browser quando fa lo scambio di chiavi con un sito lo fa con diffie hellman e anche in questo caso abbiamo un pochino di magia matematica dietro. abbiamo il problema del logaritmo discreto.

Invertire questa funzione è computazionalmente impossibile, ma come faccio ad usare questa cosa a mio vantaggio? Immaginiamo sempre di avere alice e bob che vogliono andare a parlare. alla fine di questa interazione, questi devono concordare su una chiave segreta che sanno solo loro e chiunque abbia osservato queste operazioni non hanno imparato nulla di utile. Ho due parti online con canale di comunicazione sincrono insicuro che finisco per sapere una chiave segreta che sanno soalemente lor. Abbiamo dei numeri primi grandi (p) e un numero generatore (g), ogni interno coprimo con n è congruo ad una potenza di g.
